@magic-xpa/engine 4.1100.0-dev4110.19 → 4.1100.0-dev4110.191

Sign up to get free protection for your applications and to get access to all the features.
Files changed (515) hide show
  1. package/{esm2020 → esm2022}/index.mjs +188 -188
  2. package/{esm2020 → esm2022}/magic-xpa-engine.mjs +1 -1
  3. package/esm2022/src/AccessHelper.mjs +15 -0
  4. package/esm2022/src/ClientManager.mjs +399 -0
  5. package/esm2022/src/CommandsProcessorBase.mjs +56 -0
  6. package/esm2022/src/CommandsProcessorManager.mjs +26 -0
  7. package/esm2022/src/CommandsTable.mjs +162 -0
  8. package/esm2022/src/ConstInterface.mjs +516 -0
  9. package/{esm2020 → esm2022}/src/CurrentClientVersion.mjs +2 -2
  10. package/esm2022/src/FlowMonitorInterface.mjs +16 -0
  11. package/esm2022/src/GUIManager.mjs +62 -0
  12. package/esm2022/src/GlobalCommandsManager.mjs +34 -0
  13. package/esm2022/src/GuiEventsProcessor.mjs +154 -0
  14. package/{esm2020 → esm2022}/src/ICommandsTable.mjs +1 -1
  15. package/esm2022/src/ServerConfig.mjs +118 -0
  16. package/{esm2020 → esm2022}/src/bridge/IGuiEvent.mjs +19 -19
  17. package/{esm2020 → esm2022}/src/bridge/MagicBridge.mjs +40 -40
  18. package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +12 -0
  19. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +8 -8
  20. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +9 -9
  21. package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +9 -9
  22. package/{esm2020 → esm2022}/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -23
  23. package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
  24. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
  25. package/{esm2020 → esm2022}/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -26
  26. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +260 -0
  27. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
  28. package/{esm2020 → esm2022}/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -23
  29. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +20 -20
  30. package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +19 -19
  31. package/{esm2020 → esm2022}/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +8 -8
  32. package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +13 -0
  33. package/{esm2020 → esm2022}/src/commands/ClientToServer/DataviewCommand.mjs +44 -44
  34. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +37 -0
  35. package/esm2022/src/commands/ClientToServer/EventCommand.mjs +40 -0
  36. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
  37. package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -0
  38. package/{esm2020 → esm2022}/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +10 -10
  39. package/{esm2020 → esm2022}/src/commands/ClientToServer/ICommandTaskTag.mjs +1 -1
  40. package/{esm2020 → esm2022}/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -21
  41. package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
  42. package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -23
  43. package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
  44. package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
  45. package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
  46. package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
  47. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +40 -0
  48. package/{esm2020 → esm2022}/src/commands/ClientToServer/SelectProgramCommand.mjs +14 -14
  49. package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
  50. package/{esm2020 → esm2022}/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -21
  51. package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
  52. package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +30 -0
  53. package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +14 -14
  54. package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -0
  55. package/esm2022/src/commands/DataViewCommandBase.mjs +8 -0
  56. package/{esm2020 → esm2022}/src/commands/IClientCommand.mjs +1 -1
  57. package/esm2022/src/commands/IClientTargetedCommand.mjs +13 -0
  58. package/{esm2020 → esm2022}/src/commands/IClientToServerCommandInfo.mjs +1 -1
  59. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
  61. package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
  62. package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
  63. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +25 -0
  64. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +24 -0
  65. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  66. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +221 -0
  67. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetLocateCommand.mjs +14 -14
  68. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetRangeCommand.mjs +14 -14
  69. package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetSortCommand.mjs +14 -14
  70. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  71. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +83 -0
  72. package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -0
  73. package/{esm2020 → esm2022}/src/communications/IConnectionStateManager.mjs +1 -1
  74. package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +15 -0
  75. package/{esm2020 → esm2022}/src/data/DataSourceIdKey.mjs +2 -2
  76. package/esm2022/src/data/DataView.mjs +1613 -0
  77. package/{esm2020 → esm2022}/src/data/DataViewBase.mjs +3 -3
  78. package/esm2022/src/data/DataviewManager.mjs +28 -0
  79. package/esm2022/src/data/DataviewManagerBase.mjs +15 -0
  80. package/esm2022/src/data/DvCache.mjs +67 -0
  81. package/esm2022/src/data/Field.mjs +646 -0
  82. package/esm2022/src/data/FieldBase.mjs +15 -0
  83. package/esm2022/src/data/FieldsTable.mjs +103 -0
  84. package/{esm2020 → esm2022}/src/data/IRecordsTable.mjs +1 -1
  85. package/esm2022/src/data/Key.mjs +88 -0
  86. package/esm2022/src/data/Record.mjs +866 -0
  87. package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
  88. package/esm2022/src/data/RecordsTable.mjs +267 -0
  89. package/esm2022/src/data/TaskTransactionManager.mjs +103 -0
  90. package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +74 -0
  91. package/{esm2020 → esm2022}/src/enums.mjs +23 -23
  92. package/esm2022/src/env/EnvVariablesTable.mjs +340 -0
  93. package/esm2022/src/env/Environment.mjs +487 -0
  94. package/{esm2020 → esm2022}/src/env/ILanguageData.mjs +1 -1
  95. package/esm2022/src/env/LanguageData.mjs +226 -0
  96. package/esm2022/src/env/MirrorString.mjs +65 -0
  97. package/esm2022/src/event/ActionManager.mjs +91 -0
  98. package/esm2022/src/event/Event.mjs +1333 -0
  99. package/esm2022/src/event/EventHandler.mjs +766 -0
  100. package/esm2022/src/event/EventHandlerPosition.mjs +204 -0
  101. package/esm2022/src/event/EventsManager.mjs +2975 -0
  102. package/{esm2020 → esm2022}/src/event/IEventsManager.mjs +6 -6
  103. package/esm2022/src/event/RunTimeEvent.mjs +392 -0
  104. package/{esm2020 → esm2022}/src/event/RunTimeEventBase.mjs +3 -3
  105. package/esm2022/src/event/UserEventsTable.mjs +47 -0
  106. package/esm2022/src/exp/ExpTable.mjs +57 -0
  107. package/esm2022/src/exp/Expression.mjs +200 -0
  108. package/esm2022/src/exp/ExpressionDict.mjs +727 -0
  109. package/esm2022/src/exp/ExpressionEvaluator.mjs +4206 -0
  110. package/esm2022/src/exp/ExpressionLocalJpn.mjs +314 -0
  111. package/esm2022/src/exp/GlobalParamsTable.mjs +85 -0
  112. package/esm2022/src/exp/YesNoExp.mjs +36 -0
  113. package/esm2022/src/gui/CreatedFormVector.mjs +23 -0
  114. package/esm2022/src/gui/FormsTable.mjs +66 -0
  115. package/esm2022/src/gui/MgControl.mjs +363 -0
  116. package/esm2022/src/gui/MgForm.mjs +1181 -0
  117. package/esm2022/src/http/HttpManager.mjs +97 -0
  118. package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
  119. package/esm2022/src/http/client/HttpClientBase.mjs +132 -0
  120. package/esm2022/src/http/client/HttpClientEvents.mjs +39 -0
  121. package/esm2022/src/http/client/HttpClientSync.mjs +42 -0
  122. package/esm2022/src/http/client/HttpUtility.mjs +84 -0
  123. package/{esm2020 → esm2022}/src/http/client/ICommunicationsFailureHandler.mjs +1 -1
  124. package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
  125. package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
  126. package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
  127. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +882 -0
  128. package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
  129. package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +24 -0
  130. package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +61 -0
  131. package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +15 -15
  132. package/{esm2020 → esm2022}/src/remote/RemoteDataviewManager.mjs +17 -17
  133. package/{esm2020 → esm2022}/src/remote/RemoteInitDataViewCommand.mjs +10 -10
  134. package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
  135. package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
  136. package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
  137. package/esm2022/src/remote/ServerError.mjs +40 -0
  138. package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +20 -0
  139. package/esm2022/src/rt/Argument.mjs +265 -0
  140. package/esm2022/src/rt/ArgumentsList.mjs +103 -0
  141. package/esm2022/src/rt/Boundary.mjs +152 -0
  142. package/esm2022/src/rt/CompMainPrgTable.mjs +63 -0
  143. package/{esm2020 → esm2022}/src/rt/DataviewHeaderBase.mjs +98 -96
  144. package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
  145. package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
  146. package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +38 -0
  147. package/esm2022/src/rt/ExecutionStack.mjs +94 -0
  148. package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
  149. package/esm2022/src/rt/HandlersTable.mjs +96 -0
  150. package/{esm2020 → esm2022}/src/rt/IDataSourceViewDefinition.mjs +1 -1
  151. package/{esm2020 → esm2022}/src/rt/IDataviewHeader.mjs +1 -1
  152. package/{esm2020 → esm2022}/src/rt/IResultValue.mjs +1 -1
  153. package/esm2022/src/rt/LastFocusedManager.mjs +65 -0
  154. package/esm2022/src/rt/Operation.mjs +735 -0
  155. package/esm2022/src/rt/OperationTable.mjs +67 -0
  156. package/esm2022/src/rt/Recompute.mjs +355 -0
  157. package/esm2022/src/rt/RecomputeTable.mjs +63 -0
  158. package/esm2022/src/rt/RemoteDataviewHeader.mjs +108 -0
  159. package/esm2022/src/rt/ResultValue.mjs +10 -0
  160. package/esm2022/src/rt/TableCache.mjs +177 -0
  161. package/esm2022/src/rt/TableCacheManager.mjs +67 -0
  162. package/esm2022/src/rt/Transaction.mjs +53 -0
  163. package/esm2022/src/security/UserDetails.mjs +71 -0
  164. package/{esm2020 → esm2022}/src/tasks/IMGDataCollection.mjs +1 -1
  165. package/esm2022/src/tasks/MGData.mjs +552 -0
  166. package/esm2022/src/tasks/MGDataCollection.mjs +252 -0
  167. package/esm2022/src/tasks/RCTimer.mjs +63 -0
  168. package/esm2022/src/tasks/RemoteTaskService.mjs +45 -0
  169. package/esm2022/src/tasks/Task.mjs +2497 -0
  170. package/esm2022/src/tasks/TaskBase.mjs +83 -0
  171. package/esm2022/src/tasks/TaskServiceBase.mjs +25 -0
  172. package/esm2022/src/tasks/TasksTable.mjs +80 -0
  173. package/esm2022/src/tasks/sort/Sort.mjs +5 -0
  174. package/esm2022/src/tasks/sort/SortCollection.mjs +67 -0
  175. package/esm2022/src/util/ConstUtils.mjs +14 -0
  176. package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
  177. package/esm2022/src/util/HeapSort.mjs +70 -0
  178. package/{esm2020 → esm2022}/src/util/IMirrorXML.mjs +1 -1
  179. package/{esm2020 → esm2022}/src/util/IServerConfig.mjs +1 -1
  180. package/{esm2020 → esm2022}/src/util/MgBlockingQueue.mjs +1 -1
  181. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +74 -0
  182. package/esm2022/src/util/MgPriorityQueue.mjs +66 -0
  183. package/{esm2020 → esm2022}/src/util/ParamParseResult.mjs +7 -7
  184. package/esm2022/src/util/PrmMap.mjs +152 -0
  185. package/esm2022/src/util/ReturnResult.mjs +46 -0
  186. package/esm2022/src/util/ReturnResultBase.mjs +18 -0
  187. package/esm2022/src/util/Scrambler.mjs +89 -0
  188. package/esm2022/src/util/UniqueIDUtils.mjs +13 -0
  189. package/esm2022/src/util/cookie.service.mjs +92 -0
  190. package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29713 -29693
  191. package/fesm2022/magic-xpa-engine.mjs.map +1 -0
  192. package/index.d.ts +187 -187
  193. package/package.json +8 -14
  194. package/src/AccessHelper.d.ts +20 -20
  195. package/src/ClientManager.d.ts +32 -32
  196. package/src/CommandsProcessorBase.d.ts +23 -23
  197. package/src/CommandsProcessorManager.d.ts +6 -6
  198. package/src/CommandsTable.d.ts +22 -22
  199. package/src/ConstInterface.d.ts +515 -515
  200. package/src/CurrentClientVersion.d.ts +1 -1
  201. package/src/FlowMonitorInterface.d.ts +15 -15
  202. package/src/GUIManager.d.ts +17 -17
  203. package/src/GlobalCommandsManager.d.ts +17 -17
  204. package/src/GuiEventsProcessor.d.ts +24 -24
  205. package/src/ICommandsTable.d.ts +9 -9
  206. package/src/ServerConfig.d.ts +34 -34
  207. package/src/bridge/IGuiEvent.d.ts +19 -19
  208. package/src/bridge/MagicBridge.d.ts +16 -16
  209. package/src/commands/ClientOriginatedCommandTaskTag.d.ts +8 -8
  210. package/src/commands/ClientToServer/AddUserLocateDataViewCommand.d.ts +4 -4
  211. package/src/commands/ClientToServer/AddUserRangeDataviewCommand.d.ts +6 -6
  212. package/src/commands/ClientToServer/AddUserSortDataViewCommand.d.ts +6 -6
  213. package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +8 -8
  214. package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +8 -8
  215. package/src/commands/ClientToServer/ClientOriginatedCommandSerializer.d.ts +6 -6
  216. package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +10 -10
  217. package/src/commands/ClientToServer/CommandFactory.d.ts +64 -64
  218. package/src/commands/ClientToServer/CommandSerializationHelper.d.ts +20 -20
  219. package/src/commands/ClientToServer/ComputeEventCommand.d.ts +8 -8
  220. package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +7 -7
  221. package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +7 -7
  222. package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +6 -6
  223. package/src/commands/ClientToServer/DataViewOutputCommand.d.ts +9 -9
  224. package/src/commands/ClientToServer/DataviewCommand.d.ts +32 -32
  225. package/src/commands/ClientToServer/EvaluateCommand.d.ts +15 -15
  226. package/src/commands/ClientToServer/EventCommand.d.ts +15 -15
  227. package/src/commands/ClientToServer/ExecOperCommand.d.ts +23 -23
  228. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +8 -8
  229. package/src/commands/ClientToServer/GlobalParamsQueryCommand.d.ts +5 -5
  230. package/src/commands/ClientToServer/ICommandTaskTag.d.ts +3 -3
  231. package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +8 -8
  232. package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +10 -10
  233. package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +8 -8
  234. package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
  235. package/src/commands/ClientToServer/RecomputeCommand.d.ts +11 -11
  236. package/src/commands/ClientToServer/RefreshEventCommand.d.ts +12 -12
  237. package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +10 -10
  238. package/src/commands/ClientToServer/RollbackEventCommand.d.ts +14 -14
  239. package/src/commands/ClientToServer/SelectProgramCommand.d.ts +6 -6
  240. package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
  241. package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +8 -8
  242. package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +9 -9
  243. package/src/commands/ClientToServer/TransactionCommand.d.ts +12 -12
  244. package/src/commands/ClientToServer/UnloadCommand.d.ts +7 -7
  245. package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +6 -6
  246. package/src/commands/DataViewCommandBase.d.ts +6 -6
  247. package/src/commands/IClientCommand.d.ts +2 -2
  248. package/src/commands/IClientTargetedCommand.d.ts +12 -12
  249. package/src/commands/IClientToServerCommandInfo.d.ts +3 -3
  250. package/src/commands/ServerToClient/AbortCommand.d.ts +11 -11
  251. package/src/commands/ServerToClient/AddLocateCommand.d.ts +6 -6
  252. package/src/commands/ServerToClient/AddRangeCommand.d.ts +10 -10
  253. package/src/commands/ServerToClient/AddSortCommand.d.ts +9 -9
  254. package/src/commands/ServerToClient/ClientRefreshCommand.d.ts +7 -7
  255. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +12 -12
  256. package/src/commands/ServerToClient/EnhancedVerifyCommand.d.ts +13 -13
  257. package/src/commands/ServerToClient/OpenURLCommand.d.ts +21 -21
  258. package/src/commands/ServerToClient/ResetLocateCommand.d.ts +6 -6
  259. package/src/commands/ServerToClient/ResetRangeCommand.d.ts +6 -6
  260. package/src/commands/ServerToClient/ResetSortCommand.d.ts +6 -6
  261. package/src/commands/ServerToClient/ResultCommand.d.ts +10 -10
  262. package/src/commands/ServerToClient/VerifyCommand.d.ts +17 -17
  263. package/src/commands/ServerToClient/XMLBasedCommandBuilder.d.ts +11 -11
  264. package/src/communications/IConnectionStateManager.d.ts +4 -4
  265. package/src/communications/InteractiveCommunicationsFailureHandler.d.ts +6 -6
  266. package/src/data/DataSourceIdKey.d.ts +2 -2
  267. package/src/data/DataView.d.ts +162 -162
  268. package/src/data/DataViewBase.d.ts +12 -12
  269. package/src/data/DataviewManager.d.ts +14 -14
  270. package/src/data/DataviewManagerBase.d.ts +11 -11
  271. package/src/data/DvCache.d.ts +15 -15
  272. package/src/data/Field.d.ts +103 -103
  273. package/src/data/FieldBase.d.ts +23 -23
  274. package/src/data/FieldsTable.d.ts +27 -27
  275. package/src/data/IRecordsTable.d.ts +7 -7
  276. package/src/data/Key.d.ts +15 -15
  277. package/src/data/Record.d.ts +156 -156
  278. package/src/data/RecordOutOfDataViewException.d.ts +10 -10
  279. package/src/data/RecordsTable.d.ts +38 -38
  280. package/src/data/TaskTransactionManager.d.ts +17 -17
  281. package/src/data/XMLBasedDcValuesBuilder.d.ts +11 -11
  282. package/src/enums.d.ts +21 -21
  283. package/src/env/EnvVariablesTable.d.ts +17 -17
  284. package/src/env/Environment.d.ts +118 -118
  285. package/src/env/ILanguageData.d.ts +3 -3
  286. package/src/env/LanguageData.d.ts +20 -20
  287. package/src/env/MirrorString.d.ts +15 -15
  288. package/src/event/ActionManager.d.ts +14 -14
  289. package/src/event/Event.d.ts +79 -79
  290. package/src/event/EventHandler.d.ts +66 -66
  291. package/src/event/EventHandlerPosition.d.ts +25 -25
  292. package/src/event/EventsManager.d.ts +204 -204
  293. package/src/event/IEventsManager.d.ts +77 -77
  294. package/src/event/RunTimeEvent.d.ts +123 -123
  295. package/src/event/RunTimeEventBase.d.ts +5 -5
  296. package/src/event/UserEventsTable.d.ts +11 -11
  297. package/src/exp/ExpTable.d.ts +11 -11
  298. package/src/exp/Expression.d.ts +37 -37
  299. package/src/exp/ExpressionDict.d.ts +12 -12
  300. package/src/exp/ExpressionEvaluator.d.ts +198 -198
  301. package/src/exp/ExpressionLocalJpn.d.ts +18 -18
  302. package/src/exp/GlobalParamsTable.d.ts +19 -19
  303. package/src/exp/YesNoExp.d.ts +9 -9
  304. package/src/gui/CreatedFormVector.d.ts +10 -10
  305. package/src/gui/FormsTable.d.ts +15 -15
  306. package/src/gui/MgControl.d.ts +60 -60
  307. package/src/gui/MgForm.d.ts +93 -93
  308. package/src/http/HttpManager.d.ts +25 -25
  309. package/src/http/client/HttpClientAsync.d.ts +16 -16
  310. package/src/http/client/HttpClientBase.d.ts +30 -30
  311. package/src/http/client/HttpClientEvents.d.ts +18 -18
  312. package/src/http/client/HttpClientSync.d.ts +17 -17
  313. package/src/http/client/HttpUtility.d.ts +10 -10
  314. package/src/http/client/ICommunicationsFailureHandler.d.ts +5 -5
  315. package/src/remote/AddUserLocateRemoteDataViewCommand.d.ts +8 -8
  316. package/src/remote/AddUserRangeRemoteDataViewCommand.d.ts +8 -8
  317. package/src/remote/AddUserSortRemoteDataViewCommand.d.ts +8 -8
  318. package/src/remote/RemoteCommandsProcessor.d.ts +51 -51
  319. package/src/remote/RemoteControlItemsRefreshCommand.d.ts +8 -8
  320. package/src/remote/RemoteDataViewCommandBase.d.ts +10 -10
  321. package/src/remote/RemoteDataViewCommandFactory.d.ts +6 -6
  322. package/src/remote/RemoteDataViewCommandUpdateNonModifiable.d.ts +8 -8
  323. package/src/remote/RemoteDataviewManager.d.ts +9 -9
  324. package/src/remote/RemoteInitDataViewCommand.d.ts +7 -7
  325. package/src/remote/ResetUserLocateRemoteDataviewCommand.d.ts +7 -7
  326. package/src/remote/ResetUserRangeRemoteDataviewCommand.d.ts +7 -7
  327. package/src/remote/ResetUserSortRemoteDataviewCommand.d.ts +7 -7
  328. package/src/remote/ServerError.d.ts +16 -16
  329. package/src/remote/SetTransactionStateRemoteDataViewCommand.d.ts +8 -8
  330. package/src/rt/Argument.d.ts +36 -36
  331. package/src/rt/ArgumentsList.d.ts +24 -24
  332. package/src/rt/Boundary.d.ts +27 -27
  333. package/src/rt/CompMainPrgTable.d.ts +10 -10
  334. package/src/rt/DataviewHeaderBase.d.ts +34 -34
  335. package/src/rt/DataviewHeaderFactory.d.ts +5 -5
  336. package/src/rt/DataviewHeaders.d.ts +12 -12
  337. package/src/rt/DataviewHeadersSaxHandler.d.ts +10 -10
  338. package/src/rt/ExecutionStack.d.ts +22 -22
  339. package/src/rt/ExecutionStackEntry.d.ts +7 -7
  340. package/src/rt/HandlersTable.d.ts +19 -19
  341. package/src/rt/IDataSourceViewDefinition.d.ts +6 -6
  342. package/src/rt/IDataviewHeader.d.ts +10 -10
  343. package/src/rt/IResultValue.d.ts +4 -4
  344. package/src/rt/LastFocusedManager.d.ts +23 -23
  345. package/src/rt/Operation.d.ts +97 -97
  346. package/src/rt/OperationTable.d.ts +15 -15
  347. package/src/rt/Recompute.d.ts +41 -41
  348. package/src/rt/RecomputeTable.d.ts +9 -9
  349. package/src/rt/RemoteDataviewHeader.d.ts +14 -14
  350. package/src/rt/ResultValue.d.ts +7 -7
  351. package/src/rt/TableCache.d.ts +29 -29
  352. package/src/rt/TableCacheManager.d.ts +10 -10
  353. package/src/rt/Transaction.d.ts +23 -23
  354. package/src/security/UserDetails.d.ts +16 -16
  355. package/src/tasks/IMGDataCollection.d.ts +26 -26
  356. package/src/tasks/MGData.d.ts +63 -63
  357. package/src/tasks/MGDataCollection.d.ts +42 -42
  358. package/src/tasks/RCTimer.d.ts +13 -13
  359. package/src/tasks/RemoteTaskService.d.ts +16 -16
  360. package/src/tasks/Task.d.ts +312 -312
  361. package/src/tasks/TaskBase.d.ts +123 -123
  362. package/src/tasks/TaskServiceBase.d.ts +16 -16
  363. package/src/tasks/TasksTable.d.ts +21 -21
  364. package/src/tasks/sort/Sort.d.ts +4 -4
  365. package/src/tasks/sort/SortCollection.d.ts +11 -11
  366. package/src/util/ConstUtils.d.ts +3 -3
  367. package/src/util/FlowMonitorQueue.d.ts +70 -70
  368. package/src/util/HeapSort.d.ts +6 -6
  369. package/src/util/IMirrorXML.d.ts +6 -6
  370. package/src/util/IServerConfig.d.ts +11 -11
  371. package/src/util/MgBlockingQueue.d.ts +5 -5
  372. package/src/util/MgPriorityBlockingQueue.d.ts +17 -17
  373. package/src/util/MgPriorityQueue.d.ts +13 -13
  374. package/src/util/ParamParseResult.d.ts +6 -6
  375. package/src/util/PrmMap.d.ts +28 -28
  376. package/src/util/ReturnResult.d.ts +18 -18
  377. package/src/util/ReturnResultBase.d.ts +11 -11
  378. package/src/util/Scrambler.d.ts +10 -10
  379. package/src/util/UniqueIDUtils.d.ts +4 -4
  380. package/src/util/cookie.service.d.ts +8 -8
  381. package/esm2020/src/AccessHelper.mjs +0 -9
  382. package/esm2020/src/ClientManager.mjs +0 -399
  383. package/esm2020/src/CommandsProcessorBase.mjs +0 -58
  384. package/esm2020/src/CommandsProcessorManager.mjs +0 -26
  385. package/esm2020/src/CommandsTable.mjs +0 -162
  386. package/esm2020/src/ConstInterface.mjs +0 -516
  387. package/esm2020/src/FlowMonitorInterface.mjs +0 -16
  388. package/esm2020/src/GUIManager.mjs +0 -62
  389. package/esm2020/src/GlobalCommandsManager.mjs +0 -34
  390. package/esm2020/src/GuiEventsProcessor.mjs +0 -154
  391. package/esm2020/src/ServerConfig.mjs +0 -117
  392. package/esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
  393. package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
  394. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
  395. package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
  396. package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
  397. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
  398. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +0 -40
  399. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
  400. package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
  401. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -23
  402. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +0 -27
  403. package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -27
  404. package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -24
  405. package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -39
  406. package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -24
  407. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +0 -28
  408. package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
  409. package/esm2020/src/commands/DataViewCommandBase.mjs +0 -10
  410. package/esm2020/src/commands/IClientTargetedCommand.mjs +0 -9
  411. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +0 -65
  412. package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +0 -62
  413. package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
  414. package/esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
  415. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -27
  416. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
  417. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
  418. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +0 -37
  419. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
  420. package/esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
  421. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -17
  422. package/esm2020/src/data/DataView.mjs +0 -1610
  423. package/esm2020/src/data/DataviewManager.mjs +0 -28
  424. package/esm2020/src/data/DataviewManagerBase.mjs +0 -15
  425. package/esm2020/src/data/DvCache.mjs +0 -67
  426. package/esm2020/src/data/Field.mjs +0 -646
  427. package/esm2020/src/data/FieldBase.mjs +0 -18
  428. package/esm2020/src/data/FieldsTable.mjs +0 -103
  429. package/esm2020/src/data/Key.mjs +0 -88
  430. package/esm2020/src/data/Record.mjs +0 -846
  431. package/esm2020/src/data/RecordsTable.mjs +0 -267
  432. package/esm2020/src/data/TaskTransactionManager.mjs +0 -103
  433. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
  434. package/esm2020/src/env/EnvVariablesTable.mjs +0 -340
  435. package/esm2020/src/env/Environment.mjs +0 -489
  436. package/esm2020/src/env/LanguageData.mjs +0 -226
  437. package/esm2020/src/env/MirrorString.mjs +0 -65
  438. package/esm2020/src/event/ActionManager.mjs +0 -91
  439. package/esm2020/src/event/Event.mjs +0 -1333
  440. package/esm2020/src/event/EventHandler.mjs +0 -766
  441. package/esm2020/src/event/EventHandlerPosition.mjs +0 -204
  442. package/esm2020/src/event/EventsManager.mjs +0 -2975
  443. package/esm2020/src/event/RunTimeEvent.mjs +0 -392
  444. package/esm2020/src/event/UserEventsTable.mjs +0 -47
  445. package/esm2020/src/exp/ExpTable.mjs +0 -59
  446. package/esm2020/src/exp/Expression.mjs +0 -200
  447. package/esm2020/src/exp/ExpressionDict.mjs +0 -727
  448. package/esm2020/src/exp/ExpressionEvaluator.mjs +0 -4212
  449. package/esm2020/src/exp/ExpressionLocalJpn.mjs +0 -314
  450. package/esm2020/src/exp/GlobalParamsTable.mjs +0 -85
  451. package/esm2020/src/exp/YesNoExp.mjs +0 -36
  452. package/esm2020/src/gui/CreatedFormVector.mjs +0 -23
  453. package/esm2020/src/gui/FormsTable.mjs +0 -66
  454. package/esm2020/src/gui/MgControl.mjs +0 -353
  455. package/esm2020/src/gui/MgForm.mjs +0 -1181
  456. package/esm2020/src/http/HttpManager.mjs +0 -97
  457. package/esm2020/src/http/client/HttpClientAsync.mjs +0 -67
  458. package/esm2020/src/http/client/HttpClientBase.mjs +0 -132
  459. package/esm2020/src/http/client/HttpClientEvents.mjs +0 -39
  460. package/esm2020/src/http/client/HttpClientSync.mjs +0 -42
  461. package/esm2020/src/http/client/HttpUtility.mjs +0 -84
  462. package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +0 -18
  463. package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
  464. package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
  465. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
  466. package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
  467. package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +0 -24
  468. package/esm2020/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
  469. package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
  470. package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
  471. package/esm2020/src/remote/ServerError.mjs +0 -40
  472. package/esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
  473. package/esm2020/src/rt/Argument.mjs +0 -265
  474. package/esm2020/src/rt/ArgumentsList.mjs +0 -103
  475. package/esm2020/src/rt/Boundary.mjs +0 -152
  476. package/esm2020/src/rt/CompMainPrgTable.mjs +0 -65
  477. package/esm2020/src/rt/DataviewHeaders.mjs +0 -53
  478. package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
  479. package/esm2020/src/rt/ExecutionStack.mjs +0 -94
  480. package/esm2020/src/rt/HandlersTable.mjs +0 -96
  481. package/esm2020/src/rt/LastFocusedManager.mjs +0 -67
  482. package/esm2020/src/rt/Operation.mjs +0 -735
  483. package/esm2020/src/rt/OperationTable.mjs +0 -67
  484. package/esm2020/src/rt/Recompute.mjs +0 -355
  485. package/esm2020/src/rt/RecomputeTable.mjs +0 -63
  486. package/esm2020/src/rt/RemoteDataviewHeader.mjs +0 -108
  487. package/esm2020/src/rt/ResultValue.mjs +0 -12
  488. package/esm2020/src/rt/TableCache.mjs +0 -177
  489. package/esm2020/src/rt/TableCacheManager.mjs +0 -67
  490. package/esm2020/src/rt/Transaction.mjs +0 -53
  491. package/esm2020/src/security/UserDetails.mjs +0 -71
  492. package/esm2020/src/tasks/MGData.mjs +0 -552
  493. package/esm2020/src/tasks/MGDataCollection.mjs +0 -252
  494. package/esm2020/src/tasks/RCTimer.mjs +0 -63
  495. package/esm2020/src/tasks/RemoteTaskService.mjs +0 -45
  496. package/esm2020/src/tasks/Task.mjs +0 -2495
  497. package/esm2020/src/tasks/TaskBase.mjs +0 -87
  498. package/esm2020/src/tasks/TaskServiceBase.mjs +0 -25
  499. package/esm2020/src/tasks/TasksTable.mjs +0 -80
  500. package/esm2020/src/tasks/sort/Sort.mjs +0 -7
  501. package/esm2020/src/tasks/sort/SortCollection.mjs +0 -67
  502. package/esm2020/src/util/ConstUtils.mjs +0 -14
  503. package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
  504. package/esm2020/src/util/HeapSort.mjs +0 -70
  505. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +0 -74
  506. package/esm2020/src/util/MgPriorityQueue.mjs +0 -66
  507. package/esm2020/src/util/PrmMap.mjs +0 -151
  508. package/esm2020/src/util/ReturnResult.mjs +0 -46
  509. package/esm2020/src/util/ReturnResultBase.mjs +0 -18
  510. package/esm2020/src/util/Scrambler.mjs +0 -89
  511. package/esm2020/src/util/UniqueIDUtils.mjs +0 -12
  512. package/esm2020/src/util/cookie.service.mjs +0 -92
  513. package/fesm2015/magic-xpa-engine.mjs +0 -30835
  514. package/fesm2015/magic-xpa-engine.mjs.map +0 -1
  515. package/fesm2020/magic-xpa-engine.mjs.map +0 -1
@@ -0,0 +1,451 @@
1
+ import { BlobType, DisplayConvertor, PIC, VectorType } from '@magic-xpa/gui';
2
+ import { DateTime, NString, StringBuilder } from '@magic-xpa/mscorelib';
3
+ import { Constants, DateTimeUtils, InternalInterface, Logger, Queue, StorageAttribute, XMLConstants, XmlParser } from '@magic-xpa/utils';
4
+ import { FlowMonitorInterface } from '../FlowMonitorInterface';
5
+ import { ConstInterface } from '../ConstInterface';
6
+ export class FlowMonitorQueue {
7
+ static _instance = null;
8
+ static UNPRINTABLE_STR_LOG = "#UNPRINTABLE#";
9
+ static S_EVENT_STR1 = ">>Starts ";
10
+ static S_EVENT_STR2 = " Event";
11
+ static S_EVENT_PROPAGATED = "Event was propagated";
12
+ static E_EVENT_STR = "<<Ends Event";
13
+ static S_RECPRF_STR = "Starts Record Prefix";
14
+ static E_RECPRF_STR = "Ends Record Prefix";
15
+ static S_RECSUF_STR = "Starts Record Suffix";
16
+ static E_RECSUF_STR = "Ends Record Suffix";
17
+ static S_TASKSUF_STR = "Starts Task Suffix";
18
+ static E_TASKSUF_STR = "Ends Task Suffix";
19
+ static S_TASKPRF_STR = "Starts Task Prefix";
20
+ static E_TASKPRF_STR = "Ends Task Prefix";
21
+ static S_CTRLPRF_STR = "Starts Control Prefix - ";
22
+ static E_CTRLPRF_STR = "Ends Control Prefix - ";
23
+ static S_CTRLSUF_STR = "Starts Control Suffix - ";
24
+ static E_CTRLSUF_STR = "Ends Control Suffix - ";
25
+ static S_HANDLER_STR = "Starts handling event {0}";
26
+ static E_HANDLER_STR = "Ends handling event {0}";
27
+ static S_CTRLVER_STR = "Starts Control Verification for Control - ";
28
+ static E_CTRLVER_STR = "Ends Control Verification for Control - ";
29
+ static RECOMP_STR = "Recomputes - ";
30
+ static S_VARIABLE_STR = "Starts Variable Change - ";
31
+ static E_VARIABLE_STR = "Ends Variable Change - ";
32
+ static VARIABLE_REASON_STR = " - Reason - Previous value";
33
+ static FLW_PERFIX = "Flow - ";
34
+ static ACT_TASK = 'T';
35
+ static ACT_TASK_FLW = 'F';
36
+ static ACT_RECOMPUTE = 'R';
37
+ static ACT_FLW_OPER = 'T';
38
+ static LongTimePattern = "HH:mm:ss:SSS";
39
+ _queue = new Queue();
40
+ _enabled = false;
41
+ _isFlowOperation = false;
42
+ _isRecompute = false;
43
+ _isTask = false;
44
+ _isTaskFlow = false;
45
+ _isDataView = false;
46
+ ShouldSerialize = false;
47
+ static get Instance() {
48
+ if (FlowMonitorQueue._instance === null)
49
+ FlowMonitorQueue._instance = new FlowMonitorQueue();
50
+ return FlowMonitorQueue._instance;
51
+ }
52
+ addTaskCngMode(newTaskMode, taskInfo) {
53
+ let info = "Task Mode Change - ";
54
+ if (this._enabled && this._isTask) {
55
+ let activityItem = new ActivityItem(this, FlowMonitorQueue.ACT_TASK, FlowMonitorInterface.FLWMTR_CHNG_MODE);
56
+ switch (newTaskMode) {
57
+ case Constants.TASK_MODE_MODIFY:
58
+ info += "Modify";
59
+ break;
60
+ case Constants.TASK_MODE_CREATE:
61
+ info += "Create";
62
+ break;
63
+ case Constants.TASK_MODE_DELETE:
64
+ info += "Delete";
65
+ break;
66
+ case Constants.TASK_MODE_QUERY:
67
+ info += "Query";
68
+ break;
69
+ default:
70
+ info = null;
71
+ break;
72
+ }
73
+ activityItem.setInfo(info);
74
+ this._queue.put(activityItem);
75
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
76
+ }
77
+ }
78
+ fillData(parser) {
79
+ let endContext = parser.getXMLdata().indexOf("/>", parser.getCurrIndex());
80
+ if (endContext !== -1 && endContext < parser.getXMLdata().length) {
81
+ let tag = parser.getXMLsubstring(endContext);
82
+ parser.add2CurrIndex(tag.indexOf("flwmtr_config") + "flwmtr_config".length);
83
+ let tokens = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
84
+ Logger.Instance.WriteDevToLog("in FlowMonitorQueue.FillData: " + tokens.toString());
85
+ this.initElements(tokens);
86
+ parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
87
+ return;
88
+ }
89
+ Logger.Instance.WriteExceptionToLogWithMsg("in FlowMonitorQueue.FillData() out of string bounds");
90
+ }
91
+ initElements(tokensVector) {
92
+ for (let j = 0; j < tokensVector.length; j = j + 2) {
93
+ let attribute = tokensVector.get_Item(j);
94
+ let valueStr = tokensVector.get_Item(j + 1);
95
+ Logger.Instance.WriteDevToLog(attribute + " value: " + valueStr);
96
+ switch (attribute) {
97
+ case ConstInterface.MG_ATTR_TASK:
98
+ this._isTask = XmlParser.getBoolean(valueStr);
99
+ break;
100
+ case ConstInterface.MG_ATTR_TASKFLW:
101
+ this._isTaskFlow = XmlParser.getBoolean(valueStr);
102
+ break;
103
+ case ConstInterface.MG_TAG_DATAVIEW:
104
+ this._isDataView = XmlParser.getBoolean(valueStr);
105
+ break;
106
+ case ConstInterface.MG_ATTR_RECOMP:
107
+ this._isRecompute = XmlParser.getBoolean(valueStr);
108
+ break;
109
+ case ConstInterface.MG_ATTR_FLWOP:
110
+ this._isFlowOperation = XmlParser.getBoolean(valueStr);
111
+ break;
112
+ case ConstInterface.MG_ATTR_ENABLED:
113
+ this.enable(XmlParser.getBoolean(valueStr));
114
+ break;
115
+ default:
116
+ Logger.Instance.WriteExceptionToLogWithMsg("in FlowMonitorQueue.initElements(): unknown attribute: " + attribute);
117
+ break;
118
+ }
119
+ }
120
+ }
121
+ buildXML(message) {
122
+ if (!this._queue.isEmpty() && this.ShouldSerialize) {
123
+ message.Append(XMLConstants.START_TAG + ConstInterface.MG_TAG_FLWMTR_MSG + XMLConstants.TAG_CLOSE);
124
+ while (!this._queue.isEmpty()) {
125
+ let currAct = this._queue.get();
126
+ currAct.buildXML(message);
127
+ }
128
+ message.Append("</" + ConstInterface.MG_TAG_FLWMTR_MSG + XMLConstants.TAG_CLOSE);
129
+ }
130
+ }
131
+ isEmpty() {
132
+ return this._queue.isEmpty();
133
+ }
134
+ enable(value) {
135
+ let wasEnabled = this._enabled;
136
+ this._enabled = value;
137
+ this.ShouldSerialize = this._enabled;
138
+ return wasEnabled;
139
+ }
140
+ addTaskEvent(triggeredBy, state, taskInfo) {
141
+ if (this._enabled && this._isTask) {
142
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_TASK, FlowMonitorInterface.FLWMTR_EVENT);
143
+ let info;
144
+ switch (state) {
145
+ case FlowMonitorInterface.FLWMTR_START:
146
+ info = FlowMonitorQueue.S_EVENT_STR1 + triggeredBy + FlowMonitorQueue.S_EVENT_STR2;
147
+ break;
148
+ case FlowMonitorInterface.FLWMTR_END:
149
+ info = FlowMonitorQueue.E_EVENT_STR + triggeredBy;
150
+ break;
151
+ case FlowMonitorInterface.FLWMTR_PROPAGATE:
152
+ info = FlowMonitorQueue.S_EVENT_PROPAGATED;
153
+ break;
154
+ default:
155
+ info = null;
156
+ break;
157
+ }
158
+ act.setInfo(info);
159
+ this._queue.put(act);
160
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
161
+ }
162
+ }
163
+ appendVirtualsAndParameters(currentValues) {
164
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_TASK_FLW, InternalInterface.MG_ACT_REC_PREFIX);
165
+ act.setInfo(currentValues);
166
+ this._queue.put(act);
167
+ }
168
+ addDataViewFlow(task) {
169
+ if (this._isDataView) {
170
+ let fldTab = task.DataView.GetFieldsTab();
171
+ let preparedDisplayString = "";
172
+ let finaldisplayData = "\n";
173
+ let fldValue;
174
+ let data = "";
175
+ for (let i = 0; i < fldTab.getSize(); i++) {
176
+ let fldDef = fldTab.getField(i);
177
+ if (!fldDef.IsEventHandlerField && (fldDef.IsVirtual && !fldDef.VirAsReal) || fldDef.isParam()) {
178
+ fldValue = fldDef.isNull() ? fldDef.getNullValue() : fldDef.getValue(true);
179
+ data = this.getFieldData(fldDef.getType(), fldValue, fldDef.getPicture(), fldDef.getCellsType(), task);
180
+ preparedDisplayString = this.PrepareDisplayString(fldDef.isParam(), fldDef.getVarName(), data, true);
181
+ finaldisplayData = finaldisplayData + preparedDisplayString + "\n";
182
+ }
183
+ }
184
+ this.appendVirtualsAndParameters(finaldisplayData);
185
+ }
186
+ }
187
+ getFieldData(Storagetype, data, picture, vecCellType, task) {
188
+ switch (Storagetype) {
189
+ case StorageAttribute.DOTNET:
190
+ data = FlowMonitorQueue.UNPRINTABLE_STR_LOG;
191
+ break;
192
+ case StorageAttribute.BLOB:
193
+ {
194
+ if (BlobType.isValidBlob(data)) {
195
+ let contentType = BlobType.getContentType(data);
196
+ if (contentType == BlobType.CONTENT_TYPE_ANSI || contentType == BlobType.CONTENT_TYPE_UNICODE)
197
+ data = data != null ? BlobType.getString(data) : "";
198
+ else
199
+ data = FlowMonitorQueue.UNPRINTABLE_STR_LOG;
200
+ }
201
+ else
202
+ data = "";
203
+ }
204
+ break;
205
+ case StorageAttribute.NUMERIC:
206
+ case StorageAttribute.DATE:
207
+ case StorageAttribute.TIME:
208
+ let conv = DisplayConvertor.Instance;
209
+ data = conv.mg2disp(data, " ", new PIC(picture, Storagetype, task.getCompIdx()), false, task.getCompIdx(), false);
210
+ break;
211
+ case StorageAttribute.BLOB_VECTOR:
212
+ let vecOutData;
213
+ if (data == null) {
214
+ vecOutData = "[]";
215
+ }
216
+ else {
217
+ let cellAtt = vecCellType;
218
+ let vector = new VectorType(data);
219
+ if (cellAtt == StorageAttribute.BLOB && !VectorType.validateBlobContents(data))
220
+ vecOutData = "[]";
221
+ else {
222
+ let vecSize = VectorType.getVecSize(data);
223
+ let cellPicture = (cellAtt == StorageAttribute.NUMERIC || cellAtt == StorageAttribute.DATE || cellAtt == StorageAttribute.TIME) ? PIC.buildPicture(cellAtt, vector.getVecCell(1), task.getCompIdx(), true).getFormat() : picture;
224
+ vecOutData = "[";
225
+ for (let i = 0; i < vecSize; i++) {
226
+ vecOutData += this.getFieldData(cellAtt, vector.getVecCell(i + 1), cellPicture, vecCellType, task);
227
+ vecOutData += i < vecSize - 1 ? "," : "]";
228
+ }
229
+ }
230
+ }
231
+ data = vecOutData;
232
+ break;
233
+ case StorageAttribute.BOOLEAN:
234
+ data = data == "1" ? "TRUE" : "FALSE";
235
+ break;
236
+ }
237
+ return data;
238
+ }
239
+ PrepareDisplayString(mode, name, valueContent, addDoubleQuotes) {
240
+ let str = "";
241
+ let finalStringToDisplay = "";
242
+ if (addDoubleQuotes)
243
+ finalStringToDisplay = finalStringToDisplay + "\"";
244
+ finalStringToDisplay = finalStringToDisplay + name;
245
+ if (addDoubleQuotes)
246
+ finalStringToDisplay = finalStringToDisplay + "\"";
247
+ let paddedName = this.padRight(name, 34);
248
+ let formatOfStringVirtual = `Virtual`;
249
+ let formatOfStringParameter = `Parameter`;
250
+ str = (mode ? formatOfStringParameter : formatOfStringVirtual) + " : " + `${paddedName}` + " : " + `${valueContent.trim()}`;
251
+ return str;
252
+ }
253
+ padRight = (string, length, character = ' ') => {
254
+ let result = "";
255
+ let totalLength = length - string.length;
256
+ for (let i = 0; i < totalLength; i++) {
257
+ result = character + result;
258
+ }
259
+ result = result + string;
260
+ return result;
261
+ };
262
+ addTaskFlowRec(id, state, taskInfo) {
263
+ if (this._enabled && this._isTaskFlow) {
264
+ let info;
265
+ switch (id) {
266
+ case InternalInterface.MG_ACT_REC_PREFIX:
267
+ info = state === FlowMonitorInterface.FLWMTR_START
268
+ ? FlowMonitorQueue.S_RECPRF_STR
269
+ : FlowMonitorQueue.E_RECPRF_STR;
270
+ id = FlowMonitorInterface.FLWMTR_PREFIX;
271
+ break;
272
+ case InternalInterface.MG_ACT_REC_SUFFIX:
273
+ info = state === FlowMonitorInterface.FLWMTR_START
274
+ ? FlowMonitorQueue.S_RECSUF_STR
275
+ : FlowMonitorQueue.E_RECSUF_STR;
276
+ id = FlowMonitorInterface.FLWMTR_SUFFIX;
277
+ break;
278
+ case InternalInterface.MG_ACT_TASK_PREFIX:
279
+ info = state === FlowMonitorInterface.FLWMTR_START
280
+ ? FlowMonitorQueue.S_TASKPRF_STR
281
+ : FlowMonitorQueue.E_TASKPRF_STR;
282
+ id = FlowMonitorInterface.FLWMTR_PREFIX;
283
+ break;
284
+ case InternalInterface.MG_ACT_TASK_SUFFIX:
285
+ info = state === FlowMonitorInterface.FLWMTR_START
286
+ ? FlowMonitorQueue.S_TASKSUF_STR
287
+ : FlowMonitorQueue.E_TASKSUF_STR;
288
+ id = FlowMonitorInterface.FLWMTR_SUFFIX;
289
+ break;
290
+ default:
291
+ info = null;
292
+ break;
293
+ }
294
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_TASK_FLW, id);
295
+ act.setInfo(info);
296
+ this._queue.put(act);
297
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
298
+ }
299
+ }
300
+ addTaskFlowFld(id, fldName, state, taskInfo) {
301
+ this.addTaskFlowCtrl(id, fldName, state, taskInfo);
302
+ }
303
+ addTaskFlowCtrl(id, ctrlName, state, taskInfo) {
304
+ if (this._enabled && this._isTaskFlow) {
305
+ let info;
306
+ switch (id) {
307
+ case InternalInterface.MG_ACT_VARIABLE:
308
+ info = state === FlowMonitorInterface.FLWMTR_START
309
+ ? FlowMonitorQueue.S_VARIABLE_STR
310
+ : FlowMonitorQueue.E_VARIABLE_STR;
311
+ id = FlowMonitorInterface.FLWMTR_VARCHG_VALUE;
312
+ break;
313
+ case InternalInterface.MG_ACT_CTRL_PREFIX:
314
+ info = state === FlowMonitorInterface.FLWMTR_START
315
+ ? FlowMonitorQueue.S_CTRLPRF_STR
316
+ : FlowMonitorQueue.E_CTRLPRF_STR;
317
+ id = FlowMonitorInterface.FLWMTR_CTRL_PREFIX;
318
+ break;
319
+ case InternalInterface.MG_ACT_CTRL_SUFFIX:
320
+ info = state === FlowMonitorInterface.FLWMTR_START
321
+ ? FlowMonitorQueue.S_CTRLSUF_STR
322
+ : FlowMonitorQueue.E_CTRLSUF_STR;
323
+ id = FlowMonitorInterface.FLWMTR_CTRL_SUFFIX;
324
+ break;
325
+ case InternalInterface.MG_ACT_CTRL_VERIFICATION:
326
+ info = state === FlowMonitorInterface.FLWMTR_START
327
+ ? FlowMonitorQueue.S_CTRLVER_STR
328
+ : FlowMonitorQueue.E_CTRLVER_STR;
329
+ id = FlowMonitorInterface.FLWMTR_CTRL_SUFFIX;
330
+ break;
331
+ default:
332
+ info = null;
333
+ break;
334
+ }
335
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_TASK_FLW, id);
336
+ if (info !== null) {
337
+ info = info + ctrlName;
338
+ if (id === FlowMonitorInterface.FLWMTR_VARCHG_VALUE && state === FlowMonitorInterface.FLWMTR_START)
339
+ info = info + FlowMonitorQueue.VARIABLE_REASON_STR;
340
+ act.setInfo(info);
341
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
342
+ }
343
+ this._queue.put(act);
344
+ }
345
+ }
346
+ addTaskFlowHandler(handlerId, state, taskInfo) {
347
+ if (this._enabled && this._isTaskFlow) {
348
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_TASK_FLW, FlowMonitorInterface.FLWMTR_TSK_HANDLER);
349
+ let info;
350
+ switch (state) {
351
+ case FlowMonitorInterface.FLWMTR_START:
352
+ info = NString.Format(FlowMonitorQueue.S_HANDLER_STR, handlerId);
353
+ break;
354
+ case FlowMonitorInterface.FLWMTR_END:
355
+ info = NString.Format(FlowMonitorQueue.E_HANDLER_STR, handlerId);
356
+ break;
357
+ default:
358
+ info = null;
359
+ break;
360
+ }
361
+ if (info !== null) {
362
+ act.setInfo(info);
363
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
364
+ }
365
+ this._queue.put(act);
366
+ }
367
+ }
368
+ addRecompute(triggeredByVarName, taskInfo) {
369
+ if (this._enabled && this._isRecompute) {
370
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_RECOMPUTE, FlowMonitorInterface.FLWMTR_RECOMP);
371
+ let info = FlowMonitorQueue.RECOMP_STR + triggeredByVarName;
372
+ act.setInfo(info);
373
+ this._queue.put(act);
374
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
375
+ }
376
+ }
377
+ async addFlowFieldOperation(oper, bExecuted, taskInfo) {
378
+ if (this._enabled && this._isFlowOperation) {
379
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_FLW_OPER, FlowMonitorInterface.FLWMTR_DATA_OPER);
380
+ let buffer = new StringBuilder(FlowMonitorQueue.FLW_PERFIX);
381
+ await oper.AddFlowDescription(buffer);
382
+ buffer.Append(' ');
383
+ if (!bExecuted)
384
+ buffer.Append("[Not Executed]");
385
+ let info = buffer.ToString();
386
+ act.setInfo(info);
387
+ this._queue.put(act);
388
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
389
+ }
390
+ }
391
+ addFlowOperationUpdate(state, taskInfo) {
392
+ if (this._enabled && this._isFlowOperation) {
393
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_FLW_OPER, FlowMonitorInterface.FLWMTR_DATA_OPER);
394
+ let info;
395
+ if (state === FlowMonitorInterface.FLWMTR_START)
396
+ info = "Starts Update";
397
+ else
398
+ info = "Ends Update";
399
+ act.setInfo(info);
400
+ this._queue.put(act);
401
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + info, true);
402
+ }
403
+ }
404
+ addFlowVerifyInfo(info, taskInfo) {
405
+ this.addFlowInfo(info, taskInfo);
406
+ }
407
+ addFlowInvokeOsInfo(info, taskInfo) {
408
+ this.addFlowInfo(info, taskInfo);
409
+ }
410
+ addFlowInfo(info, taskInfo) {
411
+ if (!this._enabled)
412
+ return;
413
+ let act = new ActivityItem(this, FlowMonitorQueue.ACT_FLW_OPER, FlowMonitorInterface.FLWMTR_DATA_OPER);
414
+ let buffer = new StringBuilder("");
415
+ if (!(info === "")) {
416
+ buffer.Append(" >> INFORMATION >> ");
417
+ buffer.Append(info);
418
+ }
419
+ let newInfo = buffer.ToString();
420
+ act.setInfo(newInfo);
421
+ this._queue.put(act);
422
+ Logger.Instance.WriteSupportToLog(taskInfo + ": " + newInfo, true);
423
+ }
424
+ }
425
+ class ActivityItem {
426
+ _id = 0;
427
+ _type = null;
428
+ _info = null;
429
+ _time = null;
430
+ constructor(enclosingInstance, type, id) {
431
+ this._type = type;
432
+ this._id = id;
433
+ this.setTime();
434
+ }
435
+ setTime() {
436
+ this._time = DateTimeUtils.ToString(DateTime.Now, FlowMonitorQueue.LongTimePattern, Logger.Instance);
437
+ }
438
+ setInfo(info_) {
439
+ this._info = ((info_ !== null) ? XmlParser.escape(info_) : info_);
440
+ }
441
+ buildXML(message) {
442
+ message.Append(XMLConstants.START_TAG + ConstInterface.MG_TAG_FLWMTR_ACT);
443
+ message.Append(" " + XMLConstants.MG_ATTR_TYPE + "=\"" + this._type + "\"");
444
+ message.Append(" " + XMLConstants.MG_ATTR_ID + "=\"" + this._id + "\"");
445
+ if (this._info != null)
446
+ message.Append(" " + ConstInterface.MG_ATTR_INFO + "=\"" + this._info + "\"");
447
+ message.Append(" " + ConstInterface.MG_ATTR_TIME + "=\"" + this._time + "\"");
448
+ message.Append(XMLConstants.TAG_TERM);
449
+ }
450
+ }
451
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd01vbml0b3JRdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvdXRpbC9GbG93TW9uaXRvclF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQWtDLEdBQUcsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQUMsUUFBUSxFQUFRLE9BQU8sRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RSxPQUFPLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUV2SSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFLakQsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQUMsU0FBUyxHQUFxQixJQUFJLENBQUM7SUFDMUMsTUFBTSxDQUFDLG1CQUFtQixHQUFXLGVBQWUsQ0FBQztJQUNyRCxNQUFNLENBQUMsWUFBWSxHQUFXLFdBQVcsQ0FBQztJQUMxQyxNQUFNLENBQUMsWUFBWSxHQUFXLFFBQVEsQ0FBQztJQUN2QyxNQUFNLENBQUMsa0JBQWtCLEdBQVcsc0JBQXNCLENBQUM7SUFDM0QsTUFBTSxDQUFDLFdBQVcsR0FBVyxjQUFjLENBQUM7SUFFNUMsTUFBTSxDQUFDLFlBQVksR0FBVyxzQkFBc0IsQ0FBQztJQUNyRCxNQUFNLENBQUMsWUFBWSxHQUFXLG9CQUFvQixDQUFDO0lBQ25ELE1BQU0sQ0FBQyxZQUFZLEdBQVcsc0JBQXNCLENBQUM7SUFDckQsTUFBTSxDQUFDLFlBQVksR0FBVyxvQkFBb0IsQ0FBQztJ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LFNBQVMsR0FBRyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMxRSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzVFLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxVQUFVLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDeEUsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUk7WUFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLFlBQVksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNoRixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlFLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmxvYlR5cGUsIERpc3BsYXlDb252ZXJ0b3IsIEZpZWxkc1RhYmxlLCBJRmxvd01vbml0b3JRdWV1ZSwgUElDLCBWZWN0b3JUeXBlfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7RGF0ZVRpbWUsIExpc3QsIE5TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtDb25zdGFudHMsIERhdGVUaW1lVXRpbHMsIEludGVybmFsSW50ZXJmYWNlLCBMb2dnZXIsIFF1ZXVlLCBTdG9yYWdlQXR0cmlidXRlLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlcn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7T3BlcmF0aW9ufSBmcm9tICcuLi9ydC9PcGVyYXRpb24nO1xyXG5pbXBvcnQge0Zsb3dNb25pdG9ySW50ZXJmYWNlfSBmcm9tICcuLi9GbG93TW9uaXRvckludGVyZmFjZSc7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uL3Rhc2tzL1Rhc2snO1xyXG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gJy4uL2RhdGEvRmllbGQnO1xyXG5cclxuLy8gQGR5bmFtaWNcclxuZXhwb3J0IGNsYXNzIEZsb3dNb25pdG9yUXVldWUgaW1wbGVtZW50cyBJRmxvd01vbml0b3JRdWV1ZSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBGbG93TW9uaXRvclF1ZXVlID0gbnVsbDtcclxuICBwcml2YXRlIHN0YXRpYyBVTlBSSU5UQUJMRV9TVFJfTE9HOiBzdHJpbmcgPSBcIiNVTlBSSU5UQUJMRSNcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0VWRU5UX1NUUjE6IHN0cmluZyA9IFwiPj5TdGFydHMgXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19FVkVOVF9TVFIyOiBzdHJpbmcgPSBcIiBFdmVudFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfRVZFTlRfUFJPUEFHQVRFRDogc3RyaW5nID0gXCJFdmVudCB3YXMgcHJvcGFnYXRlZFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfRVZFTlRfU1RSOiBzdHJpbmcgPSBcIjw8RW5kcyBFdmVudFwiO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBTX1JFQ1BSRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFJlY29yZCBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1JFQ1BSRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBSZWNvcmQgUHJlZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19SRUNTVUZfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBSZWNvcmQgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9SRUNTVUZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgUmVjb3JkIFN1ZmZpeFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfVEFTS1NVRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFRhc2sgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9UQVNLU1VGX1NUUjogc3RyaW5nID0gXCJFbmRzIFRhc2sgU3VmZml4XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19UQVNLUFJGX1NUUjogc3RyaW5nID0gXCJTdGFydHMgVGFzayBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBFX1RBU0tQUkZfU1RSOiBzdHJpbmcgPSBcIkVuZHMgVGFzayBQcmVmaXhcIjtcclxuICBwcml2YXRlIHN0YXRpYyBTX0NUUkxQUkZfU1RSOiBzdHJpbmcgPSBcIlN0YXJ0cyBDb250cm9sIFByZWZpeCAtIFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfQ1RSTFBSRl9TVFI6IHN0cmluZyA9IFwiRW5kcyBDb250cm9sIFByZWZpeCAtIFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfQ1RSTFNVRl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIENvbnRyb2wgU3VmZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9DVFJMU1VGX1NUUjogc3RyaW5nID0gXCJFbmRzIENvbnRyb2wgU3VmZml4IC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19IQU5ETEVSX1NUUjogc3RyaW5nID0gXCJTdGFydHMgaGFuZGxpbmcgZXZlbnQgezB9XCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9IQU5ETEVSX1NUUjogc3RyaW5nID0gXCJFbmRzIGhhbmRsaW5nIGV2ZW50IHswfVwiO1xyXG4gIHByaXZhdGUgc3RhdGljIFNfQ1RSTFZFUl9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIENvbnRyb2wgVmVyaWZpY2F0aW9uIGZvciBDb250cm9sIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgRV9DVFJMVkVSX1NUUjogc3RyaW5nID0gXCJFbmRzIENvbnRyb2wgVmVyaWZpY2F0aW9uIGZvciBDb250cm9sIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgUkVDT01QX1NUUjogc3RyaW5nID0gXCJSZWNvbXB1dGVzIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgU19WQVJJQUJMRV9TVFI6IHN0cmluZyA9IFwiU3RhcnRzIFZhcmlhYmxlIENoYW5nZSAtIFwiO1xyXG4gIHByaXZhdGUgc3RhdGljIEVfVkFSSUFCTEVfU1RSOiBzdHJpbmcgPSBcIkVuZHMgVmFyaWFibGUgQ2hhbmdlIC0gXCI7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgVkFSSUFCTEVfUkVBU09OX1NUUjogc3RyaW5nID0gXCIgLSBSZWFzb24gLSBQcmV2aW91cyB2YWx1ZVwiO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgRkxXX1BFUkZJWDogc3RyaW5nID0gXCJGbG93IC0gXCI7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEFDVF9UQVNLOiBzdHJpbmcgPSAnVCc7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX1RBU0tfRkxXOiBzdHJpbmcgPSAnRic7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgQUNUX1JFQ09NUFVURTogc3RyaW5nID0gJ1InO1xyXG4gIHByaXZhdGUgc3RhdGljIEFDVF9GTFdfT1BFUjogc3RyaW5nID0gJ1QnO1xyXG5cclxuICBzdGF0aWMgTG9uZ1RpbWVQYXR0ZXJuID0gXCJISDptbTpzczpTU1NcIjtcclxuICBwcml2YXRlIF9xdWV1ZTogUXVldWU8QWN0aXZpdHlJdGVtPiA9IG5ldyBRdWV1ZTxBY3Rpdml0eUl0ZW0+KCk7XHJcbiAgcHJpdmF0ZSBfZW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzRmxvd09wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzUmVjb21wdXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNUYXNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNUYXNrRmxvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzRGF0YVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBTaG91bGRTZXJpYWxpemU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc3RhdGljIGdldCBJbnN0YW5jZSgpOiBGbG93TW9uaXRvclF1ZXVlIHtcclxuICAgIGlmIChGbG93TW9uaXRvclF1ZXVlLl9pbnN0YW5jZSA9PT0gbnVsbClcclxuICAgICAgRmxvd01vbml0b3JRdWV1ZS5faW5zdGFuY2UgPSBuZXcgRmxvd01vbml0b3JRdWV1ZSgpO1xyXG5cclxuICAgIHJldHVybiBGbG93TW9uaXRvclF1ZXVlLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIGFkZFRhc2tDbmdNb2RlKG5ld1Rhc2tNb2RlOiBzdHJpbmcsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBpbmZvOiBzdHJpbmcgPSBcIlRhc2sgTW9kZSBDaGFuZ2UgLSBcIjtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFzaykge1xyXG4gICAgICBsZXQgYWN0aXZpdHlJdGVtOiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0ssIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9DSE5HX01PREUpO1xyXG5cclxuICAgICAgc3dpdGNoIChuZXdUYXNrTW9kZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9NT0RJRlk6XHJcbiAgICAgICAgICBpbmZvICs9IFwiTW9kaWZ5XCI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9DUkVBVEU6XHJcbiAgICAgICAgICBpbmZvICs9IFwiQ3JlYXRlXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9ERUxFVEU6XHJcbiAgICAgICAgICBpbmZvICs9IFwiRGVsZXRlXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RhbnRzLlRBU0tfTU9ERV9RVUVSWTpcclxuICAgICAgICAgIGluZm8gKz0gXCJRdWVyeVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaW5mbyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgYWN0aXZpdHlJdGVtLnNldEluZm8oaW5mbyk7XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3Rpdml0eUl0ZW0pO1xyXG5cclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlU3VwcG9ydFRvTG9nKHRhc2tJbmZvICtcIjogXCIgKyBpbmZvLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSB0aGUgZGF0YVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEocGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoXCIvPlwiLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG4gICAgaWYgKGVuZENvbnRleHQgIT09IC0xICYmIGVuZENvbnRleHQgPCBwYXJzZXIuZ2V0WE1MZGF0YSgpLmxlbmd0aCkge1xyXG4gICAgICAvLyBmaW5kIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihcImZsd210cl9jb25maWdcIikgKyBcImZsd210cl9jb25maWdcIi5sZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IHRva2VuczogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVEZXZUb0xvZyhcImluIEZsb3dNb25pdG9yUXVldWUuRmlsbERhdGE6IFwiICsgdG9rZW5zLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgdGhpcy5pbml0RWxlbWVudHModG9rZW5zKTtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aCk7IC8vIHRvIGRlbGV0ZSBcIi8+XCIgdG9vXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluICBGbG93TW9uaXRvclF1ZXVlLkZpbGxEYXRhKCkgb3V0IG9mIHN0cmluZyBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIFhNTCBkYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmF0dHJpYnV0ZS92YWx1ZS8uLi5hdHRyaWJ1dGUvdmFsdWUvIHZlY3RvcjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkIHtcclxuXHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaiA9IGogKyAyKSB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9IDxzdHJpbmc+dG9rZW5zVmVjdG9yLmdldF9JdGVtKGopO1xyXG4gICAgICBsZXQgdmFsdWVTdHI6IHN0cmluZyA9IDxzdHJpbmc+dG9rZW5zVmVjdG9yLmdldF9JdGVtKGogKyAxKTtcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRGV2VG9Mb2coYXR0cmlidXRlICsgXCIgdmFsdWU6IFwiICsgdmFsdWVTdHIpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEFTSzpcclxuICAgICAgICAgIHRoaXMuX2lzVGFzayA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEFTS0ZMVzpcclxuICAgICAgICAgIHRoaXMuX2lzVGFza0Zsb3cgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfREFUQVZJRVc6XHJcbiAgICAgICAgICB0aGlzLl9pc0RhdGFWaWV3ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9SRUNPTVA6XHJcbiAgICAgICAgICB0aGlzLl9pc1JlY29tcHV0ZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRkxXT1A6XHJcbiAgICAgICAgICB0aGlzLl9pc0Zsb3dPcGVyYXRpb24gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0VOQUJMRUQ6XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZShYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBGbG93TW9uaXRvclF1ZXVlLmluaXRFbGVtZW50cygpOiB1bmtub3duICBhdHRyaWJ1dGU6IFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYnVpbGQgWE1MIGFuZCBlbXB0eSB0aGUgaW5uZXIgcXVldWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5fcXVldWUuaXNFbXB0eSgpICYmIHRoaXMuU2hvdWxkU2VyaWFsaXplKSB7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5TVEFSVF9UQUcgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRkxXTVRSX01TRyArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UpO1xyXG5cclxuICAgICAgd2hpbGUgKCF0aGlzLl9xdWV1ZS5pc0VtcHR5KCkpIHtcclxuICAgICAgICBsZXQgY3VyckFjdDogQWN0aXZpdHlJdGVtID0gPEFjdGl2aXR5SXRlbT50aGlzLl9xdWV1ZS5nZXQoKTtcclxuICAgICAgICBjdXJyQWN0LmJ1aWxkWE1MKG1lc3NhZ2UpO1xyXG4gICAgICB9IC8vIGZpbGwgYWN0aXZpdGllc1xyXG5cclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCI8L1wiICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0ZMV01UUl9NU0cgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFKTtcclxuICAgIH0gLy8gdGhlIHF1ZXVlIGlzIG5vdCBlbXB0eVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGlzIHRoZSBGbG93IE1vbml0b3IgUXVldWUgZW1wdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcXVldWUuaXNFbXB0eSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGVuYWJsZSB0aGUgZmxvdyBtb25pdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dGhlIHByZXZpb3VzIHN0YXRlIChlbmFibGVkL2Rpc2FibGVkKTwvcmV0dXJucz5cclxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcclxuICAgIGxldCB3YXNFbmFibGVkOiBib29sZWFuID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMuU2hvdWxkU2VyaWFsaXplID0gdGhpcy5fZW5hYmxlZDtcclxuICAgIHJldHVybiB3YXNFbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFkZCBBY3Rpdml0aWVzIHRvIHRoZSBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0cmlnZ2VyZWRCeVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZTwvcGFyYW0+XHJcbiAgYWRkVGFza0V2ZW50KHRyaWdnZXJlZEJ5OiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzVGFzaykge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0ssIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FVkVOVCk7XHJcblxyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQ6XHJcbiAgICAgICAgICBpbmZvID0gRmxvd01vbml0b3JRdWV1ZS5TX0VWRU5UX1NUUjEgKyB0cmlnZ2VyZWRCeSArIEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9TVFIyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0VORDpcclxuICAgICAgICAgIGluZm8gPSBGbG93TW9uaXRvclF1ZXVlLkVfRVZFTlRfU1RSICsgdHJpZ2dlcmVkQnk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUFJPUEFHQVRFOlxyXG4gICAgICAgICAgaW5mbyA9IEZsb3dNb25pdG9yUXVldWUuU19FVkVOVF9QUk9QQUdBVEVEO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRWaXJ0dWFsc0FuZFBhcmFtZXRlcnMoY3VycmVudFZhbHVlczogc3RyaW5nKSA6IHZvaWRcclxuICB7XHJcbiAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0tfRkxXLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWCk7XHJcbiAgICBhY3Quc2V0SW5mbyhjdXJyZW50VmFsdWVzKTtcclxuICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gLy8vIDxzdW1tYXJ5PlxyXG4gIC8vIC8vLyAgIGFkZCB2aXJ0dWFsIGFuZCBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYW5kIHNlbmQgaXQgdG8gc2VydmVyIG9uIHJlY29yZCBwcmVmaXhcclxuICAvLyAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPlxyXG4gIC8vIC8vLyA8L3BhcmFtPlxyXG4gIGFkZERhdGFWaWV3Rmxvdyh0YXNrOiBUYXNrKSA6IHZvaWRcclxuICB7IFxyXG4gICAgICBpZiAodGhpcy5faXNEYXRhVmlldylcclxuICAgICAge1xyXG4gICAgICAgICAgbGV0IGZsZFRhYjogRmllbGRzVGFibGUgPSB0YXNrLkRhdGFWaWV3LkdldEZpZWxkc1RhYigpO1xyXG4gICAgICAgICAgbGV0IHByZXBhcmVkRGlzcGxheVN0cmluZzogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgIGxldCBmaW5hbGRpc3BsYXlEYXRhOiBzdHJpbmcgPSBcIlxcblwiO1xyXG4gICAgICAgICAgbGV0IGZsZFZhbHVlOiBzdHJpbmc7XHJcbiAgICAgICAgICBsZXQgZGF0YTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBmbGRUYWIuZ2V0U2l6ZSgpOyBpKyspXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbGV0IGZsZERlZjogRmllbGQgPSA8RmllbGQ+ZmxkVGFiLmdldEZpZWxkKGkpO1xyXG4gICAgICAgICAgICAgIGlmICghZmxkRGVmLklzRXZlbnRIYW5kbGVyRmllbGQgJiYgKGZsZERlZi5Jc1ZpcnR1YWwgJiYgIWZsZERlZi5WaXJBc1JlYWwpIHx8IGZsZERlZi5pc1BhcmFtKCkpXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBmbGRWYWx1ZSA9IGZsZERlZi5pc051bGwoKSA/IGZsZERlZi5nZXROdWxsVmFsdWUoKSA6IGZsZERlZi5nZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0RmllbGREYXRhKGZsZERlZi5nZXRUeXBlKCksIGZsZFZhbHVlLCBmbGREZWYuZ2V0UGljdHVyZSgpLCBmbGREZWYuZ2V0Q2VsbHNUeXBlKCksIHRhc2spO1xyXG4gICAgICAgICAgICAgICAgICBwcmVwYXJlZERpc3BsYXlTdHJpbmcgPSB0aGlzLlByZXBhcmVEaXNwbGF5U3RyaW5nKGZsZERlZi5pc1BhcmFtKCksIGZsZERlZi5nZXRWYXJOYW1lKCksIGRhdGEsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICBmaW5hbGRpc3BsYXlEYXRhID0gZmluYWxkaXNwbGF5RGF0YSArIHByZXBhcmVkRGlzcGxheVN0cmluZyArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5hcHBlbmRWaXJ0dWFsc0FuZFBhcmFtZXRlcnMoZmluYWxkaXNwbGF5RGF0YSk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAvLyAvLy8gPHN1bW1hcnk+XHJcbiAgLy8gLy8vICAgR2V0IHZpcnR1YWxzIGFuZCBwYXJhbWV0ZXIgdmFsdWVzLlxyXG4gIC8vIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8gLy8vIDxwYXJhbSBuYW1lID0gXCJTdG9yYWdldHlwZVwiPjwvcGFyYW0+XHJcbiAgLy8gLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhXCI+PC9wYXJhbT5cclxuICAvLyAvLy8gPHBhcmFtIG5hbWUgPSBcInBpY3R1cmVcIj48L3BhcmFtPlxyXG4gIC8vIC8vLyA8cGFyYW0gbmFtZSA9IFwidmVjQ2VsbFR5cGVcIj48L3BhcmFtPlxyXG4gIC8vIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPjwvcGFyYW0+XHJcbiAgLy8gLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBnZXRGaWVsZERhdGEoU3RvcmFnZXR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIGRhdGE6IHN0cmluZywgcGljdHVyZTogc3RyaW5nLCB2ZWNDZWxsVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgdGFzazogVGFzayk6IHN0cmluZ1xyXG4gIHtcclxuICAgICAgc3dpdGNoIChTdG9yYWdldHlwZSlcclxuICAgICAge1xyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRPVE5FVDpcclxuICAgICAgICAgICAgICBkYXRhID0gRmxvd01vbml0b3JRdWV1ZS5VTlBSSU5UQUJMRV9TVFJfTE9HO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmKEJsb2JUeXBlLmlzVmFsaWRCbG9iKGRhdGEpKVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9IEJsb2JUeXBlLmdldENvbnRlbnRUeXBlKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUgPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0FOU0kgfHwgY29udGVudFR5cGUgPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX1VOSUNPREUpXHJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gQmxvYlR5cGUuZ2V0U3RyaW5nKGRhdGEpIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEZsb3dNb25pdG9yUXVldWUuVU5QUklOVEFCTEVfU1RSX0xPRztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgZGF0YSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgICAgICBsZXQgY29udjogRGlzcGxheUNvbnZlcnRvcj0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZTtcclxuICAgICAgICAgICAgICBkYXRhID0gY29udi5tZzJkaXNwKGRhdGEsIFwiIFwiLCBuZXcgUElDKHBpY3R1cmUsIFN0b3JhZ2V0eXBlLCB0YXNrLmdldENvbXBJZHgoKSksIGZhbHNlLCB0YXNrLmdldENvbXBJZHgoKSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICAgICAgICBsZXQgdmVjT3V0RGF0YTogc3RyaW5nO1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhID0gXCJbXVwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2VsbEF0dDogU3RvcmFnZUF0dHJpYnV0ZSA9IHZlY0NlbGxUeXBlO1xyXG4gICAgICAgICAgICAgICAgICBsZXQgdmVjdG9yOiBWZWN0b3JUeXBlID0gbmV3IFZlY3RvclR5cGUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjZWxsQXR0ID09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiAhVmVjdG9yVHlwZS52YWxpZGF0ZUJsb2JDb250ZW50cyhkYXRhKSlcclxuICAgICAgICAgICAgICAgICAgICAgIHZlY091dERhdGEgPSBcIltdXCI7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHZlY1NpemU6IG51bWJlciA9IFZlY3RvclR5cGUuZ2V0VmVjU2l6ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsUGljdHVyZTogc3RyaW5nID0gKGNlbGxBdHQgPT0gU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDIHx8IGNlbGxBdHQgPT0gU3RvcmFnZUF0dHJpYnV0ZS5EQVRFIHx8IGNlbGxBdHQgPT0gU3RvcmFnZUF0dHJpYnV0ZS5USU1FKSA/IFBJQy5idWlsZFBpY3R1cmUoY2VsbEF0dCwgdmVjdG9yLmdldFZlY0NlbGwoMSksIHRhc2suZ2V0Q29tcElkeCgpLCB0cnVlKS5nZXRGb3JtYXQoKSA6IHBpY3R1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhID0gXCJbXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIDogbnVtYmVyID0gMDsgaSA8IHZlY1NpemU7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhICs9IHRoaXMuZ2V0RmllbGREYXRhKGNlbGxBdHQsIHZlY3Rvci5nZXRWZWNDZWxsKGkgKyAxKSwgY2VsbFBpY3R1cmUsIHZlY0NlbGxUeXBlLCB0YXNrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNPdXREYXRhICs9IGkgPCB2ZWNTaXplIC0gMSA/IFwiLFwiIDogXCJdXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGF0YSA9IHZlY091dERhdGE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgICAgICAgZGF0YSA9IGRhdGEgPT0gXCIxXCIgPyBcIlRSVUVcIiA6IFwiRkFMU0VcIjtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBQcmVwYXJlIGRpc3BsYXkgc3RyaW5nIHRoYXQgd2lsbCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgb24gcmVjb3JkIHByZWZpeC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibW9kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbHVlQ29udGVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhZGREb3VibGVRdW90ZXNcIj48L3BhcmFtPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgUHJlcGFyZURpc3BsYXlTdHJpbmcobW9kZTogYm9vbGVhbiwgbmFtZTogc3RyaW5nLCB2YWx1ZUNvbnRlbnQ6IHN0cmluZywgYWRkRG91YmxlUXVvdGVzOiBib29sZWFuKTogc3RyaW5nXHJcbiAge1xyXG4gICAgICBsZXQgIHN0cjogc3RyaW5nID0gXCJcIjtcclxuICAgICAgbGV0IGZpbmFsU3RyaW5nVG9EaXNwbGF5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICBpZiAoYWRkRG91YmxlUXVvdGVzKVxyXG4gICAgICAgICAgZmluYWxTdHJpbmdUb0Rpc3BsYXkgPSBmaW5hbFN0cmluZ1RvRGlzcGxheSArIFwiXFxcIlwiO1xyXG4gICAgICBmaW5hbFN0cmluZ1RvRGlzcGxheSA9IGZpbmFsU3RyaW5nVG9EaXNwbGF5ICsgbmFtZTtcclxuICAgICAgaWYgKGFkZERvdWJsZVF1b3RlcylcclxuICAgICAgICAgIGZpbmFsU3RyaW5nVG9EaXNwbGF5ID0gZmluYWxTdHJpbmdUb0Rpc3BsYXkgKyBcIlxcXCJcIjtcclxuXHJcbiAgICAgIGxldCBwYWRkZWROYW1lID0gdGhpcy5wYWRSaWdodChuYW1lLDM0KTtcclxuICAgICAgbGV0IGZvcm1hdE9mU3RyaW5nVmlydHVhbDpzdHJpbmcgPSBgVmlydHVhbGAgOy8vOiAke3BhZGRlZE5hbWV9IDogJHt2YWx1ZUNvbnRlbnR9YDtcclxuICAgICAgbGV0IGZvcm1hdE9mU3RyaW5nUGFyYW1ldGVyOiBzdHJpbmcgPSBgUGFyYW1ldGVyYDsvL2AgOiAke3BhZGRlZE5hbWV9IDogJHt2YWx1ZUNvbnRlbnR9YDtcclxuICAgICBcclxuICAgICAgc3RyID0gKG1vZGUgPyBmb3JtYXRPZlN0cmluZ1BhcmFtZXRlciA6IGZvcm1hdE9mU3RyaW5nVmlydHVhbCkgKyBcIiA6IFwiICtgJHtwYWRkZWROYW1lfWArIFwiIDogXCIrYCR7dmFsdWVDb250ZW50LnRyaW0oKX1gO1xyXG5cclxuICAgICAgcmV0dXJuIHN0cjtcclxuICB9XHJcblxyXG4gICBwcml2YXRlIHBhZFJpZ2h0ID0gKHN0cmluZzogc3RyaW5nLCBsZW5ndGg6IG51bWJlciwgY2hhcmFjdGVyOiBzdHJpbmcgPSAnICcpOiBzdHJpbmcgPT4ge1xyXG4gICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICBsZXQgdG90YWxMZW5ndGggPSBsZW5ndGggLSBzdHJpbmcubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbExlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHJlc3VsdCA9IGNoYXJhY3RlciArIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJlc3VsdCA9IHJlc3VsdCArIHN0cmluZztcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWRkIHRhc2sgZmxvdyBmb3IgcmVjb3JkIHByZWZpeCBvciBzdWZpeFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPmlzIEZMV01UUl9QUkVGSVggb3IgRkxXTVRSX1NVRkZJWFxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgZXZlbnQgdGFzayBhY3Rpdml0aWVcclxuICAvLy8gPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd1JlYyhpZDogbnVtYmVyLCBzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1Rhc2tGbG93KSB7XHJcbiAgICAgIGxldCBpbmZvOiBzdHJpbmc7XHJcblxyXG4gICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWDpcclxuICAgICAgICAgIGluZm8gPSBzdGF0ZSA9PT0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUXHJcbiAgICAgICAgICAgID8gRmxvd01vbml0b3JRdWV1ZS5TX1JFQ1BSRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfUkVDUFJGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1BSRUZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfU1VGRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfUkVDU1VGX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9SRUNTVUZfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1VGRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfVEFTS1BSRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfVEFTS1BSRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9QUkVGSVg7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19TVUZGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19UQVNLU1VGX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9UQVNLU1VGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaW5mbyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9UQVNLX0ZMVywgaWQpO1xyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPmlzIE1HX0FDVF9WQVJJQUJMRTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGROYW1lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInN0YXRlXCI+b2YgdGhlIGV2ZW50IHRhc2sgYWN0aXZpdGllPC9wYXJhbT5cclxuICBhZGRUYXNrRmxvd0ZsZChpZDogbnVtYmVyLCBmbGROYW1lOiBzdHJpbmcsIHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkVGFza0Zsb3dDdHJsKGlkLCBmbGROYW1lLCBzdGF0ZSwgdGFza0luZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPmlzIEZMV01UUl9DVFJMX1BSRUZJWCBvciBGTFdNVFJfQ1RSTF9TVUZGSVg8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybE5hbWVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhdGVcIj5vZiB0aGUgZXZlbnQgdGFzayBhY3Rpdml0aWU8L3BhcmFtPlxyXG4gIGFkZFRhc2tGbG93Q3RybChpZDogbnVtYmVyLCBjdHJsTmFtZTogc3RyaW5nLCBzdGF0ZTogbnVtYmVyLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZW5hYmxlZCAmJiB0aGlzLl9pc1Rhc2tGbG93KSB7XHJcbiAgICAgIGxldCBpbmZvOiBzdHJpbmc7XHJcblxyXG4gICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVkFSSUFCTEU6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19WQVJJQUJMRV9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfVkFSSUFCTEVfU1RSO1xyXG4gICAgICAgICAgaWQgPSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfVkFSQ0hHX1ZBTFVFO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfUFJFRklYOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfQ1RSTFBSRl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfQ1RSTFBSRl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9DVFJMX1BSRUZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9TVUZGSVg6XHJcbiAgICAgICAgICBpbmZvID0gc3RhdGUgPT09IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9TVEFSVFxyXG4gICAgICAgICAgICA/IEZsb3dNb25pdG9yUXVldWUuU19DVFJMU1VGX1NUUlxyXG4gICAgICAgICAgICA6IEZsb3dNb25pdG9yUXVldWUuRV9DVFJMU1VGX1NUUjtcclxuICAgICAgICAgIGlkID0gRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX0NUUkxfU1VGRklYO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfVkVSSUZJQ0FUSU9OOlxyXG4gICAgICAgICAgaW5mbyA9IHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlRcclxuICAgICAgICAgICAgPyBGbG93TW9uaXRvclF1ZXVlLlNfQ1RSTFZFUl9TVFJcclxuICAgICAgICAgICAgOiBGbG93TW9uaXRvclF1ZXVlLkVfQ1RSTFZFUl9TVFI7XHJcbiAgICAgICAgICBpZCA9IEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9DVFJMX1NVRkZJWDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgaW5mbyA9IG51bGw7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGFjdDogQWN0aXZpdHlJdGVtID0gbmV3IEFjdGl2aXR5SXRlbSh0aGlzLCBGbG93TW9uaXRvclF1ZXVlLkFDVF9UQVNLX0ZMVywgaWQpO1xyXG4gICAgICBpZiAoaW5mbyAhPT0gbnVsbCkge1xyXG4gICAgICAgIGluZm8gPSBpbmZvICsgY3RybE5hbWU7XHJcbiAgICAgICAgaWYgKGlkID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfVkFSQ0hHX1ZBTFVFICYmIHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQpXHJcbiAgICAgICAgICBpbmZvID0gaW5mbyArIEZsb3dNb25pdG9yUXVldWUuVkFSSUFCTEVfUkVBU09OX1NUUjtcclxuICAgICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJoYW5kbGVySWRcIj5pc2lkIG9mIHRoZSBoYW5kbGVyXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSBldmVudCB0YXNrIGFjdGl2aXRpZVxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIGFkZFRhc2tGbG93SGFuZGxlcihoYW5kbGVySWQ6IHN0cmluZywgc3RhdGU6IG51bWJlciwgdGFza0luZm86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2VuYWJsZWQgJiYgdGhpcy5faXNUYXNrRmxvdykge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX1RBU0tfRkxXLCBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfVFNLX0hBTkRMRVIpO1xyXG4gICAgICBsZXQgaW5mbzogc3RyaW5nO1xyXG5cclxuICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgRmxvd01vbml0b3JJbnRlcmZhY2UuRkxXTVRSX1NUQVJUOlxyXG4gICAgICAgICAgaW5mbyA9IE5TdHJpbmcuRm9ybWF0KEZsb3dNb25pdG9yUXVldWUuU19IQU5ETEVSX1NUUiwgaGFuZGxlcklkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEZsb3dNb25pdG9ySW50ZXJmYWNlLkZMV01UUl9FTkQ6XHJcbiAgICAgICAgICBpbmZvID0gTlN0cmluZy5Gb3JtYXQoRmxvd01vbml0b3JRdWV1ZS5FX0hBTkRMRVJfU1RSLCBoYW5kbGVySWQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBpbmZvID0gbnVsbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5mbyAhPT0gbnVsbCkge1xyXG4gICAgICAgIC8vIEJSS19MRVZFTF9IQU5ETEVSX0lOVEVSTkFMLEJSS19MRVZFTF9IQU5ETEVSX1NZU1RFTSxCUktfTEVWRUxfSEFORExFUl9USU1FUlxyXG4gICAgICAgIC8vIEJSS19MRVZFTF9IQU5ETEVSX0VYUFJFU1NJT04sQlJLX0xFVkVMX0hBTkRMRVJfRVJST1IsQlJLX0xFVkVMX0hBTkRMRVJfVVNFUlxyXG4gICAgICAgIGFjdC5zZXRJbmZvKGluZm8pO1xyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRyaWdnZXJlZEJ5VmFyTmFtZVwiPnZhciBuYW1lICwgaGFzIHRyaWdnZXJlZCBSZWNvbXB1dGVcclxuICAvLy8gPC9wYXJhbT5cclxuICBhZGRSZWNvbXB1dGUodHJpZ2dlcmVkQnlWYXJOYW1lOiBzdHJpbmcsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzUmVjb21wdXRlKSB7XHJcbiAgICAgIGxldCBhY3Q6IEFjdGl2aXR5SXRlbSA9IG5ldyBBY3Rpdml0eUl0ZW0odGhpcywgRmxvd01vbml0b3JRdWV1ZS5BQ1RfUkVDT01QVVRFLCBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfUkVDT01QKTtcclxuICAgICAgbGV0IGluZm8gPSBGbG93TW9uaXRvclF1ZXVlLlJFQ09NUF9TVFIgKyB0cmlnZ2VyZWRCeVZhck5hbWU7XHJcbiAgICAgIGFjdC5zZXRJbmZvKGluZm8pO1xyXG4gICAgICB0aGlzLl9xdWV1ZS5wdXQoYWN0KTtcclxuXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgaW5mbywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQWRkIGEgZmllbGQgZmxvdyBvcGVyYXRpb24gYWN0aXZpdHkgaXRlbS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib3BlclwiPlRoZSBvcGVyYXRpb24gYmVpbmcgbG9nZ2VkLjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJiRXhlY3V0ZWRcIj5XaWxsIHRoZSBvcGVyYXRpb24gYmUgZXhlY3V0ZWQuPC9wYXJhbT5cclxuICBhc3luYyBhZGRGbG93RmllbGRPcGVyYXRpb24ob3BlcjogT3BlcmF0aW9uLCBiRXhlY3V0ZWQ6IGJvb2xlYW4sIHRhc2tJbmZvOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzRmxvd09wZXJhdGlvbikge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX0ZMV19PUEVSLCBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfREFUQV9PUEVSKTtcclxuICAgICAgbGV0IGJ1ZmZlcjogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKEZsb3dNb25pdG9yUXVldWUuRkxXX1BFUkZJWCk7XHJcbiAgICAgIGF3YWl0IG9wZXIuQWRkRmxvd0Rlc2NyaXB0aW9uKGJ1ZmZlcik7XHJcbiAgICAgIGJ1ZmZlci5BcHBlbmQoJyAnKTtcclxuXHJcblxyXG4gICAgICBpZiAoIWJFeGVjdXRlZClcclxuICAgICAgICBidWZmZXIuQXBwZW5kKFwiW05vdCBFeGVjdXRlZF1cIik7XHJcblxyXG4gICAgICBsZXQgaW5mbyA9IGJ1ZmZlci5Ub1N0cmluZygpO1xyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0ZVwiPm9mIHRoZSB1cGRhdGVcclxuICAvLy8gPC9wYXJhbT5cclxuICBhZGRGbG93T3BlcmF0aW9uVXBkYXRlKHN0YXRlOiBudW1iZXIsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkICYmIHRoaXMuX2lzRmxvd09wZXJhdGlvbikge1xyXG4gICAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX0ZMV19PUEVSLCBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfREFUQV9PUEVSKTsgLy8gTUdfT1BFUl9VUERBVEVcclxuICAgICAgbGV0IGluZm86IHN0cmluZztcclxuICAgICAgaWYgKHN0YXRlID09PSBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfU1RBUlQpXHJcbiAgICAgICAgaW5mbyA9IFwiU3RhcnRzIFVwZGF0ZVwiO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgaW5mbyA9ICBcIkVuZHMgVXBkYXRlXCI7XHJcblxyXG4gICAgICBhY3Quc2V0SW5mbyhpbmZvKTtcclxuICAgICAgdGhpcy5fcXVldWUucHV0KGFjdCk7XHJcblxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVTdXBwb3J0VG9Mb2codGFza0luZm8gK1wiOiBcIiArIGluZm8sIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbmZvXCI+c3RyaW5nIHBhc3NlZCB0byBzdGF0dXMgbGluZSB2ZXJpZnkgYWN0aW9uPC9wYXJhbT5cclxuICBhZGRGbG93VmVyaWZ5SW5mbyhpbmZvOiBzdHJpbmcsIHRhc2tJbmZvOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkRmxvd0luZm8oaW5mbywgdGFza0luZm8pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpbmZvXCI+c3RyaW5nIGFkZGVkIHRvIGZsb3cgbW9uaXRvciBxdWV1ZSBmb3IgSW52b2tlT3M8L3BhcmFtPlxyXG4gIGFkZEZsb3dJbnZva2VPc0luZm8oaW5mbzogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmFkZEZsb3dJbmZvKGluZm8sIHRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB1c2VyIHN0cmluZyBwYXNzZWQgdG8gc3RhdHVzIGxpbmUgZm9yIGFjdGlvbnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaW5mb1wiPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgYWRkRmxvd0luZm8oaW5mbzogc3RyaW5nLCB0YXNrSW5mbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgYWN0OiBBY3Rpdml0eUl0ZW0gPSBuZXcgQWN0aXZpdHlJdGVtKHRoaXMsIEZsb3dNb25pdG9yUXVldWUuQUNUX0ZMV19PUEVSLCBGbG93TW9uaXRvckludGVyZmFjZS5GTFdNVFJfREFUQV9PUEVSKTtcclxuICAgIGxldCBidWZmZXI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcihcIlwiKTtcclxuXHJcbiAgICBpZiAoIShpbmZvID09PSBcIlwiKSkge1xyXG4gICAgICBidWZmZXIuQXBwZW5kKFwiID4+IElORk9STUFUSU9OID4+IFwiKTtcclxuICAgICAgYnVmZmVyLkFwcGVuZChpbmZvKTtcclxuICAgIH1cclxuICAgIGxldCBuZXdJbmZvID0gYnVmZmVyLlRvU3RyaW5nKCk7XHJcbiAgICBhY3Quc2V0SW5mbyhuZXdJbmZvKTtcclxuICAgIHRoaXMuX3F1ZXVlLnB1dChhY3QpO1xyXG5cclxuICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZVN1cHBvcnRUb0xvZyh0YXNrSW5mbyArXCI6IFwiICsgbmV3SW5mbywgdHJ1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGFsbCBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IEFjdGl2aXR5XHJcbi8vLyA8L3N1bW1hcnk+XHJcbmNsYXNzIEFjdGl2aXR5SXRlbSB7XHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nID0gbnVsbDsgLy8gQUNUWV9UQVNLfEFDVF9UQVNLX0ZMV3xBQ1RfREFUQVZJRVd8QUNUX1JFQ09NUFVURXxBQ1RfRkxXX09QRVJcclxuICBwcml2YXRlIF9pbmZvOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3RpbWU6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVuY2xvc2luZ0luc3RhbmNlOiBGbG93TW9uaXRvclF1ZXVlLCB0eXBlOiBzdHJpbmcsIGlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xyXG4gICAgdGhpcy5faWQgPSBpZDtcclxuICAgIHRoaXMuc2V0VGltZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNhdmUgY3VycmVudCB0aW1lIGluIHRoZSBuZWVkZWQgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHNldFRpbWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90aW1lID0gRGF0ZVRpbWVVdGlscy5Ub1N0cmluZyhEYXRlVGltZS5Ob3csIEZsb3dNb25pdG9yUXVldWUuTG9uZ1RpbWVQYXR0ZXJuLCBMb2dnZXIuSW5zdGFuY2UpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhZGRlZCBpbmZvcm1hdGlvbiBmb3IgdGhlIGFjdGl2aXR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRJbmZvKGluZm9fOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2luZm8gPSAoKGluZm9fICE9PSBudWxsKSA/IFhtbFBhcnNlci5lc2NhcGUoaW5mb18pIDogaW5mb18pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkIFhNTCBzdHJpbmcgZm9yIHRoZSBhY3Rpdml0eSBpdGVtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBidWlsZFhNTChtZXNzYWdlOiBTdHJpbmdCdWlsZGVyKTogdm9pZCB7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuU1RBUlRfVEFHICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0ZMV01UUl9BQ1QpO1xyXG4gICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBYTUxDb25zdGFudHMuTUdfQVRUUl9UWVBFICsgXCI9XFxcIlwiICsgdGhpcy5fdHlwZSArIFwiXFxcIlwiKTtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSUQgKyBcIj1cXFwiXCIgKyB0aGlzLl9pZCArIFwiXFxcIlwiKTtcclxuICAgIGlmICh0aGlzLl9pbmZvICE9IG51bGwpXHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTkZPICsgXCI9XFxcIlwiICsgdGhpcy5faW5mbyArIFwiXFxcIlwiKTtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USU1FICsgXCI9XFxcIlwiICsgdGhpcy5fdGltZSArIFwiXFxcIlwiKTtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFhNTENvbnN0YW50cy5UQUdfVEVSTSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,70 @@
1
+ export class HeapSort {
2
+ static left(i) {
3
+ return 2 * i + 1;
4
+ }
5
+ static right(i) {
6
+ return 2 * i + 2;
7
+ }
8
+ static sort(array) {
9
+ let sortsize = array.length;
10
+ let temp;
11
+ let largest, i, l, r;
12
+ if (sortsize <= 1)
13
+ return;
14
+ let top = sortsize - 1;
15
+ let t = Math.floor(sortsize / 2);
16
+ do {
17
+ t = t - 1;
18
+ largest = t;
19
+ do {
20
+ i = largest;
21
+ l = HeapSort.left(largest);
22
+ r = HeapSort.right(largest);
23
+ if (l <= top) {
24
+ if (array[l].CompareTo(array[i]) > 0)
25
+ largest = l;
26
+ }
27
+ if (r <= top) {
28
+ if (array[r].CompareTo(array[largest]) > 0)
29
+ largest = r;
30
+ }
31
+ if (largest !== i) {
32
+ temp = array[largest];
33
+ array[largest] = array[i];
34
+ array[i] = temp;
35
+ }
36
+ } while (largest !== i);
37
+ } while (t > 0);
38
+ t = sortsize;
39
+ do {
40
+ top = top - 1;
41
+ t = t - 1;
42
+ let here = t;
43
+ temp = array[here];
44
+ array[here] = array[0];
45
+ array[0] = temp;
46
+ largest = 0;
47
+ do {
48
+ i = largest;
49
+ l = HeapSort.left(largest);
50
+ r = HeapSort.right(largest);
51
+ if (l <= top) {
52
+ if (array[l].CompareTo(array[i]) > 0) {
53
+ largest = l;
54
+ }
55
+ }
56
+ if (r <= top) {
57
+ if (array[r].CompareTo(array[largest]) > 0) {
58
+ largest = r;
59
+ }
60
+ }
61
+ if (largest !== i) {
62
+ temp = array[largest];
63
+ array[largest] = array[i];
64
+ array[i] = temp;
65
+ }
66
+ } while (largest !== i);
67
+ } while (t > 1);
68
+ }
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVhcFNvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3V0aWwvSGVhcFNvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsTUFBTSxPQUFPLFFBQVE7SUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQVM7UUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFTO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUtELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBb0I7UUFDOUIsSUFBSSxRQUFRLEdBQVcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNwQyxJQUFJLElBQWlCLENBQUM7UUFDdEIsSUFBSSxPQUFlLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLENBQUM7UUFFckQsSUFBSSxRQUFRLElBQUksQ0FBQztZQUNmLE9BQU87UUFFVCxJQUFJLEdBQUcsR0FBVyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXpDLEdBQUcsQ0FBQztZQUNGLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUlaLEdBQUcsQ0FBQztnQkFDRixDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUNaLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFNUIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQ2xDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQ3hDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2xCLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3RCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLENBQUM7WUFDSCxDQUFDLFFBQ00sT0FBTyxLQUFLLENBQUMsRUFBRTtRQUN4QixDQUFDLFFBQ00sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUVkLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFYixHQUFHLENBQUM7WUFDRixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUNkLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRVYsSUFBSSxJQUFJLEdBQVcsQ0FBQyxDQUFDO1lBRXJCLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBRWhCLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFFWixHQUFHLENBQUM7Z0JBQ0YsQ0FBQyxHQUFHLE9BQU8sQ0FBQztnQkFDWixDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRTVCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNiLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDckMsT0FBTyxHQUFHLENBQUMsQ0FBQztvQkFDZCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMzQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUNkLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDbEIsQ0FBQztZQUNILENBQUMsUUFDTSxPQUFPLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLENBQUMsUUFDTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUNvbXBhcmFibGV9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PkNsYXNzIGZvciBKQVZBIDEuMSBjb250YWluaW5nIHN0YXRpYyBtZXRob2RzIHRvIHNvcnQgYW4gYXJiaXRyYXJ5IGFycmF5XHJcbi8vLyBvZiBKQVZBIG9iamVjdHMgd2hpY2ggaW1wbGVtZW50IHRoZSBJQ29tcGFyYWJsZSBpbnRlcmZhY2UuXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBIZWFwU29ydCB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgbGVmdChpOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIDIgKiBpICsgMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHJpZ2h0KGk6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gMiAqIGkgKyAyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlNvcnQgYXJyYXksIHJlYXJyYW5naW5nIHRoZSBlbnRyaWVzIGluIGFycmF5IHRvIGJlIGluXHJcbiAgLy8vIHNvcnRlZCBvcmRlci5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHN0YXRpYyBzb3J0KGFycmF5OiBJQ29tcGFyYWJsZVtdKTogdm9pZCB7XHJcbiAgICBsZXQgc29ydHNpemU6IG51bWJlciA9IGFycmF5Lmxlbmd0aDtcclxuICAgIGxldCB0ZW1wOiBJQ29tcGFyYWJsZTtcclxuICAgIGxldCBsYXJnZXN0OiBudW1iZXIsIGk6IG51bWJlciwgbDogbnVtYmVyLCByOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHNvcnRzaXplIDw9IDEpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICBsZXQgdG9wOiBudW1iZXIgPSBzb3J0c2l6ZSAtIDE7XHJcbiAgICBsZXQgdDogbnVtYmVyID0gTWF0aC5mbG9vcihzb3J0c2l6ZSAvIDIpO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgdCA9IHQgLSAxO1xyXG4gICAgICBsYXJnZXN0ID0gdDtcclxuXHJcbiAgICAgIC8qIGhlYXBpZnkgKi9cclxuXHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpID0gbGFyZ2VzdDtcclxuICAgICAgICBsID0gSGVhcFNvcnQubGVmdChsYXJnZXN0KTtcclxuICAgICAgICByID0gSGVhcFNvcnQucmlnaHQobGFyZ2VzdCk7XHJcblxyXG4gICAgICAgIGlmIChsIDw9IHRvcCkge1xyXG4gICAgICAgICAgaWYgKGFycmF5W2xdLkNvbXBhcmVUbyhhcnJheVtpXSkgPiAwKVxyXG4gICAgICAgICAgICBsYXJnZXN0ID0gbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHIgPD0gdG9wKSB7XHJcbiAgICAgICAgICBpZiAoYXJyYXlbcl0uQ29tcGFyZVRvKGFycmF5W2xhcmdlc3RdKSA+IDApXHJcbiAgICAgICAgICAgIGxhcmdlc3QgPSByO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGFyZ2VzdCAhPT0gaSkge1xyXG4gICAgICAgICAgdGVtcCA9IGFycmF5W2xhcmdlc3RdO1xyXG4gICAgICAgICAgYXJyYXlbbGFyZ2VzdF0gPSBhcnJheVtpXTtcclxuICAgICAgICAgIGFycmF5W2ldID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgd2hpbGUgKGxhcmdlc3QgIT09IGkpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHQgPiAwKTtcclxuXHJcbiAgICB0ID0gc29ydHNpemU7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICB0b3AgPSB0b3AgLSAxO1xyXG4gICAgICB0ID0gdCAtIDE7XHJcblxyXG4gICAgICBsZXQgaGVyZTogbnVtYmVyID0gdDtcclxuXHJcbiAgICAgIHRlbXAgPSBhcnJheVtoZXJlXTtcclxuICAgICAgYXJyYXlbaGVyZV0gPSBhcnJheVswXTtcclxuICAgICAgYXJyYXlbMF0gPSB0ZW1wO1xyXG5cclxuICAgICAgbGFyZ2VzdCA9IDA7XHJcblxyXG4gICAgICBkbyB7XHJcbiAgICAgICAgaSA9IGxhcmdlc3Q7XHJcbiAgICAgICAgbCA9IEhlYXBTb3J0LmxlZnQobGFyZ2VzdCk7XHJcbiAgICAgICAgciA9IEhlYXBTb3J0LnJpZ2h0KGxhcmdlc3QpO1xyXG5cclxuICAgICAgICBpZiAobCA8PSB0b3ApIHtcclxuICAgICAgICAgIGlmIChhcnJheVtsXS5Db21wYXJlVG8oYXJyYXlbaV0pID4gMCkge1xyXG4gICAgICAgICAgICBsYXJnZXN0ID0gbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHIgPD0gdG9wKSB7XHJcbiAgICAgICAgICBpZiAoYXJyYXlbcl0uQ29tcGFyZVRvKGFycmF5W2xhcmdlc3RdKSA+IDApIHtcclxuICAgICAgICAgICAgbGFyZ2VzdCA9IHI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsYXJnZXN0ICE9PSBpKSB7XHJcbiAgICAgICAgICB0ZW1wID0gYXJyYXlbbGFyZ2VzdF07XHJcbiAgICAgICAgICBhcnJheVtsYXJnZXN0XSA9IGFycmF5W2ldO1xyXG4gICAgICAgICAgYXJyYXlbaV0gPSB0ZW1wO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB3aGlsZSAobGFyZ2VzdCAhPT0gaSk7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAodCA+IDEpO1xyXG4gIH1cclxufVxyXG5cclxuIl19