@kontur.candy/tools 2.129.0 → 2.131.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +6 -6
  3. package/distr/Common/AsyncUtils.js +1 -30
  4. package/distr/Common/CandyApiClient/CandyApiClient.js +56 -39
  5. package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -33
  6. package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +0 -4
  7. package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +0 -4
  8. package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -29
  9. package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +0 -4
  10. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -35
  11. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -35
  12. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -37
  13. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -29
  14. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -34
  15. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -28
  16. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +0 -4
  17. package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -33
  18. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -29
  19. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +1 -6
  20. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +0 -4
  21. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -4
  22. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +22 -38
  23. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -5
  24. package/distr/Common/CandyApiClient/IsBuffer.js +1 -29
  25. package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +0 -4
  26. package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +0 -4
  27. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +0 -4
  28. package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +0 -4
  29. package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +0 -4
  30. package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +1 -6
  31. package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +0 -4
  32. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +0 -4
  33. package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +11 -0
  34. package/distr/Common/CandyApiClient/Types/DraftFullId.js +0 -4
  35. package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +0 -4
  36. package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +1 -6
  37. package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +0 -4
  38. package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +0 -4
  39. package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +1 -6
  40. package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +0 -4
  41. package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +0 -4
  42. package/distr/Common/CandyApiClient/Types/Guid.js +0 -4
  43. package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +1 -6
  44. package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +0 -4
  45. package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +0 -4
  46. package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +1 -6
  47. package/distr/Common/CommonConstants/SectionNames.js +1 -28
  48. package/distr/Common/Comparers.js +8 -30
  49. package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -29
  50. package/distr/Common/EndPoints.js +1 -34
  51. package/distr/Common/Errors.js +3 -71
  52. package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -30
  53. package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +0 -4
  54. package/distr/Common/Funcs.js +1 -29
  55. package/distr/Common/GFV.js +0 -4
  56. package/distr/Common/Hooks/UseLocalStorage.js +42 -0
  57. package/distr/Common/HttpClient/AuthenticationMode.js +1 -32
  58. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +12 -0
  59. package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -29
  60. package/distr/Common/HttpClient/FetchImplementation/Fetch.js +0 -4
  61. package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -30
  62. package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +3 -31
  63. package/distr/Common/HttpClient/HttpClient.js +12 -56
  64. package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +0 -4
  65. package/distr/Common/HttpClient/IHttpClient.js +0 -4
  66. package/distr/Common/IndentString.js +18 -0
  67. package/distr/Common/IntRangeUtils.js +1 -31
  68. package/distr/Common/IterableUtils.js +23 -38
  69. package/distr/Common/KCLangRuntimeUtils.js +3 -38
  70. package/distr/Common/ModelPath/BuildIterationSequence.js +3 -31
  71. package/distr/Common/ModelPath/EachCurrentCollision.js +1 -6
  72. package/distr/Common/ModelPath/IEquatable.js +0 -4
  73. package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +30 -0
  74. package/distr/Common/ModelPath/Map/Map2.js +103 -0
  75. package/distr/Common/ModelPath/Map/ModelPathMap.js +30 -0
  76. package/distr/Common/ModelPath/ModelPath.js +206 -206
  77. package/distr/Common/ModelPath/ModelPathBuilder.js +11 -40
  78. package/distr/Common/ModelPath/ModelPathHelper.js +13 -0
  79. package/distr/Common/ModelPath/PathMatcher.js +8 -37
  80. package/distr/Common/ModelPath/PathSplitHelper.js +26 -0
  81. package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +40 -0
  82. package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +40 -0
  83. package/distr/Common/ModelPath/Set/ModelPathSet.js +40 -0
  84. package/distr/Common/ModelPath/Set/Set2.js +60 -0
  85. package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -34
  86. package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +0 -4
  87. package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -29
  88. package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -34
  89. package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -38
  90. package/distr/Common/NidusClient/INidusClient.js +1 -30
  91. package/distr/Common/NidusClient/NidusClientContext.js +1 -38
  92. package/distr/Common/NidusClient/NidusClientImpl.js +1 -34
  93. package/distr/Common/PathConstants.js +3 -31
  94. package/distr/Common/TypingUtils.js +6 -50
  95. package/distr/Common/UUID.js +1 -30
  96. package/distr/Common/UseAsyncEffect.js +1 -31
  97. package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +3 -36
  98. package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +1 -29
  99. package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -30
  100. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -36
  101. package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +3 -36
  102. package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -29
  103. package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -34
  104. package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -28
  105. package/distr/Tools/src/BuildTasks/FSTask.js +3 -30
  106. package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -32
  107. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -37
  108. package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -34
  109. package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -31
  110. package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -29
  111. package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -31
  112. package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -36
  113. package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +3 -37
  114. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -37
  115. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +2 -34
  116. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -5
  117. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -5
  118. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +3 -33
  119. package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -28
  120. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +3 -30
  121. package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -34
  122. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +1 -45
  123. package/distr/Tools/src/BuildTasks/ReadFormSource.js +4 -39
  124. package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -33
  125. package/distr/Tools/src/BuildTasks/Version.js +1 -32
  126. package/distr/Tools/src/BuildTasks/WriteFormMeta.js +3 -31
  127. package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +1 -30
  128. package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +7 -34
  129. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +3 -33
  130. package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -34
  131. package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -29
  132. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +6 -37
  133. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +6 -47
  134. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +26 -43
  135. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +6 -40
  136. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +6 -38
  137. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +6 -37
  138. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +6 -39
  139. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +6 -37
  140. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +6 -39
  141. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +3 -36
  142. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +3 -36
  143. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +12 -37
  144. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +3 -31
  145. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +5 -35
  146. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +4 -36
  147. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +3 -31
  148. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +0 -4
  149. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +0 -4
  150. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +2 -42
  151. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +3 -36
  152. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -29
  153. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +0 -4
  154. package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -30
  155. package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -29
  156. package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -29
  157. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -30
  158. package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +0 -4
  159. package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -28
  160. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +3 -31
  161. package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -28
  162. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +3 -31
  163. package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +6 -40
  164. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -30
  165. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -29
  166. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -34
  167. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +6 -37
  168. package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +1 -29
  169. package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -28
  170. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -30
  171. package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -28
  172. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +3 -32
  173. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -32
  174. package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -29
  175. package/distr/Tools/src/CandyCLI.js +3 -31
  176. package/distr/Tools/src/CheckNodeJsVersion.js +3 -33
  177. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -35
  178. package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -34
  179. package/distr/Tools/src/Commons/ErrorUntyped.js +0 -4
  180. package/distr/Tools/src/Commons/EventObject.js +2 -44
  181. package/distr/Tools/src/Commons/ExecUtils.js +1 -29
  182. package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -29
  183. package/distr/Tools/src/Commons/FormGlobsUtils.js +3 -36
  184. package/distr/Tools/src/Commons/FsUtils.js +3 -34
  185. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -32
  186. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +2 -33
  187. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -34
  188. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -34
  189. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +0 -4
  190. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -34
  191. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -34
  192. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -34
  193. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -34
  194. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -36
  195. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -34
  196. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -34
  197. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -34
  198. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -34
  199. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +0 -4
  200. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -34
  201. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -34
  202. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -57
  203. package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -28
  204. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +3 -36
  205. package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -34
  206. package/distr/Tools/src/Commons/Locks/Lock.js +3 -36
  207. package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -34
  208. package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +3 -36
  209. package/distr/Tools/src/Commons/Logging/ELKLogger.js +3 -33
  210. package/distr/Tools/src/Commons/Logging/ILogger.js +1 -36
  211. package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -41
  212. package/distr/Tools/src/Commons/Logging/Logger.js +3 -36
  213. package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -38
  214. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -30
  215. package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +6 -53
  216. package/distr/Tools/src/Commons/PathPattern.js +1 -34
  217. package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -34
  218. package/distr/Tools/src/Commons/TasksCore/BuildTask.js +0 -4
  219. package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +3 -89
  220. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -36
  221. package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -34
  222. package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +3 -36
  223. package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +3 -36
  224. package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -28
  225. package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -34
  226. package/distr/Tools/src/Commons/TimingUtils.js +1 -29
  227. package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +55 -48
  228. package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +8 -36
  229. package/distr/Tools/src/GenerateReadMe.js +1 -31
  230. package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
  231. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  232. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  233. package/distr/Tools/src/Options/CandyToolOptions.js +1 -28
  234. package/distr/Tools/src/ReadFarmConfig.js +3 -31
  235. package/distr/Tools/src/SelfUpdate.js +4 -36
  236. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1000 -2036
  237. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  238. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +366 -361
  239. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  240. package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -5
  241. package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -5
  242. package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -5
  243. package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -5
  244. package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -5
  245. package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -5
  246. package/package.json +9 -8
  247. package/distr/Common/ModelPath/AbsoluteModelPathSet.js +0 -95
  248. package/distr/Common/ModelPath/ModelPathMap.js +0 -160
  249. package/distr/Common/ModelPath/ModelPathSet.js +0 -99
@@ -1,20 +1,25 @@
1
1
  "use strict";
2
2
 
3
- var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoaderGlobal.default.signature : function (a) {
4
- return a;
5
- };
6
-
7
3
  !function () {
8
4
  "use strict";
9
5
 
10
6
  var e = {};
11
7
 
12
- function t(e) {
13
- return (t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
14
- return typeof e;
15
- } : function (e) {
16
- return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
17
- })(e);
8
+ function t(e, t, r) {
9
+ return t in e ? Object.defineProperty(e, t, {
10
+ value: r,
11
+ enumerable: !0,
12
+ configurable: !0,
13
+ writable: !0
14
+ }) : e[t] = r, e;
15
+ }
16
+
17
+ function r(e, t) {
18
+ (null == t || t > e.length) && (t = e.length);
19
+
20
+ for (var r = 0, n = new Array(t); r < t; r++) n[r] = e[r];
21
+
22
+ return n;
18
23
  }
19
24
 
20
25
  e.g = function () {
@@ -27,22 +32,22 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
27
32
  }
28
33
  }();
29
34
 
30
- var r = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== r && r,
31
- n = ("URLSearchParams" in r),
32
- o = "Symbol" in r && "iterator" in Symbol,
33
- i = "FileReader" in r && "Blob" in r && function () {
35
+ var n = "undefined" != typeof globalThis && globalThis || "undefined" != typeof self && self || void 0 !== n && n,
36
+ o = ("URLSearchParams" in n),
37
+ i = "Symbol" in n && "iterator" in Symbol,
38
+ a = "FileReader" in n && "Blob" in n && function () {
34
39
  try {
35
40
  return new Blob(), !0;
36
41
  } catch (e) {
37
42
  return !1;
38
43
  }
39
44
  }(),
40
- a = ("FormData" in r),
41
- s = ("ArrayBuffer" in r);
45
+ s = ("FormData" in n),
46
+ u = ("ArrayBuffer" in n);
42
47
 
43
- if (s) var u = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
44
- c = ArrayBuffer.isView || function (e) {
45
- return e && u.indexOf(Object.prototype.toString.call(e)) > -1;
48
+ if (u) var c = ["[object Int8Array]", "[object Uint8Array]", "[object Uint8ClampedArray]", "[object Int16Array]", "[object Uint16Array]", "[object Int32Array]", "[object Uint32Array]", "[object Float32Array]", "[object Float64Array]"],
49
+ f = ArrayBuffer.isView || function (e) {
50
+ return e && c.indexOf(Object.prototype.toString.call(e)) > -1;
46
51
  };
47
52
 
48
53
  function l(e) {
@@ -50,11 +55,11 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
50
55
  return e.toLowerCase();
51
56
  }
52
57
 
53
- function f(e) {
58
+ function h(e) {
54
59
  return "string" != typeof e && (e = String(e)), e;
55
60
  }
56
61
 
57
- function h(e) {
62
+ function d(e) {
58
63
  var t = {
59
64
  next: function () {
60
65
  var t = e.shift();
@@ -64,13 +69,13 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
64
69
  };
65
70
  }
66
71
  };
67
- return o && (t[Symbol.iterator] = function () {
72
+ return i && (t[Symbol.iterator] = function () {
68
73
  return t;
69
74
  }), t;
70
75
  }
71
76
 
72
- function d(e) {
73
- this.map = {}, e instanceof d ? e.forEach(function (e, t) {
77
+ function p(e) {
78
+ this.map = {}, e instanceof p ? e.forEach(function (e, t) {
74
79
  this.append(t, e);
75
80
  }, this) : Array.isArray(e) ? e.forEach(function (e) {
76
81
  this.append(e[0], e[1]);
@@ -84,7 +89,7 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
84
89
  e.bodyUsed = !0;
85
90
  }
86
91
 
87
- function p(e) {
92
+ function m(e) {
88
93
  return new Promise(function (t, r) {
89
94
  e.onload = function () {
90
95
  t(e.result);
@@ -96,21 +101,21 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
96
101
 
97
102
  function b(e) {
98
103
  var t = new FileReader(),
99
- r = p(t);
104
+ r = m(t);
100
105
  return t.readAsArrayBuffer(e), r;
101
106
  }
102
107
 
103
- function m(e) {
108
+ function v(e) {
104
109
  if (e.slice) return e.slice(0);
105
110
  var t = new Uint8Array(e.byteLength);
106
111
  return t.set(new Uint8Array(e)), t.buffer;
107
112
  }
108
113
 
109
- function v() {
114
+ function g() {
110
115
  return this.bodyUsed = !1, this._initBody = function (e) {
111
116
  var t;
112
- this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : i && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : a && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : n && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : s && i && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = m(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : s && (ArrayBuffer.prototype.isPrototypeOf(e) || c(e)) ? this._bodyArrayBuffer = m(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : n && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
113
- }, i && (this.blob = function () {
117
+ this.bodyUsed = this.bodyUsed, this._bodyInit = e, e ? "string" == typeof e ? this._bodyText = e : a && Blob.prototype.isPrototypeOf(e) ? this._bodyBlob = e : s && FormData.prototype.isPrototypeOf(e) ? this._bodyFormData = e : o && URLSearchParams.prototype.isPrototypeOf(e) ? this._bodyText = e.toString() : u && a && (t = e) && DataView.prototype.isPrototypeOf(t) ? (this._bodyArrayBuffer = v(e.buffer), this._bodyInit = new Blob([this._bodyArrayBuffer])) : u && (ArrayBuffer.prototype.isPrototypeOf(e) || f(e)) ? this._bodyArrayBuffer = v(e) : this._bodyText = e = Object.prototype.toString.call(e) : this._bodyText = "", this.headers.get("content-type") || ("string" == typeof e ? this.headers.set("content-type", "text/plain;charset=UTF-8") : this._bodyBlob && this._bodyBlob.type ? this.headers.set("content-type", this._bodyBlob.type) : o && URLSearchParams.prototype.isPrototypeOf(e) && this.headers.set("content-type", "application/x-www-form-urlencoded;charset=UTF-8"));
118
+ }, a && (this.blob = function () {
114
119
  var e = y(this);
115
120
  if (e) return e;
116
121
  if (this._bodyBlob) return Promise.resolve(this._bodyBlob);
@@ -125,7 +130,7 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
125
130
  r,
126
131
  n = y(this);
127
132
  if (n) return n;
128
- if (this._bodyBlob) return e = this._bodyBlob, r = p(t = new FileReader()), t.readAsText(e), r;
133
+ if (this._bodyBlob) return e = this._bodyBlob, r = m(t = new FileReader()), t.readAsText(e), r;
129
134
  if (this._bodyArrayBuffer) return Promise.resolve(function (e) {
130
135
  for (var t = new Uint8Array(e), r = new Array(t.length), n = 0; n < t.length; n++) r[n] = String.fromCharCode(t[n]);
131
136
 
@@ -133,57 +138,57 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
133
138
  }(this._bodyArrayBuffer));
134
139
  if (this._bodyFormData) throw new Error("could not read FormData body as text");
135
140
  return Promise.resolve(this._bodyText);
136
- }, a && (this.formData = function () {
141
+ }, s && (this.formData = function () {
137
142
  return this.text().then(O);
138
143
  }), this.json = function () {
139
144
  return this.text().then(JSON.parse);
140
145
  }, this;
141
146
  }
142
147
 
143
- d.prototype.append = function (e, t) {
144
- e = l(e), t = f(t);
148
+ p.prototype.append = function (e, t) {
149
+ e = l(e), t = h(t);
145
150
  var r = this.map[e];
146
151
  this.map[e] = r ? r + ", " + t : t;
147
- }, d.prototype.delete = function (e) {
152
+ }, p.prototype.delete = function (e) {
148
153
  delete this.map[l(e)];
149
- }, d.prototype.get = function (e) {
154
+ }, p.prototype.get = function (e) {
150
155
  return e = l(e), this.has(e) ? this.map[e] : null;
151
- }, d.prototype.has = function (e) {
156
+ }, p.prototype.has = function (e) {
152
157
  return this.map.hasOwnProperty(l(e));
153
- }, d.prototype.set = function (e, t) {
154
- this.map[l(e)] = f(t);
155
- }, d.prototype.forEach = function (e, t) {
158
+ }, p.prototype.set = function (e, t) {
159
+ this.map[l(e)] = h(t);
160
+ }, p.prototype.forEach = function (e, t) {
156
161
  for (var r in this.map) this.map.hasOwnProperty(r) && e.call(t, this.map[r], r, this);
157
- }, d.prototype.keys = function () {
162
+ }, p.prototype.keys = function () {
158
163
  var e = [];
159
164
  return this.forEach(function (t, r) {
160
165
  e.push(r);
161
- }), h(e);
162
- }, d.prototype.values = function () {
166
+ }), d(e);
167
+ }, p.prototype.values = function () {
163
168
  var e = [];
164
169
  return this.forEach(function (t) {
165
170
  e.push(t);
166
- }), h(e);
167
- }, d.prototype.entries = function () {
171
+ }), d(e);
172
+ }, p.prototype.entries = function () {
168
173
  var e = [];
169
174
  return this.forEach(function (t, r) {
170
175
  e.push([r, t]);
171
- }), h(e);
172
- }, o && (d.prototype[Symbol.iterator] = d.prototype.entries);
173
- var g = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
176
+ }), d(e);
177
+ }, i && (p.prototype[Symbol.iterator] = p.prototype.entries);
178
+ var w = ["DELETE", "GET", "HEAD", "OPTIONS", "POST", "PUT"];
174
179
 
175
- function w(e, t) {
176
- if (!(this instanceof w)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
180
+ function E(e, t) {
181
+ if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
177
182
  var r,
178
183
  n,
179
184
  o = (t = t || {}).body;
180
185
 
181
- if (e instanceof w) {
186
+ if (e instanceof E) {
182
187
  if (e.bodyUsed) throw new TypeError("Already read");
183
- this.url = e.url, this.credentials = e.credentials, t.headers || (this.headers = new d(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, o || null == e._bodyInit || (o = e._bodyInit, e.bodyUsed = !0);
188
+ this.url = e.url, this.credentials = e.credentials, t.headers || (this.headers = new p(e.headers)), this.method = e.method, this.mode = e.mode, this.signal = e.signal, o || null == e._bodyInit || (o = e._bodyInit, e.bodyUsed = !0);
184
189
  } else this.url = String(e);
185
190
 
186
- if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new d(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), g.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
191
+ if (this.credentials = t.credentials || this.credentials || "same-origin", !t.headers && this.headers || (this.headers = new p(t.headers)), this.method = (n = (r = t.method || this.method || "GET").toUpperCase(), w.indexOf(n) > -1 ? n : r), this.mode = t.mode || this.mode || null, this.signal = t.signal || this.signal, this.referrer = null, ("GET" === this.method || "HEAD" === this.method) && o) throw new TypeError("Body not allowed for GET or HEAD requests");
187
192
 
188
193
  if (this._initBody(o), !("GET" !== this.method && "HEAD" !== this.method || "no-store" !== t.cache && "no-cache" !== t.cache)) {
189
194
  var i = /([?&])_=[^&]*/;
@@ -203,24 +208,24 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
203
208
  }), t;
204
209
  }
205
210
 
206
- function E(e, t) {
207
- if (!(this instanceof E)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
208
- t || (t = {}), this.type = "default", this.status = void 0 === t.status ? 200 : t.status, this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === t.statusText ? "" : "" + t.statusText, this.headers = new d(t.headers), this.url = t.url || "", this._initBody(e);
211
+ function A(e, t) {
212
+ if (!(this instanceof A)) throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');
213
+ t || (t = {}), this.type = "default", this.status = void 0 === t.status ? 200 : t.status, this.ok = this.status >= 200 && this.status < 300, this.statusText = void 0 === t.statusText ? "" : "" + t.statusText, this.headers = new p(t.headers), this.url = t.url || "", this._initBody(e);
209
214
  }
210
215
 
211
- w.prototype.clone = function () {
212
- return new w(this, {
216
+ E.prototype.clone = function () {
217
+ return new E(this, {
213
218
  body: this._bodyInit
214
219
  });
215
- }, v.call(w.prototype), v.call(E.prototype), E.prototype.clone = function () {
216
- return new E(this._bodyInit, {
220
+ }, g.call(E.prototype), g.call(A.prototype), A.prototype.clone = function () {
221
+ return new A(this._bodyInit, {
217
222
  status: this.status,
218
223
  statusText: this.statusText,
219
- headers: new d(this.headers),
224
+ headers: new p(this.headers),
220
225
  url: this.url
221
226
  });
222
- }, E.error = function () {
223
- var e = new E(null, {
227
+ }, A.error = function () {
228
+ var e = new A(null, {
224
229
  status: 0,
225
230
  statusText: ""
226
231
  });
@@ -228,9 +233,9 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
228
233
  };
229
234
  var j = [301, 302, 303, 307, 308];
230
235
 
231
- E.redirect = function (e, t) {
236
+ A.redirect = function (e, t) {
232
237
  if (-1 === j.indexOf(t)) throw new RangeError("Invalid status code");
233
- return new E(null, {
238
+ return new A(null, {
234
239
  status: t,
235
240
  headers: {
236
241
  location: e
@@ -238,35 +243,35 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
238
243
  });
239
244
  };
240
245
 
241
- var A = r.DOMException;
246
+ var T = n.DOMException;
242
247
 
243
248
  try {
244
- new A();
249
+ new T();
245
250
  } catch (e) {
246
- (A = function (e, t) {
251
+ (T = function (e, t) {
247
252
  this.message = e, this.name = t;
248
253
  var r = Error(e);
249
254
  this.stack = r.stack;
250
- }).prototype = Object.create(Error.prototype), A.prototype.constructor = A;
255
+ }).prototype = Object.create(Error.prototype), T.prototype.constructor = T;
251
256
  }
252
257
 
253
- function S(e, n) {
254
- return new Promise(function (o, a) {
255
- var u = new w(e, n);
256
- if (u.signal && u.signal.aborted) return a(new A("Aborted", "AbortError"));
257
- var c = new XMLHttpRequest();
258
+ function P(e, t) {
259
+ return new Promise(function (r, o) {
260
+ var i = new E(e, t);
261
+ if (i.signal && i.signal.aborted) return o(new T("Aborted", "AbortError"));
262
+ var s = new XMLHttpRequest();
258
263
 
259
- function l() {
260
- c.abort();
264
+ function c() {
265
+ s.abort();
261
266
  }
262
267
 
263
- c.onload = function () {
268
+ s.onload = function () {
264
269
  var e,
265
270
  t,
266
- r = {
267
- status: c.status,
268
- statusText: c.statusText,
269
- headers: (e = c.getAllResponseHeaders() || "", t = new d(), e.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (e) {
271
+ n = {
272
+ status: s.status,
273
+ statusText: s.statusText,
274
+ headers: (e = s.getAllResponseHeaders() || "", t = new p(), e.replace(/\r?\n[\t ]+/g, " ").split("\r").map(function (e) {
270
275
  return 0 === e.indexOf("\n") ? e.substr(1, e.length) : e;
271
276
  }).forEach(function (e) {
272
277
  var r = e.split(":"),
@@ -278,57 +283,64 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
278
283
  }
279
284
  }), t)
280
285
  };
281
- r.url = "responseURL" in c ? c.responseURL : r.headers.get("X-Request-URL");
282
- var n = "response" in c ? c.response : c.responseText;
286
+ n.url = "responseURL" in s ? s.responseURL : n.headers.get("X-Request-URL");
287
+ var o = "response" in s ? s.response : s.responseText;
283
288
  setTimeout(function () {
284
- o(new E(n, r));
289
+ r(new A(o, n));
285
290
  }, 0);
286
- }, c.onerror = function () {
291
+ }, s.onerror = function () {
287
292
  setTimeout(function () {
288
- a(new TypeError("Network request failed"));
293
+ o(new TypeError("Network request failed"));
289
294
  }, 0);
290
- }, c.ontimeout = function () {
295
+ }, s.ontimeout = function () {
291
296
  setTimeout(function () {
292
- a(new TypeError("Network request failed"));
297
+ o(new TypeError("Network request failed"));
293
298
  }, 0);
294
- }, c.onabort = function () {
299
+ }, s.onabort = function () {
295
300
  setTimeout(function () {
296
- a(new A("Aborted", "AbortError"));
301
+ o(new T("Aborted", "AbortError"));
297
302
  }, 0);
298
- }, c.open(u.method, function (e) {
303
+ }, s.open(i.method, function (e) {
299
304
  try {
300
- return "" === e && r.location.href ? r.location.href : e;
305
+ return "" === e && n.location.href ? n.location.href : e;
301
306
  } catch (t) {
302
307
  return e;
303
308
  }
304
- }(u.url), !0), "include" === u.credentials ? c.withCredentials = !0 : "omit" === u.credentials && (c.withCredentials = !1), "responseType" in c && (i ? c.responseType = "blob" : s && u.headers.get("Content-Type") && -1 !== u.headers.get("Content-Type").indexOf("application/octet-stream") && (c.responseType = "arraybuffer")), !n || "object" !== t(n.headers) || n.headers instanceof d ? u.headers.forEach(function (e, t) {
305
- c.setRequestHeader(t, e);
306
- }) : Object.getOwnPropertyNames(n.headers).forEach(function (e) {
307
- c.setRequestHeader(e, f(n.headers[e]));
308
- }), u.signal && (u.signal.addEventListener("abort", l), c.onreadystatechange = function () {
309
- 4 === c.readyState && u.signal.removeEventListener("abort", l);
310
- }), c.send(void 0 === u._bodyInit ? null : u._bodyInit);
309
+ }(i.url), !0), "include" === i.credentials ? s.withCredentials = !0 : "omit" === i.credentials && (s.withCredentials = !1), "responseType" in s && (a ? s.responseType = "blob" : u && i.headers.get("Content-Type") && -1 !== i.headers.get("Content-Type").indexOf("application/octet-stream") && (s.responseType = "arraybuffer")), !t || "object" != typeof t.headers || t.headers instanceof p ? i.headers.forEach(function (e, t) {
310
+ s.setRequestHeader(t, e);
311
+ }) : Object.getOwnPropertyNames(t.headers).forEach(function (e) {
312
+ s.setRequestHeader(e, h(t.headers[e]));
313
+ }), i.signal && (i.signal.addEventListener("abort", c), s.onreadystatechange = function () {
314
+ 4 === s.readyState && i.signal.removeEventListener("abort", c);
315
+ }), s.send(void 0 === i._bodyInit ? null : i._bodyInit);
311
316
  });
312
317
  }
313
318
 
314
- function T(e, t) {
319
+ function k(e, t) {
320
+ if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
321
+ }
322
+
323
+ function S(e, t) {
315
324
  for (var r = 0; r < t.length; r++) {
316
325
  var n = t[r];
317
326
  n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
318
327
  }
319
328
  }
320
329
 
321
- S.polyfill = !0, r.fetch || (r.fetch = S, r.Headers = d, r.Request = w, r.Response = E);
330
+ function _(e, t, r) {
331
+ return t && S(e.prototype, t), r && S(e, r), Object.defineProperty(e, "prototype", {
332
+ writable: !1
333
+ }), e;
334
+ }
335
+
336
+ P.polyfill = !0, n.fetch || (n.fetch = P, n.Headers = p, n.Request = E, n.Response = A);
322
337
 
323
- var P = function () {
338
+ var C = function () {
324
339
  function e() {
325
- !function (e, t) {
326
- if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
327
- }(this, e);
340
+ k(this, e);
328
341
  }
329
342
 
330
- var t, r;
331
- return t = e, r = [{
343
+ return _(e, null, [{
332
344
  key: "script",
333
345
  value: function (e, t) {
334
346
  var r = !1,
@@ -355,40 +367,43 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
355
367
  r(t ? void 0 : new Error("Error while loading stylesheet."));
356
368
  }), o.appendChild(i), i.setAttribute("href", e);
357
369
  }
358
- }], null && T(t.prototype, null), r && T(t, r), e;
370
+ }]), e;
359
371
  }();
360
372
 
361
- function C(e) {
373
+ function B(e) {
374
+ return "v1/ns/".concat(e.ns, "/drafts/").concat(e.draftId, "/client-draft-info");
375
+ }
376
+
377
+ function I(e) {
362
378
  return "string" == typeof e ? "false" !== e && "true" === e : Boolean(e);
363
379
  }
364
380
 
365
- var _ = {
366
- authorized: C("{authorized}"),
381
+ var U = {
382
+ authorized: I("{authorized}"),
367
383
  cauldronApiUrl: "{cauldronApiUrl}",
368
- abonId: "{abonId}",
369
- orgId: "{orgId}",
370
- userId: "{userId}",
371
- isTestServer: C("{isTestServer}"),
372
- renderCachingForIE8: C("{renderCachingForIE8}"),
373
- normalizationOnServer: C("{normalizationOnServer}"),
384
+ isTestServer: I("{isTestServer}"),
385
+ renderCachingForIE8: I("{renderCachingForIE8}"),
386
+ normalizationOnServer: I("{normalizationOnServer}"),
374
387
  normativeUrl: "{normativeUrl}",
375
388
  resourcesVersion: "{resourcesVersion}",
376
389
  konturDomains: "{konturDomains}"
377
390
  };
378
391
 
379
- function k(e) {
380
- return (k = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
392
+ function D(e) {
393
+ return D = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
381
394
  return typeof e;
382
395
  } : function (e) {
383
396
  return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
384
- })(e);
397
+ }, D(e);
385
398
  }
386
399
 
387
- function B(e, t) {
388
- if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
400
+ function R(e, t) {
401
+ return R = Object.setPrototypeOf || function (e, t) {
402
+ return e.__proto__ = t, e;
403
+ }, R(e, t);
389
404
  }
390
405
 
391
- function I(e, t) {
406
+ function F(e, t) {
392
407
  if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function");
393
408
  e.prototype = Object.create(t && t.prototype, {
394
409
  constructor: {
@@ -396,34 +411,50 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
396
411
  writable: !0,
397
412
  configurable: !0
398
413
  }
399
- }), t && M(e, t);
414
+ }), Object.defineProperty(e, "prototype", {
415
+ writable: !1
416
+ }), t && R(e, t);
400
417
  }
401
418
 
402
- function U(e) {
403
- var t = F();
404
- return function () {
405
- var r,
406
- n = L(e);
419
+ function x(e, t) {
420
+ if (t && ("object" === D(t) || "function" == typeof t)) return t;
421
+ if (void 0 !== t) throw new TypeError("Derived constructors may only return object or undefined");
422
+ return function (e) {
423
+ if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
424
+ return e;
425
+ }(e);
426
+ }
407
427
 
408
- if (t) {
409
- var o = L(this).constructor;
410
- r = Reflect.construct(n, arguments, o);
411
- } else r = n.apply(this, arguments);
428
+ function M(e) {
429
+ return M = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
430
+ return e.__proto__ || Object.getPrototypeOf(e);
431
+ }, M(e);
432
+ }
412
433
 
413
- return D(this, r);
414
- };
434
+ function L() {
435
+ if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
436
+ if (Reflect.construct.sham) return !1;
437
+ if ("function" == typeof Proxy) return !0;
438
+
439
+ try {
440
+ return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
441
+ } catch (e) {
442
+ return !1;
443
+ }
415
444
  }
416
445
 
417
- function D(e, t) {
418
- return !t || "object" !== k(t) && "function" != typeof t ? function (e) {
419
- if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
420
- return e;
421
- }(e) : t;
446
+ function V(e, t, r) {
447
+ return V = L() ? Reflect.construct : function (e, t, r) {
448
+ var n = [null];
449
+ n.push.apply(n, t);
450
+ var o = new (Function.bind.apply(e, n))();
451
+ return r && R(o, r.prototype), o;
452
+ }, V.apply(null, arguments);
422
453
  }
423
454
 
424
- function R(e) {
455
+ function z(e) {
425
456
  var t = "function" == typeof Map ? new Map() : void 0;
426
- return (R = function (e) {
457
+ return z = function (e) {
427
458
  if (null === e || (r = e, -1 === Function.toString.call(r).indexOf("[native code]"))) return e;
428
459
  var r;
429
460
  if ("function" != typeof e) throw new TypeError("Super expression must either be null or a function");
@@ -434,7 +465,7 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
434
465
  }
435
466
 
436
467
  function n() {
437
- return x(e, arguments, L(this).constructor);
468
+ return V(e, arguments, M(this).constructor);
438
469
  }
439
470
 
440
471
  return n.prototype = Object.create(e.prototype, {
@@ -444,80 +475,58 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
444
475
  writable: !0,
445
476
  configurable: !0
446
477
  }
447
- }), M(n, e);
448
- })(e);
478
+ }), R(n, e);
479
+ }, z(e);
449
480
  }
450
481
 
451
- function x(e, t, r) {
452
- return (x = F() ? Reflect.construct : function (e, t, r) {
453
- var n = [null];
454
- n.push.apply(n, t);
455
- var o = new (Function.bind.apply(e, n))();
456
- return r && M(o, r.prototype), o;
457
- }).apply(null, arguments);
458
- }
482
+ function N(e) {
483
+ var t = function () {
484
+ if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
485
+ if (Reflect.construct.sham) return !1;
486
+ if ("function" == typeof Proxy) return !0;
459
487
 
460
- function F() {
461
- if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
462
- if (Reflect.construct.sham) return !1;
463
- if ("function" == typeof Proxy) return !0;
488
+ try {
489
+ return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
490
+ } catch (e) {
491
+ return !1;
492
+ }
493
+ }();
464
494
 
465
- try {
466
- return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0;
467
- } catch (e) {
468
- return !1;
469
- }
470
- }
495
+ return function () {
496
+ var r,
497
+ n = M(e);
471
498
 
472
- function M(e, t) {
473
- return (M = Object.setPrototypeOf || function (e, t) {
474
- return e.__proto__ = t, e;
475
- })(e, t);
476
- }
499
+ if (t) {
500
+ var o = M(this).constructor;
501
+ r = Reflect.construct(n, arguments, o);
502
+ } else r = n.apply(this, arguments);
477
503
 
478
- function L(e) {
479
- return (L = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {
480
- return e.__proto__ || Object.getPrototypeOf(e);
481
- })(e);
504
+ return x(this, r);
505
+ };
482
506
  }
483
507
 
484
- var V = function (e) {
485
- I(r, e);
486
- var t = U(r);
508
+ var q = function (e) {
509
+ F(r, e);
510
+ var t = N(r);
487
511
 
488
512
  function r() {
489
- return B(this, r), t.call(this, "Operation not implemented");
513
+ return k(this, r), t.call(this, "Operation not implemented");
490
514
  }
491
515
 
492
516
  return r;
493
517
  }(function (e) {
494
- I(r, e);
495
- var t = U(r);
518
+ F(r, e);
519
+ var t = N(r);
496
520
 
497
521
  function r(e) {
498
522
  var n;
499
- return B(this, r), (n = t.call(this, e)).name = n.constructor.name, n;
523
+ return k(this, r), (n = t.call(this, e)).name = n.constructor.name, n;
500
524
  }
501
525
 
502
526
  return r;
503
- }(R(Error)));
504
-
505
- function q(e) {
506
- return (q = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (e) {
507
- return typeof e;
508
- } : function (e) {
509
- return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
510
- })(e);
511
- }
527
+ }(z(Error)));
512
528
 
513
529
  function H(e, t) {
514
- for (var r = 0; r < t.length; r++) {
515
- var n = t[r];
516
- n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
517
- }
518
- }
519
-
520
- function N(e, t) {
521
530
  var r = Object.keys(e);
522
531
 
523
532
  if (Object.getOwnPropertySymbols) {
@@ -530,29 +539,20 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
530
539
  return r;
531
540
  }
532
541
 
533
- function z(e) {
534
- for (var t = 1; t < arguments.length; t++) {
535
- var r = null != arguments[t] ? arguments[t] : {};
536
- t % 2 ? N(Object(r), !0).forEach(function (t) {
537
- G(e, t, r[t]);
538
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : N(Object(r)).forEach(function (t) {
539
- Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
542
+ function Z(e) {
543
+ for (var r = 1; r < arguments.length; r++) {
544
+ var n = null != arguments[r] ? arguments[r] : {};
545
+ r % 2 ? H(Object(n), !0).forEach(function (r) {
546
+ t(e, r, n[r]);
547
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : H(Object(n)).forEach(function (t) {
548
+ Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
540
549
  });
541
550
  }
542
551
 
543
552
  return e;
544
553
  }
545
554
 
546
- function G(e, t, r) {
547
- return t in e ? Object.defineProperty(e, t, {
548
- value: r,
549
- enumerable: !0,
550
- configurable: !0,
551
- writable: !0
552
- }) : e[t] = r, e;
553
- }
554
-
555
- function Z(e, t) {
555
+ function G(e, t) {
556
556
  if (null != t) {
557
557
  if (null == e) throw new Error("Path must be defined");
558
558
  return ["model", "change", e, t];
@@ -564,27 +564,29 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
564
564
  function $(e) {
565
565
  return Object.keys(e).filter(function (t) {
566
566
  return e[t] && Object.prototype.hasOwnProperty.call(e[t], "value");
567
- }).map(function (t) {
568
- var r = e[t];
569
- return null == r ? {} : G({}, t, r.value);
567
+ }).map(function (r) {
568
+ var n = e[r];
569
+ return null == n ? {} : t({}, r, n.value);
570
570
  });
571
571
  }
572
572
 
573
573
  function X(e) {
574
574
  return e.reduce(function (e, t) {
575
- return z(z({}, e), t);
575
+ return Z(Z({}, e), t);
576
576
  }, {});
577
577
  }
578
578
 
579
579
  var J = function () {
580
580
  function e(t) {
581
- !function (e, t) {
582
- if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function");
583
- }(this, e), this.form = void 0, this.form = t;
581
+ k(this, e), this.form = void 0, this.form = t;
584
582
  }
585
583
 
586
- var t, r;
587
- return t = e, (r = [{
584
+ return _(e, [{
585
+ key: "batchUpdate",
586
+ value: function (e) {
587
+ throw new Error("Method not implemented.");
588
+ }
589
+ }, {
588
590
  key: "runCheck",
589
591
  value: function () {
590
592
  throw new Error("Method not implemented.");
@@ -594,10 +596,15 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
594
596
  value: function (e) {
595
597
  throw new Error("Method not implemented.");
596
598
  }
599
+ }, {
600
+ key: "__INTERNAL__importFromEmployeeService",
601
+ value: function () {
602
+ throw new Error("Method not implemented.");
603
+ }
597
604
  }, {
598
605
  key: "getByGId",
599
606
  value: function (e, t) {
600
- return this.form.picklistsProvider.getByGId(e, t);
607
+ return this.form.picklistsProvider.getDigestApiPicklist(e).query(t);
601
608
  }
602
609
  }, {
603
610
  key: "on",
@@ -637,38 +644,38 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
637
644
  }, {
638
645
  key: "validate",
639
646
  value: function () {
640
- var e = Object.keys(this.form.model.getCachedChunk(this.form.settings.formRoot));
647
+ var e = Object.keys(this.form.model.getChunk(this.form.settings.formRoot));
641
648
  return this.form.validator.validateAll(e);
642
649
  }
643
650
  }, {
644
651
  key: "hasErrors",
645
652
  value: function () {
646
- var e = this.form.model.getCached(this.form.settings.formRoot, "errorsCount");
653
+ var e = this.form.model.get(this.form.settings.formRoot, "errorsCount");
647
654
  return null != e && e > 0;
648
655
  }
649
656
  }, {
650
657
  key: "onErrorsCountChanged",
651
658
  value: function (e) {
652
- this.form.eventManager.on(Z(this.form.settings.formRoot, "errorsCount"), e);
659
+ this.form.eventManager.on(G(this.form.settings.formRoot, "errorsCount"), e);
653
660
  }
654
661
  }, {
655
662
  key: "offErrorsCountChanged",
656
663
  value: function (e) {
657
- this.form.eventManager.off(Z(this.form.settings.formRoot, "errorsCount"), e);
664
+ this.form.eventManager.off(G(this.form.settings.formRoot, "errorsCount"), e);
658
665
  }
659
666
  }, {
660
667
  key: "set",
661
- value: function (e, t) {
662
- if (null === e || "string" == typeof e || "object" !== q(e) || Array.isArray(e)) {
668
+ value: function (e, r) {
669
+ if (null === e || "string" == typeof e || "object" !== D(e) || Array.isArray(e)) {
663
670
  if ("string" != typeof e) throw new Error("form.set() parameter should be string path or object with path-value pairs");
664
- this.form.model.set(e, "value", t);
671
+ this.form.model.set(e, "value", r);
665
672
  } else {
666
- var r = Object.keys(e).reduce(function (t, r) {
667
- return z(G({}, r, {
668
- value: e[r]
669
- }), t);
673
+ var n = Object.keys(e).reduce(function (r, n) {
674
+ return Z(t({}, n, {
675
+ value: e[n]
676
+ }), r);
670
677
  }, {});
671
- this.form.model.fill(r);
678
+ this.form.model.fill(n);
672
679
  }
673
680
  }
674
681
  }, {
@@ -676,12 +683,12 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
676
683
  value: function (e) {
677
684
  var t = this;
678
685
  if (Array.isArray(e)) return X(e.map(function (e) {
679
- return $(t.form.model.getCachedChunk(e));
686
+ return $(t.form.model.getChunk(e));
680
687
  }).reduce(function (e, t) {
681
688
  return e.concat(t);
682
689
  }, []));
683
- if ("string" == typeof e) return X($(this.form.model.getCachedChunk(e)));
684
- if (void 0 === e) return X($(this.form.model.getCachedChunk(this.form.settings.formRoot)));
690
+ if ("string" == typeof e) return X($(this.form.model.getChunk(e)));
691
+ if (void 0 === e) return X($(this.form.model.getChunk(this.form.settings.formRoot)));
685
692
  throw new Error("form.get() parameter should be string path or array of paths");
686
693
  }
687
694
  }, {
@@ -692,19 +699,34 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
692
699
  }, {
693
700
  key: "addInstance",
694
701
  value: function (e) {
695
- throw new V();
702
+ throw new q();
696
703
  }
697
704
  }, {
698
705
  key: "getChildren",
699
706
  value: function (e) {
700
- throw new V();
707
+ throw new q();
701
708
  }
702
709
  }, {
703
710
  key: "removeInstance",
704
711
  value: function (e, t) {
705
- throw new V();
712
+ throw new q();
713
+ }
714
+ }, {
715
+ key: "removeInstances",
716
+ value: function (e, t) {
717
+ throw new q();
706
718
  }
707
- }]) && H(t.prototype, r), e;
719
+ }, {
720
+ key: "setAllCheckboxesFor113103",
721
+ value: function (e) {
722
+ return Promise.resolve(void 0);
723
+ }
724
+ }, {
725
+ key: "setAutoFieldsToAutoValue",
726
+ value: function (e) {
727
+ return Promise.resolve(void 0);
728
+ }
729
+ }]), e;
708
730
  }();
709
731
 
710
732
  function K(e, t) {
@@ -721,44 +743,27 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
721
743
  }
722
744
 
723
745
  function Q(e) {
724
- for (var t = 1; t < arguments.length; t++) {
725
- var r = null != arguments[t] ? arguments[t] : {};
726
- t % 2 ? K(Object(r), !0).forEach(function (t) {
727
- W(e, t, r[t]);
728
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : K(Object(r)).forEach(function (t) {
729
- Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
746
+ for (var r = 1; r < arguments.length; r++) {
747
+ var n = null != arguments[r] ? arguments[r] : {};
748
+ r % 2 ? K(Object(n), !0).forEach(function (r) {
749
+ t(e, r, n[r]);
750
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : K(Object(n)).forEach(function (t) {
751
+ Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
730
752
  });
731
753
  }
732
754
 
733
755
  return e;
734
756
  }
735
757
 
736
- function W(e, t, r) {
737
- return t in e ? Object.defineProperty(e, t, {
738
- value: r,
739
- enumerable: !0,
740
- configurable: !0,
741
- writable: !0
742
- }) : e[t] = r, e;
743
- }
744
-
745
- function Y(e, t) {
746
- (null == t || t > e.length) && (t = e.length);
747
-
748
- for (var r = 0, n = new Array(t); r < t; r++) n[r] = e[r];
749
-
750
- return n;
751
- }
752
-
753
- function ee() {}
758
+ function W() {}
754
759
 
755
- function te() {
760
+ function Y() {
756
761
  var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
757
762
  r = e.g.CF.keformsUrl || "";
758
763
  return "".concat(r, "/").concat(t).replace(/([^:])\/{2,}/g, "$1/");
759
764
  }
760
765
 
761
- function re(e, t) {
766
+ function ee(e, t) {
762
767
  if (void 0 === t) return e;
763
768
 
764
769
  for (var r = [], n = 0, o = Object.keys(t); n < o.length; n++) {
@@ -770,96 +775,73 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
770
775
  return 0 === r.length ? e : e + "?" + r.join("&");
771
776
  }
772
777
 
773
- function ne(t) {
778
+ function te(t) {
774
779
  return new RegExp("^(?:".concat(t.replace(/\./g, "\\.").replace(/\*/g, "[a-z0-9-.]+"), ")$")).test(e.g.location.host);
775
780
  }
776
781
 
777
- function oe(t) {
782
+ function re(t) {
778
783
  return (e.g.location.search.trim().replace(/^(\?|#|&)/, "").split("&").map(function (e) {
779
784
  return e.replace(/\+/g, " ").split("=").map(decodeURIComponent);
780
785
  }).find(function (e) {
781
- return (r = e, n = 1, function (e) {
786
+ return (n = e, o = 1, function (e) {
782
787
  if (Array.isArray(e)) return e;
783
- }(r) || function (e, t) {
784
- if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) {
785
- var r = [],
786
- n = !0,
787
- o = !1,
788
- i = void 0;
788
+ }(n) || function (e, t) {
789
+ var r = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
790
+
791
+ if (null != r) {
792
+ var n,
793
+ o,
794
+ i = [],
795
+ a = !0,
796
+ s = !1;
789
797
 
790
798
  try {
791
- for (var a, s = e[Symbol.iterator](); !(n = (a = s.next()).done) && (r.push(a.value), !t || r.length !== t); n = !0);
799
+ for (r = r.call(e); !(a = (n = r.next()).done) && (i.push(n.value), !t || i.length !== t); a = !0);
792
800
  } catch (e) {
793
- o = !0, i = e;
801
+ s = !0, o = e;
794
802
  } finally {
795
803
  try {
796
- n || null == s.return || s.return();
804
+ a || null == r.return || r.return();
797
805
  } finally {
798
- if (o) throw i;
806
+ if (s) throw o;
799
807
  }
800
808
  }
801
809
 
802
- return r;
810
+ return i;
803
811
  }
804
- }(r, n) || function (e, t) {
812
+ }(n, o) || function (e, t) {
805
813
  if (e) {
806
- if ("string" == typeof e) return Y(e, t);
807
- var r = Object.prototype.toString.call(e).slice(8, -1);
808
- return "Object" === r && e.constructor && (r = e.constructor.name), "Map" === r || "Set" === r ? Array.from(e) : "Arguments" === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? Y(e, t) : void 0;
814
+ if ("string" == typeof e) return r(e, t);
815
+ var n = Object.prototype.toString.call(e).slice(8, -1);
816
+ return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n || "Set" === n ? Array.from(e) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? r(e, t) : void 0;
809
817
  }
810
- }(r, n) || function () {
818
+ }(n, o) || function () {
811
819
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
812
820
  }())[0] == t;
813
- var r, n;
821
+ var n, o;
814
822
  }) || [])[1];
815
823
  }
816
824
 
817
- function ie(t, r) {
825
+ function ne(t, r) {
818
826
  var n = t.gfv,
819
827
  o = t.engineVersion,
820
- i = t.resourcesVersion,
821
- a = t.theme;
828
+ i = t.resourcesVersion;
822
829
  if (e.g.CF.entryPoint[n]) r();else {
823
- var s = o && !e.g[o],
824
- u = null != o && (function (e, t) {
825
- try {
826
- var r,
827
- n,
828
- o,
829
- i,
830
- a,
831
- s,
832
- u,
833
- c,
834
- l,
835
- f,
836
- h = e.split(".").slice(0, 3).map(function (e) {
837
- return parseInt(e, 10);
838
- }),
839
- d = "4.206.0".split(".").slice(0, 3).map(function (e) {
840
- return parseInt(e, 10);
841
- });
842
- return (null !== (r = h[0]) && void 0 !== r ? r : 0) > (null !== (n = d[0]) && void 0 !== n ? n : 0) || (null !== (o = h[0]) && void 0 !== o ? o : 0) === (null !== (i = d[0]) && void 0 !== i ? i : 0) && ((null !== (a = h[1]) && void 0 !== a ? a : 0) > (null !== (s = d[1]) && void 0 !== s ? s : 0) || (null !== (u = h[1]) && void 0 !== u ? u : 0) === (null !== (c = d[1]) && void 0 !== c ? c : 0) && (null !== (l = h[2]) && void 0 !== l ? l : 0) >= (null !== (f = d[2]) && void 0 !== f ? f : 0));
843
- } catch (e) {
844
- return !1;
845
- }
846
- }(o) || "local" === o),
847
- c = "true" === oe("debug") ? "" : ".min",
848
- l = !u && a ? ".".concat(encodeURIComponent(a)) : "",
849
- f = [],
850
- h = {
830
+ var a = o && !e.g[o],
831
+ s = "true" === re("debug") ? "" : ".min",
832
+ u = [],
833
+ c = {
851
834
  v: i,
852
835
  resourceZone: t.resourceZone
853
836
  };
854
-
855
- f.push(function (e) {
856
- return P.styleSheet(te(re("static/public/styles/".concat(n).concat(l).concat(c, ".css"), h)), !0, e);
857
- }), f.push(function (e) {
858
- return P.script(te(re("static/public/scripts/".concat(n).concat(c, ".js"), h)), e);
859
- }), s && f.push(function (e) {
860
- return P.styleSheet(te(re("static/public/styles/candy_".concat(o).concat(l).concat(c, ".css"), h)), !1, e);
837
+ u.push(function (e) {
838
+ return C.styleSheet(Y(ee("static/public/styles/".concat(n).concat(s, ".css"), c)), !0, e);
839
+ }), u.push(function (e) {
840
+ return C.script(Y(ee("static/public/scripts/".concat(n).concat(s, ".js"), c)), e);
841
+ }), a && u.push(function (e) {
842
+ return C.styleSheet(Y(ee("static/public/styles/candy_".concat(o).concat(s, ".css"), c)), !1, e);
861
843
  }, function (e) {
862
- return P.script(te(re("static/public/scripts/candy_".concat(o).concat(c, ".js"), h)), e);
844
+ return C.script(Y(ee("static/public/scripts/candy_".concat(o).concat(s, ".js"), c)), e);
863
845
  }), function (e, t) {
864
846
  var r = 0;
865
847
  e.forEach(function (n) {
@@ -870,14 +852,14 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
870
852
  }
871
853
  });
872
854
  });
873
- }(f, r);
855
+ }(u, r);
874
856
  }
875
857
  }
876
858
 
877
- function ae(t, r, n) {
859
+ function oe(t, r, n) {
878
860
  var o;
879
861
  (null !== (o = e.g.CF.entryPoint[r.gfv]) && void 0 !== o ? o : function (e) {
880
- throw new Error(null != e ? e : "Undefined is not allowed");
862
+ throw "string" == typeof e || null == e ? new Error(null != e ? e : "Undefined is not allowed") : e;
881
863
  }("Form entry point ".concat(r.gfv, " not found.")))(t, r).then(function (e) {
882
864
  var t = e.publicForm || function (e) {
883
865
  return new J(e);
@@ -887,33 +869,35 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
887
869
  }).catch(n);
888
870
  }
889
871
 
890
- function se(t) {
872
+ function ie(t) {
891
873
  if (null != t) return e.g[t] && e.g[t].default;
892
874
  }
893
875
 
894
- var ue = {
876
+ var ae = {
895
877
  start: function (t, r) {
896
878
  var n,
897
879
  o,
898
- i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : ee,
880
+ i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : W,
899
881
  a = null,
900
882
  s = r.ns,
901
- u = r.draftId,
902
- c = _;
903
- if (ne(c.konturDomains) ? c.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
904
- var l = null !== (n = r.resourceZone) && void 0 !== n ? n : oe("resourceZone"),
905
- f = re(te("v1/ns/".concat(s, "/drafts/").concat(u, "/client-draft-info")), {
906
- resourceZone: l
883
+ u = r.draftId;
884
+ if (te(U.konturDomains) ? U.authorized ? u ? s || (a = new Error("options.ns is required")) : a = new Error("options.draftId is required") : a = new Error("user.unauthenticated") : a = new Error("domain.untrusted"), a) i(a);else {
885
+ var c = null !== (n = r.resourceZone) && void 0 !== n ? n : re("resourceZone"),
886
+ f = ee(Y(B({
887
+ ns: s,
888
+ draftId: u
889
+ })), {
890
+ resourceZone: c
907
891
  }),
908
- h = {
892
+ l = {
909
893
  method: "GET"
910
894
  };
911
- if (null == r.authentication || "browser-credentials-include" === r.authentication) h.credentials = "include";else if ("authSid" in r.authentication && null != r.authentication.authSid) {
912
- var d;
913
- h.credentials = "omit", h.headers = null !== (d = h.headers) && void 0 !== d ? d : {}, h.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
914
- } else h.credentials = "omit";
915
- var y = null !== (o = r.fetch) && void 0 !== o ? o : S;
916
- y(f, h).then(function (e) {
895
+ if (null == r.authentication || "browser-credentials-include" === r.authentication) l.credentials = "include";else if ("authSid" in r.authentication && null != r.authentication.authSid) {
896
+ var h;
897
+ l.credentials = "omit", l.headers = null !== (h = l.headers) && void 0 !== h ? h : {}, l.headers.Authorization = "AUTH.SID ".concat(r.authentication.authSid);
898
+ } else l.credentials = "omit";
899
+ var d = null !== (o = r.fetch) && void 0 !== o ? o : P;
900
+ d(f, l).then(function (e) {
917
901
  return e.json();
918
902
  }).then(function (n) {
919
903
  var o,
@@ -921,28 +905,49 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
921
905
  s,
922
906
  u,
923
907
  f = n.gfv,
924
- h = oe("engineVersion"),
925
- d = n.engineVersion ? h || n.engineVersion : null,
926
- y = Q(Q(Q(Q({}, c), r), n), {}, {
927
- model: r.model,
908
+ l = n.engineVersion,
909
+ h = Q(Q(Q({
910
+ authorized: U.authorized,
911
+ cauldronApiUrl: U.cauldronApiUrl,
912
+ isTestServer: U.isTestServer,
913
+ renderCachingForIE8: U.renderCachingForIE8,
914
+ normalizationOnServer: U.normalizationOnServer,
915
+ normativeUrl: U.normativeUrl,
916
+ resourcesVersion: U.resourcesVersion,
917
+ konturDomains: U.konturDomains
918
+ }, r), {}, {
919
+ abonId: r.abonId,
920
+ orgId: r.orgId,
921
+ userId: r.userId
922
+ }, n), {}, {
923
+ gfv: f,
924
+ isIndividual: n.isIndividual,
925
+ isForeign: n.isForeign,
926
+ engineVersion: l,
928
927
  feedbackEnabled: null !== (o = r.feedbackEnabled) && void 0 !== o ? o : n.feedbackEnabled,
928
+ candyTourAvailable: n.candyTourAvailable,
929
+ eventEmitter: r.eventEmitter,
930
+ formInfo: n.formInfo,
931
+ printInfo: n.printInfo,
932
+ regions: n.regions,
933
+ hasTemplates: n.hasTemplates,
934
+ model: r.model,
929
935
  isDisabledCleanForm: null !== (a = r.isDisabledCleanForm) && void 0 !== a && a,
930
936
  isDisabledCloseButton: null !== (s = r.isDisabledCloseButton) && void 0 !== s && s,
931
937
  isDisabledCloseAndSaveButton: null !== (u = r.isDisabledCloseAndSaveButton) && void 0 !== u && u,
932
- resourceZone: l,
933
- engineVersion: d,
938
+ resourceZone: c,
934
939
  authentication: r.authentication
935
940
  });
936
- ie({
937
- gfv: y.gfv,
938
- engineVersion: y.engineVersion,
939
- resourceZone: y.resourceZone,
940
- resourcesVersion: y.resourcesVersion,
941
- theme: y.theme
941
+ ne({
942
+ gfv: h.gfv,
943
+ engineVersion: h.engineVersion,
944
+ resourceZone: h.resourceZone,
945
+ resourcesVersion: h.resourcesVersion,
946
+ theme: h.theme
942
947
  }, function (n) {
943
948
  if (!n && e.g.CF.entryPoint[f]) {
944
- var o = se(d);
945
- ae(t, Q(Q({}, y), {}, {
949
+ var o = ie(l);
950
+ oe(t, Q(Q({}, h), {}, {
946
951
  templatesApi: r.templatesApi,
947
952
  renderForm: o
948
953
  }), i);
@@ -955,6 +960,6 @@ var __signature__ = typeof reactHotLoaderGlobal !== 'undefined' ? reactHotLoader
955
960
  partialRenderingForIE8: ("{partialRenderingForIE8}", !1),
956
961
  keformsUrl: "{keformsUrl}"
957
962
  };
958
- e.g.CF = ue;
963
+ e.g.CF = ae;
959
964
  }();
960
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0NhbmR5RW5naW5lL25vZGVfbW9kdWxlcy93aGF0d2ctZmV0Y2gvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvQ29tbW9uL0Vycm9ycy50cyIsIndlYnBhY2s6Ly9DYW5keUVuZ2luZS9FbmdpbmUvc3JjL0Zvcm1zL0NsaWVudC9MZWdhY3lQdWJsaWNGb3JtL0NyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0udHMiLCJ3ZWJwYWNrOi8vQ2FuZHlFbmdpbmUvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50LnRzIiwid2VicGFjazovL0NhbmR5RW5naW5lL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiZyIsImdsb2JhbFRoaXMiLCJ0aGlzIiwiRnVuY3Rpb24iLCJlIiwid2luZG93IiwiZ2xvYmFsIiwic2VsZiIsInN1cHBvcnQiLCJTeW1ib2wiLCJCbG9iIiwib2JqIiwiRGF0YVZpZXciLCJwcm90b3R5cGUiLCJpc1Byb3RvdHlwZU9mIiwidmlld0NsYXNzZXMiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaW5kZXhPZiIsIk9iamVjdCIsInRvU3RyaW5nIiwiY2FsbCIsIm5vcm1hbGl6ZU5hbWUiLCJuYW1lIiwiU3RyaW5nIiwidGVzdCIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJ2YWx1ZSIsIml0ZXJhdG9yRm9yIiwiaXRlbXMiLCJpdGVyYXRvciIsIm5leHQiLCJzaGlmdCIsImRvbmUiLCJ1bmRlZmluZWQiLCJIZWFkZXJzIiwiaGVhZGVycyIsIm1hcCIsImZvckVhY2giLCJhcHBlbmQiLCJBcnJheSIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwibGVuZ3RoIiwiaSIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJidWZmZXJDbG9uZSIsInNsaWNlIiwiYnl0ZUxlbmd0aCIsImJ1ZmZlciIsIkJvZHkiLCJfaW5pdEJvZHkiLCJfYm9keUluaXQiLCJfYm9keVRleHQiLCJfYm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJVUkxTZWFyY2hQYXJhbXMiLCJfYm9keUFycmF5QnVmZmVyIiwidHlwZSIsInJlamVjdGVkIiwiRXJyb3IiLCJhcnJheUJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJ0aGVuIiwidGV4dCIsInJlYWRBcnJheUJ1ZmZlckFzVGV4dCIsImZvcm1EYXRhIiwiZGVjb2RlIiwianNvbiIsIkpTT04iLCJwYXJzZSIsIm1ldGhvZHMiLCJtZXRob2QiLCJ1cGNhc2VkIiwidG9VcHBlckNhc2UiLCJSZXF1ZXN0IiwiaW5wdXQiLCJvcHRpb25zIiwidXJsIiwiY3JlZGVudGlhbHMiLCJtb2RlIiwic2lnbmFsIiwicmVmZXJyZXIiLCJjYWNoZSIsInJlUGFyYW1TZWFyY2giLCJyZXBsYWNlIiwiRGF0ZSIsImdldFRpbWUiLCJjbG9uZSIsImZvcm0iLCJ0cmltIiwic3BsaXQiLCJieXRlcyIsImRlY29kZVVSSUNvbXBvbmVudCIsInJhd0hlYWRlcnMiLCJzdWJzdHIiLCJsaW5lIiwicGFydHMiLCJrZXkiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwic3RhdHVzIiwib2siLCJzdGF0dXNUZXh0IiwicmVzcG9uc2UiLCJyZWRpcmVjdFN0YXR1c2VzIiwicmVkaXJlY3QiLCJSYW5nZUVycm9yIiwibG9jYXRpb24iLCJET01FeGNlcHRpb24iLCJlcnIiLCJtZXNzYWdlIiwic3RhY2siLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImZldGNoIiwiaW5pdCIsInJlcXVlc3QiLCJhYm9ydGVkIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJhYm9ydFhociIsImFib3J0IiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2VVUkwiLCJyZXNwb25zZVRleHQiLCJzZXRUaW1lb3V0Iiwib250aW1lb3V0Iiwib25hYm9ydCIsImhyZWYiLCJvcGVuIiwiZml4VXJsIiwid2l0aENyZWRlbnRpYWxzIiwicmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNlbmQiLCJwb2x5ZmlsbCIsIkxvYWRJbnRvRG9jdW1lbnQiLCJ1cmkiLCJzY3JpcHRMb2FkZWQiLCJoZWFkIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsImNyZWF0ZUVsZW1lbnQiLCJsb2FkSGFuZGxlciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInNyYyIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiaWdub3JlRXJyb3IiLCJsaW5rIiwicGFyc2VCb29sIiwiQm9vbGVhbiIsImNsaWVudFNldHRpbmdzIiwiYXV0aG9yaXplZCIsImNhdWxkcm9uQXBpVXJsIiwiYWJvbklkIiwib3JnSWQiLCJ1c2VySWQiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwibW9kZWxDaGFuZ2VFdmVudFBhdGgiLCJwYXRoIiwiZmllbGROYW1lIiwibWFwQ2h1bmtWYWx1ZXMiLCJjaHVuayIsImZpbHRlciIsInJlZHVjZUNodW5rVmFsdWVzIiwiY2h1bmtzIiwicmVkdWNlIiwiTGVnYWN5UHVibGljRm9ybSIsImVycm9yTG9nIiwiZ0lkIiwicGlja2xpc3RzUHJvdmlkZXIiLCJnZXRCeUdJZCIsImV2ZW50TmFtZSIsImxpc3RlbmVyIiwiZXZlbnRNYW5hZ2VyIiwib24iLCJvZmYiLCJjb25zb2xlIiwiY2hhbmdlU2V0Iiwic3RvcEF1dG9zZW5kIiwidW5tb3VudCIsIm1vZGVsIiwiZ2V0Q2FjaGVkQ2h1bmsiLCJzZXR0aW5ncyIsImZvcm1Sb290IiwidmFsaWRhdG9yIiwidmFsaWRhdGVBbGwiLCJlcnJvckNvdW50IiwiZ2V0Q2FjaGVkIiwicGF0aE9yTW9kZWxDaHVuayIsImlubmVyQ2h1bmsiLCJmaWxsIiwicGF0aE9yQXJyYXkiLCJhcnJheSIsImNvbmNhdCIsImluc3RhbmNlIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibGVmdCIsInJpZ2h0IiwibGVmdE51bWJlcnMiLCJwYXJzZUludCIsIngiLCJyaWdodE51bWJlcnMiLCJsb2FkRm9ybSIsImdmdiIsImVuZ2luZVZlcnNpb24iLCJ0aGVtZSIsImVudHJ5UG9pbnQiLCJpc05lZWRFbmdpbmUiLCJ1c2VTYW1lUmVzb3VyY2VzRm9yVGhlbWUiLCJpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwiLCJtaW4iLCJ0aGVtZVBvc3RmaXgiLCJ2IiwicmVzb3VyY2Vab25lIiwic3R5bGVTaGVldCIsImNiIiwicnVuUGFyYWxsZWwiLCJyZW5kZXJGb3JtIiwicGFnZUNvbnRlbnQiLCJleHRlbmRlZFNldHRpbmdzIiwicHVibGljRm9ybSIsImNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0iLCJnZXRFbmdpbmVFbnRyeVBvaW50IiwibnMiLCJkcmFmdElkIiwiY2xpZW50RHJhZnRVcmwiLCJyZXF1ZXN0T3B0aW9ucyIsImF1dGhlbnRpY2F0aW9uIiwiYXV0aFNpZCIsImZldGNoSW1wbCIsImNsaWVudERyYWZ0SW5mbyIsImVuZ2luZVZlcnNpb25QYXJhbSIsImZlZWRiYWNrRW5hYmxlZCIsImlzRGlzYWJsZWRDbGVhbkZvcm0iLCJpc0Rpc2FibGVkQ2xvc2VCdXR0b24iLCJpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uIiwibG9hZEVycm9yIiwicmVuZGVyIiwidGVtcGxhdGVzQXBpIiwiQ2FuZHlDbGllbnRFeHBvcnRzIiwic3RhcnQiLCJwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxNQUFJQSxDQUFBQSxHQUFzQixFQUExQjs7Ozs7Ozs7QUNEQUE7O0FBQUFBLEVBQUFBLENBQUFBLENBQW9CQyxDQUFwQkQsR0FBd0IsWUFBQTtBQUN2QixRQUEwQixZQUFBLE9BQWZFLFVBQVgsRUFBb0MsT0FBT0EsVUFBUDs7QUFDcEMsUUFB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LENBQUFBLENBQUFBLENBQU91UCxFQUFQdlAsR0FBWXFULEVBQVpyVCIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZSBuby11bnNhZmUtYW55XG5leHBvcnQgY2xhc3MgTG9hZEludG9Eb2N1bWVudCB7XG4gICAgcHVibGljIHN0YXRpYyBzY3JpcHQodXJpOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBsZXQgc2NyaXB0TG9hZGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cbiAgICAgICAgZnVuY3Rpb24gbG9hZEhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0TG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNjcmlwdC5yZWFkeVN0YXRlIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5nIHRoZSB1c2VyIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgY29tcGxldGVzIHRvIGxvYWQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFRoaXMgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgaW4gSUUgZXZlbiB1cG9uIGVycm9yLiBJbiBhbnlcbiAgICAgICAgLy8gY2FzZSBpdCBpcyB0aGUgY2xpZW50J3MgcmVzcG9uc2liaWxpdHkgdG8gdmVyaWZ5IHRoYXQgdGhlIHNjcmlwdCByYW5cbiAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBzY3JpcHQub25sb2FkID0gbG9hZEhhbmRsZXI7XG4gICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBsb2FkSGFuZGxlcjtcblxuICAgICAgICAvLyBBZGQgYW4gZXJyb3IgY2FsbGJhY2suXG4gICAgICAgIC8vIE5PVEUodXNlcik6IE5vdCBzdXBwb3J0ZWQgaW4gSUUuXG4gICAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc2NyaXB0LlwiKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIHRoZSBzY3JpcHQgZWxlbWVudCB0byB0aGUgZG9jdW1lbnQuXG4gICAgICAgIC8vIE5PVEUodXNlcik6IFNhZmFyaSBuZXZlciBsb2FkcyB0aGUgc2NyaXB0IGlmIHdlIGRvbid0IHNldFxuICAgICAgICAvLyB0aGUgc3JjIGF0dHJpYnV0ZSBiZWZvcmUgYXBwZW5kaW5nLlxuICAgICAgICBzY3JpcHQuc3JjID0gdXJpO1xuICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIiwgXCJ1c2UtY3JlZGVudGlhbHNcIik7XG4gICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHN0eWxlU2hlZXQodXJpOiBzdHJpbmcsIGlnbm9yZUVycm9yOiBib29sZWFuLCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZSA9ICgpID0+IGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpZ25vcmVFcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGxvYWRpbmcgc3R5bGVzaGVldC5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0gPz8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJzdHlsZXNoZWV0XCIpO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJ0ZXh0L2Nzc1wiKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCByZXNvbHZlKTtcbiAgICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVyaSk7XG4gICAgfVxufVxuIiwiZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5leHBvcnQgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB7XG4gICAgYXV0aG9yaXplZDogcGFyc2VCb29sKFwie2F1dGhvcml6ZWR9XCIpLFxuICAgIGNhdWxkcm9uQXBpVXJsOiBcIntjYXVsZHJvbkFwaVVybH1cIixcbiAgICBhYm9uSWQ6IFwie2Fib25JZH1cIixcbiAgICBvcmdJZDogXCJ7b3JnSWR9XCIsXG4gICAgdXNlcklkOiBcInt1c2VySWR9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vdEltcGxlbWVudGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UgPz8gXCJPcGVyYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkUHJvZ3JhbVN0YXRlRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKFwiSW52YWxpZCBwcm9ncmFtIHN0YXRlXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGFyZ3VtZW50TmFtZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKFxuICAgICAgICAgICAgbWVzc2FnZSAhPSB1bmRlZmluZWQgPyBgJHttZXNzYWdlfSAoYXJndW1lbnQ6ICR7YXJndW1lbnROYW1lfSlgIDogYEludmFsaWQgYXJndW1lbnQgdmFsdWU6ICR7YXJndW1lbnROYW1lfWBcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBpbmdFcnJvciBleHRlbmRzIEFwcGxpY2F0aW9uRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHR5cGluZ1wiKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9FcnJvcnNcIjtcbmltcG9ydCB0eXBlIHsgU3RlcCB9IGZyb20gXCIuLi8uLi8uLi9Db250cm9scy9Gb3JtUGFydHMvVG91ci9Ub3VyVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0FwaS9DYW5keUFwaUNsaWVudC9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbFZhbHVlIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlcm5hbEhvb2tGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvRXh0ZXJuYWxFdmVudHMvRXh0ZXJuYWxIb29rRnVuY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVhZG9ubHlNb2RlbENodW5rIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL01vZGVsU3RvcmluZy9Nb2RlbENodW5rXCI7XG5pbXBvcnQgdHlwZSB7IFBpY2tsaXN0UXVlcnlGaWx0ZXIsIFBpY2tsaXN0UXVlcnlSZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJUHVibGljRm9ybSB9IGZyb20gXCIuLi8uLi9QdWJsaWNGb3JtL0lQdWJsaWNGb3JtXCI7XG5pbXBvcnQgeyBNb2RlbEV2ZW50c0xpc3RlbmVyIH0gZnJvbSBcIi4uLy4uLy4uL0VuZ2luZS9Db3JlL0V2ZW50TWFuYWdlbWVudC9Nb2RlbEV2ZW50cy9Nb2RlbEV2ZW50XCI7XG5cbmltcG9ydCB7IElMZWdhY3lGb3JtIH0gZnJvbSBcIi4vSUxlZ2FjeUZvcm1cIjtcblxuZXhwb3J0IHR5cGUgTW9kZWxFdmVudFBhdGggPVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nLCBzdHJpbmddXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwiY2hhbmdlXCJdXG4gICAgfCBbXCJtb2RlbFwiLCBcInJlbW92ZVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHBhdGg/OiBzdHJpbmcsIGZpZWxkTmFtZT86IHN0cmluZyk6IE1vZGVsRXZlbnRQYXRoIHtcbiAgICBpZiAoZmllbGROYW1lICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBiZSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBwYXRoLCBmaWVsZE5hbWVdO1xuICAgIH1cbiAgICBpZiAocGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGhdO1xuICAgIH1cbiAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl07XG59XG5cbmZ1bmN0aW9uIG1hcENodW5rVmFsdWVzKGNodW5rOiBSZWFkb25seU1vZGVsQ2h1bmspOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY2h1bmspXG4gICAgICAgIC5maWx0ZXIocGF0aCA9PiBjaHVua1twYXRoXSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2h1bmtbcGF0aF0sIFwidmFsdWVcIikpXG4gICAgICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjaHVua1twYXRoXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgW3BhdGhdOiByZXN1bHQudmFsdWUgfTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlZHVjZUNodW5rVmFsdWVzKGNodW5rczogQXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pik6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgcmV0dXJuIGNodW5rcy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGNodW5rKSA9PiAoe1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgLi4uY2h1bmssXG4gICAgICAgIH0pLFxuICAgICAgICB7fVxuICAgICk7XG59XG5cbmNsYXNzIExlZ2FjeVB1YmxpY0Zvcm0gaW1wbGVtZW50cyBJUHVibGljRm9ybSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtOiBJTGVnYWN5Rm9ybTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihmb3JtOiBJTGVnYWN5Rm9ybSkge1xuICAgICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBTZXJ2ZXJFcnJvckxvZyk6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlHSWQoZ0lkOiBzdHJpbmcsIGZpbHRlcj86IFBpY2tsaXN0UXVlcnlGaWx0ZXIpOiBQcm9taXNlPFBpY2tsaXN0UXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnBpY2tsaXN0c1Byb3ZpZGVyLmdldEJ5R0lkKGdJZCwgZmlsdGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb24oZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmYoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFeHRlcm5hbEhvb2tGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9mZihbXCJmb3JtXCIsIGV2ZW50TmFtZV0sIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Nb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub25Nb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZNb2RlbENoYW5nZShwYXRoOiBzdHJpbmcgfCBzdHJpbmdbXSwgbGlzdGVuZXI6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS5lcnJvcihcImZvcm0ub2ZmTW9kZWxDaGFuZ2UoKSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mb3JtLmNoYW5nZVNldC5zdG9wQXV0b3NlbmQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS51bm1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0udW5tb3VudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jaGFuZ2VTZXQuc2VuZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3VyU3RlcHMoKTogU3RlcFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5tb2RlbC5nZXRDYWNoZWRDaHVuayh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QpKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSDQrdGC0L4g0LIg0YHRgtCw0YDRi9GFINC00LLQuNC20LrQsNGFINGC0YPRgiDRgtCw0LrQvtC5INCy0YvQt9C+0LJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWRhdG9yLnZhbGlkYXRlQWxsKGtleXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ291bnQgPSB0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKTtcbiAgICAgICAgcmV0dXJuIGVycm9yQ291bnQgIT0gdW5kZWZpbmVkICYmIGVycm9yQ291bnQgPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVycm9yc0NvdW50Q2hhbmdlZChsaXN0ZW5lcjogTW9kZWxFdmVudHNMaXN0ZW5lcik6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm0uZXZlbnRNYW5hZ2VyLm9uKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvZmZFcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vZmYobW9kZWxDaGFuZ2VFdmVudFBhdGgodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290LCBcImVycm9yc0NvdW50XCIpLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldChwYXRoT3JNb2RlbENodW5rOiB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogc3RyaW5nLCB2YWx1ZTogTW9kZWxWYWx1ZSk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIHB1YmxpYyBzZXQoXG4gICAgICAgIHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZyB8IHsgW3BhdGg6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9LFxuICAgICAgICB2YWx1ZT86IE1vZGVsVmFsdWVcbiAgICApOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhPck1vZGVsQ2h1bmsgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwYXRoT3JNb2RlbENodW5rICE9PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkocGF0aE9yTW9kZWxDaHVuaylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lckNodW5rID0gT2JqZWN0LmtleXMocGF0aE9yTW9kZWxDaHVuaykucmVkdWNlPFJlYWRvbmx5TW9kZWxDaHVuaz4oXG4gICAgICAgICAgICAgICAgKHJlc3VsdCwgcGF0aCkgPT4gKHsgW3BhdGhdOiB7IHZhbHVlOiBwYXRoT3JNb2RlbENodW5rW3BhdGhdIH0sIC4uLnJlc3VsdCB9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLm1vZGVsLmZpbGwoaW5uZXJDaHVuayk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5zZXQocGF0aE9yTW9kZWxDaHVuaywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLnNldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3Igb2JqZWN0IHdpdGggcGF0aC12YWx1ZSBwYWlyc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHBhdGhPckFycmF5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGhPckFycmF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKFxuICAgICAgICAgICAgICAgIHBhdGhPckFycmF5XG4gICAgICAgICAgICAgICAgICAgIC5tYXAocGF0aCA9PiBtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsocGF0aCkpKVxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgICAgICAgICAgIC5yZWR1Y2U8QXJyYXk8eyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9Pj4oKHJlc3VsdCwgYXJyYXkpID0+IHJlc3VsdC5jb25jYXQoYXJyYXkpLCBbXSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHBhdGhPckFycmF5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENhY2hlZENodW5rKHBhdGhPckFycmF5KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhdGhPckFycmF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhtYXBDaHVua1ZhbHVlcyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2FjaGVkQ2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImZvcm0uZ2V0KCkgcGFyYW1ldGVyIHNob3VsZCBiZSBzdHJpbmcgcGF0aCBvciBhcnJheSBvZiBwYXRoc1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsdWUocGF0aDogc3RyaW5nKTogTW9kZWxWYWx1ZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLm1vZGVsLmdldChwYXRoLCBcInZhbHVlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRJbnN0YW5jZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDaGlsZHJlbihwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUluc3RhbmNlKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxlZ2FjeVB1YmxpY0Zvcm0oZm9ybTogSUZvcm0pOiBJUHVibGljRm9ybSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBuZXcgTGVnYWN5UHVibGljRm9ybShmb3JtIGFzIElMZWdhY3lGb3JtKTtcbn1cbiIsIi8qIHRzbGludDpkaXNhYmxlOm5vLW51bGwta2V5d29yZCBuby1hbnkgbm8tdW5zYWZlLWFueSAqL1xuaW1wb3J0IHsgZmV0Y2ggfSBmcm9tIFwid2hhdHdnLWZldGNoXCI7XG5cbmltcG9ydCB7IEVycm9yRmlyc3RDYWxsYmFjaywgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBJRm9ybSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvRm9ybS9JRm9ybVwiO1xuaW1wb3J0IHsgTG9hZEludG9Eb2N1bWVudCB9IGZyb20gXCIuLi8uLi9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnRcIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHR5cGUgeyBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQgfSBmcm9tIFwiLi4vVHlwZXMvSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50XCI7XG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UgfSBmcm9tIFwiLi9DbGllbnREcmFmdEluZm9SZXNwb25zZVwiO1xuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAgICAgQ0Y6IENhbmR5R2xvYmFsSW5qZWN0ZWRWYXI7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcbiAgICBuYW1lc3BhY2UgTm9kZUpTIHtcbiAgICAgICAgaW50ZXJmYWNlIEdsb2JhbCB7XG4gICAgICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZGVjbGFyZSBjb25zdCBnbG9iYWw6IFdpbmRvdztcblxuZnVuY3Rpb24gZGVmYXVsdENhbGxiYWNrKCk6IHZvaWQge1xuICAgIC8qIGVtcHR5ICovXG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gdXJsKHJlbGF0aXZlVXJsOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2xvYmFsLkNGLmtlZm9ybXNVcmwgfHwgXCJcIjtcblxuICAgIHJldHVybiBgJHtiYXNlVXJsfS8ke3JlbGF0aXZlVXJsfWAucmVwbGFjZSgvKFteOl0pXFwvezIsfS9nLCBcIiQxL1wiKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVcmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogdW5kZWZpbmVkIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGlmIChwYXJhbXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgY29uc3QgcXVlcnlQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtTmFtZSBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXTtcbiAgICAgICAgaWYgKHBhcmFtVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBxdWVyeVBhcnRzLnB1c2goYCR7cGFyYW1OYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnlQYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiBwYXRoICsgXCI/XCIgKyBxdWVyeVBhcnRzLmpvaW4oXCImXCIpO1xufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWQoZG9tYWluczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzoke2RvbWFpbnMucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIikucmVwbGFjZSgvXFwqL2csIFwiW2EtejAtOS0uXStcIil9KSRgKS50ZXN0KFxuICAgICAgICBnbG9iYWwubG9jYXRpb24uaG9zdFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiAoXG4gICAgICAgIChnbG9iYWwubG9jYXRpb24uc2VhcmNoXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXD98I3wmKS8sIFwiXCIpXG4gICAgICAgICAgICAuc3BsaXQoXCImXCIpXG4gICAgICAgICAgICAubWFwKHBhcmFtID0+IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCBcIiBcIikuc3BsaXQoXCI9XCIpLm1hcChkZWNvZGVVUklDb21wb25lbnQpKVxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIC5maW5kKChba2V5XSkgPT4ga2V5ID09IG5hbWUpIHx8IFtdKVsxXVxuICAgICk7XG59XG5cbnR5cGUgVGFzayA9IChjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHJ1blBhcmFsbGVsKHRhc2tzOiBUYXNrW10sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGxldCBjb21wbGV0ZWQgPSAwO1xuXG4gICAgdGFza3MuZm9yRWFjaCh0YXNrID0+IHtcbiAgICAgICAgdGFzayhlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGVkICs9IDE7XG4gICAgICAgICAgICBpZiAoY29tcGxldGVkID09PSB0YXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuaW50ZXJmYWNlIFN0YXJ0Rm9ybVNldHRpbmcge1xuICAgIGdmdjogc3RyaW5nO1xuICAgIGVuZ2luZVZlcnNpb24/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIHJlc291cmNlWm9uZT86IHN0cmluZztcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBzdHJpbmc7XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZnROdW1iZXJzID0gbGVmdFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgY29uc3QgcmlnaHROdW1iZXJzID0gcmlnaHRcbiAgICAgICAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgICAgICAgIC5zbGljZSgwLCAzKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhcnNlSW50KHgsIDEwKSk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAobGVmdE51bWJlcnNbMF0gPz8gMCkgPiAocmlnaHROdW1iZXJzWzBdID8/IDApIHx8XG4gICAgICAgICAgICAoKGxlZnROdW1iZXJzWzBdID8/IDApID09PSAocmlnaHROdW1iZXJzWzBdID8/IDApICYmXG4gICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMV0gPz8gMCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKChsZWZ0TnVtYmVyc1sxXSA/PyAwKSA9PT0gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGxlZnROdW1iZXJzWzJdID8/IDApID49IChyaWdodE51bWJlcnNbMl0gPz8gMCkpKSlcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbG9hZEZvcm0oc2V0dGluZ3M6IFN0YXJ0Rm9ybVNldHRpbmcsIGNhbGxiYWNrOiAoZXJyb3I/OiBudWxsIHwgdW5kZWZpbmVkIHwgRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdmdiwgZW5naW5lVmVyc2lvbiwgcmVzb3VyY2VzVmVyc2lvbiwgdGhlbWUgfSA9IHNldHRpbmdzO1xuXG4gICAgaWYgKGdsb2JhbC5DRi5lbnRyeVBvaW50W2dmdl0pIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc05lZWRFbmdpbmUgPSBlbmdpbmVWZXJzaW9uICYmICFnbG9iYWxbZW5naW5lVmVyc2lvbl07XG4gICAgY29uc3QgdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lID1cbiAgICAgICAgZW5naW5lVmVyc2lvbiAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgKGlzRW5naW5lVmVyc2lvbkdyZWF0ZXJUaGFuT3JFcXVhbChlbmdpbmVWZXJzaW9uLCBcIjQuMjA2LjBcIikgfHwgZW5naW5lVmVyc2lvbiA9PT0gXCJsb2NhbFwiKTtcbiAgICBjb25zdCBub1N0eWxlc0ZvckdmdiA9IGZhbHNlOyAvLyBlbmdpbmVWZXJzaW9uICE9IHVuZGVmaW5lZCAmJiAoaXNFbmdpbmVWZXJzaW9uR3JlYXRlclRoYW5PckVxdWFsKGVuZ2luZVZlcnNpb24sIFwiNC4yMTQuMFwiKSB8fCBlbmdpbmVWZXJzaW9uID09PSBcImxvY2FsXCIpO1xuICAgIGNvbnN0IG5lZWRMb2FkU3R5bGVzRm9yR2Z2ID0gIW5vU3R5bGVzRm9yR2Z2O1xuICAgIGNvbnN0IG1pbiA9IGdldFBhcmFtZXRlckJ5TmFtZShcImRlYnVnXCIpID09PSBcInRydWVcIiA/IFwiXCIgOiBcIi5taW5cIjtcbiAgICBjb25zdCB0aGVtZVBvc3RmaXggPSAhdXNlU2FtZVJlc291cmNlc0ZvclRoZW1lICYmIHRoZW1lID8gYC4ke2VuY29kZVVSSUNvbXBvbmVudCh0aGVtZSl9YCA6IFwiXCI7XG4gICAgY29uc3QgdGFza3M6IFRhc2tbXSA9IFtdO1xuXG4gICAgY29uc3QgcGFyYW1zID0geyB2OiByZXNvdXJjZXNWZXJzaW9uLCByZXNvdXJjZVpvbmU6IHNldHRpbmdzLnJlc291cmNlWm9uZSB9O1xuICAgIGlmIChuZWVkTG9hZFN0eWxlc0Zvckdmdikge1xuICAgICAgICB0YXNrcy5wdXNoKGNiID0+XG4gICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgdXJsKGJ1aWxkVXJsKGBzdGF0aWMvcHVibGljL3N0eWxlcy8ke2dmdn0ke3RoZW1lUG9zdGZpeH0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cbiAgICB0YXNrcy5wdXNoKGNiID0+IExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzLyR7Z2Z2fSR7bWlufS5qc2AsIHBhcmFtcykpLCBjYikpO1xuXG4gICAgaWYgKGlzTmVlZEVuZ2luZSkge1xuICAgICAgICB0YXNrcy5wdXNoKFxuICAgICAgICAgICAgY2IgPT5cbiAgICAgICAgICAgICAgICBMb2FkSW50b0RvY3VtZW50LnN0eWxlU2hlZXQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvY2FuZHlfJHtlbmdpbmVWZXJzaW9ufSR7dGhlbWVQb3N0Zml4fSR7bWlufS5jc3NgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zY3JpcHQoXG4gICAgICAgICAgICAgICAgICAgIHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zY3JpcHRzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uanNgLCBwYXJhbXMpKSxcbiAgICAgICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcnVuUGFyYWxsZWwodGFza3MsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRm9ybShcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBleHRlbmRlZFNldHRpbmdzOiBSZW5kZXJGb3JtU2V0dGluZ3MsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT5cbik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1FbnRyeVBvaW50ID1cbiAgICAgICAgZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZXh0ZW5kZWRTZXR0aW5ncy5nZnZdID8/IHJlamVjdChgRm9ybSBlbnRyeSBwb2ludCAke2V4dGVuZGVkU2V0dGluZ3MuZ2Z2fSBub3QgZm91bmQuYCk7XG4gICAgZm9ybUVudHJ5UG9pbnQocGFnZUNvbnRlbnQsIGV4dGVuZGVkU2V0dGluZ3MpXG4gICAgICAgIC50aGVuKGZvcm0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHVibGljRm9ybSA9IGZvcm0ucHVibGljRm9ybSB8fCBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm0pO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBwdWJsaWNGb3JtKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFydEZvcm1PcHRpb25zIHtcbiAgICBuczogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBnZnY/OiBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHRlbXBsYXRlc0FwaT86IElLZVdlYlRlbXBsYXRlc0FwaUNsaWVudDtcbiAgICBmZWVkYmFja0VuYWJsZWQ/OiBib29sZWFuO1xuICAgIGlzRGlzYWJsZWRDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsZWFuRm9ybT86IGJvb2xlYW47XG4gICAgdGhlbWU/OiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nO1xuICAgIGF1dGhlbnRpY2F0aW9uPzogXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIiB8IHsgYXV0aFNpZDogc3RyaW5nIH07XG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gICAgbW9kZWw/OiB7IFtwYXRoOiBzdHJpbmddOiB1bmtub3duIH07XG59XG5cbmZ1bmN0aW9uIGdldEVuZ2luZUVudHJ5UG9pbnQoZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZyk6IHVuZGVmaW5lZCB8IEVuZ2luZUVudHJ5UG9pbnQge1xuICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gZ2xvYmFsW2VuZ2luZVZlcnNpb25dICYmIGdsb2JhbFtlbmdpbmVWZXJzaW9uXS5kZWZhdWx0O1xufVxuXG5mdW5jdGlvbiBzdGFydChcbiAgICBwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lcixcbiAgICBvcHRpb25zOiBTdGFydEZvcm1PcHRpb25zLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+ID0gZGVmYXVsdENhbGxiYWNrXG4pOiB2b2lkIHtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGNvbnN0IHsgbnMsIGRyYWZ0SWQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBjbGllbnRTZXR0aW5ncztcblxuICAgIGlmICghaXNBbGxvd2VkKHNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFzZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChgdjEvbnMvJHtuc30vZHJhZnRzLyR7ZHJhZnRJZH0vY2xpZW50LWRyYWZ0LWluZm9gKSwge1xuICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0SW5pdCA9IHsgbWV0aG9kOiBcIkdFVFwiIH07XG4gICAgaWYgKG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuYXV0aGVudGljYXRpb24gPT09IFwiYnJvd3Nlci1jcmVkZW50aWFscy1pbmNsdWRlXCIpIHtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuY3JlZGVudGlhbHMgPSBcImluY2x1ZGVcIjtcbiAgICB9IGVsc2UgaWYgKFwiYXV0aFNpZFwiIGluIG9wdGlvbnMuYXV0aGVudGljYXRpb24gJiYgb3B0aW9ucy5hdXRoZW50aWNhdGlvbi5hdXRoU2lkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0gcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQVVUSC5TSUQgJHtvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwib21pdFwiO1xuICAgIH1cbiAgICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoID8/IGZldGNoO1xuXG4gICAgZmV0Y2hJbXBsKGNsaWVudERyYWZ0VXJsLCByZXF1ZXN0T3B0aW9ucylcbiAgICAgICAgLnRoZW4oeCA9PiB4Lmpzb24oKSlcbiAgICAgICAgLnRoZW4oKGNsaWVudERyYWZ0SW5mbzogQ2xpZW50RHJhZnRJbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ2Z2IH0gPSBjbGllbnREcmFmdEluZm87XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uUGFyYW0gPSBnZXRQYXJhbWV0ZXJCeU5hbWUoXCJlbmdpbmVWZXJzaW9uXCIpO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbiA9IGNsaWVudERyYWZ0SW5mby5lbmdpbmVWZXJzaW9uXG4gICAgICAgICAgICAgICAgPyBlbmdpbmVWZXJzaW9uUGFyYW0gfHwgY2xpZW50RHJhZnRJbmZvLmVuZ2luZVZlcnNpb25cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBleHRlbmRlZFNldHRpbmdzID0ge1xuICAgICAgICAgICAgICAgIC4uLnNldHRpbmdzLFxuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogb3B0aW9ucy5mZWVkYmFja0VuYWJsZWQgPz8gY2xpZW50RHJhZnRJbmZvLmZlZWRiYWNrRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtOiBvcHRpb25zLmlzRGlzYWJsZWRDbGVhbkZvcm0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uOiBvcHRpb25zLmlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24gPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogdW5kZWZpbmVkIHwgbnVsbCB8IFQpOiBpbnB1dCBpcyBUIHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCB0eXBlIEVycm9yRmlyc3RDYWxsYmFjazxUPiA9ICguLi5hcmdzOiBbRXJyb3IsIG51bGwgfCB1bmRlZmluZWRdIHwgW251bGwgfCB1bmRlZmluZWQsIFRdIHwgW0Vycm9yXSkgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdChtZXNzYWdlPzogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVW5kZWZpbmVkIGlzIG5vdCBhbGxvd2VkXCIpO1xufVxuXG50eXBlIEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMgeyBsZW5ndGg6IFRMZW5ndGggfVxuICAgID8gVFJlc3RcbiAgICA6IEFycmF5T2ZMZW5ndGg8VEl0ZW0sIFRMZW5ndGgsIFtUSXRlbSwgLi4uVFJlc3RdPjtcblxuZXhwb3J0IHR5cGUgTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGggZXh0ZW5kcyBudW1iZXIsIFRSZXN0IGV4dGVuZHMgVEl0ZW1bXSA9IFtdPiA9IFRSZXN0IGV4dGVuZHMge1xuICAgIGxlbmd0aDogVExlbmd0aDtcbn1cbiAgICA/IFsuLi5UUmVzdCwgLi4uVEl0ZW1bXV1cbiAgICA6IE1pbkxlbmd0aEFycmF5PFRJdGVtLCBUTGVuZ3RoLCBbLi4uVFJlc3QsIFRJdGVtXT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPj0gbWluTGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoT3JVbmRlZmluZWQ8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IFRbXSxcbiAgICBtaW5MZW5ndGg6IFROdW1cbik6IHVuZGVmaW5lZCB8IE1pbkxlbmd0aEFycmF5PFQsIFROdW0+IHtcbiAgICBpZiAoaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIG1pbkxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPT09IGxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5SXNOb3RFbXB0eTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlIYXNBdExlYXN0T25lSXRlbTxUPihpdGVtczogcmVhZG9ubHkgVFtdKTogaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIHJldHVybiBpdGVtcy5sZW5ndGggPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBhc3NlcnRzIGl0ZW1zIGlzIE1pbkxlbmd0aEFycmF5PFQsIDE+IHtcbiAgICBpZiAoIWFycmF5SXNOb3RFbXB0eShpdGVtcykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGJlIG5vdCBlbXB0eWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5SGFzTGVuZ3RoPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghYXJyYXlIYXNMZW5ndGgoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBzaG91bGQgaGFzIGxlbmd0aCAke2xlbmd0aH1gKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOZXZlcihuZXZlckFyZ3VtZW50OiBuZXZlcik6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFuZEdldFN0cmluZyhuZXZlckFyZ3VtZW50OiBuZXZlcik6IHN0cmluZyB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
965
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoL2ZldGNoLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9IZWxwZXJzL0xvYWRJbnRvRG9jdW1lbnQudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmwudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvQ2xpZW50U2V0dGluZ3MudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vd3JhcE5hdGl2ZVN1cGVyLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZUZ1bmN0aW9uLmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9FcnJvcnMudHMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2UvRW5naW5lL3NyYy9Gb3Jtcy9DbGllbnQvTGVnYWN5UHVibGljRm9ybS9DcmVhdGVMZWdhY3lQdWJsaWNGb3JtLnRzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0VuZ2luZS9zcmMvRm9ybXMvQ2xpZW50L0NsaWVudC50cyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCJ3ZWJwYWNrOi8vQGtvbnR1ci5jYW5keS93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Aa29udHVyLmNhbmR5L3dvcmtzcGFjZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL0Brb250dXIuY2FuZHkvd29ya3NwYWNlL0NvbW1vbi9UeXBpbmdVdGlscy50cyJdLCJuYW1lcyI6WyJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyIiwibGVuIiwibGVuZ3RoIiwiaSIsImFycjIiLCJBcnJheSIsImciLCJnbG9iYWxUaGlzIiwidGhpcyIsIkZ1bmN0aW9uIiwiZSIsIndpbmRvdyIsImdsb2JhbCIsInNlbGYiLCJzdXBwb3J0IiwiU3ltYm9sIiwiQmxvYiIsIkRhdGFWaWV3IiwicHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsInZpZXdDbGFzc2VzIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImluZGV4T2YiLCJ0b1N0cmluZyIsImNhbGwiLCJub3JtYWxpemVOYW1lIiwibmFtZSIsIlN0cmluZyIsInRlc3QiLCJUeXBlRXJyb3IiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVZhbHVlIiwiaXRlcmF0b3JGb3IiLCJpdGVtcyIsIml0ZXJhdG9yIiwibmV4dCIsInNoaWZ0IiwiZG9uZSIsInVuZGVmaW5lZCIsIkhlYWRlcnMiLCJoZWFkZXJzIiwibWFwIiwiZm9yRWFjaCIsImFwcGVuZCIsImlzQXJyYXkiLCJoZWFkZXIiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwib2xkVmFsdWUiLCJnZXQiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsInNldCIsImNhbGxiYWNrIiwidGhpc0FyZyIsImtleXMiLCJwdXNoIiwidmFsdWVzIiwiZW50cmllcyIsImNvbnN1bWVkIiwiYm9keSIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJyZXN1bHQiLCJvbmVycm9yIiwiZXJyb3IiLCJyZWFkQmxvYkFzQXJyYXlCdWZmZXIiLCJibG9iIiwiRmlsZVJlYWRlciIsInByb21pc2UiLCJyZWFkQXNBcnJheUJ1ZmZlciIsInJlYWRBc1RleHQiLCJidWYiLCJ2aWV3IiwiVWludDhBcnJheSIsImNoYXJzIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsImJ1ZmZlckNsb25lIiwic2xpY2UiLCJieXRlTGVuZ3RoIiwiYnVmZmVyIiwiQm9keSIsIl9pbml0Qm9keSIsIl9ib2R5SW5pdCIsIl9ib2R5VGV4dCIsIl9ib2R5QmxvYiIsIkZvcm1EYXRhIiwiX2JvZHlGb3JtRGF0YSIsIlVSTFNlYXJjaFBhcmFtcyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJ0eXBlIiwicmVqZWN0ZWQiLCJFcnJvciIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFycmF5QnVmZmVyQXNUZXh0IiwiZm9ybURhdGEiLCJkZWNvZGUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwibWV0aG9kcyIsIm1ldGhvZCIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIlJlcXVlc3QiLCJpbnB1dCIsIm9wdGlvbnMiLCJ1cmwiLCJjcmVkZW50aWFscyIsIm1vZGUiLCJzaWduYWwiLCJyZWZlcnJlciIsImNhY2hlIiwicmVQYXJhbVNlYXJjaCIsInJlcGxhY2UiLCJEYXRlIiwiZ2V0VGltZSIsImNsb25lIiwiZm9ybSIsInRyaW0iLCJzcGxpdCIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsIlJlc3BvbnNlIiwiYm9keUluaXQiLCJzdGF0dXMiLCJvayIsInN0YXR1c1RleHQiLCJyZXNwb25zZSIsInJlZGlyZWN0U3RhdHVzZXMiLCJyZWRpcmVjdCIsIlJhbmdlRXJyb3IiLCJsb2NhdGlvbiIsIkRPTUV4Y2VwdGlvbiIsImVyciIsIm1lc3NhZ2UiLCJzdGFjayIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiZmV0Y2giLCJpbml0IiwicmVxdWVzdCIsImFib3J0ZWQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsImFib3J0WGhyIiwiYWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlVGV4dCIsInNldFRpbWVvdXQiLCJvbnRpbWVvdXQiLCJvbmFib3J0IiwiaHJlZiIsIm9wZW4iLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwic2VuZCIsInBvbHlmaWxsIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX2NyZWF0ZUNsYXNzIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiTG9hZEludG9Eb2N1bWVudCIsInVyaSIsInNjcmlwdExvYWRlZCIsImhlYWQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZG9jdW1lbnRFbGVtZW50Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsImxvYWRIYW5kbGVyIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwic3JjIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJpZ25vcmVFcnJvciIsImxpbmsiLCJnZXRDbGllbnREcmFmdEluZm9VcmwiLCJkcmFmdElkIiwibnMiLCJwYXJzZUJvb2wiLCJCb29sZWFuIiwiY2xpZW50U2V0dGluZ3MiLCJhdXRob3JpemVkIiwiY2F1bGRyb25BcGlVcmwiLCJpc1Rlc3RTZXJ2ZXIiLCJyZW5kZXJDYWNoaW5nRm9ySUU4Iiwibm9ybWFsaXphdGlvbk9uU2VydmVyIiwibm9ybWF0aXZlVXJsIiwicmVzb3VyY2VzVmVyc2lvbiIsImtvbnR1ckRvbWFpbnMiLCJfc2V0UHJvdG90eXBlT2YiLCJvIiwicCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJSZWZlcmVuY2VFcnJvciIsIl9nZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJ2YWx1ZU9mIiwiX2NvbnN0cnVjdCIsIlBhcmVudCIsImFyZ3MiLCJDbGFzcyIsImEiLCJhcHBseSIsImJpbmQiLCJhcmd1bWVudHMiLCJfd3JhcE5hdGl2ZVN1cGVyIiwiX2NhY2hlIiwiTWFwIiwiV3JhcHBlciIsImZuIiwiTm90SW1wbGVtZW50ZWRFcnJvciIsIm1vZGVsQ2hhbmdlRXZlbnRQYXRoIiwicGF0aCIsImZpZWxkTmFtZSIsIm1hcENodW5rVmFsdWVzIiwiY2h1bmsiLCJmaWx0ZXIiLCJyZWR1Y2VDaHVua1ZhbHVlcyIsImNodW5rcyIsInJlZHVjZSIsIkxlZ2FjeVB1YmxpY0Zvcm0iLCJ1cGRhdGVQcm9jIiwiZXJyb3JMb2ciLCJnSWQiLCJwaWNrbGlzdHNQcm92aWRlciIsImdldERpZ2VzdEFwaVBpY2tsaXN0IiwicXVlcnkiLCJldmVudE5hbWUiLCJsaXN0ZW5lciIsImV2ZW50TWFuYWdlciIsIm9uIiwib2ZmIiwiY29uc29sZSIsImNoYW5nZVNldCIsInN0b3BBdXRvc2VuZCIsInVubW91bnQiLCJtb2RlbCIsImdldENodW5rIiwic2V0dGluZ3MiLCJmb3JtUm9vdCIsInZhbGlkYXRvciIsInZhbGlkYXRlQWxsIiwiZXJyb3JDb3VudCIsInBhdGhPck1vZGVsQ2h1bmsiLCJpbm5lckNodW5rIiwiZmlsbCIsInBhdGhPckFycmF5IiwiYXJyYXkiLCJjb25jYXQiLCJlbmFibGVkIiwicGF0aFByZWZpeGVzIiwiZGVmYXVsdENhbGxiYWNrIiwicmVsYXRpdmVVcmwiLCJiYXNlVXJsIiwiQ0YiLCJrZWZvcm1zVXJsIiwiYnVpbGRVcmwiLCJwYXJhbXMiLCJxdWVyeVBhcnRzIiwicGFyYW1OYW1lIiwicGFyYW1WYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImlzQWxsb3dlZCIsImRvbWFpbnMiLCJSZWdFeHAiLCJob3N0IiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwic2VhcmNoIiwicGFyYW0iLCJmaW5kIiwidGFza3MiLCJjb21wbGV0ZWQiLCJ0YXNrIiwibG9hZEZvcm0iLCJnZnYiLCJlbmdpbmVWZXJzaW9uIiwiZW50cnlQb2ludCIsImlzTmVlZEVuZ2luZSIsIm1pbiIsInYiLCJyZXNvdXJjZVpvbmUiLCJzdHlsZVNoZWV0IiwiY2IiLCJydW5QYXJhbGxlbCIsInJlbmRlckZvcm0iLCJwYWdlQ29udGVudCIsImV4dGVuZGVkU2V0dGluZ3MiLCJwdWJsaWNGb3JtIiwiY3JlYXRlTGVnYWN5UHVibGljRm9ybSIsImdldEVuZ2luZUVudHJ5UG9pbnQiLCJjbGllbnREcmFmdFVybCIsInJlcXVlc3RPcHRpb25zIiwiYXV0aGVudGljYXRpb24iLCJhdXRoU2lkIiwiZmV0Y2hJbXBsIiwieCIsImNsaWVudERyYWZ0SW5mbyIsImFib25JZCIsIm9yZ0lkIiwidXNlcklkIiwiaXNJbmRpdmlkdWFsIiwiaXNGb3JlaWduIiwiZmVlZGJhY2tFbmFibGVkIiwiY2FuZHlUb3VyQXZhaWxhYmxlIiwiZXZlbnRFbWl0dGVyIiwiZm9ybUluZm8iLCJwcmludEluZm8iLCJyZWdpb25zIiwiaGFzVGVtcGxhdGVzIiwiaXNEaXNhYmxlZENsZWFuRm9ybSIsImlzRGlzYWJsZWRDbG9zZUJ1dHRvbiIsImlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b24iLCJ0aGVtZSIsImxvYWRFcnJvciIsInJlbmRlciIsInRlbXBsYXRlc0FwaSIsIkNhbmR5Q2xpZW50RXhwb3J0cyIsInN0YXJ0IiwicGFydGlhbFJlbmRlcmluZ0ZvcklFOCIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwibWluTGVuIiwibiIsImZyb20iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsTUFBSUEsQ0FBQUEsR0FBc0IsRUFBMUI7O0FDRGUsV0FBU0MsQ0FBVCxDQUF5QkMsQ0FBekIsRUFBOEJDLENBQTlCLEVBQW1DQyxDQUFuQyxFQUFtQ0E7QUFZaEQsV0FYSUQsQ0FBQUEsSUFBT0QsQ0FBUEMsR0FDRkUsTUFBQUEsQ0FBT0MsY0FBUEQsQ0FBc0JILENBQXRCRyxFQUEyQkYsQ0FBM0JFLEVBQWdD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QUFBLFlBQUFBLEVBQWM5TyxDQUFBQSxDQUFROE8sWUFKcEI7QUFLRi9CLGdCQUFBQSxVQUFBQSxFQUFZOEI7QUFMVixlQUFBLENBQVY5QixFQU9JN1EsQ0FQSjZRLENBQUFBO0FBT0k3USxhQWJKLE1BQ0lBLENBQUFBLENBQVMsSUFBSTZDLEtBQUosQ0FBQSw0Q0FBQSxNQUFBLENBQXNEc04sQ0FBdEQsQ0FBQSxDQUFUblEsQ0FBQUE7QUFBK0RtUSxXQVYzRUQsQ0FBQUE7QUFVMkVDLFNBaERuRm9CLEVBQUFBLEtBQUFBLENBaUVXdlIsQ0FqRVh1UjtBQWlFV3ZSO0FBQUFBLEtBR29DO0FBRS9DcVEsSUFBQUEsVUFBQUEsRUFBWSxFQUZtQztBQUcvQzBDLElBQUFBLHNCQUFBQSxHQUFrQyw0QkFBQSxDQXhTMUI1VyxDQXdTUjRXLENBSCtDO0FBSS9DL0QsSUFBQUEsVUFBQUEsRUFBWTtBQUptQyxHQUFuRDtBQU9BMVIsRUFBQUEsQ0FBQUEsQ0FBQUEsQ0FBQUEsQ0FBT3lSLEVBQVB6UixHQUFZdVYsRUFBWnZWIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhlIHJlcXVpcmUgc2NvcGVcbnZhciBfX3dlYnBhY2tfcmVxdWlyZV9fID0ge307XG5cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7XG4gIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykge1xuICAgIGFycjJbaV0gPSBhcnJbaV07XG4gIH1cblxuICByZXR1cm4gYXJyMjtcbn0iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsInZhciBnbG9iYWwgPVxuICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbFRoaXMpIHx8XG4gICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZikgfHxcbiAgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbClcblxudmFyIHN1cHBvcnQgPSB7XG4gIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gZ2xvYmFsLFxuICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICBibG9iOlxuICAgICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAnQmxvYicgaW4gZ2xvYmFsICYmXG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEJsb2IoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KSgpLFxuICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBnbG9iYWwsXG4gIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICByZXR1cm4gb2JqICYmIERhdGFWaWV3LnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKG9iailcbn1cblxuaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gIF1cblxuICB2YXIgaXNBcnJheUJ1ZmZlclZpZXcgPVxuICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiB2aWV3Q2xhc3Nlcy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopKSA+IC0xXG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgfVxuICBpZiAoL1teYS16MC05XFwtIyQlJicqKy5eX2B8fiFdL2kudGVzdChuYW1lKSB8fCBuYW1lID09PSAnJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiJylcbiAgfVxuICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG5mdW5jdGlvbiBpdGVyYXRvckZvcihpdGVtcykge1xuICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSBpdGVtcy5zaGlmdCgpXG4gICAgICByZXR1cm4ge2RvbmU6IHZhbHVlID09PSB1bmRlZmluZWQsIHZhbHVlOiB2YWx1ZX1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVyYXRvclxufVxuXG5leHBvcnQgZnVuY3Rpb24gSGVhZGVycyhoZWFkZXJzKSB7XG4gIHRoaXMubWFwID0ge31cblxuICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH0sIHRoaXMpXG4gIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgdGhpcy5hcHBlbmQobmFtZSwgaGVhZGVyc1tuYW1lXSlcbiAgICB9LCB0aGlzKVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gIHZhciBvbGRWYWx1ZSA9IHRoaXMubWFwW25hbWVdXG4gIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSArICcsICcgKyB2YWx1ZSA6IHZhbHVlXG59XG5cbkhlYWRlcnMucHJvdG90eXBlWydkZWxldGUnXSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgbmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSlcbiAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihjYWxsYmFjaywgdGhpc0FyZykge1xuICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgaWYgKHRoaXMubWFwLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMubWFwW25hbWVdLCBuYW1lLCB0aGlzKVxuICAgIH1cbiAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2gobmFtZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGl0ZW1zID0gW11cbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaXRlbXMucHVzaCh2YWx1ZSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBpdGVtcyA9IFtdXG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgfSlcbiAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5pZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gIGlmIChib2R5LmJvZHlVc2VkKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICB9XG4gIGJvZHkuYm9keVVzZWQgPSB0cnVlXG59XG5cbmZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICB9XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICByZXR1cm4gcHJvbWlzZVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzVGV4dChibG9iKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYilcbiAgcmV0dXJuIHByb21pc2Vcbn1cblxuZnVuY3Rpb24gcmVhZEFycmF5QnVmZmVyQXNUZXh0KGJ1Zikge1xuICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgIGNoYXJzW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSh2aWV3W2ldKVxuICB9XG4gIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgaWYgKGJ1Zi5zbGljZSkge1xuICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgfSBlbHNlIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zi5ieXRlTGVuZ3RoKVxuICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gIH1cbn1cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlXG5cbiAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgLypcbiAgICAgIGZldGNoLW1vY2sgd3JhcHMgdGhlIFJlc3BvbnNlIG9iamVjdCBpbiBhbiBFUzYgUHJveHkgdG9cbiAgICAgIHByb3ZpZGUgdXNlZnVsIHRlc3QgaGFybmVzcyBmZWF0dXJlcyBzdWNoIGFzIGZsdXNoLiBIb3dldmVyLCBvblxuICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgIHRoZSBwcm94eS1wb2xseWZpbGwgaXMgdW5hYmxlIHRvIHByb3h5IGFuIGF0dHJpYnV0ZSB1bmxlc3MgaXQgZXhpc3RzXG4gICAgICBvbiB0aGUgb2JqZWN0IGJlZm9yZSB0aGUgUHJveHkgaXMgY3JlYXRlZC4gVGhpcyBjaGFuZ2UgZW5zdXJlc1xuICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICBzZW1hbnRpYyBvZiBzZXR0aW5nIFJlcXVlc3QuYm9keVVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZVxuICAgICAgX2luaXRCb2R5IGlzIGNhbGxlZC5cbiAgICAqL1xuICAgIHRoaXMuYm9keVVzZWQgPSB0aGlzLmJvZHlVc2VkXG4gICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9ICcnXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5mb3JtRGF0YSAmJiBGb3JtRGF0YS5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgdGhpcy5fYm9keUluaXQgPSBuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSlcbiAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04JylcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICB0aGlzLmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCB0aGlzLl9ib2R5QmxvYi50eXBlKVxuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgIHZhciBpc0NvbnN1bWVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKGlzQ29uc3VtZWQpIHtcbiAgICAgICAgICByZXR1cm4gaXNDb25zdW1lZFxuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnVmZmVyLnNsaWNlKFxuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ5dGVPZmZzZXQgKyB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRoaXMudGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgIHJldHVybiByZWFkQmxvYkFzVGV4dCh0aGlzLl9ib2R5QmxvYilcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2JvZHlGb3JtRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIHRleHQnKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2JvZHlUZXh0KVxuICAgIH1cbiAgfVxuXG4gIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgIH1cbiAgfVxuXG4gIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKEpTT04ucGFyc2UpXG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIVFRQIG1ldGhvZHMgd2hvc2UgY2FwaXRhbGl6YXRpb24gc2hvdWxkIGJlIG5vcm1hbGl6ZWRcbnZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgdmFyIHVwY2FzZWQgPSBtZXRob2QudG9VcHBlckNhc2UoKVxuICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0LCBvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZXF1ZXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICB9XG4gICAgdGhpcy51cmwgPSBpbnB1dC51cmxcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgdGhpcy5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICB0aGlzLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgdGhpcy5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLnVybCA9IFN0cmluZyhpbnB1dClcbiAgfVxuXG4gIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJ1xuICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIH1cbiAgdGhpcy5tZXRob2QgPSBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5tZXRob2QgfHwgJ0dFVCcpXG4gIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICB0aGlzLnNpZ25hbCA9IG9wdGlvbnMuc2lnbmFsIHx8IHRoaXMuc2lnbmFsXG4gIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgaWYgKCh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykgJiYgYm9keSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgfVxuICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gIGlmICh0aGlzLm1ldGhvZCA9PT0gJ0dFVCcgfHwgdGhpcy5tZXRob2QgPT09ICdIRUFEJykge1xuICAgIGlmIChvcHRpb25zLmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IG9wdGlvbnMuY2FjaGUgPT09ICduby1jYWNoZScpIHtcbiAgICAgIC8vIFNlYXJjaCBmb3IgYSAnXycgcGFyYW1ldGVyIGluIHRoZSBxdWVyeSBzdHJpbmdcbiAgICAgIHZhciByZVBhcmFtU2VhcmNoID0gLyhbPyZdKV89W14mXSovXG4gICAgICBpZiAocmVQYXJhbVNlYXJjaC50ZXN0KHRoaXMudXJsKSkge1xuICAgICAgICAvLyBJZiBpdCBhbHJlYWR5IGV4aXN0cyB0aGVuIHNldCB0aGUgdmFsdWUgd2l0aCB0aGUgY3VycmVudCB0aW1lXG4gICAgICAgIHRoaXMudXJsID0gdGhpcy51cmwucmVwbGFjZShyZVBhcmFtU2VhcmNoLCAnJDFfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBhZGQgYSBuZXcgJ18nIHBhcmFtZXRlciB0byB0aGUgZW5kIHdpdGggdGhlIGN1cnJlbnQgdGltZVxuICAgICAgICB2YXIgcmVRdWVyeVN0cmluZyA9IC9cXD8vXG4gICAgICAgIHRoaXMudXJsICs9IChyZVF1ZXJ5U3RyaW5nLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSArICdfPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5SZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywge2JvZHk6IHRoaXMuX2JvZHlJbml0fSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICBib2R5XG4gICAgLnRyaW0oKVxuICAgIC5zcGxpdCgnJicpXG4gICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgIGlmIChieXRlcykge1xuICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgfVxuICAgIH0pXG4gIHJldHVybiBmb3JtXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yXG4gIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gIC8vIEF2b2lkaW5nIHNwbGl0IHZpYSByZWdleCB0byB3b3JrIGFyb3VuZCBhIGNvbW1vbiBJRTExIGJ1ZyB3aXRoIHRoZSBjb3JlLWpzIDMuNi4wIHJlZ2V4IHBvbHlmaWxsXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZmV0Y2gvaXNzdWVzLzc0OFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gIHByZVByb2Nlc3NlZEhlYWRlcnNcbiAgICAuc3BsaXQoJ1xccicpXG4gICAgLm1hcChmdW5jdGlvbihoZWFkZXIpIHtcbiAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZignXFxuJykgPT09IDAgPyBoZWFkZXIuc3Vic3RyKDEsIGhlYWRlci5sZW5ndGgpIDogaGVhZGVyXG4gICAgfSlcbiAgICAuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6JylcbiAgICAgIHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKVxuICAgICAgaWYgKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5qb2luKCc6JykudHJpbSgpXG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICB9XG4gICAgfSlcbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3BvbnNlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BsZWFzZSB1c2UgdGhlIFwibmV3XCIgb3BlcmF0b3IsIHRoaXMgRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uJylcbiAgfVxuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0ge31cbiAgfVxuXG4gIHRoaXMudHlwZSA9ICdkZWZhdWx0J1xuICB0aGlzLnN0YXR1cyA9IG9wdGlvbnMuc3RhdHVzID09PSB1bmRlZmluZWQgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gIHRoaXMuc3RhdHVzVGV4dCA9IG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gdW5kZWZpbmVkID8gJycgOiAnJyArIG9wdGlvbnMuc3RhdHVzVGV4dFxuICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgdGhpcy5faW5pdEJvZHkoYm9keUluaXQpXG59XG5cbkJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cblJlc3BvbnNlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICB1cmw6IHRoaXMudXJsXG4gIH0pXG59XG5cblJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXNwb25zZSA9IG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiAwLCBzdGF0dXNUZXh0OiAnJ30pXG4gIHJlc3BvbnNlLnR5cGUgPSAnZXJyb3InXG4gIHJldHVybiByZXNwb25zZVxufVxuXG52YXIgcmVkaXJlY3RTdGF0dXNlcyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG59XG5cbmV4cG9ydCB2YXIgRE9NRXhjZXB0aW9uID0gZ2xvYmFsLkRPTUV4Y2VwdGlvblxudHJ5IHtcbiAgbmV3IERPTUV4Y2VwdGlvbigpXG59IGNhdGNoIChlcnIpIHtcbiAgRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24obWVzc2FnZSwgbmFtZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICB0aGlzLm5hbWUgPSBuYW1lXG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSlcbiAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgfVxuICBET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpXG4gIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZldGNoKGlucHV0LCBpbml0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfVxuXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICBmdW5jdGlvbiBhYm9ydFhocigpIHtcbiAgICAgIHhoci5hYm9ydCgpXG4gICAgfVxuXG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgIHN0YXR1czogeGhyLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICB9XG4gICAgICBvcHRpb25zLnVybCA9ICdyZXNwb25zZVVSTCcgaW4geGhyID8geGhyLnJlc3BvbnNlVVJMIDogb3B0aW9ucy5oZWFkZXJzLmdldCgnWC1SZXF1ZXN0LVVSTCcpXG4gICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVzb2x2ZShuZXcgUmVzcG9uc2UoYm9keSwgb3B0aW9ucykpXG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICB4aHIub25hYm9ydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfSwgMClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaXhVcmwodXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXJsID09PSAnJyAmJiBnbG9iYWwubG9jYXRpb24uaHJlZiA/IGdsb2JhbC5sb2NhdGlvbi5ocmVmIDogdXJsXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB1cmxcbiAgICAgIH1cbiAgICB9XG5cbiAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgZml4VXJsKHJlcXVlc3QudXJsKSwgdHJ1ZSlcblxuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnb21pdCcpIHtcbiAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIpIHtcbiAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgc3VwcG9ydC5hcnJheUJ1ZmZlciAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSAmJlxuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICkge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbml0ICYmIHR5cGVvZiBpbml0LmhlYWRlcnMgPT09ICdvYmplY3QnICYmICEoaW5pdC5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykpIHtcbiAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIG5vcm1hbGl6ZVZhbHVlKGluaXQuaGVhZGVyc1tuYW1lXSkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3Quc2lnbmFsKSB7XG4gICAgICByZXF1ZXN0LnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0WGhyKVxuXG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgICAgcmVxdWVzdC5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gIH0pXG59XG5cbmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuXG5pZiAoIWdsb2JhbC5mZXRjaCkge1xuICBnbG9iYWwuZmV0Y2ggPSBmZXRjaFxuICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgZ2xvYmFsLlJlcXVlc3QgPSBSZXF1ZXN0XG4gIGdsb2JhbC5SZXNwb25zZSA9IFJlc3BvbnNlXG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsIi8vIHRzbGludDpkaXNhYmxlIG5vLXVuc2FmZS1hbnlcbmV4cG9ydCBjbGFzcyBMb2FkSW50b0RvY3VtZW50IHtcbiAgICBwdWJsaWMgc3RhdGljIHNjcmlwdCh1cmk6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGxldCBzY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHNjcmlwdDogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblxuICAgICAgICBmdW5jdGlvbiBsb2FkSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChzY3JpcHRMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghc2NyaXB0LnJlYWR5U3RhdGUgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmcgdGhlIHVzZXIgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgdG8gbG9hZC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiBJRSBldmVuIHVwb24gZXJyb3IuIEluIGFueVxuICAgICAgICAvLyBjYXNlIGl0IGlzIHRoZSBjbGllbnQncyByZXNwb25zaWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgc2NyaXB0IHJhblxuICAgICAgICAvLyBzdWNjZXNzZnVsbHkuXG4gICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkSGFuZGxlcjtcbiAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGxvYWRIYW5kbGVyO1xuXG4gICAgICAgIC8vIEFkZCBhbiBlcnJvciBjYWxsYmFjay5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogTm90IHN1cHBvcnRlZCBpbiBJRS5cbiAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzY3JpcHQuXCIpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgdGhlIHNjcmlwdCBlbGVtZW50IHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgLy8gTk9URSh1c2VyKTogU2FmYXJpIG5ldmVyIGxvYWRzIHRoZSBzY3JpcHQgaWYgd2UgZG9uJ3Qgc2V0XG4gICAgICAgIC8vIHRoZSBzcmMgYXR0cmlidXRlIGJlZm9yZSBhcHBlbmRpbmcuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiLCBcInVzZS1jcmVkZW50aWFsc1wiKTtcbiAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc3R5bGVTaGVldCh1cmk6IHN0cmluZywgaWdub3JlRXJyb3I6IGJvb2xlYW4sIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXNvbHZlID0gKCkgPT4gY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlnbm9yZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKFwiRXJyb3Igd2hpbGUgbG9hZGluZyBzdHlsZXNoZWV0LlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXSA/PyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcInN0eWxlc2hlZXRcIik7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuICAgICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCByZWplY3QpO1xuICAgICAgICBoZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJpKTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50RHJhZnRJbmZvVXJsKGRyYWZ0SWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgLy8gTk9URSDQrdGC0LAg0YTRg9C90LrRhtC40Y8g0L7QsdGK0Y/QstC70LXQvdCwINC+0YLQtNC10LvRjNC90L4sINC40LHQviDQvtC90LAg0LLRhdC+0LTQuNGCINCyINGB0L7RgdGC0LDQsiBjbGllbnQuanMg0LhcbiAgICAvLyDQvdC1INC00L7Qu9C20L3QviDQv9GA0L7QuNGB0YXQvtC00LjRgtGMINGD0YLQtdC20LXQu9C10L3QuNGPIGNsaWVudC5qcy3QsFxuICAgIHJldHVybiBgdjEvbnMvJHtkcmFmdElkLm5zfS9kcmFmdHMvJHtkcmFmdElkLmRyYWZ0SWR9L2NsaWVudC1kcmFmdC1pbmZvYDtcbn1cbiIsImZ1bmN0aW9uIHBhcnNlQm9vbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBCb29sZWFuKHZhbHVlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsaWVudFNldHRpbmdzID0ge1xuICAgIGF1dGhvcml6ZWQ6IHBhcnNlQm9vbChcInthdXRob3JpemVkfVwiKSxcbiAgICBjYXVsZHJvbkFwaVVybDogXCJ7Y2F1bGRyb25BcGlVcmx9XCIsXG4gICAgaXNUZXN0U2VydmVyOiBwYXJzZUJvb2woXCJ7aXNUZXN0U2VydmVyfVwiKSxcbiAgICByZW5kZXJDYWNoaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cmVuZGVyQ2FjaGluZ0ZvcklFOH1cIiksXG4gICAgbm9ybWFsaXphdGlvbk9uU2VydmVyOiBwYXJzZUJvb2woXCJ7bm9ybWFsaXphdGlvbk9uU2VydmVyfVwiKSxcbiAgICBub3JtYXRpdmVVcmw6IFwie25vcm1hdGl2ZVVybH1cIixcbiAgICByZXNvdXJjZXNWZXJzaW9uOiBcIntyZXNvdXJjZXNWZXJzaW9ufVwiLFxuICAgIGtvbnR1ckRvbWFpbnM6IFwie2tvbnR1ckRvbWFpbnN9XCIsXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gIH0sIF90eXBlb2Yob2JqKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cblxuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCBmcm9tIFwiLi9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICBpZiAoaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gIH0gZWxzZSB7XG4gICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIGlmIChDbGFzcykgc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59IiwiaW1wb3J0IGdldFByb3RvdHlwZU9mIGZyb20gXCIuL2dldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZUZ1bmN0aW9uIGZyb20gXCIuL2lzTmF0aXZlRnVuY3Rpb24uanNcIjtcbmltcG9ydCBjb25zdHJ1Y3QgZnJvbSBcIi4vY29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG5cbiAgX3dyYXBOYXRpdmVTdXBlciA9IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IG51bGwgfHwgIWlzTmF0aXZlRnVuY3Rpb24oQ2xhc3MpKSByZXR1cm4gQ2xhc3M7XG5cbiAgICBpZiAodHlwZW9mIENsYXNzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIF9jYWNoZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7XG5cbiAgICAgIF9jYWNoZS5zZXQoQ2xhc3MsIFdyYXBwZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gY29uc3RydWN0KENsYXNzLCBhcmd1bWVudHMsIGdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpO1xuICB9O1xuXG4gIHJldHVybiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xufSIsImV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RJbXBsZW1lbnRlZEVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90U3VwcG9ydGVkRXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICBzdXBlcihtZXNzYWdlID8/IFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFByb2dyYW1TdGF0ZUVycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXCJJbnZhbGlkIHByb2dyYW0gc3RhdGVcIiArIChtZXNzYWdlICE9IHVuZGVmaW5lZCA/IFwiOiBcIiArIG1lc3NhZ2UgOiBcIlwiKSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBBcHBsaWNhdGlvbkVycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYXJndW1lbnROYW1lOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBtZXNzYWdlICE9IHVuZGVmaW5lZCA/IGAke21lc3NhZ2V9IChhcmd1bWVudDogJHthcmd1bWVudE5hbWV9KWAgOiBgSW52YWxpZCBhcmd1bWVudCB2YWx1ZTogJHthcmd1bWVudE5hbWV9YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFR5cGluZ0Vycm9yIGV4dGVuZHMgQXBwbGljYXRpb25FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihcIkludmFsaWQgdHlwaW5nXCIpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Vycm9yc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGVwIH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRyb2xzL0Zvcm1QYXJ0cy9Ub3VyL1RvdXJUeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgTW9kZWxWYWx1ZSB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRXh0ZXJuYWxIb29rRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvRXZlbnRNYW5hZ2VtZW50L0V4dGVybmFsRXZlbnRzL0V4dGVybmFsSG9va0Z1bmN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFJlYWRvbmx5TW9kZWxDaHVuayB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9Nb2RlbFN0b3JpbmcvTW9kZWxDaHVua1wiO1xuaW1wb3J0IHR5cGUgeyBQaWNrbGlzdFF1ZXJ5UmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB0eXBlIHsgSVB1YmxpY0Zvcm0gfSBmcm9tIFwiLi4vLi4vUHVibGljRm9ybS9JUHVibGljRm9ybVwiO1xuaW1wb3J0IHsgTW9kZWxFdmVudHNMaXN0ZW5lciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvQ29yZS9FdmVudE1hbmFnZW1lbnQvTW9kZWxFdmVudHMvTW9kZWxFdmVudFwiO1xuaW1wb3J0IHsgRGlnZXN0UXVlcnlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9UeXBlcy9EaWdlc3RRdWVyeUZpbHRlclwiO1xuaW1wb3J0IHsgRW1wbG95ZWUgfSBmcm9tIFwiLi4vLi4vLi4vRW1wbG95ZWVzSW1wb3J0L1N0YWZmU2VydmljZVdpZGdldC9DbGllbnQvVHlwZXNcIjtcbmltcG9ydCB7IElVcGRhdGVGb3JtTW9kZWxBY2Nlc3NvciB9IGZyb20gXCIuLi8uLi8uLi9FbmdpbmUvRm9ybS9JRm9ybU1vZGVsQWNjZXNzb3JcIjtcblxuaW1wb3J0IHsgSUxlZ2FjeUZvcm0gfSBmcm9tIFwiLi9JTGVnYWN5Rm9ybVwiO1xuXG5leHBvcnQgdHlwZSBNb2RlbEV2ZW50UGF0aCA9XG4gICAgfCBbXCJtb2RlbFwiLCBcImNoYW5nZVwiLCBzdHJpbmcsIHN0cmluZ11cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCIsIHN0cmluZywgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJyZW1vdmVcIiwgc3RyaW5nXVxuICAgIHwgW1wibW9kZWxcIiwgXCJjaGFuZ2VcIl1cbiAgICB8IFtcIm1vZGVsXCIsIFwicmVtb3ZlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gbW9kZWxDaGFuZ2VFdmVudFBhdGgocGF0aD86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogTW9kZWxFdmVudFBhdGgge1xuICAgIGlmIChmaWVsZE5hbWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXRoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGJlIGRlZmluZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcIm1vZGVsXCIsIFwiY2hhbmdlXCIsIHBhdGgsIGZpZWxkTmFtZV07XG4gICAgfVxuICAgIGlmIChwYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gW1wibW9kZWxcIiwgXCJjaGFuZ2VcIiwgcGF0aF07XG4gICAgfVxuICAgIHJldHVybiBbXCJtb2RlbFwiLCBcImNoYW5nZVwiXTtcbn1cblxuZnVuY3Rpb24gbWFwQ2h1bmtWYWx1ZXMoY2h1bms6IFJlYWRvbmx5TW9kZWxDaHVuayk6IEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjaHVuaylcbiAgICAgICAgLmZpbHRlcihwYXRoID0+IGNodW5rW3BhdGhdICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaHVua1twYXRoXSwgXCJ2YWx1ZVwiKSlcbiAgICAgICAgLm1hcChwYXRoID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNodW5rW3BhdGhdO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBbcGF0aF06IHJlc3VsdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVkdWNlQ2h1bmtWYWx1ZXMoY2h1bmtzOiBBcnJheTx7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0+KTogeyBbcGF0aDogc3RyaW5nXTogTW9kZWxWYWx1ZSB9IHtcbiAgICByZXR1cm4gY2h1bmtzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgY2h1bmspID0+ICh7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAuLi5jaHVuayxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuY2xhc3MgTGVnYWN5UHVibGljRm9ybSBpbXBsZW1lbnRzIElQdWJsaWNGb3JtIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm06IElMZWdhY3lGb3JtO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZvcm06IElMZWdhY3lGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgfVxuXG4gICAgcHVibGljIGJhdGNoVXBkYXRlKHVwZGF0ZVByb2M6ICh1cGRhdGVBY2Nlc3NvcjogSVVwZGF0ZUZvcm1Nb2RlbEFjY2Vzc29yKSA9PiB2b2lkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5DaGVjaygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEVycm9yTG9nKGVycm9yTG9nOiBQYXJ0aWFsPFNlcnZlckVycm9yTG9nPik6IHZvaWQge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgX19JTlRFUk5BTF9faW1wb3J0RnJvbUVtcGxveWVlU2VydmljZSgpOiBQcm9taXNlPEVtcGxveWVlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5R0lkKGdJZDogc3RyaW5nLCBmaWx0ZXI/OiBEaWdlc3RRdWVyeUZpbHRlcik6IFByb21pc2U8UGlja2xpc3RRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0ucGlja2xpc3RzUHJvdmlkZXIuZ2V0RGlnZXN0QXBpUGlja2xpc3QoZ0lkKS5xdWVyeShmaWx0ZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub24oW1wiZm9ybVwiLCBldmVudE5hbWVdLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV4dGVybmFsSG9va0Z1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKFtcImZvcm1cIiwgZXZlbnROYW1lXSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vbk1vZGVsQ2hhbmdlKCkgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9mZk1vZGVsQ2hhbmdlKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCBsaXN0ZW5lcjogdW5rbm93bik6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZm9ybS5vZmZNb2RlbENoYW5nZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZvcm0uY2hhbmdlU2V0LnN0b3BBdXRvc2VuZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnVubW91bnQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS51bm1vdW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNoYW5nZVNldC5zZW5kKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRvdXJTdGVwcygpOiBTdGVwW10ge1xuICAgICAgICAvLyBGb3Igb2xkIGtld2ViXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0ubW9kZWwuZ2V0Q2h1bmsodGhpcy5mb3JtLnNldHRpbmdzLmZvcm1Sb290KSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUg0K3RgtC+INCyINGB0YLQsNGA0YvRhSDQtNCy0LjQttC60LDRhSDRgtGD0YIg0YLQsNC60L7QuSDQstGL0LfQvtCyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkYXRvci52YWxpZGF0ZUFsbChrZXlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBlcnJvckNvdW50ID0gdGhpcy5mb3JtLm1vZGVsLmdldCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIik7XG4gICAgICAgIHJldHVybiBlcnJvckNvdW50ICE9IHVuZGVmaW5lZCAmJiBlcnJvckNvdW50ID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcnNDb3VudENoYW5nZWQobGlzdGVuZXI6IE1vZGVsRXZlbnRzTGlzdGVuZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtLmV2ZW50TWFuYWdlci5vbihtb2RlbENoYW5nZUV2ZW50UGF0aCh0aGlzLmZvcm0uc2V0dGluZ3MuZm9ybVJvb3QsIFwiZXJyb3JzQ291bnRcIiksIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb2ZmRXJyb3JzQ291bnRDaGFuZ2VkKGxpc3RlbmVyOiBNb2RlbEV2ZW50c0xpc3RlbmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybS5ldmVudE1hbmFnZXIub2ZmKG1vZGVsQ2hhbmdlRXZlbnRQYXRoKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCwgXCJlcnJvcnNDb3VudFwiKSwgbGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQocGF0aE9yTW9kZWxDaHVuazogeyBbcGF0aDogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KHBhdGhPck1vZGVsQ2h1bms6IHN0cmluZywgdmFsdWU6IE1vZGVsVmFsdWUpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBwdWJsaWMgc2V0KFxuICAgICAgICBwYXRoT3JNb2RlbENodW5rOiBzdHJpbmcgfCB7IFtwYXRoOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSxcbiAgICAgICAgdmFsdWU/OiBNb2RlbFZhbHVlXG4gICAgKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXRoT3JNb2RlbENodW5rICE9PSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcGF0aE9yTW9kZWxDaHVuayAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBhdGhPck1vZGVsQ2h1bmsgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhdGhPck1vZGVsQ2h1bmspXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJDaHVuayA9IE9iamVjdC5rZXlzKHBhdGhPck1vZGVsQ2h1bmspLnJlZHVjZTxSZWFkb25seU1vZGVsQ2h1bms+KFxuICAgICAgICAgICAgICAgIChyZXN1bHQsIHBhdGgpID0+ICh7IFtwYXRoXTogeyB2YWx1ZTogcGF0aE9yTW9kZWxDaHVua1twYXRoXSB9LCAuLi5yZXN1bHQgfSksXG4gICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5tb2RlbC5maWxsKGlubmVyQ2h1bmspO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JNb2RlbENodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0ubW9kZWwuc2V0KHBhdGhPck1vZGVsQ2h1bmssIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZm9ybS5zZXQoKSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHN0cmluZyBwYXRoIG9yIG9iamVjdCB3aXRoIHBhdGgtdmFsdWUgcGFpcnNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChwYXRoT3JBcnJheTogc3RyaW5nIHwgc3RyaW5nW10pOiB7IFtwYXRoOiBzdHJpbmddOiBNb2RlbFZhbHVlIH0ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRoT3JBcnJheSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZWR1Y2VDaHVua1ZhbHVlcyhcbiAgICAgICAgICAgICAgICBwYXRoT3JBcnJheVxuICAgICAgICAgICAgICAgICAgICAubWFwKHBhdGggPT4gbWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHBhdGgpKSlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgICAgICAgICAgICAucmVkdWNlPEFycmF5PHsgW3BhdGg6IHN0cmluZ106IE1vZGVsVmFsdWUgfT4+KChyZXN1bHQsIGFycmF5KSA9PiByZXN1bHQuY29uY2F0KGFycmF5KSwgW10pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXRoT3JBcnJheSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZHVjZUNodW5rVmFsdWVzKG1hcENodW5rVmFsdWVzKHRoaXMuZm9ybS5tb2RlbC5nZXRDaHVuayhwYXRoT3JBcnJheSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXRoT3JBcnJheSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVkdWNlQ2h1bmtWYWx1ZXMobWFwQ2h1bmtWYWx1ZXModGhpcy5mb3JtLm1vZGVsLmdldENodW5rKHRoaXMuZm9ybS5zZXR0aW5ncy5mb3JtUm9vdCkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmb3JtLmdldCgpIHBhcmFtZXRlciBzaG91bGQgYmUgc3RyaW5nIHBhdGggb3IgYXJyYXkgb2YgcGF0aHNcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKHBhdGg6IHN0cmluZyk6IE1vZGVsVmFsdWUge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5tb2RlbC5nZXQocGF0aCwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkSW5zdGFuY2UocGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2hpbGRyZW4ocGF0aDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJbnN0YW5jZShwYXRoOiBzdHJpbmcsIGluc3RhbmNlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSW5zdGFuY2VzKHBhdGg6IHN0cmluZywgaW5zdGFuY2U6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEF1dG9GaWVsZHNUb0F1dG9WYWx1ZShwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWdhY3lQdWJsaWNGb3JtKGZvcm06IElGb3JtKTogSVB1YmxpY0Zvcm0ge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gbmV3IExlZ2FjeVB1YmxpY0Zvcm0oZm9ybSBhcyBJTGVnYWN5Rm9ybSk7XG59XG4iLCIvKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgbm8tYW55IG5vLXVuc2FmZS1hbnkgKi9cbmltcG9ydCB7IGZldGNoIH0gZnJvbSBcIndoYXR3Zy1mZXRjaFwiO1xuXG5pbXBvcnQgeyBFcnJvckZpcnN0Q2FsbGJhY2ssIHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSUZvcm0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL0Zvcm0vSUZvcm1cIjtcbmltcG9ydCB7IExvYWRJbnRvRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vSGVscGVycy9Mb2FkSW50b0RvY3VtZW50XCI7XG5pbXBvcnQgdHlwZSB7IElQdWJsaWNGb3JtIH0gZnJvbSBcIi4uL1B1YmxpY0Zvcm0vSVB1YmxpY0Zvcm1cIjtcbmltcG9ydCB0eXBlIHsgSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50IH0gZnJvbSBcIi4uL1R5cGVzL0lLZVdlYlRlbXBsYXRlc0FwaUNsaWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnREcmFmdEluZm9SZXNwb25zZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2xpZW50RHJhZnRJbmZvL0NsaWVudERyYWZ0SW5mb1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBnZXRDbGllbnREcmFmdEluZm9VcmwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NsaWVudERyYWZ0SW5mby9HZXRDbGllbnREcmFmdEluZm9VcmxcIjtcbmltcG9ydCB7IEFVT09wdGlvbnMgfSBmcm9tIFwiLi4vVHlwZXMvQVVPT3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBMYXlvdXRFdmVudHNTdGF0aWMgfSBmcm9tIFwiLi4vLi4vQ29udHJvbHMvSW50ZXJuYWxzL0xheW91dEV2ZW50cy9MYXlvdXRFdmVudHNcIjtcblxuaW1wb3J0IHsgY2xpZW50U2V0dGluZ3MgfSBmcm9tIFwiLi9DbGllbnRTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY3JlYXRlTGVnYWN5UHVibGljRm9ybSB9IGZyb20gXCIuL0xlZ2FjeVB1YmxpY0Zvcm0vQ3JlYXRlTGVnYWN5UHVibGljRm9ybVwiO1xuXG50eXBlIEZvcm1Db250YWluZXIgPSBzdHJpbmcgfCBIVE1MRWxlbWVudDtcblxudHlwZSBFbmdpbmVFbnRyeVBvaW50ID0gKCkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlbmRlckZvcm1TZXR0aW5ncyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2VzVmVyc2lvbjogc3RyaW5nO1xuICAgIHRoZW1lPzogdW5kZWZpbmVkIHwgbnVsbCB8IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgcmVuZGVyRm9ybTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludDtcbiAgICB0ZW1wbGF0ZXNBcGk/OiBJS2VXZWJUZW1wbGF0ZXNBcGlDbGllbnQ7XG59XG5cbnR5cGUgU3RhcnRGb3JtRnVuYyA9IChwYWdlQ29udGVudDogRm9ybUNvbnRhaW5lciwgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzKSA9PiBQcm9taXNlPElGb3JtPjtcblxuaW50ZXJmYWNlIENhbmR5R2xvYmFsSW5qZWN0ZWRWYXIge1xuICAgIHN0YXJ0OiAocGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsIGNhbGxiYWNrPzogRXJyb3JGaXJzdENhbGxiYWNrPElQdWJsaWNGb3JtPikgPT4gdm9pZDtcbiAgICBrZWZvcm1zVXJsPzogc3RyaW5nO1xuICAgIHBhcnRpYWxSZW5kZXJpbmdGb3JJRTg6IGJvb2xlYW47XG4gICAgZW50cnlQb2ludDogeyBba2V5OiBzdHJpbmddOiBTdGFydEZvcm1GdW5jIH07XG4gICAgbG9hZEVycm9yPzogdW5rbm93bjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBDRjogQ2FuZHlHbG9iYWxJbmplY3RlZFZhcjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuICAgIG5hbWVzcGFjZSBOb2RlSlMge1xuICAgICAgICBpbnRlcmZhY2UgR2xvYmFsIHtcbiAgICAgICAgICAgIENGOiBDYW5keUdsb2JhbEluamVjdGVkVmFyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IGdsb2JhbDogV2luZG93O1xuXG5mdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgLyogZW1wdHkgKi9cbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIEJvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiB1cmwocmVsYXRpdmVVcmw6IHN0cmluZyA9IFwiXCIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnbG9iYWwuQ0Yua2Vmb3Jtc1VybCB8fCBcIlwiO1xuXG4gICAgcmV0dXJuIGAke2Jhc2VVcmx9LyR7cmVsYXRpdmVVcmx9YC5yZXBsYWNlKC8oW146XSlcXC97Mix9L2csIFwiJDEvXCIpO1xufVxuXG5mdW5jdGlvbiBidWlsZFVybChwYXRoOiBzdHJpbmcsIHBhcmFtczogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiB1bmRlZmluZWQgfCBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgaWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBjb25zdCBxdWVyeVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcGFyYW1OYW1lIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcbiAgICAgICAgY29uc3QgcGFyYW1WYWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgICBpZiAocGFyYW1WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFydHMucHVzaChgJHtwYXJhbU5hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeVBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGggKyBcIj9cIiArIHF1ZXJ5UGFydHMuam9pbihcIiZcIik7XG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZChkb21haW5zOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXig/OiR7ZG9tYWlucy5yZXBsYWNlKC9cXC4vZywgXCJcXFxcLlwiKS5yZXBsYWNlKC9cXCovZywgXCJbYS16MC05LS5dK1wiKX0pJGApLnRlc3QoXG4gICAgICAgIGdsb2JhbC5sb2NhdGlvbi5ob3N0XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGdsb2JhbC5sb2NhdGlvbi5zZWFyY2hcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eKFxcP3wjfCYpLywgXCJcIilcbiAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgIC5tYXAocGFyYW0gPT4gcGFyYW0ucmVwbGFjZSgvXFwrL2csIFwiIFwiKS5zcGxpdChcIj1cIikubWFwKGRlY29kZVVSSUNvbXBvbmVudCkpXG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgLmZpbmQoKFtrZXldKSA9PiBrZXkgPT0gbmFtZSkgfHwgW10pWzFdXG4gICAgKTtcbn1cblxudHlwZSBUYXNrID0gKGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gcnVuUGFyYWxsZWwodGFza3M6IFRhc2tbXSwgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgbGV0IGNvbXBsZXRlZCA9IDA7XG5cbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICB0YXNrKGVycm9yID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRhc2tzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wbGV0ZWQgKz0gMTtcbiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IHRhc2tzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pbnRlcmZhY2UgU3RhcnRGb3JtU2V0dGluZyB7XG4gICAgZ2Z2OiBzdHJpbmc7XG4gICAgZW5naW5lVmVyc2lvbj86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgcmVzb3VyY2Vab25lPzogc3RyaW5nO1xuICAgIHJlc291cmNlc1ZlcnNpb246IHN0cmluZztcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwobGVmdDogc3RyaW5nLCByaWdodDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVmdE51bWJlcnMgPSBsZWZ0XG4gICAgICAgICAgICAuc3BsaXQoXCIuXCIpXG4gICAgICAgICAgICAuc2xpY2UoMCwgMylcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuICAgICAgICBjb25zdCByaWdodE51bWJlcnMgPSByaWdodFxuICAgICAgICAgICAgLnNwbGl0KFwiLlwiKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDMpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChsZWZ0TnVtYmVyc1swXSA/PyAwKSA+IChyaWdodE51bWJlcnNbMF0gPz8gMCkgfHxcbiAgICAgICAgICAgICgobGVmdE51bWJlcnNbMF0gPz8gMCkgPT09IChyaWdodE51bWJlcnNbMF0gPz8gMCkgJiZcbiAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID4gKHJpZ2h0TnVtYmVyc1sxXSA/PyAwKSB8fFxuICAgICAgICAgICAgICAgICAgICAoKGxlZnROdW1iZXJzWzFdID8/IDApID09PSAocmlnaHROdW1iZXJzWzFdID8/IDApICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobGVmdE51bWJlcnNbMl0gPz8gMCkgPj0gKHJpZ2h0TnVtYmVyc1syXSA/PyAwKSkpKVxuICAgICAgICApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2FkRm9ybShzZXR0aW5nczogU3RhcnRGb3JtU2V0dGluZywgY2FsbGJhY2s6IChlcnJvcj86IG51bGwgfCB1bmRlZmluZWQgfCBFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZ2Z2LCBlbmdpbmVWZXJzaW9uLCByZXNvdXJjZXNWZXJzaW9uIH0gPSBzZXR0aW5ncztcblxuICAgIGlmIChnbG9iYWwuQ0YuZW50cnlQb2ludFtnZnZdKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNOZWVkRW5naW5lID0gZW5naW5lVmVyc2lvbiAmJiAhZ2xvYmFsW2VuZ2luZVZlcnNpb25dO1xuICAgIGNvbnN0IG5vU3R5bGVzRm9yR2Z2ID0gZmFsc2U7IC8vIGVuZ2luZVZlcnNpb24gIT0gdW5kZWZpbmVkICYmIChpc0VuZ2luZVZlcnNpb25HcmVhdGVyVGhhbk9yRXF1YWwoZW5naW5lVmVyc2lvbiwgXCI0LjIxNC4wXCIpIHx8IGVuZ2luZVZlcnNpb24gPT09IFwibG9jYWxcIik7XG4gICAgY29uc3QgbmVlZExvYWRTdHlsZXNGb3JHZnYgPSAhbm9TdHlsZXNGb3JHZnY7XG4gICAgY29uc3QgbWluID0gZ2V0UGFyYW1ldGVyQnlOYW1lKFwiZGVidWdcIikgPT09IFwidHJ1ZVwiID8gXCJcIiA6IFwiLm1pblwiO1xuICAgIGNvbnN0IHRhc2tzOiBUYXNrW10gPSBbXTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgdjogcmVzb3VyY2VzVmVyc2lvbiwgcmVzb3VyY2Vab25lOiBzZXR0aW5ncy5yZXNvdXJjZVpvbmUgfTtcbiAgICBpZiAobmVlZExvYWRTdHlsZXNGb3JHZnYpIHtcbiAgICAgICAgdGFza3MucHVzaChjYiA9PlxuICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KHVybChidWlsZFVybChgc3RhdGljL3B1YmxpYy9zdHlsZXMvJHtnZnZ9JHttaW59LmNzc2AsIHBhcmFtcykpLCB0cnVlLCBjYilcbiAgICAgICAgKTtcbiAgICB9XG4gICAgdGFza3MucHVzaChjYiA9PiBMb2FkSW50b0RvY3VtZW50LnNjcmlwdCh1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy8ke2dmdn0ke21pbn0uanNgLCBwYXJhbXMpKSwgY2IpKTtcblxuICAgIGlmIChpc05lZWRFbmdpbmUpIHtcbiAgICAgICAgdGFza3MucHVzaChcbiAgICAgICAgICAgIGNiID0+XG4gICAgICAgICAgICAgICAgTG9hZEludG9Eb2N1bWVudC5zdHlsZVNoZWV0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc3R5bGVzL2NhbmR5XyR7ZW5naW5lVmVyc2lvbn0ke21pbn0uY3NzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBjYiA9PlxuICAgICAgICAgICAgICAgIExvYWRJbnRvRG9jdW1lbnQuc2NyaXB0KFxuICAgICAgICAgICAgICAgICAgICB1cmwoYnVpbGRVcmwoYHN0YXRpYy9wdWJsaWMvc2NyaXB0cy9jYW5keV8ke2VuZ2luZVZlcnNpb259JHttaW59LmpzYCwgcGFyYW1zKSksXG4gICAgICAgICAgICAgICAgICAgIGNiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJ1blBhcmFsbGVsKHRhc2tzLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckZvcm0oXG4gICAgcGFnZUNvbnRlbnQ6IEZvcm1Db250YWluZXIsXG4gICAgZXh0ZW5kZWRTZXR0aW5nczogUmVuZGVyRm9ybVNldHRpbmdzLFxuICAgIGNhbGxiYWNrOiBFcnJvckZpcnN0Q2FsbGJhY2s8SVB1YmxpY0Zvcm0+XG4pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRW50cnlQb2ludCA9XG4gICAgICAgIGdsb2JhbC5DRi5lbnRyeVBvaW50W2V4dGVuZGVkU2V0dGluZ3MuZ2Z2XSA/PyByZWplY3QoYEZvcm0gZW50cnkgcG9pbnQgJHtleHRlbmRlZFNldHRpbmdzLmdmdn0gbm90IGZvdW5kLmApO1xuICAgIGZvcm1FbnRyeVBvaW50KHBhZ2VDb250ZW50LCBleHRlbmRlZFNldHRpbmdzKVxuICAgICAgICAudGhlbihmb3JtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0Zvcm0gPSBmb3JtLnB1YmxpY0Zvcm0gfHwgY3JlYXRlTGVnYWN5UHVibGljRm9ybShmb3JtKTtcblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcHVibGljRm9ybSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRGb3JtT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8QVVPT3B0aW9ucz4ge1xuICAgIG5zOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuICAgIGdmdj86IHN0cmluZztcbiAgICByZXNvdXJjZVpvbmU/OiBzdHJpbmc7XG4gICAgdGVtcGxhdGVzQXBpPzogSUtlV2ViVGVtcGxhdGVzQXBpQ2xpZW50O1xuICAgIGZlZWRiYWNrRW5hYmxlZD86IGJvb2xlYW47XG4gICAgaXNEaXNhYmxlZENsb3NlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xvc2VBbmRTYXZlQnV0dG9uPzogYm9vbGVhbjtcbiAgICBpc0Rpc2FibGVkQ2xlYW5Gb3JtPzogYm9vbGVhbjtcbiAgICB0aGVtZT86IHVuZGVmaW5lZCB8IG51bGwgfCBzdHJpbmc7XG4gICAgYXV0aGVudGljYXRpb24/OiBcImJyb3dzZXItY3JlZGVudGlhbHMtaW5jbHVkZVwiIHwgeyBhdXRoU2lkOiBzdHJpbmcgfTtcbiAgICBmZXRjaD86IHR5cGVvZiBmZXRjaDtcbiAgICBtb2RlbD86IHsgW3BhdGg6IHN0cmluZ106IHVua25vd24gfTtcbiAgICBldmVudEVtaXR0ZXI/OiBMYXlvdXRFdmVudHNTdGF0aWM7XG4gICAgZW1wbG95ZXJJZD86IHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0RW5naW5lRW50cnlQb2ludChlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBudWxsIHwgc3RyaW5nKTogdW5kZWZpbmVkIHwgRW5naW5lRW50cnlQb2ludCB7XG4gICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiBnbG9iYWxbZW5naW5lVmVyc2lvbl0gJiYgZ2xvYmFsW2VuZ2luZVZlcnNpb25dLmRlZmF1bHQ7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0KFxuICAgIHBhZ2VDb250ZW50OiBGb3JtQ29udGFpbmVyLFxuICAgIG9wdGlvbnM6IFN0YXJ0Rm9ybU9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IEVycm9yRmlyc3RDYWxsYmFjazxJUHVibGljRm9ybT4gPSBkZWZhdWx0Q2FsbGJhY2tcbik6IHZvaWQge1xuICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgY29uc3QgeyBucywgZHJhZnRJZCB9ID0gb3B0aW9ucztcblxuICAgIGlmICghaXNBbGxvd2VkKGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMpKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwiZG9tYWluLnVudHJ1c3RlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFjbGllbnRTZXR0aW5ncy5hdXRob3JpemVkKSB7XG4gICAgICAgIGVycm9yID0gbmV3IEVycm9yKFwidXNlci51bmF1dGhlbnRpY2F0ZWRcIik7XG4gICAgfSBlbHNlIGlmICghZHJhZnRJZCkge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMuZHJhZnRJZCBpcyByZXF1aXJlZFwiKTtcbiAgICB9IGVsc2UgaWYgKCFucykge1xuICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIm9wdGlvbnMubnMgaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlWm9uZSA9IG9wdGlvbnMucmVzb3VyY2Vab25lID8/IGdldFBhcmFtZXRlckJ5TmFtZShcInJlc291cmNlWm9uZVwiKTtcbiAgICBjb25zdCBjbGllbnREcmFmdFVybCA9IGJ1aWxkVXJsKHVybChnZXRDbGllbnREcmFmdEluZm9VcmwoeyBuczogbnMsIGRyYWZ0SWQ6IGRyYWZ0SWQgfSkpLCB7XG4gICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RJbml0ID0geyBtZXRob2Q6IFwiR0VUXCIgfTtcbiAgICBpZiAob3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5hdXRoZW50aWNhdGlvbiA9PT0gXCJicm93c2VyLWNyZWRlbnRpYWxzLWluY2x1ZGVcIikge1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5jcmVkZW50aWFscyA9IFwiaW5jbHVkZVwiO1xuICAgIH0gZWxzZSBpZiAoXCJhdXRoU2lkXCIgaW4gb3B0aW9ucy5hdXRoZW50aWNhdGlvbiAmJiBvcHRpb25zLmF1dGhlbnRpY2F0aW9uLmF1dGhTaWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPSByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICByZXF1ZXN0T3B0aW9ucy5oZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBBVVRILlNJRCAke29wdGlvbnMuYXV0aGVudGljYXRpb24uYXV0aFNpZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcXVlc3RPcHRpb25zLmNyZWRlbnRpYWxzID0gXCJvbWl0XCI7XG4gICAgfVxuICAgIGNvbnN0IGZldGNoSW1wbCA9IG9wdGlvbnMuZmV0Y2ggPz8gZmV0Y2g7XG5cbiAgICBmZXRjaEltcGwoY2xpZW50RHJhZnRVcmwsIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAudGhlbih4ID0+IHguanNvbigpKVxuICAgICAgICAudGhlbigoY2xpZW50RHJhZnRJbmZvOiBDbGllbnREcmFmdEluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gY2xpZW50RHJhZnRJbmZvLmdmdjtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZVZlcnNpb24gPSBjbGllbnREcmFmdEluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuZGVkU2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgYXV0aG9yaXplZDogY2xpZW50U2V0dGluZ3MuYXV0aG9yaXplZCxcbiAgICAgICAgICAgICAgICBjYXVsZHJvbkFwaVVybDogY2xpZW50U2V0dGluZ3MuY2F1bGRyb25BcGlVcmwsXG4gICAgICAgICAgICAgICAgaXNUZXN0U2VydmVyOiBjbGllbnRTZXR0aW5ncy5pc1Rlc3RTZXJ2ZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyQ2FjaGluZ0ZvcklFODogY2xpZW50U2V0dGluZ3MucmVuZGVyQ2FjaGluZ0ZvcklFOCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uT25TZXJ2ZXI6IGNsaWVudFNldHRpbmdzLm5vcm1hbGl6YXRpb25PblNlcnZlcixcbiAgICAgICAgICAgICAgICBub3JtYXRpdmVVcmw6IGNsaWVudFNldHRpbmdzLm5vcm1hdGl2ZVVybCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBjbGllbnRTZXR0aW5ncy5yZXNvdXJjZXNWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGtvbnR1ckRvbWFpbnM6IGNsaWVudFNldHRpbmdzLmtvbnR1ckRvbWFpbnMsXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBhYm9uSWQ6IG9wdGlvbnMuYWJvbklkLFxuICAgICAgICAgICAgICAgIG9yZ0lkOiBvcHRpb25zLm9yZ0lkLFxuICAgICAgICAgICAgICAgIHVzZXJJZDogb3B0aW9ucy51c2VySWQsXG4gICAgICAgICAgICAgICAgLi4uY2xpZW50RHJhZnRJbmZvLFxuICAgICAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICAgICAgICAgIGlzSW5kaXZpZHVhbDogY2xpZW50RHJhZnRJbmZvLmlzSW5kaXZpZHVhbCxcbiAgICAgICAgICAgICAgICBpc0ZvcmVpZ246IGNsaWVudERyYWZ0SW5mby5pc0ZvcmVpZ24sXG4gICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZW5naW5lVmVyc2lvbixcbiAgICAgICAgICAgICAgICBmZWVkYmFja0VuYWJsZWQ6IG9wdGlvbnMuZmVlZGJhY2tFbmFibGVkID8/IGNsaWVudERyYWZ0SW5mby5mZWVkYmFja0VuYWJsZWQsXG4gICAgICAgICAgICAgICAgY2FuZHlUb3VyQXZhaWxhYmxlOiBjbGllbnREcmFmdEluZm8uY2FuZHlUb3VyQXZhaWxhYmxlLFxuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlcjogb3B0aW9ucy5ldmVudEVtaXR0ZXIsXG4gICAgICAgICAgICAgICAgZm9ybUluZm86IGNsaWVudERyYWZ0SW5mby5mb3JtSW5mbyxcbiAgICAgICAgICAgICAgICBwcmludEluZm86IGNsaWVudERyYWZ0SW5mby5wcmludEluZm8sXG4gICAgICAgICAgICAgICAgcmVnaW9uczogY2xpZW50RHJhZnRJbmZvLnJlZ2lvbnMsXG4gICAgICAgICAgICAgICAgaGFzVGVtcGxhdGVzOiBjbGllbnREcmFmdEluZm8uaGFzVGVtcGxhdGVzLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBvcHRpb25zLm1vZGVsLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbGVhbkZvcm06IG9wdGlvbnMuaXNEaXNhYmxlZENsZWFuRm9ybSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkQ2xvc2VCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQnV0dG9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWRDbG9zZUFuZFNhdmVCdXR0b246IG9wdGlvbnMuaXNEaXNhYmxlZENsb3NlQW5kU2F2ZUJ1dHRvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlvbjogb3B0aW9ucy5hdXRoZW50aWNhdGlvbixcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxvYWRGb3JtKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBleHRlbmRlZFNldHRpbmdzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZW5naW5lVmVyc2lvbjogZXh0ZW5kZWRTZXR0aW5ncy5lbmdpbmVWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IGV4dGVuZGVkU2V0dGluZ3MucmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXNWZXJzaW9uOiBleHRlbmRlZFNldHRpbmdzLnJlc291cmNlc1ZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiBleHRlbmRlZFNldHRpbmdzLnRoZW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbG9hZEVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRFcnJvciB8fCAhZ2xvYmFsLkNGLmVudHJ5UG9pbnRbZ2Z2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBkeW5hbWljIGxvYWRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgZ2Z2ICR7Z2Z2fWApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSBnZXRFbmdpbmVFbnRyeVBvaW50KGVuZ2luZVZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckZvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5leHRlbmRlZFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlc0FwaTogb3B0aW9ucy50ZW1wbGF0ZXNBcGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyRm9ybTogcmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKTtcbn1cblxuY29uc3QgQ2FuZHlDbGllbnRFeHBvcnRzOiBDYW5keUdsb2JhbEluamVjdGVkVmFyID0ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbnRyeVBvaW50OiB7fSxcbiAgICBwYXJ0aWFsUmVuZGVyaW5nRm9ySUU4OiBwYXJzZUJvb2woXCJ7cGFydGlhbFJlbmRlcmluZ0ZvcklFOH1cIiksXG4gICAga2Vmb3Jtc1VybDogXCJ7a2Vmb3Jtc1VybH1cIixcbn07XG5cbmdsb2JhbC5DRiA9IENhbmR5Q2xpZW50RXhwb3J0cztcblxuZXhwb3J0IHsgQ2FuZHlDbGllbnRFeHBvcnRzIH07XG4iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXlMaW1pdCBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qc1wiO1xuaW1wb3J0IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IGZyb20gXCIuL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgbm9uSXRlcmFibGVSZXN0IGZyb20gXCIuL25vbkl0ZXJhYmxlUmVzdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhhcnIpIHx8IGl0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkge1xuICB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07XG5cbiAgaWYgKF9pID09IG51bGwpIHJldHVybjtcbiAgdmFyIF9hcnIgPSBbXTtcbiAgdmFyIF9uID0gdHJ1ZTtcbiAgdmFyIF9kID0gZmFsc2U7XG5cbiAgdmFyIF9zLCBfZTtcblxuICB0cnkge1xuICAgIGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcbiAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cbiAgICAgIGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhaztcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIF9kID0gdHJ1ZTtcbiAgICBfZSA9IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoX2QpIHRocm93IF9lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfYXJyO1xufSIsImltcG9ydCBhcnJheUxpa2VUb0FycmF5IGZyb20gXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHtcbiAgaWYgKCFvKSByZXR1cm47XG4gIGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuICBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lO1xuICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn0iLCIvKioqXG4gKiDQodGC0YDQvtCz0L7RgtC40L/QuNC30LjRgNC+0LLQsNC90L3QsNGPINC30LDQvNC10L3QsCDQtNC70Y8gQm9vbGVhbiguLi4pXG4gKiDQntCx0YvRh9C90L4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC00LvRjyBbLi4uXS5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPclVuZGVmaW5lZDxUPihpbnB1dDogVCk6IGlucHV0IGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgICByZXR1cm4gaW5wdXQgIT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5VW5rbm93bkVycm9yKGVycm9yOiB1bmtub3duKTogdW5kZWZpbmVkIHwgc3RyaW5nIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yPy5bXCJtZXNzYWdlXCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUKTogYXNzZXJ0cyBpbnB1dCBpcyBOb25OdWxsYWJsZTxUPiB7XG4gICAgaWYgKCFpc05vdE51bGxPclVuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBWYWx1ZSBtdXN0IGJlIGRlZmluZWRgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cblxuZXhwb3J0IHR5cGUgRXJyb3JGaXJzdENhbGxiYWNrPFQ+ID0gKC4uLmFyZ3M6IFtFcnJvciwgbnVsbCB8IHVuZGVmaW5lZF0gfCBbbnVsbCB8IHVuZGVmaW5lZCwgVF0gfCBbRXJyb3JdKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVqZWN0KG1lc3NhZ2U/OiBzdHJpbmcgfCBFcnJvcik6IG5ldmVyIHtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgbWVzc2FnZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJVbmRlZmluZWQgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbWVzc2FnZTtcbiAgICB9XG59XG5cbnR5cGUgQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7IGxlbmd0aDogVExlbmd0aCB9XG4gICAgPyBUUmVzdFxuICAgIDogQXJyYXlPZkxlbmd0aDxUSXRlbSwgVExlbmd0aCwgW1RJdGVtLCAuLi5UUmVzdF0+O1xuXG5leHBvcnQgdHlwZSBNaW5MZW5ndGhBcnJheTxUSXRlbSwgVExlbmd0aCBleHRlbmRzIG51bWJlciwgVFJlc3QgZXh0ZW5kcyBUSXRlbVtdID0gW10+ID0gVFJlc3QgZXh0ZW5kcyB7XG4gICAgbGVuZ3RoOiBUTGVuZ3RoO1xufVxuICAgID8gWy4uLlRSZXN0LCAuLi5USXRlbVtdXVxuICAgIDogTWluTGVuZ3RoQXJyYXk8VEl0ZW0sIFRMZW5ndGgsIFsuLi5UUmVzdCwgVEl0ZW1dPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbWluTGVuZ3RoOiBUTnVtXG4pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaW5MZW5ndGhPclVuZGVmaW5lZDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogVFtdLFxuICAgIG1pbkxlbmd0aDogVE51bVxuKTogdW5kZWZpbmVkIHwgTWluTGVuZ3RoQXJyYXk8VCwgVE51bT4ge1xuICAgIGlmIChpc0xlbmd0aEdyZWF0ZXJUaGVuT3JFcXVhbChpdGVtcywgbWluTGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0xlbmd0aDxULCBUTnVtIGV4dGVuZHMgbnVtYmVyPihcbiAgICBpdGVtczogcmVhZG9ubHkgVFtdLFxuICAgIGxlbmd0aDogVE51bVxuKTogaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA9PT0gbGVuZ3RoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXlJc05vdEVtcHR5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJheUhhc0F0TGVhc3RPbmVJdGVtPFQ+KGl0ZW1zOiByZWFkb25seSBUW10pOiBpdGVtcyBpcyBNaW5MZW5ndGhBcnJheTxULCAxPiB7XG4gICAgcmV0dXJuIGl0ZW1zLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBcnJheUlzTm90RW1wdHk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSk6IGFzc2VydHMgaXRlbXMgaXMgTWluTGVuZ3RoQXJyYXk8VCwgMT4ge1xuICAgIGlmICghYXJyYXlJc05vdEVtcHR5KGl0ZW1zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IG11c3QgYmUgbm90IGVtcHR5YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQXJyYXlIYXNMZW5ndGg8VCwgVE51bSBleHRlbmRzIG51bWJlcj4oXG4gICAgaXRlbXM6IHJlYWRvbmx5IFRbXSxcbiAgICBsZW5ndGg6IFROdW1cbik6IGFzc2VydHMgaXRlbXMgaXMgQXJyYXlPZkxlbmd0aDxULCBUTnVtPiB7XG4gICAgaWYgKCFhcnJheUhhc0xlbmd0aChpdGVtcywgbGVuZ3RoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5IHNob3VsZCBoYXMgbGVuZ3RoICR7bGVuZ3RofWApO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUFycmF5TGVuZ3RoR3JlYXRlclRoZW5PckVxdWFsPFQsIFROdW0gZXh0ZW5kcyBudW1iZXI+KFxuICAgIGl0ZW1zOiByZWFkb25seSBUW10sXG4gICAgbGVuZ3RoOiBUTnVtXG4pOiBhc3NlcnRzIGl0ZW1zIGlzIEFycmF5T2ZMZW5ndGg8VCwgVE51bT4ge1xuICAgIGlmICghaXNMZW5ndGhHcmVhdGVyVGhlbk9yRXF1YWwoaXRlbXMsIGxlbmd0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSBtdXN0IGhhdmUgbWluaW1hbCBsZW5ndGggJHtsZW5ndGh9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlTmV2ZXIobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiB2b2lkIHtcbiAgICAvLyBub29wXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVBbmRHZXRTdHJpbmcobmV2ZXJBcmd1bWVudDogbmV2ZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtuZXZlckFyZ3VtZW50fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Bc3luY0FjdGlvbihhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgYWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyB1bmRlZmluZWQge1xuICAgIHJldHVybiBpbnB1dCA9PSB1bmRlZmluZWQgfHwgaW5wdXQgPT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vdE51bGxPckVtcHR5KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBpbnB1dCBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eShpbnB1dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPcldoaXRlU3BhY2UoaW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpOiBpbnB1dCBpcyB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gaW5wdXQgPT0gdW5kZWZpbmVkIHx8IGlucHV0LnRyaW0oKSA9PT0gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1MYXN0U2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRJczxUPih2YWx1ZTogVCk6IHZvaWQge1xuICAgIC8vIG5vb3Bcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=