@magic-xpa/engine 4.801.0-dev481.245 → 4.801.0-dev481.248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/{esm2015/magic-xpa-engine.js → esm2020/magic-xpa-engine.mjs} +0 -0
- package/{esm2015/src/AccessHelper.js → esm2020/src/AccessHelper.mjs} +0 -0
- package/esm2020/src/ClientManager.mjs +403 -0
- package/esm2020/src/CommandsProcessorBase.mjs +58 -0
- package/esm2020/src/CommandsProcessorManager.mjs +26 -0
- package/esm2020/src/CommandsTable.mjs +163 -0
- package/{esm2015/src/ConstInterface.js → esm2020/src/ConstInterface.mjs} +0 -0
- package/{esm2015/src/CurrentClientVersion.js → esm2020/src/CurrentClientVersion.mjs} +2 -2
- package/{esm2015/src/FlowMonitorInterface.js → esm2020/src/FlowMonitorInterface.mjs} +0 -0
- package/esm2020/src/GUIManager.mjs +63 -0
- package/{esm2015/src/GlobalCommandsManager.js → esm2020/src/GlobalCommandsManager.mjs} +0 -0
- package/{esm2015/src/GuiEventsProcessor.js → esm2020/src/GuiEventsProcessor.mjs} +0 -0
- package/{esm2015/src/ICommandsTable.js → esm2020/src/ICommandsTable.mjs} +1 -0
- package/{esm2015/src/ServerConfig.js → esm2020/src/ServerConfig.mjs} +0 -0
- package/{esm2015/src/bridge/IGuiEvent.js → esm2020/src/bridge/IGuiEvent.mjs} +0 -0
- package/esm2020/src/bridge/MagicBridge.mjs +41 -0
- package/{esm2015/src/commands/ClientOriginatedCommandTaskTag.js → esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/AddUserLocateDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/AddUserRangeDataviewCommand.js → esm2020/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/AddUserSortDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js → esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommand.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ClientOriginatedCommandSerializer.js → esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ColumnSortEventCommand.js → esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs} +0 -0
- package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +278 -0
- package/{esm2015/src/commands/ClientToServer/CommandSerializationHelper.js → esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ComputeEventCommand.js → esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ContextTerminationEventCommand.js → esm2020/src/commands/ClientToServer/ContextTerminationEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ContextTimeoutResetCommand.js → esm2020/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ControlItemsRefreshCommand.js → esm2020/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/DataViewOutputCommand.js → esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/DataviewCommand.js → esm2020/src/commands/ClientToServer/DataviewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/EvaluateCommand.js → esm2020/src/commands/ClientToServer/EvaluateCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/EventCommand.js → esm2020/src/commands/ClientToServer/EventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ExecOperCommand.js → esm2020/src/commands/ClientToServer/ExecOperCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/FetchDataControlValuesEventCommand.js → esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/GlobalParamsQueryCommand.js → esm2020/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/ICommandTaskTag.js → esm2020/src/commands/ClientToServer/ICommandTaskTag.mjs} +1 -0
- package/{esm2015/src/commands/ClientToServer/IndexChangeEventCommand.js → esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/IniputForceWriteCommand.js → esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/NonReversibleExitEventCommand.js → esm2020/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/QueryCommand.js → esm2020/src/commands/ClientToServer/QueryCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RecomputeCommand.js → esm2020/src/commands/ClientToServer/RecomputeCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RefreshEventCommand.js → esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RefreshScreenEventCommand.js → esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/RollbackEventCommand.js → esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SelectProgramCommand.js → esm2020/src/commands/ClientToServer/SelectProgramCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SetTransactionStateDataviewCommand.js → esm2020/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SubformOpenEventCommand.js → esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/SubformRefreshEventCommand.js → esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/TransactionCommand.js → esm2020/src/commands/ClientToServer/TransactionCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/UnloadCommand.js → esm2020/src/commands/ClientToServer/UnloadCommand.mjs} +0 -0
- package/{esm2015/src/commands/ClientToServer/WriteMessageToServerLogCommand.js → esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs} +0 -0
- package/esm2020/src/commands/DataViewCommandBase.mjs +10 -0
- package/{esm2015/src/commands/IClientCommand.js → esm2020/src/commands/IClientCommand.mjs} +1 -0
- package/esm2020/src/commands/IClientTargetedCommand.mjs +9 -0
- package/{esm2015/src/commands/IClientToServerCommandInfo.js → esm2020/src/commands/IClientToServerCommandInfo.mjs} +1 -0
- package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +65 -0
- package/esm2020/src/commands/ServerToClient/AddLocateCommand.mjs +22 -0
- package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
- package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
- package/{esm2015/src/commands/ServerToClient/ClientRefreshCommand.js → esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs} +14 -17
- package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +27 -0
- package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
- package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +222 -0
- package/esm2020/src/commands/ServerToClient/ResetLocateCommand.mjs +15 -0
- package/esm2020/src/commands/ServerToClient/ResetRangeCommand.mjs +15 -0
- package/esm2020/src/commands/ServerToClient/ResetSortCommand.mjs +15 -0
- package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +37 -0
- package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +85 -0
- package/{esm2015/src/commands/ServerToClient/XMLBasedCommandBuilder.js → esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs} +0 -0
- package/{esm2015/src/communications/IConnectionStateManager.js → esm2020/src/communications/IConnectionStateManager.mjs} +1 -0
- package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +17 -0
- package/{esm2015/src/data/DataSourceIdKey.js → esm2020/src/data/DataSourceIdKey.mjs} +0 -0
- package/esm2020/src/data/DataView.mjs +1634 -0
- package/{esm2015/src/data/DataViewBase.js → esm2020/src/data/DataViewBase.mjs} +0 -0
- package/esm2020/src/data/DataviewManager.mjs +28 -0
- package/esm2020/src/data/DataviewManagerBase.mjs +15 -0
- package/{esm2015/src/data/DvCache.js → esm2020/src/data/DvCache.mjs} +0 -0
- package/esm2020/src/data/Field.mjs +645 -0
- package/esm2020/src/data/FieldBase.mjs +18 -0
- package/{esm2015/src/data/FieldsTable.js → esm2020/src/data/FieldsTable.mjs} +0 -0
- package/{esm2015/src/data/IRecordsTable.js → esm2020/src/data/IRecordsTable.mjs} +1 -0
- package/{esm2015/src/data/Key.js → esm2020/src/data/Key.mjs} +0 -0
- package/{esm2015/src/data/Record.js → esm2020/src/data/Record.mjs} +0 -0
- package/{esm2015/src/data/RecordOutOfDataViewException.js → esm2020/src/data/RecordOutOfDataViewException.mjs} +0 -0
- package/{esm2015/src/data/RecordsTable.js → esm2020/src/data/RecordsTable.mjs} +0 -0
- package/esm2020/src/data/TaskTransactionManager.mjs +103 -0
- package/{esm2015/src/data/XMLBasedDcValuesBuilder.js → esm2020/src/data/XMLBasedDcValuesBuilder.mjs} +0 -0
- package/{esm2015/src/enums.js → esm2020/src/enums.mjs} +0 -0
- package/esm2020/src/env/EnvVariablesTable.mjs +340 -0
- package/esm2020/src/env/Environment.mjs +554 -0
- package/{esm2015/src/env/ILanguageData.js → esm2020/src/env/ILanguageData.mjs} +1 -0
- package/esm2020/src/env/LanguageData.mjs +222 -0
- package/{esm2015/src/env/MirrorString.js → esm2020/src/env/MirrorString.mjs} +0 -0
- package/{esm2015/src/event/ActionManager.js → esm2020/src/event/ActionManager.mjs} +0 -0
- package/esm2020/src/event/Event.mjs +1436 -0
- package/esm2020/src/event/EventHandler.mjs +773 -0
- package/{esm2015/src/event/EventHandlerPosition.js → esm2020/src/event/EventHandlerPosition.mjs} +0 -0
- package/esm2020/src/event/EventsManager.mjs +2983 -0
- package/{esm2015/src/event/IEventsManager.js → esm2020/src/event/IEventsManager.mjs} +0 -0
- package/{esm2015/src/event/RunTimeEvent.js → esm2020/src/event/RunTimeEvent.mjs} +0 -0
- package/{esm2015/src/event/RunTimeEventBase.js → esm2020/src/event/RunTimeEventBase.mjs} +0 -0
- package/{esm2015/src/event/UserEventsTable.js → esm2020/src/event/UserEventsTable.mjs} +0 -0
- package/{esm2015/src/exp/ExpTable.js → esm2020/src/exp/ExpTable.mjs} +0 -0
- package/esm2020/src/exp/Expression.mjs +200 -0
- package/{esm2015/src/exp/ExpressionDict.js → esm2020/src/exp/ExpressionDict.mjs} +0 -0
- package/esm2020/src/exp/ExpressionEvaluator.mjs +4373 -0
- package/{esm2015/src/exp/ExpressionLocalJpn.js → esm2020/src/exp/ExpressionLocalJpn.mjs} +0 -0
- package/{esm2015/src/exp/GlobalParamsTable.js → esm2020/src/exp/GlobalParamsTable.mjs} +0 -0
- package/esm2020/src/exp/YesNoExp.mjs +41 -0
- package/{esm2015/src/gui/CreatedFormVector.js → esm2020/src/gui/CreatedFormVector.mjs} +0 -0
- package/esm2020/src/gui/FormsTable.mjs +66 -0
- package/esm2020/src/gui/MgControl.mjs +357 -0
- package/esm2020/src/gui/MgForm.mjs +1195 -0
- package/esm2020/src/http/HttpManager.mjs +97 -0
- package/esm2020/src/http/client/HttpClientAsync.mjs +67 -0
- package/esm2020/src/http/client/HttpClientBase.mjs +148 -0
- package/{esm2015/src/http/client/HttpClientEvents.js → esm2020/src/http/client/HttpClientEvents.mjs} +0 -0
- package/esm2020/src/http/client/HttpClientSync.mjs +42 -0
- package/{esm2015/src/http/client/HttpUtility.js → esm2020/src/http/client/HttpUtility.mjs} +0 -0
- package/{esm2015/src/http/client/ICommunicationsFailureHandler.js → esm2020/src/http/client/ICommunicationsFailureHandler.mjs} +1 -0
- package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
- package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
- package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
- package/esm2020/src/remote/RemoteCommandsProcessor.mjs +872 -0
- package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
- package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +24 -0
- package/{esm2015/src/remote/RemoteDataViewCommandFactory.js → esm2020/src/remote/RemoteDataViewCommandFactory.mjs} +0 -0
- package/esm2020/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +16 -0
- package/esm2020/src/remote/RemoteDataviewManager.mjs +17 -0
- package/esm2020/src/remote/RemoteInitDataViewCommand.mjs +11 -0
- package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
- package/esm2020/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +13 -0
- package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
- package/{esm2015/src/remote/ServerError.js → esm2020/src/remote/ServerError.mjs} +0 -0
- package/{esm2015/src/remote/SetTransactionStateRemoteDataViewCommand.js → esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs} +8 -11
- package/esm2020/src/rt/Argument.mjs +274 -0
- package/esm2020/src/rt/ArgumentsList.mjs +103 -0
- package/esm2020/src/rt/Boundary.mjs +158 -0
- package/{esm2015/src/rt/CompMainPrgTable.js → esm2020/src/rt/CompMainPrgTable.mjs} +0 -0
- package/esm2020/src/rt/DataviewHeaderBase.mjs +96 -0
- package/{esm2015/src/rt/DataviewHeaderFactory.js → esm2020/src/rt/DataviewHeaderFactory.mjs} +0 -0
- package/{esm2015/src/rt/DataviewHeaders.js → esm2020/src/rt/DataviewHeaders.mjs} +0 -0
- package/{esm2015/src/rt/DataviewHeadersSaxHandler.js → esm2020/src/rt/DataviewHeadersSaxHandler.mjs} +0 -0
- package/{esm2015/src/rt/ExecutionStack.js → esm2020/src/rt/ExecutionStack.mjs} +0 -0
- package/{esm2015/src/rt/ExecutionStackEntry.js → esm2020/src/rt/ExecutionStackEntry.mjs} +0 -0
- package/{esm2015/src/rt/HandlersTable.js → esm2020/src/rt/HandlersTable.mjs} +0 -0
- package/{esm2015/src/rt/IDataSourceViewDefinition.js → esm2020/src/rt/IDataSourceViewDefinition.mjs} +1 -0
- package/{esm2015/src/rt/IDataviewHeader.js → esm2020/src/rt/IDataviewHeader.mjs} +1 -0
- package/{esm2015/src/rt/IResultValue.js → esm2020/src/rt/IResultValue.mjs} +1 -0
- package/{esm2015/src/rt/LastFocusedManager.js → esm2020/src/rt/LastFocusedManager.mjs} +0 -0
- package/esm2020/src/rt/Operation.mjs +745 -0
- package/{esm2015/src/rt/OperationTable.js → esm2020/src/rt/OperationTable.mjs} +0 -0
- package/esm2020/src/rt/Recompute.mjs +355 -0
- package/{esm2015/src/rt/RecomputeTable.js → esm2020/src/rt/RecomputeTable.mjs} +0 -0
- package/esm2020/src/rt/RemoteDataviewHeader.mjs +105 -0
- package/{esm2015/src/rt/ResultValue.js → esm2020/src/rt/ResultValue.mjs} +0 -0
- package/esm2020/src/rt/TableCache.mjs +177 -0
- package/esm2020/src/rt/TableCacheManager.mjs +67 -0
- package/{esm2015/src/rt/Transaction.js → esm2020/src/rt/Transaction.mjs} +0 -0
- package/{esm2015/src/security/UserDetails.js → esm2020/src/security/UserDetails.mjs} +0 -0
- package/{esm2015/src/tasks/IMGDataCollection.js → esm2020/src/tasks/IMGDataCollection.mjs} +1 -0
- package/esm2020/src/tasks/MGData.mjs +552 -0
- package/esm2020/src/tasks/MGDataCollection.mjs +259 -0
- package/{esm2015/src/tasks/MenusDeserializer.js → esm2020/src/tasks/MenusDeserializer.mjs} +0 -0
- package/{esm2015/src/tasks/RCTimer.js → esm2020/src/tasks/RCTimer.mjs} +0 -0
- package/{esm2015/src/tasks/RemoteTaskService.js → esm2020/src/tasks/RemoteTaskService.mjs} +0 -0
- package/esm2020/src/tasks/Task.mjs +2501 -0
- package/{esm2015/src/tasks/TaskBase.js → esm2020/src/tasks/TaskBase.mjs} +22 -1
- package/esm2020/src/tasks/TaskServiceBase.mjs +25 -0
- package/esm2020/src/tasks/TasksTable.mjs +80 -0
- package/{esm2015/src/tasks/sort/Sort.js → esm2020/src/tasks/sort/Sort.mjs} +0 -0
- package/{esm2015/src/tasks/sort/SortCollection.js → esm2020/src/tasks/sort/SortCollection.mjs} +0 -0
- package/{esm2015/src/util/ConstUtils.js → esm2020/src/util/ConstUtils.mjs} +0 -0
- package/esm2020/src/util/FlowMonitorQueue.mjs +361 -0
- package/{esm2015/src/util/HeapSort.js → esm2020/src/util/HeapSort.mjs} +0 -0
- package/{esm2015/src/util/IMirrorXML.js → esm2020/src/util/IMirrorXML.mjs} +1 -0
- package/{esm2015/src/util/IServerConfig.js → esm2020/src/util/IServerConfig.mjs} +1 -0
- package/{esm2015/src/util/MgBlockingQueue.js → esm2020/src/util/MgBlockingQueue.mjs} +1 -0
- package/esm2020/src/util/MgPriorityBlockingQueue.mjs +76 -0
- package/{esm2015/src/util/MgPriorityQueue.js → esm2020/src/util/MgPriorityQueue.mjs} +0 -0
- package/{esm2015/src/util/ParamParseResult.js → esm2020/src/util/ParamParseResult.mjs} +0 -0
- package/{esm2015/src/util/PrmMap.js → esm2020/src/util/PrmMap.mjs} +0 -0
- package/{esm2015/src/util/Process.js → esm2020/src/util/Process.mjs} +0 -0
- package/{esm2015/src/util/ReturnResult.js → esm2020/src/util/ReturnResult.mjs} +0 -0
- package/{esm2015/src/util/ReturnResultBase.js → esm2020/src/util/ReturnResultBase.mjs} +0 -0
- package/{esm2015/src/util/Scrambler.js → esm2020/src/util/Scrambler.mjs} +0 -0
- package/{esm2015/src/util/UniqueIDUtils.js → esm2020/src/util/UniqueIDUtils.mjs} +0 -0
- package/{esm2015/src/util/cookie.service.js → esm2020/src/util/cookie.service.mjs} +0 -0
- package/fesm2015/{magic-xpa-engine.js → magic-xpa-engine.mjs} +98 -3
- package/fesm2015/magic-xpa-engine.mjs.map +1 -0
- package/fesm2020/magic-xpa-engine.mjs +30705 -0
- package/fesm2020/magic-xpa-engine.mjs.map +1 -0
- package/package.json +27 -13
- package/src/CommandsProcessorBase.d.ts +3 -3
- package/src/commands/DataViewCommandBase.d.ts +2 -2
- package/src/commands/IClientTargetedCommand.d.ts +1 -1
- package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +1 -1
- package/src/data/FieldBase.d.ts +3 -3
- package/src/http/client/HttpClientBase.d.ts +2 -2
- package/src/rt/DataviewHeaderBase.d.ts +1 -1
- package/src/tasks/TaskBase.d.ts +7 -7
- package/bundles/magic-xpa-engine.umd.js +0 -37985
- package/bundles/magic-xpa-engine.umd.js.map +0 -1
- package/bundles/magic-xpa-engine.umd.min.js +0 -16
- package/bundles/magic-xpa-engine.umd.min.js.map +0 -1
- package/esm2015/src/ClientManager.js +0 -412
- package/esm2015/src/CommandsProcessorBase.js +0 -54
- package/esm2015/src/CommandsProcessorManager.js +0 -31
- package/esm2015/src/CommandsTable.js +0 -166
- package/esm2015/src/GUIManager.js +0 -72
- package/esm2015/src/bridge/MagicBridge.js +0 -44
- package/esm2015/src/commands/ClientToServer/CommandFactory.js +0 -283
- package/esm2015/src/commands/DataViewCommandBase.js +0 -6
- package/esm2015/src/commands/IClientTargetedCommand.js +0 -6
- package/esm2015/src/commands/ServerToClient/AbortCommand.js +0 -68
- package/esm2015/src/commands/ServerToClient/AddLocateCommand.js +0 -25
- package/esm2015/src/commands/ServerToClient/AddRangeCommand.js +0 -65
- package/esm2015/src/commands/ServerToClient/AddSortCommand.js +0 -36
- package/esm2015/src/commands/ServerToClient/ClientTargetedCommandBase.js +0 -24
- package/esm2015/src/commands/ServerToClient/EnhancedVerifyCommand.js +0 -48
- package/esm2015/src/commands/ServerToClient/OpenURLCommand.js +0 -225
- package/esm2015/src/commands/ServerToClient/ResetLocateCommand.js +0 -18
- package/esm2015/src/commands/ServerToClient/ResetRangeCommand.js +0 -18
- package/esm2015/src/commands/ServerToClient/ResetSortCommand.js +0 -18
- package/esm2015/src/commands/ServerToClient/ResultCommand.js +0 -40
- package/esm2015/src/commands/ServerToClient/VerifyCommand.js +0 -88
- package/esm2015/src/communications/InteractiveCommunicationsFailureHandler.js +0 -20
- package/esm2015/src/data/DataView.js +0 -1692
- package/esm2015/src/data/DataviewManager.js +0 -31
- package/esm2015/src/data/DataviewManagerBase.js +0 -18
- package/esm2015/src/data/Field.js +0 -671
- package/esm2015/src/data/FieldBase.js +0 -9
- package/esm2015/src/data/TaskTransactionManager.js +0 -110
- package/esm2015/src/env/EnvVariablesTable.js +0 -347
- package/esm2015/src/env/Environment.js +0 -557
- package/esm2015/src/env/LanguageData.js +0 -229
- package/esm2015/src/event/Event.js +0 -1441
- package/esm2015/src/event/EventHandler.js +0 -786
- package/esm2015/src/event/EventsManager.js +0 -3106
- package/esm2015/src/exp/Expression.js +0 -209
- package/esm2015/src/exp/ExpressionEvaluator.js +0 -4440
- package/esm2015/src/exp/YesNoExp.js +0 -44
- package/esm2015/src/gui/FormsTable.js +0 -73
- package/esm2015/src/gui/MgControl.js +0 -424
- package/esm2015/src/gui/MgForm.js +0 -1291
- package/esm2015/src/http/HttpManager.js +0 -100
- package/esm2015/src/http/client/HttpClientAsync.js +0 -72
- package/esm2015/src/http/client/HttpClientBase.js +0 -147
- package/esm2015/src/http/client/HttpClientSync.js +0 -47
- package/esm2015/src/remote/AddUserLocateRemoteDataViewCommand.js +0 -21
- package/esm2015/src/remote/AddUserRangeRemoteDataViewCommand.js +0 -21
- package/esm2015/src/remote/AddUserSortRemoteDataViewCommand.js +0 -21
- package/esm2015/src/remote/RemoteCommandsProcessor.js +0 -901
- package/esm2015/src/remote/RemoteControlItemsRefreshCommand.js +0 -28
- package/esm2015/src/remote/RemoteDataViewCommandBase.js +0 -27
- package/esm2015/src/remote/RemoteDataViewCommandUpdateNonModifiable.js +0 -19
- package/esm2015/src/remote/RemoteDataviewManager.js +0 -23
- package/esm2015/src/remote/RemoteInitDataViewCommand.js +0 -14
- package/esm2015/src/remote/ResetUserLocateRemoteDataviewCommand.js +0 -20
- package/esm2015/src/remote/ResetUserRangeRemoteDataviewCommand.js +0 -16
- package/esm2015/src/remote/ResetUserSortRemoteDataviewCommand.js +0 -19
- package/esm2015/src/rt/Argument.js +0 -281
- package/esm2015/src/rt/ArgumentsList.js +0 -108
- package/esm2015/src/rt/Boundary.js +0 -161
- package/esm2015/src/rt/DataviewHeaderBase.js +0 -96
- package/esm2015/src/rt/Operation.js +0 -772
- package/esm2015/src/rt/Recompute.js +0 -372
- package/esm2015/src/rt/RemoteDataviewHeader.js +0 -114
- package/esm2015/src/rt/TableCache.js +0 -182
- package/esm2015/src/rt/TableCacheManager.js +0 -70
- package/esm2015/src/tasks/MGData.js +0 -561
- package/esm2015/src/tasks/MGDataCollection.js +0 -270
- package/esm2015/src/tasks/Task.js +0 -2601
- package/esm2015/src/tasks/TaskServiceBase.js +0 -30
- package/esm2015/src/tasks/TasksTable.js +0 -87
- package/esm2015/src/util/FlowMonitorQueue.js +0 -364
- package/esm2015/src/util/MgPriorityBlockingQueue.js +0 -79
- package/fesm2015/magic-xpa-engine.js.map +0 -1
|
@@ -0,0 +1,1436 @@
|
|
|
1
|
+
import { ApplicationException, Char, Exception, HashUtils, Int32, NNumber, NString, NumberStyles, RefParam, StringBuilder } from "@magic-xpa/mscorelib";
|
|
2
|
+
import { Base64, ForceExit, InternalInterface, Logger, Misc, StorageAttribute, StrUtil, XMLConstants, XmlParser } from "@magic-xpa/utils";
|
|
3
|
+
import { BlobType, DisplayConvertor, KeyboardItem, Modifiers, PIC, RecordUtils, TaskDefinitionIdTableSaxHandler } from "@magic-xpa/gui";
|
|
4
|
+
import { ConstInterface } from "../ConstInterface";
|
|
5
|
+
import { LastFocusedManager } from "../rt/LastFocusedManager";
|
|
6
|
+
import { AccessHelper } from "../AccessHelper";
|
|
7
|
+
export class Event {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.Exp = null;
|
|
10
|
+
this._forceExit = ForceExit.None;
|
|
11
|
+
this.kbdItm = null;
|
|
12
|
+
this._osCommandShow = 0;
|
|
13
|
+
this._osCommandText = null;
|
|
14
|
+
this._osCommandWait = false;
|
|
15
|
+
this._paramAttrs = null;
|
|
16
|
+
this._paramNulls = null;
|
|
17
|
+
this._paramVals = null;
|
|
18
|
+
this._parameters = 0;
|
|
19
|
+
this._returnExp = 0;
|
|
20
|
+
this._seconds = Int32.MinValue;
|
|
21
|
+
this._timestamp = 0;
|
|
22
|
+
this._type = Char.MinValue;
|
|
23
|
+
this._userDefinedFuncName = null;
|
|
24
|
+
this._userDefinedFuncNameHashCode = 0;
|
|
25
|
+
this._userEvtDesc = "";
|
|
26
|
+
this._userEvtIdx = Int32.MinValue;
|
|
27
|
+
this.ownerTaskDefinitionId = null;
|
|
28
|
+
this.InternalEvent = 0;
|
|
29
|
+
this.PrgDescription = null;
|
|
30
|
+
this.PublicName = null;
|
|
31
|
+
this.UserEvt = null;
|
|
32
|
+
this.UserEvtTaskTag = null;
|
|
33
|
+
this.constructor_0();
|
|
34
|
+
}
|
|
35
|
+
constructor_0() {
|
|
36
|
+
this.InternalEvent = Int32.MinValue;
|
|
37
|
+
this.setTimestamp();
|
|
38
|
+
}
|
|
39
|
+
constructor_1(evt) {
|
|
40
|
+
this._type = evt._type;
|
|
41
|
+
this.kbdItm = evt.kbdItm;
|
|
42
|
+
this.InternalEvent = evt.InternalEvent;
|
|
43
|
+
this._seconds = evt._seconds;
|
|
44
|
+
this.Exp = evt.Exp;
|
|
45
|
+
this._forceExit = evt._forceExit;
|
|
46
|
+
this.UserEvt = evt.UserEvt;
|
|
47
|
+
this.UserEvtTaskTag = evt.UserEvtTaskTag;
|
|
48
|
+
this._userEvtIdx = evt._userEvtIdx;
|
|
49
|
+
this._timestamp = 0;
|
|
50
|
+
}
|
|
51
|
+
get ForceExit() {
|
|
52
|
+
return this._forceExit;
|
|
53
|
+
}
|
|
54
|
+
fillData(xmlParser, taskRef) {
|
|
55
|
+
let userValue;
|
|
56
|
+
let endContext = xmlParser.getXMLdata().indexOf(XMLConstants.TAG_CLOSE, xmlParser.getCurrIndex());
|
|
57
|
+
if (endContext !== -1 && endContext < xmlParser.getXMLdata().length) {
|
|
58
|
+
let tag = xmlParser.getXMLsubstring(endContext);
|
|
59
|
+
xmlParser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_EVENT) + ConstInterface.MG_TAG_EVENT.length);
|
|
60
|
+
let tokensVector = XmlParser.getTokens(xmlParser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
|
61
|
+
let refUserValue = new RefParam(userValue);
|
|
62
|
+
this.initElements(tokensVector, taskRef, refUserValue);
|
|
63
|
+
userValue = refUserValue.value;
|
|
64
|
+
xmlParser.setCurrIndex(endContext + XMLConstants.TAG_CLOSE.length);
|
|
65
|
+
this.InitInnerObjects(xmlParser);
|
|
66
|
+
if (userValue !== null)
|
|
67
|
+
this.InitUserData(taskRef, userValue);
|
|
68
|
+
}
|
|
69
|
+
else
|
|
70
|
+
Logger.Instance.WriteExceptionToLogWithMsg("in Event.FillData() out of string bounds");
|
|
71
|
+
}
|
|
72
|
+
InitInnerObjects(xmlParser) {
|
|
73
|
+
let nextTag = xmlParser.getNextTag();
|
|
74
|
+
switch (nextTag) {
|
|
75
|
+
case XMLConstants.MG_TAG_TASKDEFINITIONID_ENTRY:
|
|
76
|
+
let xmlBuffer = xmlParser.ReadToEndOfCurrentElement();
|
|
77
|
+
this.InitTaskDefinitionId(xmlBuffer);
|
|
78
|
+
let endContext = xmlParser.getXMLdata().indexOf(ConstInterface.MG_TAG_EVENT + XMLConstants.TAG_CLOSE, xmlParser.getCurrIndex());
|
|
79
|
+
xmlParser.setCurrIndex(endContext + (ConstInterface.MG_TAG_EVENT + XMLConstants.TAG_CLOSE).length);
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
initElements(tokensVector, taskRef, refUserValue) {
|
|
86
|
+
let modifier = Modifiers.MODIFIER_NONE;
|
|
87
|
+
let keyCode = -1;
|
|
88
|
+
refUserValue.value = null;
|
|
89
|
+
for (let j = 0; j < tokensVector.length; j += 2) {
|
|
90
|
+
let attribute = (tokensVector.get_Item(j));
|
|
91
|
+
let valueStr = (tokensVector.get_Item(j + 1));
|
|
92
|
+
switch (attribute) {
|
|
93
|
+
case ConstInterface.MG_ATTR_EVENTTYPE:
|
|
94
|
+
this._type = valueStr[0];
|
|
95
|
+
break;
|
|
96
|
+
case ConstInterface.MG_ATTR_MODIFIER:
|
|
97
|
+
modifier = valueStr[0];
|
|
98
|
+
break;
|
|
99
|
+
case ConstInterface.MG_ATTR_INTERNALEVENT:
|
|
100
|
+
this.InternalEvent = XmlParser.getInt(valueStr);
|
|
101
|
+
break;
|
|
102
|
+
case ConstInterface.MG_ATTR_KEYCODE:
|
|
103
|
+
keyCode = XmlParser.getInt(valueStr);
|
|
104
|
+
break;
|
|
105
|
+
case ConstInterface.MG_ATTR_SECONDS:
|
|
106
|
+
this._seconds = XmlParser.getInt(valueStr);
|
|
107
|
+
break;
|
|
108
|
+
case XMLConstants.MG_ATTR_EXP:
|
|
109
|
+
this.Exp = taskRef.getExpById(XmlParser.getInt(valueStr));
|
|
110
|
+
break;
|
|
111
|
+
case ConstInterface.MG_ATTR_FORCE_EXIT:
|
|
112
|
+
this._forceExit = valueStr[0];
|
|
113
|
+
break;
|
|
114
|
+
case ConstInterface.MG_ATTR_DESC:
|
|
115
|
+
this._userEvtDesc = XmlParser.unescape(valueStr);
|
|
116
|
+
break;
|
|
117
|
+
case ConstInterface.MG_ATTR_PUBLIC:
|
|
118
|
+
this.PublicName = XmlParser.unescape(valueStr);
|
|
119
|
+
break;
|
|
120
|
+
case ConstInterface.MG_ATTR_PARAMS:
|
|
121
|
+
this._parameters = XmlParser.getInt(valueStr);
|
|
122
|
+
break;
|
|
123
|
+
case ConstInterface.MG_ATTR_PAR_ATTRS:
|
|
124
|
+
this._paramAttrs = valueStr;
|
|
125
|
+
break;
|
|
126
|
+
case XMLConstants.MG_ATTR_VALUE:
|
|
127
|
+
let paramStr = XmlParser.unescape(valueStr);
|
|
128
|
+
this._paramVals = new Array(this._parameters);
|
|
129
|
+
this.parseParamVal(paramStr);
|
|
130
|
+
break;
|
|
131
|
+
case ConstInterface.MG_ATTR_NULLS:
|
|
132
|
+
this._paramNulls = valueStr;
|
|
133
|
+
break;
|
|
134
|
+
case ConstInterface.MG_ATTR_USER:
|
|
135
|
+
refUserValue.value = valueStr;
|
|
136
|
+
break;
|
|
137
|
+
case XMLConstants.MG_ATTR_NAME:
|
|
138
|
+
this.setUserDefinedFuncName(valueStr);
|
|
139
|
+
break;
|
|
140
|
+
case ConstInterface.MG_TAG_USR_DEF_FUC_RET_EXP_ID:
|
|
141
|
+
this._returnExp = XmlParser.getInt(valueStr);
|
|
142
|
+
break;
|
|
143
|
+
case ConstInterface.MG_TAG_USR_DEF_FUC_RET_EXP_ATTR:
|
|
144
|
+
break;
|
|
145
|
+
default:
|
|
146
|
+
Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("There is no such tag in Event class. Insert case to Event.initElements for {0}", attribute));
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (this._type === ConstInterface.EVENT_TYPE_SYSTEM)
|
|
151
|
+
this.kbdItm = new KeyboardItem(keyCode, modifier);
|
|
152
|
+
}
|
|
153
|
+
InitUserData(taskRef, userValue) {
|
|
154
|
+
let comma = userValue.indexOf(",");
|
|
155
|
+
if (comma > -1) {
|
|
156
|
+
let ueTaskId = userValue.substr(0, comma);
|
|
157
|
+
if (taskRef !== null)
|
|
158
|
+
ueTaskId = taskRef.TaskService.GetEventTaskId(ueTaskId);
|
|
159
|
+
let ueTask = AccessHelper.mgDataTable.GetTaskByID(ueTaskId);
|
|
160
|
+
let ueIdx = XmlParser.getInt(userValue.substr(comma + 1));
|
|
161
|
+
if (ueTask !== null) {
|
|
162
|
+
this.UserEvt = ueTask.getUserEvent(ueIdx);
|
|
163
|
+
if (this.UserEvt === null) {
|
|
164
|
+
throw new ApplicationException("in Event.fillData(): user event not found. task id = " + ueTaskId +
|
|
165
|
+
", user event index = " + ueIdx);
|
|
166
|
+
}
|
|
167
|
+
this.UserEvtTaskTag = ueTaskId;
|
|
168
|
+
this._userEvtIdx = ueIdx;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
this.UserEvtTaskTag = ueTaskId;
|
|
172
|
+
this._userEvtIdx = ueIdx;
|
|
173
|
+
this.UserEvt = null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
InitTaskDefinitionId(xmlBuffer) {
|
|
178
|
+
let handler = new TaskDefinitionIdTableSaxHandler(this.SetTaskDefinitionId);
|
|
179
|
+
handler.parse(xmlBuffer);
|
|
180
|
+
}
|
|
181
|
+
SetTaskDefinitionId(taskDefinitionId) {
|
|
182
|
+
this.ownerTaskDefinitionId = taskDefinitionId;
|
|
183
|
+
}
|
|
184
|
+
findUserEvent() {
|
|
185
|
+
if (this._type === ConstInterface.EVENT_TYPE_USER && this.UserEvt === null) {
|
|
186
|
+
let ueTask = AccessHelper.mgDataTable.GetTaskByID(this.UserEvtTaskTag);
|
|
187
|
+
if (ueTask !== null)
|
|
188
|
+
this.UserEvt = ueTask.getUserEvent(this._userEvtIdx);
|
|
189
|
+
if (this.UserEvt === null)
|
|
190
|
+
throw new ApplicationException(NString.Format("in Event.findUserEvent(): user event not found. task id = {0} doesn't exist", this.UserEvtTaskTag));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
equals(evt) {
|
|
194
|
+
let bEqual = false;
|
|
195
|
+
if (this === evt)
|
|
196
|
+
bEqual = true;
|
|
197
|
+
else if (this._type === evt._type) {
|
|
198
|
+
switch (this._type) {
|
|
199
|
+
case ConstInterface.EVENT_TYPE_SYSTEM:
|
|
200
|
+
bEqual = this.kbdItm.equals(evt.kbdItm);
|
|
201
|
+
break;
|
|
202
|
+
case ConstInterface.EVENT_TYPE_INTERNAL:
|
|
203
|
+
bEqual = (this.InternalEvent === evt.InternalEvent);
|
|
204
|
+
break;
|
|
205
|
+
case ConstInterface.EVENT_TYPE_TIMER:
|
|
206
|
+
bEqual = (this._seconds === evt._seconds);
|
|
207
|
+
break;
|
|
208
|
+
case ConstInterface.EVENT_TYPE_EXPRESSION:
|
|
209
|
+
case ConstInterface.EVENT_TYPE_PUBLIC:
|
|
210
|
+
bEqual = (this.Exp === evt.Exp);
|
|
211
|
+
break;
|
|
212
|
+
case ConstInterface.EVENT_TYPE_USER:
|
|
213
|
+
bEqual = (this.UserEvt === evt.UserEvt);
|
|
214
|
+
break;
|
|
215
|
+
case ConstInterface.EVENT_TYPE_USER_FUNC:
|
|
216
|
+
if (this._userDefinedFuncNameHashCode === evt.getUserDefinedFuncNameHashCode()) {
|
|
217
|
+
if (NString.Equals(evt.getUserDefinedFuncName(), this._userDefinedFuncName, true))
|
|
218
|
+
bEqual = true;
|
|
219
|
+
}
|
|
220
|
+
break;
|
|
221
|
+
default:
|
|
222
|
+
bEqual = false;
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (this._type === ConstInterface.EVENT_TYPE_PUBLIC || evt._type === ConstInterface.EVENT_TYPE_PUBLIC) {
|
|
227
|
+
let name1 = null;
|
|
228
|
+
let name2 = null;
|
|
229
|
+
if (this._type !== ConstInterface.EVENT_TYPE_USER && evt._type !== ConstInterface.EVENT_TYPE_USER)
|
|
230
|
+
bEqual = false;
|
|
231
|
+
else if (this._type === ConstInterface.EVENT_TYPE_PUBLIC) {
|
|
232
|
+
name1 = this.PublicName;
|
|
233
|
+
name2 = evt.getUserEvent().PublicName;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
name1 = evt.PublicName;
|
|
237
|
+
name2 = this.getUserEvent().PublicName;
|
|
238
|
+
}
|
|
239
|
+
if (name1 === null || name2 === null)
|
|
240
|
+
bEqual = false;
|
|
241
|
+
else
|
|
242
|
+
bEqual = (name1 === name2);
|
|
243
|
+
}
|
|
244
|
+
else if (this._type === ConstInterface.EVENT_TYPE_INTERNAL && evt._type === ConstInterface.EVENT_TYPE_SYSTEM) {
|
|
245
|
+
if (LastFocusedManager.Instance.getCurrTask() !== null && (AccessHelper.eventsManager.getMatchingAction(evt.getKbdItm())) === this.getInternalCode())
|
|
246
|
+
bEqual = true;
|
|
247
|
+
}
|
|
248
|
+
else if (this._type === ConstInterface.EVENT_TYPE_USER && evt._type !== ConstInterface.EVENT_TYPE_USER) {
|
|
249
|
+
this.findUserEvent();
|
|
250
|
+
bEqual = this.UserEvt.equals(evt);
|
|
251
|
+
}
|
|
252
|
+
return bEqual;
|
|
253
|
+
}
|
|
254
|
+
async setPublicName() {
|
|
255
|
+
if (this._type === ConstInterface.EVENT_TYPE_PUBLIC && this.Exp !== null) {
|
|
256
|
+
this.PublicName = (await this.Exp.evaluateWithResLength(255)).mgVal;
|
|
257
|
+
if (this.PublicName !== null)
|
|
258
|
+
this.PublicName = StrUtil.rtrim(this.PublicName);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
setInternal(code) {
|
|
262
|
+
this._type = ConstInterface.EVENT_TYPE_INTERNAL;
|
|
263
|
+
this.InternalEvent = code;
|
|
264
|
+
if (code === InternalInterface.MG_ACT_HIT || code === InternalInterface.MG_ACT_CTRL_HIT)
|
|
265
|
+
LastFocusedManager.Instance.LastActionTime = Misc.getSystemMilliseconds();
|
|
266
|
+
}
|
|
267
|
+
setExpression(expRef) {
|
|
268
|
+
this._type = ConstInterface.EVENT_TYPE_EXPRESSION;
|
|
269
|
+
this.Exp = expRef;
|
|
270
|
+
}
|
|
271
|
+
getExpression() {
|
|
272
|
+
return this.Exp;
|
|
273
|
+
}
|
|
274
|
+
getUsrEvntDesc() {
|
|
275
|
+
return (this.UserEvt !== null) ? this.UserEvt._userEvtDesc : this._userEvtDesc;
|
|
276
|
+
}
|
|
277
|
+
setSystem(keyboardItem) {
|
|
278
|
+
this._type = ConstInterface.EVENT_TYPE_SYSTEM;
|
|
279
|
+
this.kbdItm = keyboardItem;
|
|
280
|
+
}
|
|
281
|
+
setKeyboardItem(keyboardItem) {
|
|
282
|
+
this.kbdItm = keyboardItem;
|
|
283
|
+
}
|
|
284
|
+
getType() {
|
|
285
|
+
return this._type;
|
|
286
|
+
}
|
|
287
|
+
setType(aType) {
|
|
288
|
+
this._type = aType;
|
|
289
|
+
}
|
|
290
|
+
getInternalCode() {
|
|
291
|
+
if (this._type === ConstInterface.EVENT_TYPE_INTERNAL)
|
|
292
|
+
return this.InternalEvent;
|
|
293
|
+
return Int32.MinValue;
|
|
294
|
+
}
|
|
295
|
+
getKbdItm() {
|
|
296
|
+
if (this._type === ConstInterface.EVENT_TYPE_SYSTEM)
|
|
297
|
+
return this.kbdItm;
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
getKbdItmAlways() {
|
|
301
|
+
return this.kbdItm;
|
|
302
|
+
}
|
|
303
|
+
async dataEventIsTrue() {
|
|
304
|
+
if (this._type !== ConstInterface.EVENT_TYPE_EXPRESSION &&
|
|
305
|
+
!(this._type === ConstInterface.EVENT_TYPE_USER && this.getUserEventType() === ConstInterface.EVENT_TYPE_EXPRESSION))
|
|
306
|
+
return true;
|
|
307
|
+
if (this._type !== ConstInterface.EVENT_TYPE_USER)
|
|
308
|
+
return DisplayConvertor.toBoolean(await this.Exp.evaluateWithResultTypeAndLength(StorageAttribute.BOOLEAN, 0));
|
|
309
|
+
return DisplayConvertor.toBoolean(await this.UserEvt.getExpression().evaluateWithResultTypeAndLength(StorageAttribute.BOOLEAN, 0));
|
|
310
|
+
}
|
|
311
|
+
getSeconds() {
|
|
312
|
+
return this._seconds;
|
|
313
|
+
}
|
|
314
|
+
getBrkLevel(flowMonitor) {
|
|
315
|
+
if (arguments.length === 0) {
|
|
316
|
+
return this.getBrkLevel_0();
|
|
317
|
+
}
|
|
318
|
+
return this.getBrkLevel_1(flowMonitor);
|
|
319
|
+
}
|
|
320
|
+
getBrkLevel_0() {
|
|
321
|
+
return this.getBrkLevel(false);
|
|
322
|
+
}
|
|
323
|
+
getBrkLevel_1(flowMonitor) {
|
|
324
|
+
let level = "";
|
|
325
|
+
switch (this._type) {
|
|
326
|
+
case ConstInterface.EVENT_TYPE_INTERNAL:
|
|
327
|
+
switch (this.InternalEvent) {
|
|
328
|
+
case InternalInterface.MG_ACT_TASK_PREFIX:
|
|
329
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_TASK_PREFIX_FM : ConstInterface.BRK_LEVEL_TASK_PREFIX;
|
|
330
|
+
break;
|
|
331
|
+
case InternalInterface.MG_ACT_TASK_SUFFIX:
|
|
332
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_TASK_SUFFIX_FM : ConstInterface.BRK_LEVEL_TASK_SUFFIX;
|
|
333
|
+
break;
|
|
334
|
+
case InternalInterface.MG_ACT_REC_PREFIX:
|
|
335
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_REC_PREFIX_FM : ConstInterface.BRK_LEVEL_REC_PREFIX;
|
|
336
|
+
break;
|
|
337
|
+
case InternalInterface.MG_ACT_REC_SUFFIX:
|
|
338
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_REC_SUFFIX_FM : ConstInterface.BRK_LEVEL_REC_SUFFIX;
|
|
339
|
+
break;
|
|
340
|
+
case InternalInterface.MG_ACT_CTRL_PREFIX:
|
|
341
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_CTRL_PREFIX_FM : ConstInterface.BRK_LEVEL_CTRL_PREFIX + '_';
|
|
342
|
+
break;
|
|
343
|
+
case InternalInterface.MG_ACT_CTRL_SUFFIX:
|
|
344
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_CTRL_SUFFIX_FM : ConstInterface.BRK_LEVEL_CTRL_SUFFIX + '_';
|
|
345
|
+
break;
|
|
346
|
+
case InternalInterface.MG_ACT_CTRL_VERIFICATION:
|
|
347
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_CTRL_VERIFICATION_FM : ConstInterface.BRK_LEVEL_CTRL_VERIFICATION + '_';
|
|
348
|
+
break;
|
|
349
|
+
case InternalInterface.MG_ACT_VARIABLE:
|
|
350
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_VARIABLE_FM : ConstInterface.BRK_LEVEL_VARIABLE + '_';
|
|
351
|
+
break;
|
|
352
|
+
default:
|
|
353
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_INTERNAL_FM : ConstInterface.BRK_LEVEL_HANDLER_INTERNAL + '_';
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
356
|
+
level += Event.getInternalEvtDescription(this.InternalEvent);
|
|
357
|
+
break;
|
|
358
|
+
case ConstInterface.EVENT_TYPE_SYSTEM:
|
|
359
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_SYSTEM_FM : ConstInterface.BRK_LEVEL_HANDLER_SYSTEM + '_';
|
|
360
|
+
level += this.getKeyboardItemString();
|
|
361
|
+
break;
|
|
362
|
+
case ConstInterface.EVENT_TYPE_TIMER:
|
|
363
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_TIMER_FM + ' ' + this.seconds2String() : ConstInterface.BRK_LEVEL_HANDLER_TIMER + '_' + this.seconds2String();
|
|
364
|
+
break;
|
|
365
|
+
case ConstInterface.EVENT_TYPE_EXPRESSION:
|
|
366
|
+
level = flowMonitor ? ConstInterface.BRK_LEVEL_HANDLER_EXPRESSION_FM : ConstInterface.BRK_LEVEL_HANDLER_EXPRESSION + '_' + this.Exp.getId();
|
|
367
|
+
break;
|
|
368
|
+
case ConstInterface.EVENT_TYPE_USER:
|
|
369
|
+
level = (flowMonitor ? (ConstInterface.BRK_LEVEL_HANDLER_USER_FM + ": ") : (ConstInterface.BRK_LEVEL_HANDLER_USER + '_')) + (this.UserEvt != null ? this.UserEvt._userEvtDesc : this._userEvtDesc);
|
|
370
|
+
break;
|
|
371
|
+
case ConstInterface.EVENT_TYPE_USER_FUNC:
|
|
372
|
+
level = (flowMonitor ? (ConstInterface.BRK_LEVEL_USER_FUNCTION_FM + ':') : (ConstInterface.BRK_LEVEL_USER_FUNCTION + '_')) + this._userDefinedFuncName;
|
|
373
|
+
break;
|
|
374
|
+
}
|
|
375
|
+
return level;
|
|
376
|
+
}
|
|
377
|
+
static getInternalEvtDescription(internalEventCode) {
|
|
378
|
+
let description;
|
|
379
|
+
switch (internalEventCode) {
|
|
380
|
+
case InternalInterface.MG_ACT_ABOUT:
|
|
381
|
+
description = "About Magic";
|
|
382
|
+
break;
|
|
383
|
+
case InternalInterface.MG_ACT_ACTION_LIST:
|
|
384
|
+
description = "Action List";
|
|
385
|
+
break;
|
|
386
|
+
case InternalInterface.MG_ACT_ADD_HYPERLINK:
|
|
387
|
+
description = "";
|
|
388
|
+
break;
|
|
389
|
+
case InternalInterface.MG_ACT_ALIGN_LEFT:
|
|
390
|
+
description = "Left";
|
|
391
|
+
break;
|
|
392
|
+
case InternalInterface.MG_ACT_ALIGN_RIGHT:
|
|
393
|
+
description = "Right";
|
|
394
|
+
break;
|
|
395
|
+
case InternalInterface.MG_ACT_APPL_PROPERTIES:
|
|
396
|
+
description = "";
|
|
397
|
+
break;
|
|
398
|
+
case InternalInterface.MG_ACT_APPLICATIONS:
|
|
399
|
+
description = "Applications";
|
|
400
|
+
break;
|
|
401
|
+
case InternalInterface.MG_ACT_APPLICATIONS_LIST:
|
|
402
|
+
description = "Applications List";
|
|
403
|
+
break;
|
|
404
|
+
case InternalInterface.MG_ACT_ATTACH_TO_TABLE:
|
|
405
|
+
description = "Attach to Table";
|
|
406
|
+
break;
|
|
407
|
+
case InternalInterface.MG_ACT_AUTHORIZE:
|
|
408
|
+
description = "Authorize";
|
|
409
|
+
break;
|
|
410
|
+
case InternalInterface.MG_ACT_EDT_BEGFLD:
|
|
411
|
+
description = "Begin Field";
|
|
412
|
+
break;
|
|
413
|
+
case InternalInterface.MG_ACT_EDT_BEGFORM:
|
|
414
|
+
description = "Begin Form";
|
|
415
|
+
break;
|
|
416
|
+
case InternalInterface.MG_ACT_EDT_BEGLINE:
|
|
417
|
+
description = "Begin Line";
|
|
418
|
+
break;
|
|
419
|
+
case InternalInterface.MG_ACT_EDT_BEGNXTLINE:
|
|
420
|
+
description = "Begin Next Line";
|
|
421
|
+
break;
|
|
422
|
+
case InternalInterface.MG_ACT_EDT_BEGPAGE:
|
|
423
|
+
description = "Begin Page";
|
|
424
|
+
break;
|
|
425
|
+
case InternalInterface.MG_ACT_TBL_BEGLINE:
|
|
426
|
+
description = "Begin Row";
|
|
427
|
+
break;
|
|
428
|
+
case InternalInterface.MG_ACT_TBL_BEGPAGE:
|
|
429
|
+
description = "Begin Screen";
|
|
430
|
+
break;
|
|
431
|
+
case InternalInterface.MG_ACT_TBL_BEGTBL:
|
|
432
|
+
description = "Begin table";
|
|
433
|
+
break;
|
|
434
|
+
case InternalInterface.MG_ACT_BOTTOM:
|
|
435
|
+
description = "Bottom";
|
|
436
|
+
break;
|
|
437
|
+
case InternalInterface.MG_ACT_BULLET:
|
|
438
|
+
description = "Bullet";
|
|
439
|
+
break;
|
|
440
|
+
case InternalInterface.MG_ACT_BUTTON:
|
|
441
|
+
description = "Button Press";
|
|
442
|
+
break;
|
|
443
|
+
case InternalInterface.MG_ACT_CANCEL:
|
|
444
|
+
description = "Cancel";
|
|
445
|
+
break;
|
|
446
|
+
case InternalInterface.MG_ACT_RT_QUIT:
|
|
447
|
+
description = "Quit";
|
|
448
|
+
break;
|
|
449
|
+
case InternalInterface.MG_ACT_CENTER:
|
|
450
|
+
description = "Center";
|
|
451
|
+
break;
|
|
452
|
+
case InternalInterface.MG_ACT_CHECK_SYNTAX:
|
|
453
|
+
description = "Check Syntax";
|
|
454
|
+
break;
|
|
455
|
+
case InternalInterface.MG_ACT_CHECK_TO_END:
|
|
456
|
+
description = "Check to End";
|
|
457
|
+
break;
|
|
458
|
+
case InternalInterface.MG_ACT_CLEAR_TEMPLATE:
|
|
459
|
+
description = "Clear Template";
|
|
460
|
+
break;
|
|
461
|
+
case InternalInterface.MG_ACT_CLEAR_VALUE:
|
|
462
|
+
description = "Clear Value";
|
|
463
|
+
break;
|
|
464
|
+
case InternalInterface.MG_ACT_CLOSE:
|
|
465
|
+
description = "Close";
|
|
466
|
+
break;
|
|
467
|
+
case InternalInterface.MG_ACT_ACT_CLOSE_APPL:
|
|
468
|
+
description = "Close Application";
|
|
469
|
+
break;
|
|
470
|
+
case InternalInterface.MG_ACT_COMMUNICATIONS:
|
|
471
|
+
description = "Communications";
|
|
472
|
+
break;
|
|
473
|
+
case InternalInterface.MG_ACT_COMPONENTS:
|
|
474
|
+
description = "Components";
|
|
475
|
+
break;
|
|
476
|
+
case InternalInterface.MG_ACT_CTRL_HIT:
|
|
477
|
+
description = "Control Hit";
|
|
478
|
+
break;
|
|
479
|
+
case InternalInterface.MG_ACT_CONTROL_NAME_LIST:
|
|
480
|
+
description = "Control Name List";
|
|
481
|
+
break;
|
|
482
|
+
case InternalInterface.MG_ACT_CLIP_COPY:
|
|
483
|
+
description = "Copy";
|
|
484
|
+
break;
|
|
485
|
+
case InternalInterface.MG_ACT_COPY_LAYOUT:
|
|
486
|
+
description = "Copy Layout";
|
|
487
|
+
break;
|
|
488
|
+
case InternalInterface.MG_ACT_COPY_SUBTREE:
|
|
489
|
+
description = "Copy Subtree";
|
|
490
|
+
break;
|
|
491
|
+
case InternalInterface.MG_ACT_CRELINE:
|
|
492
|
+
description = "Create Line";
|
|
493
|
+
break;
|
|
494
|
+
case InternalInterface.MG_ACT_CRELINE_ABOVE:
|
|
495
|
+
description = "Create Line Above";
|
|
496
|
+
break;
|
|
497
|
+
case InternalInterface.MG_ACT_CREATE_PARENT:
|
|
498
|
+
description = "Create Parent";
|
|
499
|
+
break;
|
|
500
|
+
case InternalInterface.MG_ACT_RTO_CREATE:
|
|
501
|
+
description = "Create Records";
|
|
502
|
+
break;
|
|
503
|
+
case InternalInterface.MG_ACT_CREATE_SUBTASK:
|
|
504
|
+
description = "Create Subtask";
|
|
505
|
+
break;
|
|
506
|
+
case InternalInterface.MG_ACT_CROSS_REFERENCE:
|
|
507
|
+
description = "Cross Reference";
|
|
508
|
+
break;
|
|
509
|
+
case InternalInterface.MG_ACT_CUT:
|
|
510
|
+
description = "Cut";
|
|
511
|
+
break;
|
|
512
|
+
case InternalInterface.MG_ACT_DB_TABLES:
|
|
513
|
+
description = "";
|
|
514
|
+
break;
|
|
515
|
+
case InternalInterface.MG_ACT_DBMS:
|
|
516
|
+
description = "DBMS";
|
|
517
|
+
break;
|
|
518
|
+
case InternalInterface.MG_ACT_DDF_MAKE:
|
|
519
|
+
description = "DDF Make";
|
|
520
|
+
break;
|
|
521
|
+
case InternalInterface.MG_ACT_DATABASES:
|
|
522
|
+
description = "Databases";
|
|
523
|
+
break;
|
|
524
|
+
case InternalInterface.MG_ACT_DEFAULT_LAYOUT:
|
|
525
|
+
description = "Default Layout";
|
|
526
|
+
break;
|
|
527
|
+
case InternalInterface.MG_ACT_DEFINE_EXPRESSION:
|
|
528
|
+
description = "Define Expression";
|
|
529
|
+
break;
|
|
530
|
+
case InternalInterface.MG_ACT_EDT_DELCURCH:
|
|
531
|
+
description = "Current Char";
|
|
532
|
+
break;
|
|
533
|
+
case InternalInterface.MG_ACT_EDT_DELPRVCH:
|
|
534
|
+
description = "Previous Char";
|
|
535
|
+
break;
|
|
536
|
+
case InternalInterface.MG_ACT_DELETE_HYPERLINK:
|
|
537
|
+
description = "Delete Hyperlink";
|
|
538
|
+
break;
|
|
539
|
+
case InternalInterface.MG_ACT_DELLINE:
|
|
540
|
+
description = "Delete Line";
|
|
541
|
+
break;
|
|
542
|
+
case InternalInterface.MG_ACT_DELETE_SUBTREE:
|
|
543
|
+
description = "Delete Subtree";
|
|
544
|
+
break;
|
|
545
|
+
case InternalInterface.MG_ACT_RT_COPYFLD:
|
|
546
|
+
description = "Ditto";
|
|
547
|
+
break;
|
|
548
|
+
case InternalInterface.MG_ACT_DISPLAY_REFRESH:
|
|
549
|
+
description = "Display Refresh";
|
|
550
|
+
break;
|
|
551
|
+
case InternalInterface.MG_ACT_EDIT_MAIN_FORM:
|
|
552
|
+
description = "Edit Main Form";
|
|
553
|
+
break;
|
|
554
|
+
case InternalInterface.MG_ACT_EDT_ENDFLD:
|
|
555
|
+
description = "End Field";
|
|
556
|
+
break;
|
|
557
|
+
case InternalInterface.MG_ACT_EDT_ENDFORM:
|
|
558
|
+
description = "End Form";
|
|
559
|
+
break;
|
|
560
|
+
case InternalInterface.MG_ACT_EDT_ENDLINE:
|
|
561
|
+
description = "End Line";
|
|
562
|
+
break;
|
|
563
|
+
case InternalInterface.MG_ACT_EDT_ENDPAGE:
|
|
564
|
+
description = "End Page";
|
|
565
|
+
break;
|
|
566
|
+
case InternalInterface.MG_ACT_TBL_ENDLINE:
|
|
567
|
+
description = "End Row";
|
|
568
|
+
break;
|
|
569
|
+
case InternalInterface.MG_ACT_TBL_ENDPAGE:
|
|
570
|
+
description = "End Screen";
|
|
571
|
+
break;
|
|
572
|
+
case InternalInterface.MG_ACT_TBL_ENDTBL:
|
|
573
|
+
description = "End Table";
|
|
574
|
+
break;
|
|
575
|
+
case InternalInterface.MG_ACT_ENVIRONMENT:
|
|
576
|
+
description = "Environment";
|
|
577
|
+
break;
|
|
578
|
+
case InternalInterface.MG_ACT_EXECUTE_PROGRAM:
|
|
579
|
+
description = "Execute Program";
|
|
580
|
+
break;
|
|
581
|
+
case InternalInterface.MG_ACT_EXECUTE_REPORT:
|
|
582
|
+
description = "Execute Report";
|
|
583
|
+
break;
|
|
584
|
+
case InternalInterface.MG_ACT_EXIT:
|
|
585
|
+
description = "Exit";
|
|
586
|
+
break;
|
|
587
|
+
case InternalInterface.MG_ACT_EXIT_SYSTEM:
|
|
588
|
+
description = "Exit System";
|
|
589
|
+
break;
|
|
590
|
+
case InternalInterface.MG_ACT_EXPORT_IMPORT:
|
|
591
|
+
description = "Export/Import";
|
|
592
|
+
break;
|
|
593
|
+
case InternalInterface.MG_ACT_EXPRESSION_RULES:
|
|
594
|
+
description = "Expression rules";
|
|
595
|
+
break;
|
|
596
|
+
case InternalInterface.MG_ACT_EXTERNAL_EDITOR:
|
|
597
|
+
description = "External Editor";
|
|
598
|
+
break;
|
|
599
|
+
case InternalInterface.MG_ACT_EXT_EVENT:
|
|
600
|
+
description = "External Event";
|
|
601
|
+
break;
|
|
602
|
+
case InternalInterface.MG_ACT_FORMS:
|
|
603
|
+
description = "Forms";
|
|
604
|
+
break;
|
|
605
|
+
case InternalInterface.MG_ACT_FROM_VALUE:
|
|
606
|
+
description = "From Value";
|
|
607
|
+
break;
|
|
608
|
+
case InternalInterface.MG_ACT_FUNCTION_LIST:
|
|
609
|
+
description = "Function List";
|
|
610
|
+
break;
|
|
611
|
+
case InternalInterface.MG_ACT_GENERATE_FORM:
|
|
612
|
+
description = "Generate Form";
|
|
613
|
+
break;
|
|
614
|
+
case InternalInterface.MG_ACT_GENERATE_PROGRAM:
|
|
615
|
+
description = "Generate Program";
|
|
616
|
+
break;
|
|
617
|
+
case InternalInterface.MG_ACT_GO_TO_TOP:
|
|
618
|
+
description = "Go to Top";
|
|
619
|
+
break;
|
|
620
|
+
case InternalInterface.MG_ACT_H_CENTER_OF_FORM:
|
|
621
|
+
description = "";
|
|
622
|
+
break;
|
|
623
|
+
case InternalInterface.MG_ACT_HTML_STYLES:
|
|
624
|
+
description = "HTML Styles";
|
|
625
|
+
break;
|
|
626
|
+
case InternalInterface.MG_ACT_HELP:
|
|
627
|
+
description = "Help";
|
|
628
|
+
break;
|
|
629
|
+
case InternalInterface.MG_ACT_HELP_SCREENS:
|
|
630
|
+
description = "Help Screens";
|
|
631
|
+
break;
|
|
632
|
+
case InternalInterface.MG_ACT_HORIZ_CENTER:
|
|
633
|
+
description = "Horiz. Center";
|
|
634
|
+
break;
|
|
635
|
+
case InternalInterface.MG_ACT_I_O_FILES:
|
|
636
|
+
description = "Tables";
|
|
637
|
+
break;
|
|
638
|
+
case InternalInterface.MG_ACT_INDENT:
|
|
639
|
+
description = "Indent";
|
|
640
|
+
break;
|
|
641
|
+
case InternalInterface.MG_ACT_INSERT_OBJECT:
|
|
642
|
+
description = "Insert Object";
|
|
643
|
+
break;
|
|
644
|
+
case InternalInterface.MG_ACT_JUMP_TO_ROW:
|
|
645
|
+
description = "Jump to Row";
|
|
646
|
+
break;
|
|
647
|
+
case InternalInterface.MG_ACT_KEYBOARD_LIST:
|
|
648
|
+
description = "Keyboard List";
|
|
649
|
+
break;
|
|
650
|
+
case InternalInterface.MG_ACT_KEYBOARD_MAPPING:
|
|
651
|
+
description = "Keyboard Mapping";
|
|
652
|
+
break;
|
|
653
|
+
case InternalInterface.MG_ACT_LANGUAGES:
|
|
654
|
+
description = "languages";
|
|
655
|
+
break;
|
|
656
|
+
case InternalInterface.MG_ACT_RTO_SEARCH:
|
|
657
|
+
description = "Locate Next";
|
|
658
|
+
break;
|
|
659
|
+
case InternalInterface.MG_ACT_RTO_LOCATE:
|
|
660
|
+
description = "Locate a Record";
|
|
661
|
+
break;
|
|
662
|
+
case InternalInterface.MG_ACT_LOGICALPNAMES:
|
|
663
|
+
description = "";
|
|
664
|
+
break;
|
|
665
|
+
case InternalInterface.MG_ACT_LOGON:
|
|
666
|
+
description = "Logon";
|
|
667
|
+
break;
|
|
668
|
+
case InternalInterface.MG_ACT_USING_HELP:
|
|
669
|
+
description = "Help Topics";
|
|
670
|
+
break;
|
|
671
|
+
case InternalInterface.MG_ACT_EDT_MARKNXTCH:
|
|
672
|
+
description = "Mark Next Char";
|
|
673
|
+
break;
|
|
674
|
+
case InternalInterface.MG_ACT_MARK_NEXT_LINE:
|
|
675
|
+
description = "Mark Next Line MLE";
|
|
676
|
+
break;
|
|
677
|
+
case InternalInterface.MG_ACT_EDT_MARKPRVCH:
|
|
678
|
+
description = "Mark Previous Char";
|
|
679
|
+
break;
|
|
680
|
+
case InternalInterface.MG_ACT_EDT_MARKPRVLINE:
|
|
681
|
+
description = "Mark Previous Line MLE";
|
|
682
|
+
break;
|
|
683
|
+
case InternalInterface.MG_ACT_MARK_SUBTREE:
|
|
684
|
+
description = "";
|
|
685
|
+
break;
|
|
686
|
+
case InternalInterface.MG_ACT_EDT_MARKTOBEG:
|
|
687
|
+
description = "Mark To Beginning";
|
|
688
|
+
break;
|
|
689
|
+
case InternalInterface.MG_ACT_EDT_MARKTOEND:
|
|
690
|
+
description = "Mark To End";
|
|
691
|
+
break;
|
|
692
|
+
case InternalInterface.MG_ACT_MAXIMUM_HEIGHT:
|
|
693
|
+
description = "Maximum Height";
|
|
694
|
+
break;
|
|
695
|
+
case InternalInterface.MG_ACT_MAXIMUM_WIDTH:
|
|
696
|
+
description = "Maximum Width";
|
|
697
|
+
break;
|
|
698
|
+
case InternalInterface.MG_ACT_MENU_BAR:
|
|
699
|
+
description = "Menu Bar";
|
|
700
|
+
break;
|
|
701
|
+
case InternalInterface.MG_ACT_MENUS:
|
|
702
|
+
description = "";
|
|
703
|
+
break;
|
|
704
|
+
case InternalInterface.MG_ACT_MINIMUM_HEIGHT:
|
|
705
|
+
description = "Minimum Height";
|
|
706
|
+
break;
|
|
707
|
+
case InternalInterface.MG_ACT_MINIMUM_WIDTH:
|
|
708
|
+
description = "Minimum Width";
|
|
709
|
+
break;
|
|
710
|
+
case InternalInterface.MG_ACT_RTO_MODIFY:
|
|
711
|
+
description = "Modify Records";
|
|
712
|
+
break;
|
|
713
|
+
case InternalInterface.MG_ACT_MONITOR_DEBUGGER:
|
|
714
|
+
description = "Monitor/Debugger";
|
|
715
|
+
break;
|
|
716
|
+
case InternalInterface.MG_ACT_MOVE_ENTRY:
|
|
717
|
+
description = "Move Entry";
|
|
718
|
+
break;
|
|
719
|
+
case InternalInterface.MG_ACT_MOVE_SUBTREE:
|
|
720
|
+
description = "Move Subtree";
|
|
721
|
+
break;
|
|
722
|
+
case InternalInterface.MG_ACT_NULL_SETTINGS:
|
|
723
|
+
description = "NULL Settings";
|
|
724
|
+
break;
|
|
725
|
+
case InternalInterface.MG_ACT_EDT_NXTCHAR:
|
|
726
|
+
description = "Next Char";
|
|
727
|
+
break;
|
|
728
|
+
case InternalInterface.MG_ACT_EDT_NXTLINE:
|
|
729
|
+
description = "Next Line";
|
|
730
|
+
break;
|
|
731
|
+
case InternalInterface.MG_ACT_EDT_NXTPAGE:
|
|
732
|
+
description = "Next Page";
|
|
733
|
+
break;
|
|
734
|
+
case InternalInterface.MG_ACT_TBL_NXTLINE:
|
|
735
|
+
description = "Next Row";
|
|
736
|
+
break;
|
|
737
|
+
case InternalInterface.MG_ACT_TBL_NXTPAGE:
|
|
738
|
+
description = "Next Screen";
|
|
739
|
+
break;
|
|
740
|
+
case InternalInterface.MG_ACT_EDT_NXTTAB:
|
|
741
|
+
description = "Next Tab";
|
|
742
|
+
break;
|
|
743
|
+
case InternalInterface.MG_ACT_EDT_NXTWORD:
|
|
744
|
+
description = "Next Word";
|
|
745
|
+
break;
|
|
746
|
+
case InternalInterface.MG_ACT_NORMAL:
|
|
747
|
+
description = "Normal";
|
|
748
|
+
break;
|
|
749
|
+
case InternalInterface.MG_ACT_OK:
|
|
750
|
+
description = "OK";
|
|
751
|
+
break;
|
|
752
|
+
case InternalInterface.MG_ACT_OLE2:
|
|
753
|
+
description = "OLE2";
|
|
754
|
+
break;
|
|
755
|
+
case InternalInterface.MG_ACT_OPEN_APPLICATION:
|
|
756
|
+
description = "Open Application";
|
|
757
|
+
break;
|
|
758
|
+
case InternalInterface.MG_ACT_OVERWRITE_ENTRY:
|
|
759
|
+
description = "Overwrite Entry";
|
|
760
|
+
break;
|
|
761
|
+
case InternalInterface.MG_ACT_OVERWRITE_SUBTREE:
|
|
762
|
+
description = "Overwrite Subtree";
|
|
763
|
+
break;
|
|
764
|
+
case InternalInterface.MG_ACT_PPD:
|
|
765
|
+
description = "PPD";
|
|
766
|
+
break;
|
|
767
|
+
case InternalInterface.MG_ACT_PAGE_FOOTER:
|
|
768
|
+
description = "Page Footer";
|
|
769
|
+
break;
|
|
770
|
+
case InternalInterface.MG_ACT_PAGE_HEADER:
|
|
771
|
+
description = "Page Header";
|
|
772
|
+
break;
|
|
773
|
+
case InternalInterface.MG_ACT_CLIP_PASTE:
|
|
774
|
+
description = "Paste";
|
|
775
|
+
break;
|
|
776
|
+
case InternalInterface.MG_ACT_PASTE_LINK:
|
|
777
|
+
description = "Paste Link";
|
|
778
|
+
break;
|
|
779
|
+
case InternalInterface.MG_ACT_PASTE_SUBTREE:
|
|
780
|
+
description = "Paste Subtree";
|
|
781
|
+
break;
|
|
782
|
+
case InternalInterface.MG_ACT_EDT_PRVCHAR:
|
|
783
|
+
description = "Previous Char";
|
|
784
|
+
break;
|
|
785
|
+
case InternalInterface.MG_ACT_EDT_PRVLINE:
|
|
786
|
+
description = "Previous Line";
|
|
787
|
+
break;
|
|
788
|
+
case InternalInterface.MG_ACT_EDT_PRVPAGE:
|
|
789
|
+
description = "Previous Page";
|
|
790
|
+
break;
|
|
791
|
+
case InternalInterface.MG_ACT_TBL_PRVLINE:
|
|
792
|
+
description = "Previous Row";
|
|
793
|
+
break;
|
|
794
|
+
case InternalInterface.MG_ACT_TBL_PRVPAGE:
|
|
795
|
+
description = "Previous Screen";
|
|
796
|
+
break;
|
|
797
|
+
case InternalInterface.MG_ACT_EDT_PRVTAB:
|
|
798
|
+
description = "Previous Tab";
|
|
799
|
+
break;
|
|
800
|
+
case InternalInterface.MG_ACT_EDT_PRVWORD:
|
|
801
|
+
description = "Previous Word";
|
|
802
|
+
break;
|
|
803
|
+
case InternalInterface.MG_ACT_PRINT_ATTRIBUTES:
|
|
804
|
+
description = "Print Attributes";
|
|
805
|
+
break;
|
|
806
|
+
case InternalInterface.MG_ACT_PRINTER_SETUP:
|
|
807
|
+
description = "Printer Setup";
|
|
808
|
+
break;
|
|
809
|
+
case InternalInterface.MG_ACT_PRINTERS:
|
|
810
|
+
description = "Printers";
|
|
811
|
+
break;
|
|
812
|
+
case InternalInterface.MG_ACT_PROGRAMS:
|
|
813
|
+
description = "Programs";
|
|
814
|
+
break;
|
|
815
|
+
case InternalInterface.MG_ACT_PROPERTIES:
|
|
816
|
+
description = "Properties";
|
|
817
|
+
break;
|
|
818
|
+
case InternalInterface.MG_ACT_RTO_QUERY:
|
|
819
|
+
description = "Query Records";
|
|
820
|
+
break;
|
|
821
|
+
case InternalInterface.MG_ACT_RTO_RANGE:
|
|
822
|
+
description = "Range of Records";
|
|
823
|
+
break;
|
|
824
|
+
case InternalInterface.MG_ACT_RT_REFRESH_RECORD:
|
|
825
|
+
description = "Record Flush";
|
|
826
|
+
break;
|
|
827
|
+
case InternalInterface.MG_ACT_REDIRECT_FILES:
|
|
828
|
+
description = "Redirect Files";
|
|
829
|
+
break;
|
|
830
|
+
case InternalInterface.MG_ACT_REDRAW_LAYOUT:
|
|
831
|
+
description = "";
|
|
832
|
+
break;
|
|
833
|
+
case InternalInterface.MG_ACT_REPEAT_ENTRY:
|
|
834
|
+
description = "Repeat Entry";
|
|
835
|
+
break;
|
|
836
|
+
case InternalInterface.MG_ACT_REPEAT_SUBTREE:
|
|
837
|
+
description = "Repeat Subtree";
|
|
838
|
+
break;
|
|
839
|
+
case InternalInterface.MG_ACT_REPORT_GENERATOR:
|
|
840
|
+
description = "";
|
|
841
|
+
break;
|
|
842
|
+
case InternalInterface.MG_ACT_RESTORE_DEFAULTS:
|
|
843
|
+
description = "Restore Defaults";
|
|
844
|
+
break;
|
|
845
|
+
case InternalInterface.MG_ACT_RETURN_TO_TREE:
|
|
846
|
+
description = "";
|
|
847
|
+
break;
|
|
848
|
+
case InternalInterface.MG_ACT_RIGHT:
|
|
849
|
+
description = "Right";
|
|
850
|
+
break;
|
|
851
|
+
case InternalInterface.MG_ACT_RIGHTS:
|
|
852
|
+
description = "";
|
|
853
|
+
break;
|
|
854
|
+
case InternalInterface.MG_ACT_RIGHTS_LIST:
|
|
855
|
+
description = "Rights List";
|
|
856
|
+
break;
|
|
857
|
+
case InternalInterface.MG_ACT_SQL_ASSIST:
|
|
858
|
+
description = "SQL Assist";
|
|
859
|
+
break;
|
|
860
|
+
case InternalInterface.MG_ACT_SQL_COLUMNS:
|
|
861
|
+
description = "SQL Columns";
|
|
862
|
+
break;
|
|
863
|
+
case InternalInterface.MG_ACT_SQL_COMMAND:
|
|
864
|
+
description = "SQL Command";
|
|
865
|
+
break;
|
|
866
|
+
case InternalInterface.MG_ACT_SQL_FLIP_DESC:
|
|
867
|
+
description = "SQL Flip Desc.";
|
|
868
|
+
break;
|
|
869
|
+
case InternalInterface.MG_ACT_SQL_KEYWORDS:
|
|
870
|
+
description = "SQL Keywords";
|
|
871
|
+
break;
|
|
872
|
+
case InternalInterface.MG_ACT_SQL_OPERATORS:
|
|
873
|
+
description = "SQL Operators";
|
|
874
|
+
break;
|
|
875
|
+
case InternalInterface.MG_ACT_SQL_TABLES:
|
|
876
|
+
description = "SQL Tables";
|
|
877
|
+
break;
|
|
878
|
+
case InternalInterface.MG_ACT_SQL_WHERE_CLAUSE:
|
|
879
|
+
description = "";
|
|
880
|
+
break;
|
|
881
|
+
case InternalInterface.MG_ACT_RT_REFRESH_SCREEN:
|
|
882
|
+
description = "Screen Refresh";
|
|
883
|
+
break;
|
|
884
|
+
case InternalInterface.MG_ACT_SECRET_NAMES:
|
|
885
|
+
description = "Secret Names";
|
|
886
|
+
break;
|
|
887
|
+
case InternalInterface.MG_ACT_SELECT:
|
|
888
|
+
description = "Select";
|
|
889
|
+
break;
|
|
890
|
+
case InternalInterface.MG_ACT_EDT_MARKALL:
|
|
891
|
+
description = "Select All";
|
|
892
|
+
break;
|
|
893
|
+
case InternalInterface.MG_ACT_SERVERS:
|
|
894
|
+
description = "";
|
|
895
|
+
break;
|
|
896
|
+
case InternalInterface.MG_ACT_SERVICES:
|
|
897
|
+
description = "";
|
|
898
|
+
break;
|
|
899
|
+
case InternalInterface.MG_ACT_RT_EDT_NULL:
|
|
900
|
+
description = "Set to NULL";
|
|
901
|
+
break;
|
|
902
|
+
case InternalInterface.MG_ACT_SHELL_TO_OS:
|
|
903
|
+
description = "Shell to OS";
|
|
904
|
+
break;
|
|
905
|
+
case InternalInterface.MG_ACT_SHOW_EXPRESSION:
|
|
906
|
+
description = "Show Expression";
|
|
907
|
+
break;
|
|
908
|
+
case InternalInterface.MG_ACT_SHOW_FULL_LAYOUT:
|
|
909
|
+
description = "";
|
|
910
|
+
break;
|
|
911
|
+
case InternalInterface.MG_ACT_SHRINK_TREE:
|
|
912
|
+
description = "";
|
|
913
|
+
break;
|
|
914
|
+
case InternalInterface.MG_ACT_SORT:
|
|
915
|
+
description = "Sort";
|
|
916
|
+
break;
|
|
917
|
+
case InternalInterface.MG_ACT_SORT_RECORDS:
|
|
918
|
+
description = "Sort Records";
|
|
919
|
+
break;
|
|
920
|
+
case InternalInterface.MG_ACT_TABLE_LOCATE:
|
|
921
|
+
description = "Table Locate";
|
|
922
|
+
break;
|
|
923
|
+
case InternalInterface.MG_ACT_TABLE_LOCATE_NEXT:
|
|
924
|
+
description = "Table Locate Next";
|
|
925
|
+
break;
|
|
926
|
+
case InternalInterface.MG_ACT_TABLES:
|
|
927
|
+
description = "";
|
|
928
|
+
break;
|
|
929
|
+
case InternalInterface.MG_ACT_TASK_CONTROL:
|
|
930
|
+
description = "";
|
|
931
|
+
break;
|
|
932
|
+
case InternalInterface.MG_ACT_TASK_EVENTS:
|
|
933
|
+
description = "";
|
|
934
|
+
break;
|
|
935
|
+
case InternalInterface.MG_ACT_TO_VALUE:
|
|
936
|
+
description = "To Value";
|
|
937
|
+
break;
|
|
938
|
+
case InternalInterface.MG_ACT_TOOLKIT_RUNTIME:
|
|
939
|
+
description = "Toolkit/Runtime";
|
|
940
|
+
break;
|
|
941
|
+
case InternalInterface.MG_ACT_TOP:
|
|
942
|
+
description = "Top";
|
|
943
|
+
break;
|
|
944
|
+
case InternalInterface.MG_ACT_TYPES:
|
|
945
|
+
description = "";
|
|
946
|
+
break;
|
|
947
|
+
case InternalInterface.MG_ACT_EDT_UNDO:
|
|
948
|
+
description = "Undo Editing";
|
|
949
|
+
break;
|
|
950
|
+
case InternalInterface.MG_ACT_UNINDENT:
|
|
951
|
+
description = "Unindent";
|
|
952
|
+
break;
|
|
953
|
+
case InternalInterface.MG_ACT_UPDATE_LINK:
|
|
954
|
+
description = "";
|
|
955
|
+
break;
|
|
956
|
+
case InternalInterface.MG_ACT_USER_ACTION_1:
|
|
957
|
+
case InternalInterface.MG_ACT_USER_ACTION_2:
|
|
958
|
+
case InternalInterface.MG_ACT_USER_ACTION_3:
|
|
959
|
+
case InternalInterface.MG_ACT_USER_ACTION_4:
|
|
960
|
+
case InternalInterface.MG_ACT_USER_ACTION_5:
|
|
961
|
+
case InternalInterface.MG_ACT_USER_ACTION_6:
|
|
962
|
+
case InternalInterface.MG_ACT_USER_ACTION_7:
|
|
963
|
+
case InternalInterface.MG_ACT_USER_ACTION_8:
|
|
964
|
+
case InternalInterface.MG_ACT_USER_ACTION_9:
|
|
965
|
+
case InternalInterface.MG_ACT_USER_ACTION_10:
|
|
966
|
+
case InternalInterface.MG_ACT_USER_ACTION_11:
|
|
967
|
+
case InternalInterface.MG_ACT_USER_ACTION_12:
|
|
968
|
+
case InternalInterface.MG_ACT_USER_ACTION_13:
|
|
969
|
+
case InternalInterface.MG_ACT_USER_ACTION_14:
|
|
970
|
+
case InternalInterface.MG_ACT_USER_ACTION_15:
|
|
971
|
+
case InternalInterface.MG_ACT_USER_ACTION_16:
|
|
972
|
+
case InternalInterface.MG_ACT_USER_ACTION_17:
|
|
973
|
+
case InternalInterface.MG_ACT_USER_ACTION_18:
|
|
974
|
+
case InternalInterface.MG_ACT_USER_ACTION_19:
|
|
975
|
+
case InternalInterface.MG_ACT_USER_ACTION_20:
|
|
976
|
+
description = "User Action " + (internalEventCode - InternalInterface.MG_ACT_USER_ACTION_1 + 1);
|
|
977
|
+
break;
|
|
978
|
+
case InternalInterface.MG_ACT_USER_GROUPS:
|
|
979
|
+
description = "";
|
|
980
|
+
break;
|
|
981
|
+
case InternalInterface.MG_ACT_USER_IDS:
|
|
982
|
+
description = "User IDs";
|
|
983
|
+
break;
|
|
984
|
+
case InternalInterface.MG_ACT_V_CENTER_OF_FORM:
|
|
985
|
+
description = "Center of Form";
|
|
986
|
+
break;
|
|
987
|
+
case InternalInterface.MG_ACT_VERTICAL_CENTER:
|
|
988
|
+
description = "Vertical Center";
|
|
989
|
+
break;
|
|
990
|
+
case InternalInterface.MG_ACT_VIEW_BY_KEY:
|
|
991
|
+
description = "View by Key";
|
|
992
|
+
break;
|
|
993
|
+
case InternalInterface.MG_ACT_RT_REFRESH_VIEW:
|
|
994
|
+
description = "View Refresh";
|
|
995
|
+
break;
|
|
996
|
+
case InternalInterface.MG_ACT_VIRTUAL_VARIABLES:
|
|
997
|
+
description = "Variables";
|
|
998
|
+
break;
|
|
999
|
+
case InternalInterface.MG_ACT_VISUAL_CONNECTION:
|
|
1000
|
+
description = "Visual Connection";
|
|
1001
|
+
break;
|
|
1002
|
+
case InternalInterface.MG_ACT_HIT:
|
|
1003
|
+
description = "Window Hit";
|
|
1004
|
+
break;
|
|
1005
|
+
case InternalInterface.MG_ACT_WINMOVE:
|
|
1006
|
+
description = "Window Reposition";
|
|
1007
|
+
break;
|
|
1008
|
+
case InternalInterface.MG_ACT_WINSIZE:
|
|
1009
|
+
description = "Window Resize";
|
|
1010
|
+
break;
|
|
1011
|
+
case InternalInterface.MG_ACT_ZOOM:
|
|
1012
|
+
description = "Zoom";
|
|
1013
|
+
break;
|
|
1014
|
+
case InternalInterface.MG_ACT_LOCKING_DETAILS:
|
|
1015
|
+
description = "Locking Details";
|
|
1016
|
+
break;
|
|
1017
|
+
case InternalInterface.MG_ACT_LOCKING_ABORT:
|
|
1018
|
+
description = "Locking Abort";
|
|
1019
|
+
break;
|
|
1020
|
+
case InternalInterface.MG_ACT_LOCKING_RETRY:
|
|
1021
|
+
description = "Locking Retry";
|
|
1022
|
+
break;
|
|
1023
|
+
case InternalInterface.MG_ACT_CHECK_OBJECT_LIST:
|
|
1024
|
+
description = "Check Object List";
|
|
1025
|
+
break;
|
|
1026
|
+
case InternalInterface.MG_ACT_USERS_LIST:
|
|
1027
|
+
description = "Users List";
|
|
1028
|
+
break;
|
|
1029
|
+
case InternalInterface.MG_ACT_MODELS:
|
|
1030
|
+
description = "Models";
|
|
1031
|
+
break;
|
|
1032
|
+
case InternalInterface.MG_ACT_WEB_CLICK:
|
|
1033
|
+
description = "Click";
|
|
1034
|
+
break;
|
|
1035
|
+
case InternalInterface.MG_ACT_WEB_ON_DBLICK:
|
|
1036
|
+
description = "DblClick";
|
|
1037
|
+
break;
|
|
1038
|
+
case InternalInterface.MG_ACT_BROWSER_ESC:
|
|
1039
|
+
description = "Esc";
|
|
1040
|
+
break;
|
|
1041
|
+
case InternalInterface.MG_ACT_ROLLBACK:
|
|
1042
|
+
description = "Rollback";
|
|
1043
|
+
break;
|
|
1044
|
+
case InternalInterface.MG_ACT_EMPTY_DATAVIEW:
|
|
1045
|
+
description = "Empty Dataview";
|
|
1046
|
+
break;
|
|
1047
|
+
case InternalInterface.MG_ACT_CTRL_MODIFY:
|
|
1048
|
+
description = "Control Modify";
|
|
1049
|
+
break;
|
|
1050
|
+
case InternalInterface.MG_ACT_PRINT_DATA:
|
|
1051
|
+
description = "Print Data";
|
|
1052
|
+
break;
|
|
1053
|
+
case InternalInterface.MG_ACT_POST_REFRESH_BY_PARENT:
|
|
1054
|
+
description = "Post Refresh by Parent";
|
|
1055
|
+
break;
|
|
1056
|
+
case InternalInterface.MG_ACT_SWITCH_TO_OFFLINE:
|
|
1057
|
+
description = "Switch To Offline";
|
|
1058
|
+
break;
|
|
1059
|
+
case InternalInterface.MG_ACT_UNAVAILABLE_SERVER:
|
|
1060
|
+
description = "Unavailable Server";
|
|
1061
|
+
break;
|
|
1062
|
+
case InternalInterface.MG_ACT_CONTEXT_MENU:
|
|
1063
|
+
description = "Context Menu";
|
|
1064
|
+
break;
|
|
1065
|
+
case InternalInterface.MG_ACT_ENTER_ROW_EDITING:
|
|
1066
|
+
description = "Enter Row Editing";
|
|
1067
|
+
break;
|
|
1068
|
+
case InternalInterface.MG_ACT_NO_PROG_EXE_RIGHTS:
|
|
1069
|
+
description = "No Program Execution Rights";
|
|
1070
|
+
break;
|
|
1071
|
+
case InternalInterface.MG_ACT_WEBCLIENT_ROUTE:
|
|
1072
|
+
description = 'Route';
|
|
1073
|
+
break;
|
|
1074
|
+
case InternalInterface.MG_ACT_COL_SORT:
|
|
1075
|
+
description = 'Column Sort';
|
|
1076
|
+
break;
|
|
1077
|
+
case InternalInterface.MG_ACT_ROW_DATA_CURR_PAGE:
|
|
1078
|
+
description = 'Get Rows';
|
|
1079
|
+
break;
|
|
1080
|
+
case InternalInterface.MG_ACT_SUBFORM_CLOSE:
|
|
1081
|
+
description = 'Subform Close';
|
|
1082
|
+
break;
|
|
1083
|
+
case InternalInterface.MG_ACT_SUBFORM_REFRESH:
|
|
1084
|
+
description = 'Subform Refresh';
|
|
1085
|
+
break;
|
|
1086
|
+
case InternalInterface.MG_ACT_SUBFORM_OPEN:
|
|
1087
|
+
description = 'Subform Open';
|
|
1088
|
+
break;
|
|
1089
|
+
case InternalInterface.MG_ACT_COMPUTE:
|
|
1090
|
+
description = 'Compute';
|
|
1091
|
+
break;
|
|
1092
|
+
case InternalInterface.MG_ACT_CACHE_NEXT:
|
|
1093
|
+
description = 'Get Next Data';
|
|
1094
|
+
break;
|
|
1095
|
+
case InternalInterface.MG_ACT_CACHE_PREV:
|
|
1096
|
+
description = 'Get Previous Data';
|
|
1097
|
+
break;
|
|
1098
|
+
case InternalInterface.MG_ACT_FETCH_DATA_CONTROL_VALUES:
|
|
1099
|
+
description = 'Fetch data control values';
|
|
1100
|
+
break;
|
|
1101
|
+
case InternalInterface.MG_ACT_INDEX_CHANGE:
|
|
1102
|
+
description = 'Index Change';
|
|
1103
|
+
break;
|
|
1104
|
+
default:
|
|
1105
|
+
description = "";
|
|
1106
|
+
break;
|
|
1107
|
+
}
|
|
1108
|
+
return description;
|
|
1109
|
+
}
|
|
1110
|
+
getUserEventType() {
|
|
1111
|
+
if (this.UserEvt === null)
|
|
1112
|
+
return ConstInterface.EVENT_TYPE_NOTINITED;
|
|
1113
|
+
return this.UserEvt.getType();
|
|
1114
|
+
}
|
|
1115
|
+
getSecondsOfUserEvent() {
|
|
1116
|
+
return this.UserEvt.getSeconds();
|
|
1117
|
+
}
|
|
1118
|
+
getUserEvent() {
|
|
1119
|
+
return this.UserEvt;
|
|
1120
|
+
}
|
|
1121
|
+
getKeyboardItemString() {
|
|
1122
|
+
let kbi = this.getKbdItm();
|
|
1123
|
+
if (kbi === null)
|
|
1124
|
+
return "";
|
|
1125
|
+
return kbi.ToString();
|
|
1126
|
+
}
|
|
1127
|
+
seconds2String() {
|
|
1128
|
+
let time = new Array(3);
|
|
1129
|
+
let buffer = "";
|
|
1130
|
+
time[0] = Math.floor(this._seconds / 3600);
|
|
1131
|
+
time[1] = Math.floor((this._seconds - time[0] * 3600) / 60);
|
|
1132
|
+
time[2] = this._seconds % 60;
|
|
1133
|
+
for (let i = 0; i < time.length; i++) {
|
|
1134
|
+
if (time[i] === 0)
|
|
1135
|
+
buffer += "00";
|
|
1136
|
+
else if (time[i] < 10)
|
|
1137
|
+
buffer += ("0" + time[i]);
|
|
1138
|
+
else
|
|
1139
|
+
buffer += time[i];
|
|
1140
|
+
if (i < time.length - 1)
|
|
1141
|
+
buffer += ":";
|
|
1142
|
+
}
|
|
1143
|
+
return buffer;
|
|
1144
|
+
}
|
|
1145
|
+
getParamVal(idx) {
|
|
1146
|
+
return this._paramVals[idx];
|
|
1147
|
+
}
|
|
1148
|
+
parseParamVal(valueStr) {
|
|
1149
|
+
let startOfs = 0, endOfs = 0, nLen, j;
|
|
1150
|
+
let sLen, sValue = null;
|
|
1151
|
+
for (j = 0; j < this._parameters; j++) {
|
|
1152
|
+
switch (this._paramAttrs[j]) {
|
|
1153
|
+
case StorageAttribute.SKIP:
|
|
1154
|
+
sValue = "";
|
|
1155
|
+
break;
|
|
1156
|
+
case StorageAttribute.ALPHA:
|
|
1157
|
+
case StorageAttribute.BLOB_VECTOR:
|
|
1158
|
+
case StorageAttribute.BLOB:
|
|
1159
|
+
case StorageAttribute.MEMO:
|
|
1160
|
+
case StorageAttribute.UNICODE:
|
|
1161
|
+
endOfs = startOfs + 4;
|
|
1162
|
+
sLen = valueStr.substr(startOfs, (endOfs) - (startOfs));
|
|
1163
|
+
nLen = NNumber.Parse(sLen, NumberStyles.HexNumber);
|
|
1164
|
+
startOfs = endOfs;
|
|
1165
|
+
if (AccessHelper.environment.GetDebugLevel() > 1 || this._paramAttrs[j] === StorageAttribute.ALPHA || this._paramAttrs[j] === StorageAttribute.UNICODE || this._paramAttrs[j] === StorageAttribute.MEMO) {
|
|
1166
|
+
if ((nLen & 0x8000) > 0) {
|
|
1167
|
+
nLen = (nLen & 0x7FFF);
|
|
1168
|
+
nLen *= 2;
|
|
1169
|
+
let res = new StringBuilder();
|
|
1170
|
+
endOfs += RecordUtils.getSpannedField(valueStr, nLen, startOfs, this._paramAttrs[j], res, true);
|
|
1171
|
+
valueStr = res.ToString();
|
|
1172
|
+
}
|
|
1173
|
+
else {
|
|
1174
|
+
endOfs = startOfs + nLen;
|
|
1175
|
+
sValue = valueStr.substr(startOfs, (endOfs) - (startOfs));
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
else {
|
|
1179
|
+
if ((nLen & 0x8000) > 0) {
|
|
1180
|
+
nLen = (nLen & 0x7FFF);
|
|
1181
|
+
nLen = Math.floor((nLen + 2) / 3) * 4;
|
|
1182
|
+
let res = new StringBuilder();
|
|
1183
|
+
endOfs += RecordUtils.getSpannedField(valueStr, nLen, startOfs, this._paramAttrs[j], res, false);
|
|
1184
|
+
sValue = res.ToString();
|
|
1185
|
+
}
|
|
1186
|
+
else {
|
|
1187
|
+
endOfs = startOfs + Math.floor((nLen + 2) / 3) * 4;
|
|
1188
|
+
sValue = Base64.decode(valueStr.substr(startOfs, (endOfs) - (startOfs)));
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
break;
|
|
1192
|
+
case StorageAttribute.NUMERIC:
|
|
1193
|
+
case StorageAttribute.DATE:
|
|
1194
|
+
case StorageAttribute.TIME:
|
|
1195
|
+
if (AccessHelper.environment.GetDebugLevel() > 1) {
|
|
1196
|
+
endOfs = startOfs + AccessHelper.environment.GetSignificantNumSize() * 2;
|
|
1197
|
+
sValue = valueStr.substr(startOfs, (endOfs) - (startOfs));
|
|
1198
|
+
}
|
|
1199
|
+
else {
|
|
1200
|
+
endOfs = startOfs + (Math.floor((AccessHelper.environment.GetSignificantNumSize() + 2) / 3) * 4);
|
|
1201
|
+
sValue = Base64.decodeToHex(valueStr.substr(startOfs, (endOfs) - (startOfs)));
|
|
1202
|
+
}
|
|
1203
|
+
break;
|
|
1204
|
+
case StorageAttribute.BOOLEAN:
|
|
1205
|
+
endOfs = startOfs + 1;
|
|
1206
|
+
sValue = valueStr.substr(startOfs, (endOfs) - (startOfs));
|
|
1207
|
+
break;
|
|
1208
|
+
}
|
|
1209
|
+
this._paramVals[j] = sValue;
|
|
1210
|
+
startOfs = endOfs;
|
|
1211
|
+
}
|
|
1212
|
+
return endOfs;
|
|
1213
|
+
}
|
|
1214
|
+
setParamVals(paramVals_) {
|
|
1215
|
+
this._paramVals = paramVals_;
|
|
1216
|
+
this._paramAttrs = this._paramNulls = "";
|
|
1217
|
+
this._parameters = 0;
|
|
1218
|
+
if (this._paramVals !== null) {
|
|
1219
|
+
this._parameters = this._paramVals.length;
|
|
1220
|
+
for (let i = 0; i < this._parameters; i++) {
|
|
1221
|
+
this._paramAttrs += StorageAttribute.ALPHA;
|
|
1222
|
+
this._paramNulls += "0";
|
|
1223
|
+
}
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
setParamType(paramNum, fld) {
|
|
1227
|
+
let currType;
|
|
1228
|
+
let currValue;
|
|
1229
|
+
let newType = fld.getType();
|
|
1230
|
+
let pic = null;
|
|
1231
|
+
let sameType = false;
|
|
1232
|
+
if (this._paramVals != null && this.getParamNum() >= paramNum) {
|
|
1233
|
+
currType = this._paramAttrs[paramNum];
|
|
1234
|
+
sameType = (currType === newType);
|
|
1235
|
+
if (!sameType) {
|
|
1236
|
+
let charArr = null;
|
|
1237
|
+
currValue = this._paramVals[paramNum];
|
|
1238
|
+
switch (newType) {
|
|
1239
|
+
case StorageAttribute.ALPHA:
|
|
1240
|
+
case StorageAttribute.BLOB:
|
|
1241
|
+
case StorageAttribute.BLOB_VECTOR:
|
|
1242
|
+
case StorageAttribute.MEMO:
|
|
1243
|
+
case StorageAttribute.UNICODE:
|
|
1244
|
+
break;
|
|
1245
|
+
case StorageAttribute.NUMERIC:
|
|
1246
|
+
case StorageAttribute.DATE:
|
|
1247
|
+
case StorageAttribute.TIME:
|
|
1248
|
+
if (currType === StorageAttribute.ALPHA) {
|
|
1249
|
+
try {
|
|
1250
|
+
pic = PIC.buildPicture(newType, currValue, fld.getTask().getCompIdx(), true);
|
|
1251
|
+
this._paramVals[paramNum] = DisplayConvertor.Instance.disp2mg(currValue, pic, fld.getTask().getCompIdx(), BlobType.CONTENT_TYPE_UNKNOWN);
|
|
1252
|
+
sameType = true;
|
|
1253
|
+
}
|
|
1254
|
+
catch (exception) {
|
|
1255
|
+
if (exception instanceof Exception) {
|
|
1256
|
+
sameType = false;
|
|
1257
|
+
Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Event.setParamType() cannot transfer {0} to Numeric with picture {1}", currValue, (pic != null ? pic.getFormat() : "null")));
|
|
1258
|
+
}
|
|
1259
|
+
else
|
|
1260
|
+
throw exception;
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
break;
|
|
1264
|
+
case StorageAttribute.BOOLEAN:
|
|
1265
|
+
if (currType === StorageAttribute.ALPHA) {
|
|
1266
|
+
currValue = currValue.trim();
|
|
1267
|
+
if (currValue === "1" || currValue.toLowerCase() === "true")
|
|
1268
|
+
this._paramVals[paramNum] = "1";
|
|
1269
|
+
else
|
|
1270
|
+
this._paramVals[paramNum] = "0";
|
|
1271
|
+
sameType = true;
|
|
1272
|
+
}
|
|
1273
|
+
break;
|
|
1274
|
+
}
|
|
1275
|
+
if (sameType) {
|
|
1276
|
+
charArr = NString.ToCharArray(this._paramAttrs);
|
|
1277
|
+
charArr[paramNum] = newType;
|
|
1278
|
+
this._paramAttrs = NString.FromChars(charArr);
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
return sameType;
|
|
1283
|
+
}
|
|
1284
|
+
getParamNum() {
|
|
1285
|
+
return this._parameters;
|
|
1286
|
+
}
|
|
1287
|
+
getParamNull(idx) {
|
|
1288
|
+
if ('0' === this._paramNulls.charAt(idx))
|
|
1289
|
+
return false;
|
|
1290
|
+
else
|
|
1291
|
+
return true;
|
|
1292
|
+
}
|
|
1293
|
+
getParamAttr(idx) {
|
|
1294
|
+
return this._paramAttrs.charAt(idx);
|
|
1295
|
+
}
|
|
1296
|
+
isControlHeader() {
|
|
1297
|
+
return this.getType() == ConstInterface.EVENT_TYPE_INTERNAL &&
|
|
1298
|
+
(this.getInternalCode() == InternalInterface.MG_ACT_CTRL_PREFIX ||
|
|
1299
|
+
this.getInternalCode() == InternalInterface.MG_ACT_CTRL_SUFFIX ||
|
|
1300
|
+
this.getInternalCode() == InternalInterface.MG_ACT_CTRL_VERIFICATION);
|
|
1301
|
+
}
|
|
1302
|
+
isVariableHeader() {
|
|
1303
|
+
return this.getType() == ConstInterface.EVENT_TYPE_INTERNAL &&
|
|
1304
|
+
this.getInternalCode() == InternalInterface.MG_ACT_VARIABLE;
|
|
1305
|
+
}
|
|
1306
|
+
AppendDescription(buffer) {
|
|
1307
|
+
switch (this._type) {
|
|
1308
|
+
case ConstInterface.EVENT_TYPE_INTERNAL:
|
|
1309
|
+
buffer.Append(Event.getInternalEvtDescription(this.InternalEvent));
|
|
1310
|
+
break;
|
|
1311
|
+
case ConstInterface.EVENT_TYPE_SYSTEM:
|
|
1312
|
+
buffer.Append(this.getKeyboardItemString());
|
|
1313
|
+
break;
|
|
1314
|
+
case ConstInterface.EVENT_TYPE_USER:
|
|
1315
|
+
buffer.Append(this.getUsrEvntDesc());
|
|
1316
|
+
break;
|
|
1317
|
+
case ConstInterface.EVENT_TYPE_USER_FUNC:
|
|
1318
|
+
buffer.Append(this._userDefinedFuncName);
|
|
1319
|
+
break;
|
|
1320
|
+
case ConstInterface.EVENT_TYPE_TIMER:
|
|
1321
|
+
buffer.Append(this.seconds2String());
|
|
1322
|
+
break;
|
|
1323
|
+
case ConstInterface.EVENT_TYPE_EXPRESSION:
|
|
1324
|
+
buffer.Append('ID ' + this.Exp.getId().toString());
|
|
1325
|
+
break;
|
|
1326
|
+
default:
|
|
1327
|
+
buffer.Append("unknown event type ");
|
|
1328
|
+
break;
|
|
1329
|
+
}
|
|
1330
|
+
}
|
|
1331
|
+
isNewInternalEvent() {
|
|
1332
|
+
return this.InternalEvent >= 1001 && this.InternalEvent <= 1008;
|
|
1333
|
+
}
|
|
1334
|
+
getNewInternalEventDescription() {
|
|
1335
|
+
let eventDesc = NString.Empty;
|
|
1336
|
+
switch (this.InternalEvent) {
|
|
1337
|
+
case InternalInterface.MG_ACT_TASK_PREFIX:
|
|
1338
|
+
eventDesc = ConstInterface.BRK_LEVEL_TASK_PREFIX_FM;
|
|
1339
|
+
break;
|
|
1340
|
+
case InternalInterface.MG_ACT_TASK_SUFFIX:
|
|
1341
|
+
eventDesc = ConstInterface.BRK_LEVEL_TASK_SUFFIX_FM;
|
|
1342
|
+
break;
|
|
1343
|
+
case InternalInterface.MG_ACT_REC_PREFIX:
|
|
1344
|
+
eventDesc = ConstInterface.BRK_LEVEL_REC_PREFIX_FM;
|
|
1345
|
+
break;
|
|
1346
|
+
case InternalInterface.MG_ACT_REC_SUFFIX:
|
|
1347
|
+
eventDesc = ConstInterface.BRK_LEVEL_REC_SUFFIX_FM;
|
|
1348
|
+
break;
|
|
1349
|
+
case InternalInterface.MG_ACT_CTRL_PREFIX:
|
|
1350
|
+
eventDesc = ConstInterface.BRK_LEVEL_CTRL_PREFIX_FM;
|
|
1351
|
+
break;
|
|
1352
|
+
case InternalInterface.MG_ACT_CTRL_SUFFIX:
|
|
1353
|
+
eventDesc = ConstInterface.BRK_LEVEL_CTRL_SUFFIX_FM;
|
|
1354
|
+
break;
|
|
1355
|
+
case InternalInterface.MG_ACT_CTRL_VERIFICATION:
|
|
1356
|
+
eventDesc = ConstInterface.BRK_LEVEL_CTRL_VERIFICATION_FM;
|
|
1357
|
+
break;
|
|
1358
|
+
case InternalInterface.MG_ACT_VARIABLE:
|
|
1359
|
+
eventDesc = ConstInterface.BRK_LEVEL_VARIABLE_FM;
|
|
1360
|
+
break;
|
|
1361
|
+
}
|
|
1362
|
+
return eventDesc;
|
|
1363
|
+
}
|
|
1364
|
+
getEventType() {
|
|
1365
|
+
return this.isNewInternalEvent()
|
|
1366
|
+
? NString.TrimEnd(this.getNewInternalEventDescription())
|
|
1367
|
+
: this.getEventTypeString();
|
|
1368
|
+
}
|
|
1369
|
+
getEventTypeString() {
|
|
1370
|
+
let eventType;
|
|
1371
|
+
switch (this.getType()) {
|
|
1372
|
+
case ConstInterface.EVENT_TYPE_INTERNAL:
|
|
1373
|
+
eventType = 'Internal Event:';
|
|
1374
|
+
break;
|
|
1375
|
+
case ConstInterface.EVENT_TYPE_SYSTEM:
|
|
1376
|
+
eventType = 'System Event:';
|
|
1377
|
+
break;
|
|
1378
|
+
case ConstInterface.EVENT_TYPE_EXPRESSION:
|
|
1379
|
+
eventType = 'Expression Event:';
|
|
1380
|
+
break;
|
|
1381
|
+
case ConstInterface.EVENT_TYPE_TIMER:
|
|
1382
|
+
eventType = 'Timer Event:';
|
|
1383
|
+
break;
|
|
1384
|
+
case ConstInterface.EVENT_TYPE_USER:
|
|
1385
|
+
eventType = 'User Event:';
|
|
1386
|
+
break;
|
|
1387
|
+
default:
|
|
1388
|
+
eventType = '';
|
|
1389
|
+
break;
|
|
1390
|
+
}
|
|
1391
|
+
return eventType;
|
|
1392
|
+
}
|
|
1393
|
+
setUserDefinedFuncName(name) {
|
|
1394
|
+
this._userDefinedFuncName = name;
|
|
1395
|
+
let functionNameUpper = this._userDefinedFuncName.toUpperCase();
|
|
1396
|
+
this._userDefinedFuncNameHashCode = HashUtils.GetHashCode(functionNameUpper);
|
|
1397
|
+
}
|
|
1398
|
+
getUserDefinedFuncName() {
|
|
1399
|
+
return this._userDefinedFuncName;
|
|
1400
|
+
}
|
|
1401
|
+
getUserDefinedFuncNameHashCode() {
|
|
1402
|
+
return this._userDefinedFuncNameHashCode;
|
|
1403
|
+
}
|
|
1404
|
+
getUserDefinedFuncRetExp() {
|
|
1405
|
+
return this._returnExp;
|
|
1406
|
+
}
|
|
1407
|
+
getOsCommandText() {
|
|
1408
|
+
return this._osCommandText;
|
|
1409
|
+
}
|
|
1410
|
+
setOsCommandText(osCommandText) {
|
|
1411
|
+
this._osCommandText = osCommandText;
|
|
1412
|
+
}
|
|
1413
|
+
getOsCommandWait() {
|
|
1414
|
+
return this._osCommandWait;
|
|
1415
|
+
}
|
|
1416
|
+
setOsCommandWait(wait) {
|
|
1417
|
+
this._osCommandWait = wait;
|
|
1418
|
+
}
|
|
1419
|
+
getOsCommandShow() {
|
|
1420
|
+
return this._osCommandShow;
|
|
1421
|
+
}
|
|
1422
|
+
setOsCommandShow(osShow) {
|
|
1423
|
+
this._osCommandShow = osShow;
|
|
1424
|
+
}
|
|
1425
|
+
setTimestamp() {
|
|
1426
|
+
this._timestamp = Event._lastTimestamp++;
|
|
1427
|
+
}
|
|
1428
|
+
getTimestamp() {
|
|
1429
|
+
return this._timestamp;
|
|
1430
|
+
}
|
|
1431
|
+
toString() {
|
|
1432
|
+
return NString.Format("{{Event: {0}}}", this.getBrkLevel());
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
Event._lastTimestamp = 0;
|
|
1436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V2ZW50L0V2ZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUVMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFFBQVEsRUFDUixhQUFhLEVBQ2QsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQ0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsUUFBUSxFQUNSLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osU0FBUyxFQUNULEdBQUcsRUFDSCxXQUFXLEVBRVgsK0JBQStCLEVBQ2hDLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUs3QyxNQUFNLE9BQU8sS0FBSztJQWlDaEI7UUE1QkEsUUFBRyxHQUFlLElBQUksQ0FBQztRQUN2QixlQUFVLEdBQWMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUN2QyxXQUFNLEdBQWlCLElBQUksQ0FBQztRQUNwQixtQkFBYyxHQUFlLENBQUMsQ0FBQztRQUMvQixtQkFBYyxHQUFXLElBQUksQ0FBQztRQUM5QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUN4QyxnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMzQixl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LEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDOztBQXQrRGMsb0JBQWMsR0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFwcGxpY2F0aW9uRXhjZXB0aW9uLFxyXG4gIENoYXIsXHJcbiAgRXhjZXB0aW9uLFxyXG4gIEhhc2hVdGlscyxcclxuICBJbnQzMixcclxuICBMaXN0LFxyXG4gIE5OdW1iZXIsXHJcbiAgTlN0cmluZyxcclxuICBOdW1iZXJTdHlsZXMsXHJcbiAgUmVmUGFyYW0sXHJcbiAgU3RyaW5nQnVpbGRlclxyXG59IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge1xyXG4gIEJhc2U2NCxcclxuICBDYWxsT3NTaG93LFxyXG4gIEZvcmNlRXhpdCxcclxuICBJbnRlcm5hbEludGVyZmFjZSxcclxuICBMb2dnZXIsXHJcbiAgTWlzYyxcclxuICBTdG9yYWdlQXR0cmlidXRlLFxyXG4gIFN0clV0aWwsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQmxvYlR5cGUsXHJcbiAgRGlzcGxheUNvbnZlcnRvcixcclxuICBLZXlib2FyZEl0ZW0sXHJcbiAgTW9kaWZpZXJzLFxyXG4gIFBJQyxcclxuICBSZWNvcmRVdGlscyxcclxuICBUYXNrRGVmaW5pdGlvbklkLFxyXG4gIFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXJcclxufSBmcm9tIFwiQG1hZ2ljLXhwYS9ndWlcIjtcclxuaW1wb3J0IHtFeHByZXNzaW9ufSBmcm9tIFwiLi4vZXhwL0V4cHJlc3Npb25cIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7RmllbGR9IGZyb20gXCIuLi9kYXRhL0ZpZWxkXCI7XHJcbmltcG9ydCB7VGFza0Jhc2V9IGZyb20gXCIuLi90YXNrcy9UYXNrQmFzZVwiO1xyXG5pbXBvcnQge0xhc3RGb2N1c2VkTWFuYWdlcn0gZnJvbSBcIi4uL3J0L0xhc3RGb2N1c2VkTWFuYWdlclwiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICB0aGlzIGNsYXNzIHJlcHJlc2VudCB0aGUgZXZlbnQgZW50aXR5XHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcbiAgLy8gQVRURU5USU9OICFcclxuICAvLyBhbnkgY2hhbmdlIHRvIHRoZSBtZW1iZXIgdmFyaWFibGVzIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjaGFuZ2UgdG8gdGhlIENUT1IgdGhhdFxyXG4gIC8vIGdldHMgb25lIGFyZ3VtZW50IG9mIHRoZSB0eXBlICdFdmVudCcuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2xhc3RUaW1lc3RhbXA6IG51bWJlciA9IDA7IC8vIGxhc3QgdGltZXN0YW1wXHJcbiAgRXhwOiBFeHByZXNzaW9uID0gbnVsbDsgLy8gZm9yIGV4cHJlc3Npb24gZXZlbnRzIC0gdGhlIGV4cHJlc3Npb24gbnVtYmVyXHJcbiAgX2ZvcmNlRXhpdDogRm9yY2VFeGl0ID0gRm9yY2VFeGl0Lk5vbmU7IC8vIFRoZSDigJxmb3JjZSBleGl0P2lzIG9uZSBvZjogUmVjb3JkLCBDb250cm9sLCBOb25lLiBUaGlzIGF0dHJpYnV0ZSBpcyByZWxldmFudCBvbmx5IGZvciBldmVudHMgaW4gdGhlIOKAnHVzZXIgZXZlbnRzP3RhYmxlLlxyXG4gIGtiZEl0bTogS2V5Ym9hcmRJdGVtID0gbnVsbDsgLy8gZm9yIHN5c3RlbSBldmVudHNcclxuICBwcml2YXRlIF9vc0NvbW1hbmRTaG93OiBDYWxsT3NTaG93ID0gMDtcclxuICBwcml2YXRlIF9vc0NvbW1hbmRUZXh0OiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX29zQ29tbWFuZFdhaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBfcGFyYW1BdHRyczogc3RyaW5nID0gbnVsbDtcclxuICBfcGFyYW1OdWxsczogc3RyaW5nID0gbnVsbDtcclxuICBfcGFyYW1WYWxzOiBzdHJpbmdbXSA9IG51bGw7XHJcbiAgX3BhcmFtZXRlcnM6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfcmV0dXJuRXhwOiBudW1iZXIgPSAwO1xyXG4gIC8qIGV4cHJlc3Npb24gbnVtYmVyIHRvIHNwZWNpZnkgdGhlIEZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlICovXHJcbiAgX3NlY29uZHM6IG51bWJlciA9IEludDMyLk1pblZhbHVlOyAvLyBmb3IgdGltZXIgZXZlbnRzXHJcbiAgX3RpbWVzdGFtcDogbnVtYmVyID0gMDtcclxuICBfdHlwZTogc3RyaW5nID0gQ2hhci5NaW5WYWx1ZTsgLy8gU3lzdGVtfEludGVybmFsfFRpbWVyfEV4cHJlc3Npb258VXNlcnxOb25lXHJcbiAgcHJpdmF0ZSBfdXNlckRlZmluZWRGdW5jTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF91c2VyRGVmaW5lZEZ1bmNOYW1lSGFzaENvZGU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdXNlckV2dERlc2M6IHN0cmluZyA9IFwiXCI7XHJcbiAgX3VzZXJFdnRJZHg6IG51bWJlciA9IEludDMyLk1pblZhbHVlOyAvLyB0aGUgaW5kZXggb2YgdGhlIHVzZXIgZXZlbnQgaW4gdGhlIHRhc2tzIHVzZXIgZXZlbnRzIHRhYmxlXHJcblxyXG4gIHByaXZhdGUgb3duZXJUYXNrRGVmaW5pdGlvbklkOiBUYXNrRGVmaW5pdGlvbklkID0gbnVsbDtcclxuICBJbnRlcm5hbEV2ZW50OiBudW1iZXIgPSAwOyAvLyBpbnRlcm5hbCBldmVudCBjb2RlXHJcbiAgUHJnRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XHJcbiAgUHVibGljTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICBVc2VyRXZ0OiBFdmVudCA9IG51bGw7XHJcbiAgVXNlckV2dFRhc2tUYWc6IHN0cmluZyA9IG51bGw7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuSW50ZXJuYWxFdmVudCA9IEludDMyLk1pblZhbHVlO1xyXG4gICAgdGhpcy5zZXRUaW1lc3RhbXAoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb3B5IENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcl8xKGV2dDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSBldnQuX3R5cGU7XHJcbiAgICB0aGlzLmtiZEl0bSA9IGV2dC5rYmRJdG07XHJcbiAgICB0aGlzLkludGVybmFsRXZlbnQgPSBldnQuSW50ZXJuYWxFdmVudDtcclxuICAgIHRoaXMuX3NlY29uZHMgPSBldnQuX3NlY29uZHM7XHJcbiAgICB0aGlzLkV4cCA9IGV2dC5FeHA7XHJcbiAgICB0aGlzLl9mb3JjZUV4aXQgPSBldnQuX2ZvcmNlRXhpdDtcclxuICAgIHRoaXMuVXNlckV2dCA9IGV2dC5Vc2VyRXZ0O1xyXG4gICAgdGhpcy5Vc2VyRXZ0VGFza1RhZyA9IGV2dC5Vc2VyRXZ0VGFza1RhZztcclxuICAgIHRoaXMuX3VzZXJFdnRJZHggPSBldnQuX3VzZXJFdnRJZHg7XHJcbiAgICB0aGlzLl90aW1lc3RhbXAgPSAwO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBGb3JjZUV4aXQoKTogRm9yY2VFeGl0IHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JjZUV4aXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTmVlZCBwYXJ0IGlucHV0IFN0cmluZyB0byByZWxldmFudCBmb3IgdGhlIGNsYXNzIGRhdGEuXHJcbiAgLy8vICAgaW5kZXggb2YgZW5kIDxldmVudCAuLi4+IHRhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ4bWxQYXJzZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPjwvcGFyYW0+XHJcbiAgZmlsbERhdGEoeG1sUGFyc2VyOiBYbWxQYXJzZXIsIHRhc2tSZWY6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICBsZXQgdXNlclZhbHVlOiBzdHJpbmdcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSB4bWxQYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgeG1sUGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IHN0cmluZyA9IHhtbFBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHhtbFBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FVkVOVCkgKyBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMoeG1sUGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSwgWE1MQ29uc3RhbnRzLlhNTF9BVFRSX0RFTElNKTtcclxuXHJcbiAgICAgIGxldCByZWZVc2VyVmFsdWU6IFJlZlBhcmFtPHN0cmluZz4gPSBuZXcgUmVmUGFyYW0odXNlclZhbHVlKTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvciwgdGFza1JlZiwgcmVmVXNlclZhbHVlKTtcclxuICAgICAgdXNlclZhbHVlID0gcmVmVXNlclZhbHVlLnZhbHVlO1xyXG5cclxuICAgICAgeG1sUGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCI+XCIgdG9vXHJcblxyXG4gICAgICB0aGlzLkluaXRJbm5lck9iamVjdHMoeG1sUGFyc2VyKTtcclxuXHJcbiAgICAgIGlmICh1c2VyVmFsdWUgIT09IG51bGwpXHJcbiAgICAgICAgdGhpcy5Jbml0VXNlckRhdGEodGFza1JlZiwgdXNlclZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRXZlbnQuRmlsbERhdGEoKSBvdXQgb2Ygc3RyaW5nIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgSW5pdElubmVyT2JqZWN0cyh4bWxQYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IG5leHRUYWc6IHN0cmluZyA9IHhtbFBhcnNlci5nZXROZXh0VGFnKCk7XHJcbiAgICBzd2l0Y2ggKG5leHRUYWcpIHtcclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX1RBU0tERUZJTklUSU9OSURfRU5UUlk6XHJcbiAgICAgICAgbGV0IHhtbEJ1ZmZlcjogc3RyaW5nID0geG1sUGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgICAgICB0aGlzLkluaXRUYXNrRGVmaW5pdGlvbklkKHhtbEJ1ZmZlcik7XHJcblxyXG4gICAgICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSB4bWxQYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgeG1sUGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgICAgICB4bWxQYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQgKyAoQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRSkubGVuZ3RoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZWxlbWVudHMgYnkgZm91bmQgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmZvdW5kIHRva2Vucywgd2hpY2ggY29uc2lzdCBhdHRyaWJ1dGUvdmFsdWUgb2YgZXZlcnkgZm91bmRlbGVtZW50PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tSZWZcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+LCB0YXNrUmVmOiBUYXNrQmFzZSwgcmVmVXNlclZhbHVlOiBSZWZQYXJhbTxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICBsZXQgbW9kaWZpZXI6IE1vZGlmaWVycyA9IE1vZGlmaWVycy5NT0RJRklFUl9OT05FO1xyXG4gICAgbGV0IGtleUNvZGU6IG51bWJlciA9IC0xO1xyXG4gICAgcmVmVXNlclZhbHVlLnZhbHVlID0gbnVsbDtcclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpe1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FVkVOVFRZUEU6XHJcbiAgICAgICAgICB0aGlzLl90eXBlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICAvLyBTeXN0ZW18SW50ZXJuYWx8VXNlcnxUaW1lcnxFeHByZXNzaW9ufFJlY29tcHV0ZVxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9NT0RJRklFUjpcclxuICAgICAgICAgIG1vZGlmaWVyID0gPE1vZGlmaWVycz52YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vIEFsdHxDdHJsfFNoaWZ0fE5vbmVcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5URVJOQUxFVkVOVDpcclxuICAgICAgICAgIHRoaXMuSW50ZXJuYWxFdmVudCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0tFWUNPREU6XHJcbiAgICAgICAgICBrZXlDb2RlID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU0VDT05EUzpcclxuICAgICAgICAgIHRoaXMuX3NlY29uZHMgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfRVhQOlxyXG4gICAgICAgICAgLy8gZm9yIGV4cHJlc3Npb24gZXZlbnRzIC0gdGhlIGV4cHJlc3Npb24gbnVtYmVyXHJcbiAgICAgICAgICB0aGlzLkV4cCA9IHRhc2tSZWYuZ2V0RXhwQnlJZChYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRk9SQ0VfRVhJVDpcclxuICAgICAgICAgIHRoaXMuX2ZvcmNlRXhpdCA9IDxGb3JjZUV4aXQ+dmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVTQzpcclxuICAgICAgICAgIHRoaXMuX3VzZXJFdnREZXNjID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QVUJMSUM6XHJcbiAgICAgICAgICB0aGlzLlB1YmxpY05hbWUgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BBUkFNUzpcclxuICAgICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9QQVJfQVRUUlM6XHJcbiAgICAgICAgICB0aGlzLl9wYXJhbUF0dHJzID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1ZBTFVFOlxyXG4gICAgICAgICAgbGV0IHBhcmFtU3RyOiBzdHJpbmcgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgdGhpcy5fcGFyYW1WYWxzID0gbmV3IEFycmF5KHRoaXMuX3BhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgLy8gcHV0IHRoZSBwYXJhbVZhbHMgaW4gcGxhY2VcclxuICAgICAgICAgIHRoaXMucGFyc2VQYXJhbVZhbChwYXJhbVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTlVMTFM6XHJcbiAgICAgICAgICB0aGlzLl9wYXJhbU51bGxzID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUjpcclxuICAgICAgICAgIHJlZlVzZXJWYWx1ZS52YWx1ZSA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgLy8gVVNFUiBldmVudFxyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfTkFNRTpcclxuICAgICAgICAgIHRoaXMuc2V0VXNlckRlZmluZWRGdW5jTmFtZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU1JfREVGX0ZVQ19SRVRfRVhQX0lEOlxyXG4gICAgICAgICAgdGhpcy5fcmV0dXJuRXhwID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU1JfREVGX0ZVQ19SRVRfRVhQX0FUVFI6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiVGhlcmUgaXMgbm8gc3VjaCB0YWcgaW4gRXZlbnQgY2xhc3MuIEluc2VydCBjYXNlIHRvIEV2ZW50LmluaXRFbGVtZW50cyBmb3IgezB9XCIsIGF0dHJpYnV0ZSkpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1NZU1RFTSlcclxuICAgICAgdGhpcy5rYmRJdG0gPSBuZXcgS2V5Ym9hcmRJdGVtKGtleUNvZGUsIG1vZGlmaWVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUGVyZm9ybSB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBmcm9tIHRoZSBcInVzZXJcIiBhdHRyaWJ1dGUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWx1ZVN0clwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza1JlZlwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBJbml0VXNlckRhdGEodGFza1JlZjogVGFza0Jhc2UsIHVzZXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgY29tbWE6IG51bWJlciA9IHVzZXJWYWx1ZS5pbmRleE9mKFwiLFwiKTtcclxuICAgIGlmIChjb21tYSA+IC0xKSB7XHJcbiAgICAgIGxldCB1ZVRhc2tJZDogc3RyaW5nID0gdXNlclZhbHVlLnN1YnN0cigwLCBjb21tYSk7XHJcbiAgICAgIGlmICh0YXNrUmVmICE9PSBudWxsKVxyXG4gICAgICAgIHVlVGFza0lkID0gdGFza1JlZi5UYXNrU2VydmljZS5HZXRFdmVudFRhc2tJZCggdWVUYXNrSWQpO1xyXG5cclxuICAgICAgbGV0IHVlVGFzazogVGFza0Jhc2UgPSA8VGFza0Jhc2U+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLkdldFRhc2tCeUlEKHVlVGFza0lkKTtcclxuXHJcbiAgICAgIGxldCB1ZUlkeDogbnVtYmVyID0gWG1sUGFyc2VyLmdldEludCh1c2VyVmFsdWUuc3Vic3RyKGNvbW1hICsgMSkpO1xyXG5cclxuICAgICAgaWYgKHVlVGFzayAhPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuVXNlckV2dCA9IHVlVGFzay5nZXRVc2VyRXZlbnQodWVJZHgpO1xyXG4gICAgICAgIGlmICh0aGlzLlVzZXJFdnQgPT09IG51bGwpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIEV2ZW50LmZpbGxEYXRhKCk6IHVzZXIgZXZlbnQgbm90IGZvdW5kLiB0YXNrIGlkID0gXCIgKyB1ZVRhc2tJZCArXHJcbiAgICAgICAgICAgIFwiLCB1c2VyIGV2ZW50IGluZGV4ID0gXCIgKyB1ZUlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuVXNlckV2dFRhc2tUYWcgPSB1ZVRhc2tJZDtcclxuICAgICAgICB0aGlzLl91c2VyRXZ0SWR4ID0gdWVJZHg7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdGhlIHRhc2sgaGFzbid0IGJlZW4gZm91bmQsIGl0IG5vdCBwYXJzZWQsIHlldFxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLlVzZXJFdnRUYXNrVGFnID0gdWVUYXNrSWQ7XHJcbiAgICAgICAgdGhpcy5fdXNlckV2dElkeCA9IHVlSWR4O1xyXG4gICAgICAgIHRoaXMuVXNlckV2dCA9IG51bGw7IC8vIGNhbiBub3QgYmUgaW5pdGlhbGl6ZWQgb24gdGhpcyBzdGVwXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgSW5pdFRhc2tEZWZpbml0aW9uSWQoeG1sQnVmZmVyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBoYW5kbGVyOiBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyID0gbmV3IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIodGhpcy5TZXRUYXNrRGVmaW5pdGlvbklkKTtcclxuICAgIGhhbmRsZXIucGFyc2UoeG1sQnVmZmVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2FsbGJhY2sgZm9yIHRoZSBzYXggcGFyc2VyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrRGVmaW5pdGlvbklkXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ4bWxJZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVmYXVsdFRhZ0xpc3RcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgU2V0VGFza0RlZmluaXRpb25JZCh0YXNrRGVmaW5pdGlvbklkOiBUYXNrRGVmaW5pdGlvbklkKTogdm9pZCB7XHJcbiAgICB0aGlzLm93bmVyVGFza0RlZmluaXRpb25JZCA9IHRhc2tEZWZpbml0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZmluZCB0YXNrIGZvciBVc2VyIEV2ZW50IGlmIGl0IHdhcyBub3QgZm91bmQgZHVyaW5nIHBhcnNpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGZpbmRVc2VyRXZlbnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSICYmIHRoaXMuVXNlckV2dCA9PT0gbnVsbCkge1xyXG4gICAgICBsZXQgdWVUYXNrOiBUYXNrQmFzZSA9IDxUYXNrQmFzZT5BY2Nlc3NIZWxwZXIubWdEYXRhVGFibGUuR2V0VGFza0J5SUQodGhpcy5Vc2VyRXZ0VGFza1RhZyk7XHJcbiAgICAgIGlmICh1ZVRhc2sgIT09IG51bGwpXHJcbiAgICAgICAgdGhpcy5Vc2VyRXZ0ID0gdWVUYXNrLmdldFVzZXJFdmVudCh0aGlzLl91c2VyRXZ0SWR4KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLlVzZXJFdnQgPT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKE5TdHJpbmcuRm9ybWF0KFwiaW4gRXZlbnQuZmluZFVzZXJFdmVudCgpOiB1c2VyIGV2ZW50IG5vdCBmb3VuZC4gdGFzayBpZCA9IHswfSBkb2Vzbid0IGV4aXN0XCIsIHRoaXMuVXNlckV2dFRhc2tUYWcpKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcGFyZSB0aGlzIGV2ZW50IHRvIGFub3RoZXIgLSByZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGV2ZW50cyBhcmUgaWRlbnRpY2FsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBlcXVhbHMoZXZ0OiBFdmVudCk6IGJvb2xlYW57XHJcbiAgICBsZXQgYkVxdWFsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gY29tcGFyZSByZWZlcmVuY2VzXHJcbiAgICBpZiAodGhpcyA9PT0gZXZ0KVxyXG4gICAgICBiRXF1YWwgPSB0cnVlO1xyXG4gICAgLy8gZG8gc2hhbGxvdyBjb21wYXJpc2lvblxyXG4gICAgZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gZXZ0Ll90eXBlKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU06XHJcbiAgICAgICAgICBiRXF1YWwgPSB0aGlzLmtiZEl0bS5lcXVhbHMoZXZ0LmtiZEl0bSk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMOlxyXG4gICAgICAgICAgYkVxdWFsID0gKHRoaXMuSW50ZXJuYWxFdmVudCA9PT0gZXZ0LkludGVybmFsRXZlbnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9USU1FUjpcclxuICAgICAgICAgIGJFcXVhbCA9ICh0aGlzLl9zZWNvbmRzID09PSBldnQuX3NlY29uZHMpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUM6XHJcbiAgICAgICAgICBiRXF1YWwgPSAodGhpcy5FeHAgPT09IGV2dC5FeHApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSOlxyXG4gICAgICAgICAgYkVxdWFsID0gKHRoaXMuVXNlckV2dCA9PT0gZXZ0LlVzZXJFdnQpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkM6XHJcbiAgICAgICAgICBpZiAodGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlID09PSBldnQuZ2V0VXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlKCkpIHtcclxuICAgICAgICAgICAgaWYgKE5TdHJpbmcuRXF1YWxzKGV2dC5nZXRVc2VyRGVmaW5lZEZ1bmNOYW1lKCksIHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWUsIHRydWUpKVxyXG4gICAgICAgICAgICAgIGJFcXVhbCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJFcXVhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3IgaW50ZXJuYWwgZXZlbnRzLCBjb21wYXJlIHRoZSBpbnRlcm5hbCBuYW1lc1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfUFVCTElDIHx8IGV2dC5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9QVUJMSUMpIHtcclxuICAgICAgbGV0IG5hbWUxOiBTdHJpbmcgPSBudWxsO1xyXG4gICAgICBsZXQgbmFtZTI6IFN0cmluZyA9IG51bGw7XHJcbiAgICAgIGlmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIgJiYgZXZ0Ll90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIpXHJcbiAgICAgICAgYkVxdWFsID0gZmFsc2U7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfUFVCTElDKSB7XHJcbiAgICAgICAgbmFtZTEgPSB0aGlzLlB1YmxpY05hbWU7XHJcbiAgICAgICAgbmFtZTIgPSBldnQuZ2V0VXNlckV2ZW50KCkuUHVibGljTmFtZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBuYW1lMSA9IGV2dC5QdWJsaWNOYW1lO1xyXG4gICAgICAgIG5hbWUyID0gdGhpcy5nZXRVc2VyRXZlbnQoKS5QdWJsaWNOYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuYW1lMSA9PT0gbnVsbCB8fCBuYW1lMiA9PT0gbnVsbClcclxuICAgICAgICBiRXF1YWwgPSBmYWxzZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGJFcXVhbCA9IChuYW1lMSA9PT0gbmFtZTIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCAmJiBldnQuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNKSB7XHJcbiAgICAgIGlmIChMYXN0Rm9jdXNlZE1hbmFnZXIuSW5zdGFuY2UuZ2V0Q3VyclRhc2soKSAhPT0gbnVsbCAmJiAoQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIuZ2V0TWF0Y2hpbmdBY3Rpb24oIGV2dC5nZXRLYmRJdG0oKSkpID09PSB0aGlzLmdldEludGVybmFsQ29kZSgpKVxyXG4gICAgICAgIGJFcXVhbCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIgJiYgZXZ0Ll90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIpIHtcclxuICAgICAgLy8gYmVmb3JlIHVzaW5nIHRoZSB1c2VyIGV2ZW50LCBjaGVjayB0aGF0IGl0IGlzIHZhbGlkXHJcbiAgICAgIHRoaXMuZmluZFVzZXJFdmVudCgpO1xyXG5cclxuICAgICAgLy8gaWYgb25lIGV2ZW50IG9mIHRoZSB0d28gaXMgYSB1c2VyIGV2ZW50IGFuZCB0aGUgb3RoZXIgaXNuJ3QgdGhlblxyXG4gICAgICAvLyBjb21wYXJlIHRoZSB0cmlnZ2VyIG9mIHRoZSB1c2VyIGV2ZW50IHRvIHRoZSBub24tdXNlciBldmVudFxyXG4gICAgICBiRXF1YWwgPSAgdGhpcy5Vc2VyRXZ0LmVxdWFscyhldnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJFcXVhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGludGVybmFsIG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFzeW5jIHNldFB1YmxpY05hbWUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBGb3IgYSBydW50aW1lIGludGVybmFsIGV2ZW50IC0gY2FsY3VsYXRlIHRoZSBpbnRlcm5hbCBuYW1lLlxyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfUFVCTElDICYmIHRoaXMuRXhwICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuUHVibGljTmFtZSA9IChhd2FpdCB0aGlzLkV4cC5ldmFsdWF0ZVdpdGhSZXNMZW5ndGgoMjU1KSkubWdWYWw7XHJcbiAgICAgIGlmICh0aGlzLlB1YmxpY05hbWUgIT09IG51bGwpXHJcbiAgICAgICAgdGhpcy5QdWJsaWNOYW1lID0gU3RyVXRpbC5ydHJpbSh0aGlzLlB1YmxpY05hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhbiBJbnRlcm5hbCBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb2RlXCI+dGhlIGNvZGUgb2YgdGhlIGludGVybmFsIGV2ZW50IDwvcGFyYW0+XHJcbiAgc2V0SW50ZXJuYWwoY29kZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl90eXBlID0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTDtcclxuICAgIHRoaXMuSW50ZXJuYWxFdmVudCA9IGNvZGU7XHJcblxyXG4gICAgLy8gTUdfQUNUX0hJVC9NR19BQ1RfQ1RSTF9ISVQgYXJlIGNhdXNlZCBieSBtb3VzZSBjbGljay4gSW4gdGhpcyBjYXNlXHJcbiAgICAvLyB0aW1lIG9mIGxhc3QgdXNlciBhY3Rpb24gZm9yIElETEUgZnVuY3Rpb24gc2hvdWxkIGJlIHJlLWV2YWx1YXRlZC5cclxuICAgIGlmIChjb2RlID09PSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSElUIHx8IGNvZGUgPT09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX0hJVClcclxuICAgICAgTGFzdEZvY3VzZWRNYW5hZ2VyLkluc3RhbmNlLkxhc3RBY3Rpb25UaW1lID0gTWlzYy5nZXRTeXN0ZW1NaWxsaXNlY29uZHMoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYW4gRXhwcmVzc2lvbiBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJleHBSZWZcIj5hIHJlZmVyZW5jZSB0byB0aGUgZXhwcmVzc2lvbiBvYmplY3QgPC9wYXJhbT5cclxuICBzZXRFeHByZXNzaW9uKGV4cFJlZjogRXhwcmVzc2lvbik6IHZvaWQge1xyXG4gICAgdGhpcy5fdHlwZSA9IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfRVhQUkVTU0lPTjtcclxuICAgIHRoaXMuRXhwID0gZXhwUmVmO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBFeHByZXNzaW9uIG9mIHRoZSBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0RXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcclxuICAgIHJldHVybiB0aGlzLkV4cDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgVXNlckV2ZW50IGRlc2NyaXB0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldFVzckV2bnREZXNjKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKHRoaXMuVXNlckV2dCAhPT0gbnVsbCkgPyB0aGlzLlVzZXJFdnQuX3VzZXJFdnREZXNjIDogdGhpcy5fdXNlckV2dERlc2M7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgU3lzdGVtIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImtleWJvYXJkSXRlbVwiPnRoZSBrZXlib2FyZCBpdGVtIG9iamVjdCA8L3BhcmFtPlxyXG4gIHNldFN5c3RlbShrZXlib2FyZEl0ZW06IEtleWJvYXJkSXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdHlwZSA9IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNO1xyXG4gICAgdGhpcy5rYmRJdG0gPSBrZXlib2FyZEl0ZW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgU3lzdGVtIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImtleWJvYXJkSXRlbVwiPnRoZSBrZXlib2FyZCBpdGVtIG9iamVjdCA8L3BhcmFtPlxyXG4gIHNldEtleWJvYXJkSXRlbShrZXlib2FyZEl0ZW06IEtleWJvYXJkSXRlbSk6IHZvaWQge1xyXG4gICAgdGhpcy5rYmRJdG0gPSBrZXlib2FyZEl0ZW07XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHR5cGUgcmV0dXJucyBTeXN0ZW18SW50ZXJuYWx8VXNlcnxUaW1lcnxFeHByZXNzaW9ufFJlY29tcHV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHR5cGUgcmVjZWl2ZXMgU3lzdGVtfEludGVybmFsfFVzZXJ8VGltZXJ8RXhwcmVzc2lvbnxSZWNvbXB1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFR5cGUoYVR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdHlwZSA9IGFUeXBlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBpbnRlcm5hbCBldmVudCBjb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGludCBpcyB0aGUgaW50ZXJuYWwgZXZlbnQgY29kZSA8L3JldHVybnM+XHJcbiAgZ2V0SW50ZXJuYWxDb2RlKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTClcclxuICAgICAgcmV0dXJuIHRoaXMuSW50ZXJuYWxFdmVudDtcclxuICAgIHJldHVybiBJbnQzMi5NaW5WYWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGtleWJvYXJkIGl0ZW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEtiZEl0bSgpOiBLZXlib2FyZEl0ZW0ge1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNKVxyXG4gICAgICByZXR1cm4gdGhpcy5rYmRJdG07XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGtleWJvYXJkIGl0ZW1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEtiZEl0bUFsd2F5cygpOiBLZXlib2FyZEl0ZW0ge1xyXG4gICAgcmV0dXJuIHRoaXMua2JkSXRtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBmb3Igbm9uIGRhdGEgZXZlbnRzIG9yIGRhdGEgZXZlbnRzIHdoaWNoIHRoZWlyIGV4cHJlc3Npb25cclxuICAvLy8gICBldmFsdWF0ZXMgdG8gdHJ1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZGF0YUV2ZW50SXNUcnVlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG5cclxuICAgIGlmICh0aGlzLl90eXBlICE9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT04gJiZcclxuICAgICAgISh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVIgJiYgdGhpcy5nZXRVc2VyRXZlbnRUeXBlKCkgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfRVhQUkVTU0lPTikpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUilcclxuICAgICAgcmV0dXJuIERpc3BsYXlDb252ZXJ0b3IudG9Cb29sZWFuKGF3YWl0IHRoaXMuRXhwLmV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgoU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOLCAwKSk7XHJcbiAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4oYXdhaXQgdGhpcy5Vc2VyRXZ0LmdldEV4cHJlc3Npb24oKS5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTiwgMCkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgbnVtYmVyIG9mIHNlY29uZHMgKGZvciB0aW1lciBldmVudHMpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vjb25kcztcclxuICB9XHJcblxyXG4gIGdldEJya0xldmVsKCk6IHN0cmluZztcclxuICBnZXRCcmtMZXZlbChmbG93TW9uaXRvcjogYm9vbGVhbik6IHN0cmluZztcclxuICBnZXRCcmtMZXZlbChmbG93TW9uaXRvcj86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnJrTGV2ZWxfMCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QnJrTGV2ZWxfMShmbG93TW9uaXRvcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBicmVhayBsZXZlbCBvZiBFdmVudCBub3QgZm9yIEZsb3cgTW9uaXRvcmluZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBnZXRCcmtMZXZlbF8wKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRCcmtMZXZlbChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHRoZSBicmVhayBsZXZlbCBvZiBFdmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbG93TW9uaXRvclwiPmlzIGl0IG5lZWRlZCBmb3IgRmxvdyBNb25pdG9yaW5nIHVzYWdlIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBnZXRCcmtMZXZlbF8xKGZsb3dNb25pdG9yOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGxldCBsZXZlbDogc3RyaW5nID0gXCJcIjtcclxuICAgIHN3aXRjaCAodGhpcy5fdHlwZSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUw6XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLkludGVybmFsRXZlbnQpIHtcclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBU0tfUFJFRklYOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfUFJFRklYX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1RBU0tfUFJFRklYO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX1NVRkZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9UQVNLX1NVRkZJWF9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9UQVNLX1NVRkZJWDtcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfUFJFRklYX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1JFQ19QUkVGSVg7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19TVUZGSVg6XHJcbiAgICAgICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfUkVDX1NVRkZJWF9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfU1VGRklYO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1BSRUZJWF9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1BSRUZJWCArICdfJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9TVUZGSVg6XHJcbiAgICAgICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9TVUZGSVhfRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfQ1RSTF9TVUZGSVggKyAnXyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfVkVSSUZJQ0FUSU9OOlxyXG4gICAgICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfVkVSSUZJQ0FUSU9OX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0NUUkxfVkVSSUZJQ0FUSU9OICsgJ18nO1xyXG4gICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRTpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9WQVJJQUJMRV9GTSA6IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9WQVJJQUJMRSArICdfJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgbGV2ZWwgPSBmbG93TW9uaXRvciA/IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9IQU5ETEVSX0lOVEVSTkFMX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfSU5URVJOQUwgKyAnXyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXZlbCArPSBFdmVudC5nZXRJbnRlcm5hbEV2dERlc2NyaXB0aW9uKHRoaXMuSW50ZXJuYWxFdmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNOlxyXG4gICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9TWVNURU1fRk0gOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9TWVNURU0gKyAnXyc7XHJcbiAgICAgICAgbGV2ZWwgKz0gdGhpcy5nZXRLZXlib2FyZEl0ZW1TdHJpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9USU1FUjpcclxuICAgICAgICBsZXZlbCA9IGZsb3dNb25pdG9yID8gQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfVElNRVJfRk0gKyAnICcgKyB0aGlzLnNlY29uZHMyU3RyaW5nKCkgOiBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9USU1FUiArICdfJyArIHRoaXMuc2Vjb25kczJTdHJpbmcoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9FWFBSRVNTSU9OOlxyXG4gICAgICAgIGxldmVsID0gZmxvd01vbml0b3IgPyBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9FWFBSRVNTSU9OX0ZNIDogQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX0hBTkRMRVJfRVhQUkVTU0lPTiArICdfJyArIHRoaXMuRXhwLmdldElkKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUjpcclxuICAgICAgICBsZXZlbCA9IChmbG93TW9uaXRvciA/IChDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9VU0VSX0ZNICsgXCI6IFwiKSA6IChDb25zdEludGVyZmFjZS5CUktfTEVWRUxfSEFORExFUl9VU0VSICsgJ18nKSkgKyAodGhpcy5Vc2VyRXZ0ICE9IG51bGwgPyB0aGlzLlVzZXJFdnQuX3VzZXJFdnREZXNjIDogdGhpcy5fdXNlckV2dERlc2MpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1VTRVJfRlVOQzpcclxuICAgICAgICBsZXZlbCA9IChmbG93TW9uaXRvciA/IChDb25zdEludGVyZmFjZS5CUktfTEVWRUxfVVNFUl9GVU5DVElPTl9GTSArICc6JykgOiAoQ29uc3RJbnRlcmZhY2UuQlJLX0xFVkVMX1VTRVJfRlVOQ1RJT04gKyAnXycpKSArIHRoaXMuX3VzZXJEZWZpbmVkRnVuY05hbWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxldmVsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBkZXNjcmlwdGlvbiBvZiB0aGUgaW50ZXJuYWwgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gZGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50IDwvcmV0dXJucz5cclxuICBwdWJsaWMgc3RhdGljIGdldEludGVybmFsRXZ0RGVzY3JpcHRpb24oaW50ZXJuYWxFdmVudENvZGU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgZGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIHN3aXRjaCAoaW50ZXJuYWxFdmVudENvZGUpIHtcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQUJPVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkFib3V0IE1hZ2ljXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BQ1RJT05fTElTVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQWN0aW9uIExpc3RcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FERF9IWVBFUkxJTks6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQUxJR05fTEVGVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTGVmdFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQUxJR05fUklHSFQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlJpZ2h0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BUFBMX1BST1BFUlRJRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQVBQTElDQVRJT05TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJBcHBsaWNhdGlvbnNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FQUExJQ0FUSU9OU19MSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJBcHBsaWNhdGlvbnMgTGlzdFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQVRUQUNIX1RPX1RBQkxFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJBdHRhY2ggdG8gVGFibGVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0FVVEhPUklaRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQXV0aG9yaXplXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfQkVHRkxEOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJCZWdpbiBGaWVsZFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0JFR0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkJlZ2luIEZvcm1cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9CRUdMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJCZWdpbiBMaW5lXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfQkVHTlhUTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQmVnaW4gTmV4dCBMaW5lXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfQkVHUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQmVnaW4gUGFnZVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0JFR0xJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkJlZ2luIFJvd1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0JFR1BBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkJlZ2luIFNjcmVlblwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0JFR1RCTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQmVnaW4gdGFibGVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0JPVFRPTTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQm90dG9tXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9CVUxMRVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkJ1bGxldFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQlVUVE9OOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJCdXR0b24gUHJlc3NcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NBTkNFTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ2FuY2VsXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVF9RVUlUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJRdWl0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DRU5URVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNlbnRlclwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0hFQ0tfU1lOVEFYOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDaGVjayBTeW50YXhcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NIRUNLX1RPX0VORDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ2hlY2sgdG8gRW5kXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DTEVBUl9URU1QTEFURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ2xlYXIgVGVtcGxhdGVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NMRUFSX1ZBTFVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDbGVhciBWYWx1ZVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0xPU0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNsb3NlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9BQ1RfQ0xPU0VfQVBQTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ2xvc2UgQXBwbGljYXRpb25cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DT01NVU5JQ0FUSU9OUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ29tbXVuaWNhdGlvbnNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPTVBPTkVOVFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNvbXBvbmVudHNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfSElUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDb250cm9sIEhpdFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09OVFJPTF9OQU1FX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNvbnRyb2wgTmFtZSBMaXN0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DTElQX0NPUFk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNvcHlcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPUFlfTEFZT1VUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDb3B5IExheW91dFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ09QWV9TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDb3B5IFN1YnRyZWVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NSRUxJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNyZWF0ZSBMaW5lXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DUkVMSU5FX0FCT1ZFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDcmVhdGUgTGluZSBBYm92ZVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1JFQVRFX1BBUkVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ3JlYXRlIFBhcmVudFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRPX0NSRUFURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ3JlYXRlIFJlY29yZHNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NSRUFURV9TVUJUQVNLOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDcmVhdGUgU3VidGFza1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1JPU1NfUkVGRVJFTkNFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDcm9zcyBSZWZlcmVuY2VcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NVVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ3V0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9EQl9UQUJMRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREJNUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiREJNU1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRERGX01BS0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkRERiBNYWtlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9EQVRBQkFTRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkRhdGFiYXNlc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfREVGQVVMVF9MQVlPVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkRlZmF1bHQgTGF5b3V0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ERUZJTkVfRVhQUkVTU0lPTjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRGVmaW5lIEV4cHJlc3Npb25cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9ERUxDVVJDSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ3VycmVudCBDaGFyXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfREVMUFJWQ0g6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByZXZpb3VzIENoYXJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RFTEVURV9IWVBFUkxJTks6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkRlbGV0ZSBIeXBlcmxpbmtcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0RFTExJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkRlbGV0ZSBMaW5lXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ERUxFVEVfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRGVsZXRlIFN1YnRyZWVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUX0NPUFlGTEQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkRpdHRvXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ESVNQTEFZX1JFRlJFU0g6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkRpc3BsYXkgUmVmcmVzaFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURJVF9NQUlOX0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkVkaXQgTWFpbiBGb3JtXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfRU5ERkxEOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJFbmQgRmllbGRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9FTkRGT1JNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJFbmQgRm9ybVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX0VORExJTkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkVuZCBMaW5lXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfRU5EUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRW5kIFBhZ2VcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9FTkRMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJFbmQgUm93XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfRU5EUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRW5kIFNjcmVlblwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEJMX0VORFRCTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRW5kIFRhYmxlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FTlZJUk9OTUVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRW52aXJvbm1lbnRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYRUNVVEVfUFJPR1JBTTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRXhlY3V0ZSBQcm9ncmFtXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FWEVDVVRFX1JFUE9SVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRXhlY3V0ZSBSZXBvcnRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYSVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkV4aXRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VYSVRfU1lTVEVNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJFeGl0IFN5c3RlbVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhQT1JUX0lNUE9SVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRXhwb3J0L0ltcG9ydFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhQUkVTU0lPTl9SVUxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRXhwcmVzc2lvbiBydWxlc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRVhURVJOQUxfRURJVE9SOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJFeHRlcm5hbCBFZGl0b3JcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FWFRfRVZFTlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkV4dGVybmFsIEV2ZW50XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9GT1JNUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRm9ybXNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0ZST01fVkFMVUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkZyb20gVmFsdWVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0ZVTkNUSU9OX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkZ1bmN0aW9uIExpc3RcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0dFTkVSQVRFX0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkdlbmVyYXRlIEZvcm1cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0dFTkVSQVRFX1BST0dSQU06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkdlbmVyYXRlIFByb2dyYW1cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0dPX1RPX1RPUDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiR28gdG8gVG9wXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9IX0NFTlRFUl9PRl9GT1JNOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0hUTUxfU1RZTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJIVE1MIFN0eWxlc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSEVMUDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiSGVscFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSEVMUF9TQ1JFRU5TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJIZWxwIFNjcmVlbnNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0hPUklaX0NFTlRFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiSG9yaXouIENlbnRlclwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfSV9PX0ZJTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJUYWJsZXNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0lOREVOVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiSW5kZW50XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9JTlNFUlRfT0JKRUNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJJbnNlcnQgT2JqZWN0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9KVU1QX1RPX1JPVzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiSnVtcCB0byBSb3dcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0tFWUJPQVJEX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIktleWJvYXJkIExpc3RcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0tFWUJPQVJEX01BUFBJTkc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIktleWJvYXJkIE1hcHBpbmdcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0xBTkdVQUdFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwibGFuZ3VhZ2VzXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVE9fU0VBUkNIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJMb2NhdGUgTmV4dFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRPX0xPQ0FURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTG9jYXRlIGEgUmVjb3JkXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9MT0dJQ0FMUE5BTUVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0xPR09OOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJMb2dvblwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNJTkdfSEVMUDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiSGVscCBUb3BpY3NcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9NQVJLTlhUQ0g6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk1hcmsgTmV4dCBDaGFyXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NQVJLX05FWFRfTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTWFyayBOZXh0IExpbmUgTUxFXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS1BSVkNIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJNYXJrIFByZXZpb3VzIENoYXJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9NQVJLUFJWTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTWFyayBQcmV2aW91cyBMaW5lIE1MRVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUFSS19TVUJUUkVFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9NQVJLVE9CRUc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk1hcmsgVG8gQmVnaW5uaW5nXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS1RPRU5EOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJNYXJrIFRvIEVuZFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUFYSU1VTV9IRUlHSFQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk1heGltdW0gSGVpZ2h0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NQVhJTVVNX1dJRFRIOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJNYXhpbXVtIFdpZHRoXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NRU5VX0JBUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTWVudSBCYXJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01FTlVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01JTklNVU1fSEVJR0hUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJNaW5pbXVtIEhlaWdodFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTUlOSU1VTV9XSURUSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTWluaW11bSBXaWR0aFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRPX01PRElGWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTW9kaWZ5IFJlY29yZHNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01PTklUT1JfREVCVUdHRVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk1vbml0b3IvRGVidWdnZXJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01PVkVfRU5UUlk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk1vdmUgRW50cnlcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX01PVkVfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTW92ZSBTdWJ0cmVlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9OVUxMX1NFVFRJTkdTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJOVUxMIFNldHRpbmdzXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTlhUQ0hBUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTmV4dCBDaGFyXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTlhUTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTmV4dCBMaW5lXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTlhUUEFHRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTmV4dCBQYWdlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQkxfTlhUTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTmV4dCBSb3dcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9OWFRQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJOZXh0IFNjcmVlblwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX05YVFRBQjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTmV4dCBUYWJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9OWFRXT1JEOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJOZXh0IFdvcmRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX05PUk1BTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTm9ybWFsXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9PSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiT0tcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX09MRTI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk9MRTJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX09QRU5fQVBQTElDQVRJT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk9wZW4gQXBwbGljYXRpb25cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX09WRVJXUklURV9FTlRSWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiT3ZlcndyaXRlIEVudHJ5XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9PVkVSV1JJVEVfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiT3ZlcndyaXRlIFN1YnRyZWVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BQRDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUFBEXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QQUdFX0ZPT1RFUjpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUGFnZSBGb290ZXJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BBR0VfSEVBREVSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJQYWdlIEhlYWRlclwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0xJUF9QQVNURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUGFzdGVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BBU1RFX0xJTks6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlBhc3RlIExpbmtcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BBU1RFX1NVQlRSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlBhc3RlIFN1YnRyZWVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9QUlZDSEFSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJQcmV2aW91cyBDaGFyXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfUFJWTElORTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUHJldmlvdXMgTGluZVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX1BSVlBBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByZXZpb3VzIFBhZ2VcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9QUlZMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJQcmV2aW91cyBSb3dcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RCTF9QUlZQQUdFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJQcmV2aW91cyBTY3JlZW5cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9QUlZUQUI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByZXZpb3VzIFRhYlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRURUX1BSVldPUkQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByZXZpb3VzIFdvcmRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BSSU5UX0FUVFJJQlVURVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByaW50IEF0dHJpYnV0ZXNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BSSU5URVJfU0VUVVA6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByaW50ZXIgU2V0dXBcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BSSU5URVJTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJQcmludGVyc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUFJPR1JBTVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByb2dyYW1zXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9QUk9QRVJUSUVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJQcm9wZXJ0aWVzXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVE9fUVVFUlk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlF1ZXJ5IFJlY29yZHNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUT19SQU5HRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUmFuZ2Ugb2YgUmVjb3Jkc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUlRfUkVGUkVTSF9SRUNPUkQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlJlY29yZCBGbHVzaFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVESVJFQ1RfRklMRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlJlZGlyZWN0IEZpbGVzXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRURSQVdfTEFZT1VUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFUEVBVF9FTlRSWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUmVwZWF0IEVudHJ5XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRVBFQVRfU1VCVFJFRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUmVwZWF0IFN1YnRyZWVcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFUE9SVF9HRU5FUkFUT1I6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVTVE9SRV9ERUZBVUxUUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiUmVzdG9yZSBEZWZhdWx0c1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVUVVJOX1RPX1RSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUklHSFQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlJpZ2h0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SSUdIVFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUklHSFRTX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlJpZ2h0cyBMaXN0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfQVNTSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTUUwgQXNzaXN0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfQ09MVU1OUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiU1FMIENvbHVtbnNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NRTF9DT01NQU5EOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTUUwgQ29tbWFuZFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1FMX0ZMSVBfREVTQzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiU1FMIEZsaXAgRGVzYy5cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NRTF9LRVlXT1JEUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiU1FMIEtleXdvcmRzXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfT1BFUkFUT1JTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTUUwgT3BlcmF0b3JzXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfVEFCTEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTUUwgVGFibGVzXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TUUxfV0hFUkVfQ0xBVVNFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JUX1JFRlJFU0hfU0NSRUVOOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTY3JlZW4gUmVmcmVzaFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0VDUkVUX05BTUVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTZWNyZXQgTmFtZXNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NFTEVDVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiU2VsZWN0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FRFRfTUFSS0FMTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiU2VsZWN0IEFsbFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0VSVkVSUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9TRVJWSUNFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVF9FRFRfTlVMTDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiU2V0IHRvIE5VTExcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NIRUxMX1RPX09TOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTaGVsbCB0byBPU1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0hPV19FWFBSRVNTSU9OOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTaG93IEV4cHJlc3Npb25cIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NIT1dfRlVMTF9MQVlPVVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU0hSSU5LX1RSRUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU09SVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiU29ydFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU09SVF9SRUNPUkRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTb3J0IFJlY29yZHNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBQkxFX0xPQ0FURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiVGFibGUgTG9jYXRlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQUJMRV9MT0NBVEVfTkVYVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiVGFibGUgTG9jYXRlIE5leHRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RBQkxFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UQVNLX0NPTlRST0w6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19FVkVOVFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVE9fVkFMVUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlRvIFZhbHVlXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9UT09MS0lUX1JVTlRJTUU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlRvb2xraXQvUnVudGltZVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVE9QOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJUb3BcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1RZUEVTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0VEVF9VTkRPOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJVbmRvIEVkaXRpbmdcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VOSU5ERU5UOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJVbmluZGVudFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVBEQVRFX0xJTks6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMjpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMzpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNDpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNjpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fNzpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fODpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fOTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTA6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzExOlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xMjpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTM6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzE0OlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xNTpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTY6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzE3OlxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xODpcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVVNFUl9BQ1RJT05fMTk6XHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1VTRVJfQUNUSU9OXzIwOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJVc2VyIEFjdGlvbiBcIiArIChpbnRlcm5hbEV2ZW50Q29kZSAtIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0FDVElPTl8xICsgMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0dST1VQUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSX0lEUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiVXNlciBJRHNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZfQ0VOVEVSX09GX0ZPUk06XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNlbnRlciBvZiBGb3JtXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WRVJUSUNBTF9DRU5URVI6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlZlcnRpY2FsIENlbnRlclwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVklFV19CWV9LRVk6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlZpZXcgYnkgS2V5XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SVF9SRUZSRVNIX1ZJRVc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlZpZXcgUmVmcmVzaFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVklSVFVBTF9WQVJJQUJMRVM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlZhcmlhYmxlc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVklTVUFMX0NPTk5FQ1RJT046XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlZpc3VhbCBDb25uZWN0aW9uXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ISVQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIldpbmRvdyBIaXRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1dJTk1PVkU6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIldpbmRvdyBSZXBvc2l0aW9uXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9XSU5TSVpFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJXaW5kb3cgUmVzaXplXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9aT09NOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJab29tXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9MT0NLSU5HX0RFVEFJTFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkxvY2tpbmcgRGV0YWlsc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTE9DS0lOR19BQk9SVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTG9ja2luZyBBYm9ydFwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTE9DS0lOR19SRVRSWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiTG9ja2luZyBSZXRyeVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0hFQ0tfT0JKRUNUX0xJU1Q6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkNoZWNrIE9iamVjdCBMaXN0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9VU0VSU19MSVNUOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJVc2VycyBMaXN0XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9NT0RFTFM6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIk1vZGVsc1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfV0VCX0NMSUNLOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJDbGlja1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfV0VCX09OX0RCTElDSzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRGJsQ2xpY2tcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0JST1dTRVJfRVNDOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJFc2NcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JPTExCQUNLOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJSb2xsYmFja1wiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRU1QVFlfREFUQVZJRVc6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIkVtcHR5IERhdGF2aWV3XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX01PRElGWTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ29udHJvbCBNb2RpZnlcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BSSU5UX0RBVEE6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlByaW50IERhdGFcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1BPU1RfUkVGUkVTSF9CWV9QQVJFTlQ6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSBcIlBvc3QgUmVmcmVzaCBieSBQYXJlbnRcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NXSVRDSF9UT19PRkZMSU5FOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJTd2l0Y2ggVG8gT2ZmbGluZVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVU5BVkFJTEFCTEVfU0VSVkVSOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJVbmF2YWlsYWJsZSBTZXJ2ZXJcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NPTlRFWFRfTUVOVTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiQ29udGV4dCBNZW51XCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9FTlRFUl9ST1dfRURJVElORzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiRW50ZXIgUm93IEVkaXRpbmdcIjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfTk9fUFJPR19FWEVfUklHSFRTOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gXCJObyBQcm9ncmFtIEV4ZWN1dGlvbiBSaWdodHNcIjtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1dFQkNMSUVOVF9ST1VURTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdSb3V0ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DT0xfU09SVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdDb2x1bW4gU29ydCc7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9ST1dfREFUQV9DVVJSX1BBR0U6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnR2V0IFJvd3MnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9DTE9TRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTdWJmb3JtIENsb3NlJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1NVQkZPUk1fUkVGUkVTSDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdTdWJmb3JtIFJlZnJlc2gnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfU1VCRk9STV9PUEVOOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ1N1YmZvcm0gT3Blbic7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DT01QVVRFOlxyXG4gICAgICAgIGRlc2NyaXB0aW9uID0gJ0NvbXB1dGUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ0FDSEVfTkVYVDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdHZXQgTmV4dCBEYXRhJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NBQ0hFX1BSRVY6XHJcbiAgICAgICAgZGVzY3JpcHRpb24gPSAnR2V0IFByZXZpb3VzIERhdGEnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfRkVUQ0hfREFUQV9DT05UUk9MX1ZBTFVFUzpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdGZXRjaCBkYXRhIGNvbnRyb2wgdmFsdWVzJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0lOREVYX0NIQU5HRTpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9ICdJbmRleCBDaGFuZ2UnO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZXNjcmlwdGlvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdHlwZSBvZiBVc2VyIEV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHR5cGUgb2YgdXNlciBldmVudCA8L3JldHVybnM+XHJcbiAgZ2V0VXNlckV2ZW50VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuVXNlckV2dCA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfTk9USU5JVEVEO1xyXG5cclxuICAgIHJldHVybiB0aGlzLlVzZXJFdnQuZ2V0VHlwZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBzZWNvbmRzIG9mIHRoZSB1c2VyIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTZWNvbmRzT2ZVc2VyRXZlbnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLlVzZXJFdnQuZ2V0U2Vjb25kcygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdXNlciBldmVudCBvYmplY3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHVzZXIgZXZlbnQgb2JqZWN0IDwvcmV0dXJucz5cclxuICBnZXRVc2VyRXZlbnQoKTogRXZlbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuVXNlckV2dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQga2V5Ym9hcmQgaXRlbSAoIGZvciBzeXN0ZW0gZXZlbnQgKSBpbiBmb3JtIG9mIHN0cmluZ1xyXG4gIC8vLyAgIGZvciBzeXN0ZW0gZXZlbnRzIE9OTFlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZ2V0S2V5Ym9hcmRJdGVtU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBsZXQga2JpOiBLZXlib2FyZEl0ZW0gPSB0aGlzLmdldEtiZEl0bSgpO1xyXG4gICAgaWYgKGtiaSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4ga2JpLlRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgaW5zZXJ0IHRoZSBzZWNvbmRzIHRvIHRoZSBwaWN0dXJlIFwiSEg6TU06U1NcIiBmb3IgU1RPUkFHRV9BVFRSX1RJTUVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gZm9ybWF0ZWQgc3RyaW5nIG9mIHNlY29uZHNcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgc2Vjb25kczJTdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIGxldCB0aW1lOiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KDMpO1xyXG4gICAgbGV0IGJ1ZmZlcjogc3RyaW5nID0gXCJcIjtcclxuICAgIHRpbWVbMF0gPSBNYXRoLmZsb29yKHRoaXMuX3NlY29uZHMgLyAzNjAwKTtcclxuICAgIHRpbWVbMV0gPSBNYXRoLmZsb29yKCh0aGlzLl9zZWNvbmRzIC0gdGltZVswXSAqIDM2MDApIC8gNjApO1xyXG4gICAgdGltZVsyXSA9IHRoaXMuX3NlY29uZHMgJSA2MDtcclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCB0aW1lLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aW1lW2ldID09PSAwKVxyXG4gICAgICAgIGJ1ZmZlciArPSBcIjAwXCI7XHJcbiAgICAgIGVsc2UgaWYgKHRpbWVbaV0gPCAxMClcclxuICAgICAgICBidWZmZXIgKz0gKFwiMFwiICsgdGltZVtpXSk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBidWZmZXIgKz0gdGltZVtpXTtcclxuICAgICAgLy8gZG9uJ3QgaW5zZXJ0IGRlbGltaXRlciBhZnRlciB0aGUgbGFzdCBjYXNlXHJcbiAgICAgIGlmIChpIDwgdGltZS5sZW5ndGggLSAxKVxyXG4gICAgICAgIGJ1ZmZlciArPSBcIjpcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPi0gdGhlIGluZGV4IG9mIHRoZSBwYXJhbWV0ZXIgKCAwID0gZmlyc3QgcGFyYW0pIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdmFsdWUgaW4gYSBzdHJpbmcgPC9yZXR1cm5zPlxyXG4gIGdldFBhcmFtVmFsKGlkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJhbVZhbHNbaWR4XTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBwYXJzZSB0aGUgcGFyYW1ldGVycyB2YWx1ZXMgZnJvbSB0aGUgdmFsdWUgc3RyaW5nXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbHVlU3RyXCI+aW5kZXggb2YgdGhlIHBhcmFtIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgcGFyYW1ldGVyIHZhbHVlIDwvcmV0dXJucz5cclxuICBwcml2YXRlIHBhcnNlUGFyYW1WYWwodmFsdWVTdHI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBsZXQgc3RhcnRPZnM6IG51bWJlciA9IDAsIGVuZE9mcyA9IDAsIG5MZW4sIGo7XHJcbiAgICBsZXQgc0xlbjogc3RyaW5nLCBzVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIC8vIGZpbmQgdGhlIHZhbHVlIGxvY2F0aW9uXHJcbiAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5fcGFyYW1ldGVyczsgaisrKSB7XHJcbiAgICAgIHN3aXRjaCAoPFN0b3JhZ2VBdHRyaWJ1dGU+dGhpcy5fcGFyYW1BdHRyc1tqXSkge1xyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5TS0lQOlxyXG4gICAgICAgICAgc1ZhbHVlID0gXCJcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5NRU1POlxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgICAgZW5kT2ZzID0gc3RhcnRPZnMgKyA0O1xyXG4gICAgICAgICAgc0xlbiA9IHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKTtcclxuICAgICAgICAgIG5MZW4gPSBOTnVtYmVyLlBhcnNlKHNMZW4sIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpO1xyXG4gICAgICAgICAgc3RhcnRPZnMgPSBlbmRPZnM7XHJcblxyXG4gICAgICAgICAgLy8gUUNSIDE2OTkgZGVjb2RlIHRoZSBwYXJhbWV0ZXIgZnJvbSBiYXNlNjQgaWYgbmVlZGVkXHJcbiAgICAgICAgICBpZiAoQWNjZXNzSGVscGVyLmVudmlyb25tZW50LkdldERlYnVnTGV2ZWwoKSA+IDEgfHwgKDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3BhcmFtQXR0cnNbal0pID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8ICg8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFIHx8ICg8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5NRU1PKSB7XHJcbiAgICAgICAgICAgIGlmICgobkxlbiAmIDB4ODAwMCkgPiAwKVxyXG4gICAgICAgICAgICAvLyBwYXJzZSBzcGFubmVkIHJlY29yZCBlbmNvZGVkIHRvIEhleFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgbGVuIG9mIHRoZSBwYXJhbWV0ZXIgZGF0YVxyXG4gICAgICAgICAgICAgIG5MZW4gPSAobkxlbiAmIDB4N0ZGRik7XHJcbiAgICAgICAgICAgICAgbkxlbiAqPSAyO1xyXG5cclxuICAgICAgICAgICAgICAvLyBwYXJzZSB0aGUgU3RyaW5nXHJcbiAgICAgICAgICAgICAgbGV0IHJlczogU3RyaW5nQnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7XHJcbiAgICAgICAgICAgICAgZW5kT2ZzICs9IFJlY29yZFV0aWxzLmdldFNwYW5uZWRGaWVsZCh2YWx1ZVN0ciwgbkxlbiwgc3RhcnRPZnMsIDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3BhcmFtQXR0cnNbal0sIHJlcywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgdmFsdWVTdHIgPSByZXMuVG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBub24gc3Bhbm5lZCBwYXJhbXNcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZW5kT2ZzID0gc3RhcnRPZnMgKyBuTGVuO1xyXG4gICAgICAgICAgICAgIHNWYWx1ZSA9IHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICgobkxlbiAmIDB4ODAwMCkgPiAwKVxyXG4gICAgICAgICAgICAvLyBwYXJzZSBzcGFubmVkIHJlY29yZCBlbmNvZGVkIHRvIEhleFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLy8gY29tcHV0ZSB0aGUgbGVuIG9mIHRoZSBwYXJhbWV0ZXIgZGF0YVxyXG4gICAgICAgICAgICAgIG5MZW4gPSAobkxlbiAmIDB4N0ZGRik7XHJcbiAgICAgICAgICAgICAgbkxlbiA9IE1hdGguZmxvb3IoKG5MZW4gKyAyKSAvIDMpICogNDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gcGFyc2UgdGhlIFN0cmluZ1xyXG4gICAgICAgICAgICAgIGxldCByZXM6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICAgICAgICAgIGVuZE9mcyArPSBSZWNvcmRVdGlscy5nZXRTcGFubmVkRmllbGQodmFsdWVTdHIsIG5MZW4sIHN0YXJ0T2ZzLCA8U3RvcmFnZUF0dHJpYnV0ZT50aGlzLl9wYXJhbUF0dHJzW2pdLCByZXMsIGZhbHNlKTtcclxuICAgICAgICAgICAgICBzVmFsdWUgPSByZXMuVG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBlbmRPZnMgPSBzdGFydE9mcyArIE1hdGguZmxvb3IoKG5MZW4gKyAyKSAvIDMpICogNDtcclxuICAgICAgICAgICAgICBzVmFsdWUgPSBCYXNlNjQuZGVjb2RlKHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgICAvLyBRQ1IgMTY5OSBkZWNvZGUgdGhlIHBhcmFtZXRlciBmcm9tIGJhc2U2NCBpZiBuZWVkZWRcclxuICAgICAgICAgIGlmIChBY2Nlc3NIZWxwZXIuZW52aXJvbm1lbnQuR2V0RGVidWdMZXZlbCgpID4gMSkge1xyXG4gICAgICAgICAgICBlbmRPZnMgPSBzdGFydE9mcyArIEFjY2Vzc0hlbHBlci5lbnZpcm9ubWVudC5HZXRTaWduaWZpY2FudE51bVNpemUoKSAqIDI7XHJcbiAgICAgICAgICAgIHNWYWx1ZSA9IHZhbHVlU3RyLnN1YnN0cihzdGFydE9mcywgKGVuZE9mcykgLSAoc3RhcnRPZnMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBlbmRPZnMgPSBzdGFydE9mcyArIChNYXRoLmZsb29yKChBY2Nlc3NIZWxwZXIuZW52aXJvbm1lbnQuR2V0U2lnbmlmaWNhbnROdW1TaXplKCkgKyAyKSAvIDMpICogNCk7XHJcbiAgICAgICAgICAgIHNWYWx1ZSA9IEJhc2U2NC5kZWNvZGVUb0hleCh2YWx1ZVN0ci5zdWJzdHIoc3RhcnRPZnMsIChlbmRPZnMpIC0gKHN0YXJ0T2ZzKSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgZW5kT2ZzID0gc3RhcnRPZnMgKyAxO1xyXG4gICAgICAgICAgc1ZhbHVlID0gdmFsdWVTdHIuc3Vic3RyKHN0YXJ0T2ZzLCAoZW5kT2ZzKSAtIChzdGFydE9mcykpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fcGFyYW1WYWxzW2pdID0gc1ZhbHVlO1xyXG4gICAgICBzdGFydE9mcyA9IGVuZE9mcztcclxuICAgIH1cclxuICAgIHJldHVybiBlbmRPZnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IEFyZ3VtZW50IFZhbHVlcyAsIHdpdGhvdXQgc2V0dGluZyBvZiB0aGUgcGFyYW1BdHRyc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0UGFyYW1WYWxzKHBhcmFtVmFsc186IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wYXJhbVZhbHMgPSBwYXJhbVZhbHNfO1xyXG4gICAgdGhpcy5fcGFyYW1BdHRycyA9IHRoaXMuX3BhcmFtTnVsbHMgPSBcIlwiO1xyXG4gICAgdGhpcy5fcGFyYW1ldGVycyA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmFtVmFscyAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gdGhpcy5fcGFyYW1WYWxzLmxlbmd0aDtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX3BhcmFtZXRlcnM7IGkrKykge1xyXG4gICAgICAgIHRoaXMuX3BhcmFtQXR0cnMgKz0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTsgLy8gdGVtcG9yYXJ5IHR5cGUgb2YgdGhlIGRhdGFcclxuICAgICAgICB0aGlzLl9wYXJhbU51bGxzICs9IFwiMFwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgVHJ5IHRvIGV2YWx1YXRlIHZhbHVlIHRvIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGZpZWxkIHR5cGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyYW1OdW1cIj5udW1iZXIgb2YgdGhlIHBhcmFtZXRlciA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZmxkXCI+LSBmaWVsZCB3aXRoIGl0J3MgdHlwZSwgdG8gZW5mb3JjZSBpdHMgdHlwZSB0byB0aGUgcGFyYW1ldGVyIHZhbHVlIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIC0gaWYgc2V0dGluZyBvZiB0aGUgdHlwZSBoYXMgb3ZlciB3aXRob3V0IHByb2JsZW1zIGFuZCBub3cgdGhlIHBhcmFtZXRlciBhbmQgdGhlIGZpZWxkcyBoYXZlIHRoZSBzYW1lIHR5cGUsXHJcbiAgLy8vICAgZmFsc2UgLSB0aGUgc2V0dGluZyBpbXBvc3NpYmxlLlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHJvdGVjdGVkIHNldFBhcmFtVHlwZShwYXJhbU51bTogbnVtYmVyLCBmbGQ6IEZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgY3VyclR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGU7XHJcbiAgICBsZXQgY3VyclZhbHVlOiBzdHJpbmc7XHJcbiAgICBsZXQgbmV3VHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IGZsZC5nZXRUeXBlKCk7XHJcbiAgICBsZXQgcGljOiBQSUMgPSBudWxsO1xyXG4gICAgbGV0IHNhbWVUeXBlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmFtVmFscyAhPSBudWxsICYmIHRoaXMuZ2V0UGFyYW1OdW0oKSA+PSBwYXJhbU51bSkge1xyXG4gICAgICBjdXJyVHlwZSA9IDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3BhcmFtQXR0cnNbcGFyYW1OdW1dO1xyXG5cclxuICAgICAgc2FtZVR5cGUgPSAoY3VyclR5cGUgPT09IG5ld1R5cGUpO1xyXG4gICAgICBpZiAoIXNhbWVUeXBlKSB7XHJcbiAgICAgICAgLy8gdHJ5IHRvIHNldCB0aGUgbmV3IHR5cGUgdG8gdGhlIHBhcmFtZXRlclxyXG4gICAgICAgIGxldCBjaGFyQXJyOiBzdHJpbmdbXSA9IG51bGw7XHJcbiAgICAgICAgY3VyclZhbHVlID0gdGhpcy5fcGFyYW1WYWxzW3BhcmFtTnVtXTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChuZXdUeXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5NRU1POlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICAgICAgaWYgKGN1cnJUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBKSB7XHJcbiAgICAgICAgICAgICAgLy8gZnJvbSBhbHBoYSB0byBudW1lcmljXHJcbiAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHBpYyA9IFBJQy5idWlsZFBpY3R1cmUobmV3VHlwZSwgY3VyclZhbHVlLCBmbGQuZ2V0VGFzaygpLmdldENvbXBJZHgoKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbVZhbHNbcGFyYW1OdW1dID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5kaXNwMm1nKGN1cnJWYWx1ZSwgIHBpYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxkLmdldFRhc2soKS5nZXRDb21wSWR4KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTktOT1dOKTtcclxuICAgICAgICAgICAgICAgIHNhbWVUeXBlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY2F0Y2ggKGV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjYW5Ob3RFdmFsdWF0ZUFzTnVtZXJpY1xyXG4gICAgICAgICAgICAgICAgICBzYW1lVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJFdmVudC5zZXRQYXJhbVR5cGUoKSBjYW5ub3QgdHJhbnNmZXIgezB9IHRvIE51bWVyaWMgd2l0aCBwaWN0dXJlIHsxfVwiLCBjdXJyVmFsdWUsIChwaWMgIT0gbnVsbCA/IHBpYy5nZXRGb3JtYXQoKSA6IFwibnVsbFwiKSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICAgICAgICBpZiAoY3VyclR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEEpIHtcclxuICAgICAgICAgICAgICAvLyBmcm9tIGFscGhhIHRvIGxvZ2ljYWxcclxuICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBjdXJyVmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUgPT09IFwiMVwiIHx8IGN1cnJWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtVmFsc1twYXJhbU51bV0gPSBcIjFcIjtcclxuICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJhbVZhbHNbcGFyYW1OdW1dID0gXCIwXCI7XHJcbiAgICAgICAgICAgICAgc2FtZVR5cGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNhbWVUeXBlKSB7XHJcbiAgICAgICAgICBjaGFyQXJyID0gTlN0cmluZy5Ub0NoYXJBcnJheSh0aGlzLl9wYXJhbUF0dHJzKTtcclxuICAgICAgICAgIGNoYXJBcnJbcGFyYW1OdW1dID0gPHN0cmluZz5uZXdUeXBlO1xyXG4gICAgICAgICAgdGhpcy5fcGFyYW1BdHRycyA9IE5TdHJpbmcuRnJvbUNoYXJzKGNoYXJBcnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSAvLyBub3QgdGhlIHNhbWUgdHlwZVxyXG4gICAgfS8vIHRoZXJlIGlzIG5vIHN1Y2ggcGFyYW1ldGVyXHJcblxyXG4gICAgcmV0dXJuIHNhbWVUeXBlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEdldCB0aGUgbnVtYmVyIG9mIHBhcmFtc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBudW1iZXIgb2YgcGFyYW1zIDwvcmV0dXJucz5cclxuICBnZXRQYXJhbU51bSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtZXRlcnM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBudWxsIGZsYWcgb2YgdGhlIHBhcmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBwYXJhbSBpbmRleCA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbnVsbCBmbGFnIDwvcmV0dXJucz5cclxuICBnZXRQYXJhbU51bGwoaWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICgnMCcgPT09IHRoaXMuX3BhcmFtTnVsbHMuY2hhckF0KGlkeCkpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHBhcmFtXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBwYXJhbSBpbmRleCA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYXR0cmlidXRlIGNoYXIgPC9yZXR1cm5zPlxyXG4gIGdldFBhcmFtQXR0cihpZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1BdHRycy5jaGFyQXQoaWR4KTtcclxuICB9XHJcblxyXG4gIGlzQ29udHJvbEhlYWRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldFR5cGUoKSA9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMICYmXHJcbiAgICAgICh0aGlzLmdldEludGVybmFsQ29kZSgpID09IEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWCB8fFxyXG4gICAgICAgIHRoaXMuZ2V0SW50ZXJuYWxDb2RlKCkgPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfU1VGRklYIHx8XHJcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbENvZGUoKSA9PSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9WRVJJRklDQVRJT04pO1xyXG4gIH1cclxuXHJcbiAgaXNWYXJpYWJsZUhlYWRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldFR5cGUoKSA9PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMICYmXHJcbiAgICAgIHRoaXMuZ2V0SW50ZXJuYWxDb2RlKCkgPT0gSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBBcHBlbmRzIHRoZSBldmVudCdzIGRlc2NyaXB0aW9uIHRvIHRoZSBnaXZlbiBTdHJpbmdCdWlsZGVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJidWZmZXJcIj5UaGUgYnVmZmVyIHRvIHdoaWNoIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgYXBwZW5kZWQuPC9wYXJhbT5cclxuICBwdWJsaWMgQXBwZW5kRGVzY3JpcHRpb24oYnVmZmVyOiBTdHJpbmdCdWlsZGVyKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoRXZlbnQuZ2V0SW50ZXJuYWxFdnREZXNjcmlwdGlvbih0aGlzLkludGVybmFsRXZlbnQpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU06XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLmdldEtleWJvYXJkSXRlbVN0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSOlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQodGhpcy5nZXRVc3JFdm50RGVzYygpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9VU0VSX0ZVTkM6XHJcbiAgICAgICAgYnVmZmVyLkFwcGVuZCh0aGlzLl91c2VyRGVmaW5lZEZ1bmNOYW1lKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9USU1FUjpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKHRoaXMuc2Vjb25kczJTdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfRVhQUkVTU0lPTjpcclxuICAgICAgICBidWZmZXIuQXBwZW5kKCAnSUQgJyArIHRoaXMuRXhwLmdldElkKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJ1ZmZlci5BcHBlbmQoXCJ1bmtub3duIGV2ZW50IHR5cGUgXCIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgd2hldGhlciB0aGUgaW50ZXJuYWwgZXZlbnQgY29kZSBpcyBiZXR3ZWVuIDEwMDEgJiAxMDA4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgaXNOZXdJbnRlcm5hbEV2ZW50KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSW50ZXJuYWxFdmVudCA+PSAxMDAxICYmIHRoaXMuSW50ZXJuYWxFdmVudCA8PSAxMDA4O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgdGhlIGRlc2NyaXB0aW9uIGZvciBuZXcgaW50ZXJuYWwgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXROZXdJbnRlcm5hbEV2ZW50RGVzY3JpcHRpb24oKTogc3RyaW5nIHtcclxuICAgIGxldCBldmVudERlc2M6IHN0cmluZyA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5JbnRlcm5hbEV2ZW50KSB7XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19QUkVGSVg6XHJcbiAgICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfVEFTS19QUkVGSVhfRk07XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfVEFTS19TVUZGSVg6XHJcbiAgICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfVEFTS19TVUZGSVhfRk07XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1BSRUZJWDpcclxuICAgICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9SRUNfUFJFRklYX0ZNO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1JFQ19TVUZGSVg6XHJcbiAgICAgICAgICBldmVudERlc2MgPSBDb25zdEludGVyZmFjZS5CUktfTEVWRUxfUkVDX1NVRkZJWF9GTTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1BSRUZJWDpcclxuICAgICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1BSRUZJWF9GTTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1NVRkZJWDpcclxuICAgICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1NVRkZJWF9GTTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9DVFJMX1ZFUklGSUNBVElPTjpcclxuICAgICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9DVFJMX1ZFUklGSUNBVElPTl9GTTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRTpcclxuICAgICAgICAgIGV2ZW50RGVzYyA9IENvbnN0SW50ZXJmYWNlLkJSS19MRVZFTF9WQVJJQUJMRV9GTTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgcmV0dXJuIGV2ZW50RGVzYztcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybiB0aGUgZGVzY3JpcHRpb24gZm9yIG5ldyBpbnRlcm5hbCBldmVudHMgb3IgcmV0dXJuIHRoZSB0eXBlIGluIHN0cmluZyBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBnZXRFdmVudFR5cGUoKSA6IHN0cmluZyB7XHJcbiAgICAvLyBGb3IgdGhlIG5ldyBpbnRlcm5hbCBldmVudHMsIHRoZXJlIGlzIG5vIHR5cGUgc28gaW5zdGVhZCBnZXQgdGhlIGRlc2NyaXB0aW9uXHJcbiAgICByZXR1cm4gdGhpcy5pc05ld0ludGVybmFsRXZlbnQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTlN0cmluZy5UcmltRW5kKHRoaXMuZ2V0TmV3SW50ZXJuYWxFdmVudERlc2NyaXB0aW9uKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmdldEV2ZW50VHlwZVN0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm4gdGhlIHR5cGUgb2YgZXZlbnQgaW4gc3RyaW5nIGZvcm1hdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGdldEV2ZW50VHlwZVN0cmluZygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGV2ZW50VHlwZTogc3RyaW5nO1xyXG4gICAgc3dpdGNoICh0aGlzLmdldFR5cGUoKSkge1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfSU5URVJOQUw6XHJcbiAgICAgIGV2ZW50VHlwZSA9ICdJbnRlcm5hbCBFdmVudDonO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNOlxyXG4gICAgICAgIGV2ZW50VHlwZSA9ICdTeXN0ZW0gRXZlbnQ6JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0VYUFJFU1NJT046XHJcbiAgICAgICAgZXZlbnRUeXBlID0gJ0V4cHJlc3Npb24gRXZlbnQ6JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1RJTUVSOlxyXG4gICAgICAgIGV2ZW50VHlwZSA9ICdUaW1lciBFdmVudDonO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVVNFUjpcclxuICAgICAgICBldmVudFR5cGUgPSAnVXNlciBFdmVudDonO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBldmVudFR5cGUgPSAnJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXZlbnRUeXBlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbidzIG5hbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldFVzZXJEZWZpbmVkRnVuY05hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl91c2VyRGVmaW5lZEZ1bmNOYW1lID0gbmFtZTtcclxuICAgIGxldCBmdW5jdGlvbk5hbWVVcHBlcjogc3RyaW5nID0gdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlID0gSGFzaFV0aWxzLkdldEhhc2hDb2RlKGZ1bmN0aW9uTmFtZVVwcGVyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24ncyBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRVc2VyRGVmaW5lZEZ1bmNOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB1c2VyIGRlZmluZWQgZnVuY3Rpb24ncyBuYW1lJ3MgaGFzaCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlckRlZmluZWRGdW5jTmFtZUhhc2hDb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHVzZXIgZGVmaW5lZCBmdW5jdGlvbidzIHJldHVybiBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRVc2VyRGVmaW5lZEZ1bmNSZXRFeHAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXR1cm5FeHA7XHJcbiAgfVxyXG5cclxuICBnZXRPc0NvbW1hbmRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3NDb21tYW5kVGV4dDtcclxuICB9XHJcblxyXG4gIHNldE9zQ29tbWFuZFRleHQob3NDb21tYW5kVGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vc0NvbW1hbmRUZXh0ID0gb3NDb21tYW5kVGV4dDtcclxuICB9XHJcblxyXG4gIGdldE9zQ29tbWFuZFdhaXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3NDb21tYW5kV2FpdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0T3NDb21tYW5kV2FpdCh3YWl0OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vc0NvbW1hbmRXYWl0ID0gd2FpdDtcclxuICB9XHJcblxyXG4gIGdldE9zQ29tbWFuZFNob3coKTogQ2FsbE9zU2hvdyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3NDb21tYW5kU2hvdztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0T3NDb21tYW5kU2hvdyhvc1Nob3c6IENhbGxPc1Nob3cpOiB2b2lkIHtcclxuICAgIHRoaXMuX29zQ29tbWFuZFNob3cgPSBvc1Nob3c7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHNldFRpbWVzdGFtcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RpbWVzdGFtcCA9IEV2ZW50Ll9sYXN0VGltZXN0YW1wKys7XHJcbiAgfVxyXG5cclxuICBnZXRUaW1lc3RhbXAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90aW1lc3RhbXA7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KFwie3tFdmVudDogezB9fX1cIiwgdGhpcy5nZXRCcmtMZXZlbCgpKTtcclxuICB9XHJcbn1cclxuIl19
|