@magic-xpa/engine 4.800.0 → 4.801.0-dev000.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/index.mjs +190 -0
- package/{esm2015/magic-xpa-engine.js → esm2020/magic-xpa-engine.mjs} +0 -0
- package/esm2020/src/AccessHelper.mjs +3 -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/esm2020/src/GuiEventsProcessor.mjs +171 -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/esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -0
- package/esm2020/src/commands/ClientToServer/ClientOriginatedCommand.mjs +15 -0
- package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
- package/esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -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/esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -0
- package/esm2020/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +21 -0
- package/esm2020/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +20 -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} +2 -2
- package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +36 -0
- package/esm2020/src/commands/ClientToServer/EventCommand.mjs +40 -0
- package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
- package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -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/esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -0
- package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
- package/esm2020/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -0
- package/esm2020/src/commands/ClientToServer/QueryCommand.mjs +21 -0
- package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
- package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
- package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
- package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +39 -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/esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -0
- package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
- package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +28 -0
- package/{esm2015/src/commands/ClientToServer/UnloadCommand.js → esm2020/src/commands/ClientToServer/UnloadCommand.mjs} +0 -0
- package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -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/esm2020/src/data/Record.mjs +846 -0
- package/{esm2015/src/data/RecordOutOfDataViewException.js → esm2020/src/data/RecordOutOfDataViewException.mjs} +0 -0
- package/esm2020/src/data/RecordsTable.mjs +267 -0
- package/esm2020/src/data/TaskTransactionManager.mjs +103 -0
- package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +74 -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/esm2020/src/env/MirrorString.mjs +66 -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/esm2020/src/event/EventHandlerPosition.mjs +201 -0
- package/esm2020/src/event/EventsManager.mjs +2983 -0
- package/esm2020/src/event/IEventsManager.mjs +7 -0
- package/esm2020/src/event/RunTimeEvent.mjs +406 -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/esm2020/src/exp/ExpressionLocalJpn.mjs +314 -0
- package/esm2020/src/exp/GlobalParamsTable.mjs +85 -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/esm2020/src/remote/ServerError.mjs +44 -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/esm2020/src/rt/DataviewHeaderFactory.mjs +7 -0
- package/{esm2015/src/rt/DataviewHeaders.js → esm2020/src/rt/DataviewHeaders.mjs} +0 -0
- package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +39 -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/esm2020/src/rt/Transaction.mjs +54 -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/esm2020/src/tasks/RemoteTaskService.mjs +45 -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/esm2020/src/tasks/sort/SortCollection.mjs +72 -0
- package/{esm2015/src/util/ConstUtils.js → esm2020/src/util/ConstUtils.mjs} +0 -0
- package/{esm2015/src/util/FlowMonitorQueue.js → esm2020/src/util/FlowMonitorQueue.mjs} +15 -18
- package/{esm2015/src/util/HeapSort.js → esm2020/src/util/HeapSort.mjs} +0 -0
- package/{esm2015/src/util/IMirrorXML.js → esm2020/src/util/IMirrorXML.mjs} +2 -1
- 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/esm2020/src/util/ParamParseResult.mjs +8 -0
- package/esm2020/src/util/PrmMap.mjs +151 -0
- package/esm2020/src/util/Process.mjs +7 -0
- package/esm2020/src/util/ReturnResult.mjs +46 -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} +267 -254
- 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/index.d.ts +2 -0
- package/package.json +27 -13
- package/src/AccessHelper.d.ts +1 -1
- package/src/CommandsProcessorBase.d.ts +3 -3
- package/src/GuiEventsProcessor.d.ts +1 -1
- package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ComputeEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +1 -2
- package/src/commands/ClientToServer/DataviewCommand.d.ts +1 -2
- package/src/commands/ClientToServer/EvaluateCommand.d.ts +1 -2
- package/src/commands/ClientToServer/EventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/ExecOperCommand.d.ts +1 -2
- package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +1 -2
- package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/QueryCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RecomputeCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RefreshEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/RollbackEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +1 -2
- package/src/commands/ClientToServer/TransactionCommand.d.ts +1 -2
- package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +1 -2
- 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/data/Record.d.ts +2 -9
- package/src/data/RecordsTable.d.ts +1 -2
- package/src/data/XMLBasedDcValuesBuilder.d.ts +1 -1
- package/src/env/EnvVariablesTable.d.ts +2 -15
- package/src/env/Environment.d.ts +0 -3
- package/src/env/MirrorString.d.ts +15 -0
- package/src/event/Event.d.ts +0 -3
- package/src/event/EventsManager.d.ts +7 -8
- package/src/event/IEventsManager.d.ts +5 -6
- package/src/exp/ExpressionEvaluator.d.ts +2 -2
- package/src/exp/ExpressionLocalJpn.d.ts +2 -2
- package/src/exp/GlobalParamsTable.d.ts +2 -1
- package/src/gui/MgControl.d.ts +0 -2
- package/src/gui/MgForm.d.ts +4 -4
- package/src/http/client/HttpClientAsync.d.ts +2 -2
- package/src/http/client/HttpClientBase.d.ts +3 -3
- package/src/http/client/HttpClientSync.d.ts +2 -2
- package/src/remote/RemoteCommandsProcessor.d.ts +1 -1
- package/src/rt/DataviewHeaderBase.d.ts +2 -2
- package/src/rt/DataviewHeaderFactory.d.ts +1 -1
- package/src/rt/Operation.d.ts +3 -1
- package/src/rt/RemoteDataviewHeader.d.ts +1 -2
- package/src/rt/Transaction.d.ts +1 -1
- package/src/tasks/RemoteTaskService.d.ts +2 -3
- package/src/tasks/Task.d.ts +1 -1
- package/src/tasks/TaskBase.d.ts +7 -7
- package/src/tasks/TaskServiceBase.d.ts +2 -4
- package/src/tasks/sort/SortCollection.d.ts +2 -3
- package/src/util/FlowMonitorQueue.d.ts +1 -1
- package/src/util/IMirrorXML.d.ts +1 -1
- package/src/util/ParamParseResult.d.ts +6 -0
- package/src/util/PrmMap.d.ts +0 -6
- package/src/util/Process.d.ts +1 -1
- package/bundles/magic-xpa-engine.umd.js +0 -38066
- 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/index.js +0 -188
- package/esm2015/src/AccessHelper.js +0 -3
- 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/GuiEventsProcessor.js +0 -171
- package/esm2015/src/bridge/MagicBridge.js +0 -44
- package/esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js +0 -24
- package/esm2015/src/commands/ClientToServer/ClientOriginatedCommand.js +0 -15
- package/esm2015/src/commands/ClientToServer/ClientOriginatedCommandSerializer.js +0 -60
- package/esm2015/src/commands/ClientToServer/ColumnSortEventCommand.js +0 -26
- package/esm2015/src/commands/ClientToServer/CommandFactory.js +0 -283
- package/esm2015/src/commands/ClientToServer/ComputeEventCommand.js +0 -23
- package/esm2015/src/commands/ClientToServer/ContextTerminationEventCommand.js +0 -21
- package/esm2015/src/commands/ClientToServer/ContextTimeoutResetCommand.js +0 -20
- package/esm2015/src/commands/ClientToServer/EvaluateCommand.js +0 -36
- package/esm2015/src/commands/ClientToServer/EventCommand.js +0 -40
- package/esm2015/src/commands/ClientToServer/ExecOperCommand.js +0 -67
- package/esm2015/src/commands/ClientToServer/FetchDataControlValuesEventCommand.js +0 -22
- package/esm2015/src/commands/ClientToServer/IndexChangeEventCommand.js +0 -21
- package/esm2015/src/commands/ClientToServer/IniputForceWriteCommand.js +0 -23
- package/esm2015/src/commands/ClientToServer/NonReversibleExitEventCommand.js +0 -23
- package/esm2015/src/commands/ClientToServer/QueryCommand.js +0 -21
- package/esm2015/src/commands/ClientToServer/RecomputeCommand.js +0 -27
- package/esm2015/src/commands/ClientToServer/RefreshEventCommand.js +0 -27
- package/esm2015/src/commands/ClientToServer/RefreshScreenEventCommand.js +0 -24
- package/esm2015/src/commands/ClientToServer/RollbackEventCommand.js +0 -39
- package/esm2015/src/commands/ClientToServer/SubformOpenEventCommand.js +0 -21
- package/esm2015/src/commands/ClientToServer/SubformRefreshEventCommand.js +0 -24
- package/esm2015/src/commands/ClientToServer/TransactionCommand.js +0 -28
- package/esm2015/src/commands/ClientToServer/WriteMessageToServerLogCommand.js +0 -18
- 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 -1693
- package/esm2015/src/data/DataviewManager.js +0 -31
- package/esm2015/src/data/DataviewManagerBase.js +0 -18
- package/esm2015/src/data/Field.js +0 -672
- package/esm2015/src/data/FieldBase.js +0 -9
- package/esm2015/src/data/Record.js +0 -914
- package/esm2015/src/data/RecordsTable.js +0 -267
- package/esm2015/src/data/TaskTransactionManager.js +0 -110
- package/esm2015/src/data/XMLBasedDcValuesBuilder.js +0 -74
- package/esm2015/src/env/EnvVariablesTable.js +0 -408
- package/esm2015/src/env/Environment.js +0 -563
- package/esm2015/src/env/LanguageData.js +0 -230
- package/esm2015/src/event/Event.js +0 -1449
- package/esm2015/src/event/EventHandler.js +0 -787
- package/esm2015/src/event/EventHandlerPosition.js +0 -201
- package/esm2015/src/event/EventsManager.js +0 -3107
- package/esm2015/src/event/IEventsManager.js +0 -7
- package/esm2015/src/event/RunTimeEvent.js +0 -406
- package/esm2015/src/exp/Expression.js +0 -209
- package/esm2015/src/exp/ExpressionEvaluator.js +0 -4441
- package/esm2015/src/exp/ExpressionLocalJpn.js +0 -314
- package/esm2015/src/exp/GlobalParamsTable.js +0 -84
- package/esm2015/src/exp/YesNoExp.js +0 -44
- package/esm2015/src/gui/FormsTable.js +0 -73
- package/esm2015/src/gui/MgControl.js +0 -438
- package/esm2015/src/gui/MgForm.js +0 -1292
- 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 -148
- 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 -903
- 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/remote/ServerError.js +0 -45
- 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/DataviewHeaderFactory.js +0 -7
- package/esm2015/src/rt/DataviewHeadersSaxHandler.js +0 -40
- package/esm2015/src/rt/Operation.js +0 -769
- 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/rt/Transaction.js +0 -54
- package/esm2015/src/tasks/MGData.js +0 -561
- package/esm2015/src/tasks/MGDataCollection.js +0 -270
- package/esm2015/src/tasks/RemoteTaskService.js +0 -45
- package/esm2015/src/tasks/Task.js +0 -2593
- package/esm2015/src/tasks/TaskServiceBase.js +0 -30
- package/esm2015/src/tasks/TasksTable.js +0 -87
- package/esm2015/src/tasks/sort/SortCollection.js +0 -72
- package/esm2015/src/util/MgPriorityBlockingQueue.js +0 -79
- package/esm2015/src/util/PrmMap.js +0 -157
- package/esm2015/src/util/Process.js +0 -7
- package/esm2015/src/util/ReturnResult.js +0 -46
- package/fesm2015/magic-xpa-engine.js.map +0 -1
|
@@ -1,563 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { DisplayConvertor, Manager } from '@magic-xpa/gui';
|
|
3
|
-
import { Debug, Encoding, Hashtable, NotImplementedException, NString } from '@magic-xpa/mscorelib';
|
|
4
|
-
import { Constants, Logger, OSEnvironment, UtilDateJpn, UtilStrByteMode, XMLConstants, XmlParser } from '@magic-xpa/utils';
|
|
5
|
-
import { CommandsProcessorManager } from '../CommandsProcessorManager';
|
|
6
|
-
import { ConstInterface } from '../ConstInterface';
|
|
7
|
-
import { ServerConfig } from '../ServerConfig';
|
|
8
|
-
import { AccessHelper } from '../AccessHelper';
|
|
9
|
-
export class Environment {
|
|
10
|
-
constructor() {
|
|
11
|
-
this._environments = new Hashtable();
|
|
12
|
-
this._contextInactivityTimeout = 0;
|
|
13
|
-
this._clientContextInactivityTimeout = 0;
|
|
14
|
-
this._contextInactivityWarningTime = 0;
|
|
15
|
-
this._toolitipTimeout = 0;
|
|
16
|
-
this._contextUnloadTimeout = 0;
|
|
17
|
-
this._accessTest = false;
|
|
18
|
-
this._canReplaceDecimalSeparator = false;
|
|
19
|
-
this._codePage = 0;
|
|
20
|
-
this._dateSeparator = '\0';
|
|
21
|
-
this._decimalSeparator = '\0';
|
|
22
|
-
this._thousandsSeparator = '\0';
|
|
23
|
-
this._timeSeparator = '\0';
|
|
24
|
-
this._defaultColor = 0;
|
|
25
|
-
this._defaultFocusColor = 0;
|
|
26
|
-
this._guid = null;
|
|
27
|
-
this._controlsPersistencyPath = null;
|
|
28
|
-
this._imeAutoOff = false;
|
|
29
|
-
this._language = '\0';
|
|
30
|
-
this._localAs400Set = false;
|
|
31
|
-
this._localExtraGengo = null;
|
|
32
|
-
this._localFlags = null;
|
|
33
|
-
this._lowHigh = true;
|
|
34
|
-
this._owner = null;
|
|
35
|
-
this._debugMode = 0;
|
|
36
|
-
this._significantNumSize = 0;
|
|
37
|
-
this._specialAnsiExpression = false;
|
|
38
|
-
this._specialShowStatusBarPanes = false;
|
|
39
|
-
this._specialRouteToRootProgOnContextRecreation = false;
|
|
40
|
-
this._specialEditLeftAlign = false;
|
|
41
|
-
this._specialSwfControlName = false;
|
|
42
|
-
this._specialExitCtrl = false;
|
|
43
|
-
this._specialTextSizeFactoring = false;
|
|
44
|
-
this._specialFlatEditOnClassicTheme = false;
|
|
45
|
-
this._specialCancelOnCreate = false;
|
|
46
|
-
this._system = null;
|
|
47
|
-
this._terminal = 0;
|
|
48
|
-
this._userId = null;
|
|
49
|
-
this._userInfo = null;
|
|
50
|
-
this._forwardSlash = Constants.ForwardSlashWebUsage;
|
|
51
|
-
this._dropUserFormats = null;
|
|
52
|
-
this._webclientReinitSession = "N";
|
|
53
|
-
this._specialValNewPolicy = false;
|
|
54
|
-
this.SpecialOldZorder = false;
|
|
55
|
-
this.IgnoreReplaceDecimalSeparator = false;
|
|
56
|
-
}
|
|
57
|
-
get Language() {
|
|
58
|
-
return this._language;
|
|
59
|
-
}
|
|
60
|
-
set SpecialNumpadPlusChar(value) {
|
|
61
|
-
}
|
|
62
|
-
get SpecialNumpadPlusChar() {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
set SpecialRestoreMaximizedForm(value) {
|
|
66
|
-
}
|
|
67
|
-
get SpecialRestoreMaximizedForm() {
|
|
68
|
-
return false;
|
|
69
|
-
}
|
|
70
|
-
set SpecialIgnoreBGinModify(value) {
|
|
71
|
-
}
|
|
72
|
-
get SpecialIgnoreBGinModify() {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
set ForwardSlashUsage(value) {
|
|
76
|
-
this._forwardSlash = value;
|
|
77
|
-
}
|
|
78
|
-
get ForwardSlashUsage() {
|
|
79
|
-
return this._forwardSlash;
|
|
80
|
-
}
|
|
81
|
-
fillData(tokensVectorOrParser) {
|
|
82
|
-
if (arguments[0] instanceof XmlParser) {
|
|
83
|
-
this.fillData_0(tokensVectorOrParser);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
this.fillData_1(tokensVectorOrParser);
|
|
87
|
-
}
|
|
88
|
-
fillData_0(parser) {
|
|
89
|
-
let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
|
|
90
|
-
if (endContext !== -1 && endContext < parser.getXMLdata().length) {
|
|
91
|
-
let tag = parser.getXMLsubstring(endContext);
|
|
92
|
-
parser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_ENV) + ConstInterface.MG_TAG_ENV.length);
|
|
93
|
-
let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
|
94
|
-
this.fillData(tokensVector);
|
|
95
|
-
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
|
|
96
|
-
}
|
|
97
|
-
else
|
|
98
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Environment.FillData() out of string bounds");
|
|
99
|
-
}
|
|
100
|
-
fillData_1(tokensVector) {
|
|
101
|
-
let attribute;
|
|
102
|
-
let valueStr;
|
|
103
|
-
let hashKey;
|
|
104
|
-
let env;
|
|
105
|
-
let utilImeJpn = Manager.UtilImeJpn;
|
|
106
|
-
env = new EnvironmentDetails();
|
|
107
|
-
for (let j = 0; j < tokensVector.length; j += 2) {
|
|
108
|
-
attribute = (tokensVector.get_Item(j));
|
|
109
|
-
valueStr = (tokensVector.get_Item(j + 1));
|
|
110
|
-
valueStr = XmlParser.unescape(valueStr);
|
|
111
|
-
switch (attribute) {
|
|
112
|
-
case ConstInterface.MG_ATTR_THOUSANDS:
|
|
113
|
-
this._thousandsSeparator = valueStr[0];
|
|
114
|
-
break;
|
|
115
|
-
case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
|
|
116
|
-
this._decimalSeparator = valueStr[0];
|
|
117
|
-
break;
|
|
118
|
-
case ConstInterface.MG_ATTR_WEBCLIENT_REINIT_SESSION:
|
|
119
|
-
this._webclientReinitSession = valueStr[0];
|
|
120
|
-
break;
|
|
121
|
-
case ConstInterface.MG_ATTR_DATE:
|
|
122
|
-
this._dateSeparator = valueStr[0];
|
|
123
|
-
DisplayConvertor.Instance.setDateChar(this._dateSeparator.charCodeAt(0));
|
|
124
|
-
break;
|
|
125
|
-
case ConstInterface.MG_ATTR_TIME:
|
|
126
|
-
this._timeSeparator = valueStr[0];
|
|
127
|
-
break;
|
|
128
|
-
case ConstInterface.MG_ATTR_OWNER:
|
|
129
|
-
this._owner = valueStr;
|
|
130
|
-
break;
|
|
131
|
-
case ConstInterface.MG_ATTR_SIGNIFICANT_NUM_SIZE:
|
|
132
|
-
this._significantNumSize = XmlParser.getInt(valueStr);
|
|
133
|
-
break;
|
|
134
|
-
case ConstInterface.MG_ATTR_DEBUG_MODE:
|
|
135
|
-
this._debugMode = XmlParser.getInt(valueStr);
|
|
136
|
-
break;
|
|
137
|
-
case ConstInterface.MG_ATTR_POINT_TRANSLATION:
|
|
138
|
-
this._canReplaceDecimalSeparator = XmlParser.getBoolean(valueStr);
|
|
139
|
-
break;
|
|
140
|
-
case ConstInterface.MG_ATTR_SPECIAL_EXITCTRL:
|
|
141
|
-
this._specialExitCtrl = XmlParser.getBoolean(valueStr);
|
|
142
|
-
break;
|
|
143
|
-
case ConstInterface.MG_ATTR_LOWHIGH:
|
|
144
|
-
this._lowHigh = XmlParser.getBoolean(valueStr);
|
|
145
|
-
break;
|
|
146
|
-
case ConstInterface.MG_ATTR_ACCESS_TEST:
|
|
147
|
-
this._accessTest = XmlParser.getBoolean(valueStr);
|
|
148
|
-
break;
|
|
149
|
-
case ConstInterface.MG_ATTR_SPECIAL_TEXT_SIZE_FACTORING:
|
|
150
|
-
this._specialTextSizeFactoring = XmlParser.getBoolean(valueStr);
|
|
151
|
-
break;
|
|
152
|
-
case ConstInterface.MG_ATTR_SPECIAL_FLAT_EDIT_ON_CLASSIC_THEME:
|
|
153
|
-
this._specialFlatEditOnClassicTheme = XmlParser.getBoolean(valueStr);
|
|
154
|
-
break;
|
|
155
|
-
case ConstInterface.MG_ATTR_ENCODING:
|
|
156
|
-
if (valueStr !== " ") {
|
|
157
|
-
this._codePage = XmlParser.getInt(valueStr);
|
|
158
|
-
UtilStrByteMode.Encoding = this.GetEncoding();
|
|
159
|
-
}
|
|
160
|
-
break;
|
|
161
|
-
case ConstInterface.MG_ATTR_SYSTEM:
|
|
162
|
-
this._system = XmlParser.unescape(valueStr);
|
|
163
|
-
break;
|
|
164
|
-
case ConstInterface.MG_ATTR_COMPONENT:
|
|
165
|
-
env.CompIdx = XmlParser.getInt(valueStr);
|
|
166
|
-
break;
|
|
167
|
-
case ConstInterface.MG_ATTR_DATEMODE:
|
|
168
|
-
env.DateMode = valueStr[0];
|
|
169
|
-
break;
|
|
170
|
-
case ConstInterface.MG_ATTR_CENTURY:
|
|
171
|
-
env.Century = XmlParser.getInt(valueStr);
|
|
172
|
-
break;
|
|
173
|
-
case ConstInterface.MG_ATTR_IDLETIME:
|
|
174
|
-
env.IdleTime = XmlParser.getInt(valueStr);
|
|
175
|
-
if (env.IdleTime === 0)
|
|
176
|
-
env.IdleTime = 1;
|
|
177
|
-
break;
|
|
178
|
-
case ConstInterface.MG_ATTR_UPD_IN_QUERY:
|
|
179
|
-
env.UpdateInQueryMode = XmlParser.getBoolean(valueStr);
|
|
180
|
-
break;
|
|
181
|
-
case ConstInterface.MG_ATTR_CRE_IN_MODIFY:
|
|
182
|
-
env.CreateInModifyMode = XmlParser.getBoolean(valueStr);
|
|
183
|
-
break;
|
|
184
|
-
case ConstInterface.MG_ATTR_DEFAULT_COLOR:
|
|
185
|
-
this._defaultColor = XmlParser.getInt(valueStr);
|
|
186
|
-
break;
|
|
187
|
-
case ConstInterface.MG_ATTR_DEFAULT_FOCUS_COLOR:
|
|
188
|
-
this._defaultFocusColor = XmlParser.getInt(valueStr);
|
|
189
|
-
break;
|
|
190
|
-
case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT:
|
|
191
|
-
this._contextInactivityTimeout = XmlParser.getInt(valueStr);
|
|
192
|
-
break;
|
|
193
|
-
case ConstInterface.MG_ATTR_CLIENT_CONTEXT_INACTIVITY_TIMEOUT:
|
|
194
|
-
this._clientContextInactivityTimeout = XmlParser.getInt(valueStr);
|
|
195
|
-
break;
|
|
196
|
-
case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_WARNING_TIME:
|
|
197
|
-
this._contextInactivityWarningTime = XmlParser.getInt(valueStr);
|
|
198
|
-
break;
|
|
199
|
-
case ConstInterface.MG_ATTR_TOOLTIP_TIMEOUT:
|
|
200
|
-
this._toolitipTimeout = XmlParser.getInt(valueStr);
|
|
201
|
-
break;
|
|
202
|
-
case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT:
|
|
203
|
-
this._contextUnloadTimeout = XmlParser.getInt(valueStr);
|
|
204
|
-
break;
|
|
205
|
-
case ConstInterface.MG_ATTR_IME_AUTO_OFF:
|
|
206
|
-
this._imeAutoOff = XmlParser.getBoolean(valueStr);
|
|
207
|
-
break;
|
|
208
|
-
case ConstInterface.MG_ATTR_LOCAL_AS400SET:
|
|
209
|
-
this._localAs400Set = XmlParser.getBoolean(valueStr);
|
|
210
|
-
break;
|
|
211
|
-
case ConstInterface.MG_ATTR_LOCAL_EXTRA_GENGO:
|
|
212
|
-
this._localExtraGengo = valueStr;
|
|
213
|
-
UtilDateJpn.getInstance().addExtraGengo(this._localExtraGengo);
|
|
214
|
-
break;
|
|
215
|
-
case ConstInterface.MG_ATTR_LOCAL_FLAGS:
|
|
216
|
-
this._localFlags = valueStr;
|
|
217
|
-
break;
|
|
218
|
-
case ConstInterface.MG_ATTR_SPEACIAL_ANSI_EXP:
|
|
219
|
-
this._specialAnsiExpression = XmlParser.getBoolean(valueStr);
|
|
220
|
-
break;
|
|
221
|
-
case ConstInterface.MG_ATTR_SPECIAL_SHOW_STATUSBAR_PANES:
|
|
222
|
-
this._specialShowStatusBarPanes = XmlParser.getBoolean(valueStr);
|
|
223
|
-
break;
|
|
224
|
-
case ConstInterface.MG_ATTR_SPECIAL_ROUTE_TO_ROOT_PROG_ON_CONTEXT_RECREATION:
|
|
225
|
-
this._specialRouteToRootProgOnContextRecreation = XmlParser.getBoolean(valueStr);
|
|
226
|
-
break;
|
|
227
|
-
case ConstInterface.MG_ATTR_SPECIAL_SPECIAL_EDIT_LEFT_ALIGN:
|
|
228
|
-
this._specialEditLeftAlign = XmlParser.getBoolean(valueStr);
|
|
229
|
-
break;
|
|
230
|
-
case ConstInterface.MG_ATTR_SPEACIAL_SWF_CONTROL_NAME:
|
|
231
|
-
this._specialSwfControlName = XmlParser.getBoolean(valueStr);
|
|
232
|
-
break;
|
|
233
|
-
case ConstInterface.MG_ATTR_LANGUAGE:
|
|
234
|
-
this._language = valueStr[0];
|
|
235
|
-
break;
|
|
236
|
-
case ConstInterface.MG_ATTR_USERID:
|
|
237
|
-
this._userId = valueStr;
|
|
238
|
-
break;
|
|
239
|
-
case ConstInterface.MG_TAG_USERNAME:
|
|
240
|
-
ServerConfig.Instance.setUsername(valueStr);
|
|
241
|
-
break;
|
|
242
|
-
case ConstInterface.MG_ATTR_TERMINAL:
|
|
243
|
-
this._terminal = XmlParser.getInt(valueStr);
|
|
244
|
-
break;
|
|
245
|
-
case ConstInterface.MG_ATTR_USERINFO:
|
|
246
|
-
this._userInfo = valueStr;
|
|
247
|
-
break;
|
|
248
|
-
case ConstInterface.MG_ATTR_GUID:
|
|
249
|
-
this._guid = valueStr;
|
|
250
|
-
break;
|
|
251
|
-
case ConstInterface.MG_ATTR_CONTROLS_PERSISTENCY_PATH:
|
|
252
|
-
this._controlsPersistencyPath = valueStr;
|
|
253
|
-
break;
|
|
254
|
-
case ConstInterface.MG_ATTR_PROJDIR:
|
|
255
|
-
env.ProjDir = valueStr;
|
|
256
|
-
break;
|
|
257
|
-
case ConstInterface.MG_ATTR_DROP_USERFORMATS:
|
|
258
|
-
this._dropUserFormats = valueStr;
|
|
259
|
-
break;
|
|
260
|
-
case ConstInterface.MG_ATTR_SPECIAL_VAL_NEW_POLICY:
|
|
261
|
-
this._specialValNewPolicy = XmlParser.getBoolean(valueStr);
|
|
262
|
-
break;
|
|
263
|
-
case ConstInterface.MG_ATTR_SPECIAL_CANCEL_ON_CREATE:
|
|
264
|
-
this._specialCancelOnCreate = XmlParser.getBoolean(valueStr);
|
|
265
|
-
break;
|
|
266
|
-
case ConstInterface.MG_ATTR_SPECIAL_LEGACY_TRIM_RANGE:
|
|
267
|
-
case ConstInterface.MG_ATTR_SPECIAL_LEGACY_EMPTY_RANGE:
|
|
268
|
-
case ConstInterface.MG_ATTR_DEFAULT_DISABLED_COLOR:
|
|
269
|
-
case ConstInterface.MG_ATTR_SPECIAL_ANSI_BLOB_CHECK_NULL:
|
|
270
|
-
case ConstInterface.MG_ATTR_SPECIAL_TABLE_REDUCE_TITLE_HEIGHT:
|
|
271
|
-
case ConstInterface.MG_ATTR_SPECIAL_DOTNET_ALLOW_ZERO_DATE:
|
|
272
|
-
case ConstInterface.MG_ATTR_SPECIAL_REUSE_TABLE_EDITOR:
|
|
273
|
-
break;
|
|
274
|
-
default:
|
|
275
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Environment.fillData(): unknown attribute: " + attribute);
|
|
276
|
-
break;
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
hashKey = env.CompIdx;
|
|
280
|
-
this._environments.set_Item(hashKey, env);
|
|
281
|
-
}
|
|
282
|
-
fillFromUrl(tagName, parser) {
|
|
283
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
284
|
-
let XMLdata = parser.getXMLdata();
|
|
285
|
-
let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
|
|
286
|
-
if (endContext !== -1 && endContext < XMLdata.length) {
|
|
287
|
-
let tagAndAttributes = parser.getXMLsubstring(endContext);
|
|
288
|
-
parser.add2CurrIndex(tagAndAttributes.indexOf(tagName) + tagName.length);
|
|
289
|
-
let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
|
290
|
-
Debug.Assert(tokensVector.get_Item(0) === XMLConstants.MG_ATTR_VALUE);
|
|
291
|
-
let cachedFileUrl = (tokensVector.get_Item(1));
|
|
292
|
-
if (cachedFileUrl.trim() === "")
|
|
293
|
-
Logger.Instance.WriteErrorToLog(NString.Format("Empty cached file URL: '{0}'", tagAndAttributes.trim()));
|
|
294
|
-
else {
|
|
295
|
-
let Content = yield CommandsProcessorManager.GetContent(cachedFileUrl, true);
|
|
296
|
-
try {
|
|
297
|
-
switch (tagName) {
|
|
298
|
-
case ConstInterface.MG_TAG_KBDMAP_URL:
|
|
299
|
-
break;
|
|
300
|
-
case ConstInterface.MG_TAG_ENV_PARAM_URL:
|
|
301
|
-
let innerXmlParser = new XmlParser(Content);
|
|
302
|
-
while (AccessHelper.envParamsTable.mirrorFromXML(innerXmlParser.getNextTag(), innerXmlParser)) {
|
|
303
|
-
}
|
|
304
|
-
break;
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
catch (ex) {
|
|
308
|
-
switch (tagName) {
|
|
309
|
-
case ConstInterface.MG_TAG_KBDMAP_URL:
|
|
310
|
-
Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Keyboard Mapping: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
|
|
311
|
-
break;
|
|
312
|
-
case ConstInterface.MG_TAG_ENV_PARAM_URL:
|
|
313
|
-
Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Env Params Table: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
endContext = XMLdata.indexOf(XMLConstants.TAG_OPEN, endContext);
|
|
318
|
-
if (endContext !== -1)
|
|
319
|
-
parser.setCurrIndex(endContext);
|
|
320
|
-
}
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
getEnvDet(compIdx) {
|
|
324
|
-
let environmentDetails = this._environments.get_Item(compIdx);
|
|
325
|
-
if (environmentDetails === null)
|
|
326
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Environment.getEnvDet() there is no env");
|
|
327
|
-
return environmentDetails;
|
|
328
|
-
}
|
|
329
|
-
GetDateMode(compIdx) {
|
|
330
|
-
return this.getEnvDet(compIdx).DateMode;
|
|
331
|
-
}
|
|
332
|
-
GetThousands() {
|
|
333
|
-
return this._thousandsSeparator;
|
|
334
|
-
}
|
|
335
|
-
GetDecimal() {
|
|
336
|
-
return this._decimalSeparator;
|
|
337
|
-
}
|
|
338
|
-
setDecimalSeparator(value) {
|
|
339
|
-
this._decimalSeparator = value;
|
|
340
|
-
}
|
|
341
|
-
setThousandsSeparator(value) {
|
|
342
|
-
this._thousandsSeparator = value;
|
|
343
|
-
}
|
|
344
|
-
setDateSeparator(value) {
|
|
345
|
-
this._dateSeparator = value;
|
|
346
|
-
}
|
|
347
|
-
setTimeSeparator(value) {
|
|
348
|
-
this._timeSeparator = value;
|
|
349
|
-
}
|
|
350
|
-
GetDate() {
|
|
351
|
-
return this._dateSeparator;
|
|
352
|
-
}
|
|
353
|
-
getIdleTime(compIdx) {
|
|
354
|
-
return this.getEnvDet(compIdx).IdleTime;
|
|
355
|
-
}
|
|
356
|
-
getOwner() {
|
|
357
|
-
return this._owner;
|
|
358
|
-
}
|
|
359
|
-
GetTime() {
|
|
360
|
-
return this._timeSeparator;
|
|
361
|
-
}
|
|
362
|
-
GetCentury(compIdx) {
|
|
363
|
-
return this.getEnvDet(compIdx).Century;
|
|
364
|
-
}
|
|
365
|
-
allowUpdateInQueryMode(compIdx) {
|
|
366
|
-
return this.getEnvDet(compIdx).allowUpdateInQueryMode();
|
|
367
|
-
}
|
|
368
|
-
allowCreateInModifyMode(compIdx) {
|
|
369
|
-
return this.getEnvDet(compIdx).allowCreateInModifyMode();
|
|
370
|
-
}
|
|
371
|
-
GetSignificantNumSize() {
|
|
372
|
-
return this._significantNumSize;
|
|
373
|
-
}
|
|
374
|
-
setSignificantNumSize(newSize) {
|
|
375
|
-
this._significantNumSize = newSize;
|
|
376
|
-
}
|
|
377
|
-
getCodePage() {
|
|
378
|
-
return this._codePage;
|
|
379
|
-
}
|
|
380
|
-
GetEncoding() {
|
|
381
|
-
let encoding;
|
|
382
|
-
try {
|
|
383
|
-
encoding = Encoding.GetEncoding(this._codePage);
|
|
384
|
-
}
|
|
385
|
-
catch (exception) {
|
|
386
|
-
encoding = null;
|
|
387
|
-
}
|
|
388
|
-
return encoding;
|
|
389
|
-
}
|
|
390
|
-
getSystem() {
|
|
391
|
-
return this._system;
|
|
392
|
-
}
|
|
393
|
-
GetDebugLevel() {
|
|
394
|
-
return this._debugMode;
|
|
395
|
-
}
|
|
396
|
-
CanReplaceDecimalSeparator() {
|
|
397
|
-
return !this.IgnoreReplaceDecimalSeparator && this._canReplaceDecimalSeparator;
|
|
398
|
-
}
|
|
399
|
-
getClientContextInactivityTimeout() {
|
|
400
|
-
return this._clientContextInactivityTimeout;
|
|
401
|
-
}
|
|
402
|
-
getContextInactivityTimeout() {
|
|
403
|
-
return this._contextInactivityTimeout;
|
|
404
|
-
}
|
|
405
|
-
getContextInactivityWarningTime() {
|
|
406
|
-
return this._contextInactivityWarningTime;
|
|
407
|
-
}
|
|
408
|
-
getContextUnloadTimeout() {
|
|
409
|
-
return this._contextUnloadTimeout;
|
|
410
|
-
}
|
|
411
|
-
GetTooltipTimeout() {
|
|
412
|
-
return this._toolitipTimeout;
|
|
413
|
-
}
|
|
414
|
-
GetSpecialEditLeftAlign() {
|
|
415
|
-
return this._specialEditLeftAlign;
|
|
416
|
-
}
|
|
417
|
-
getLowHigh() {
|
|
418
|
-
return this._lowHigh;
|
|
419
|
-
}
|
|
420
|
-
GetDefaultColor() {
|
|
421
|
-
return this._defaultColor;
|
|
422
|
-
}
|
|
423
|
-
GetDefaultFocusColor() {
|
|
424
|
-
return this._defaultFocusColor;
|
|
425
|
-
}
|
|
426
|
-
getSpecialExitCtrl() {
|
|
427
|
-
return this._specialExitCtrl;
|
|
428
|
-
}
|
|
429
|
-
GetImeAutoOff() {
|
|
430
|
-
return this._imeAutoOff;
|
|
431
|
-
}
|
|
432
|
-
GetLocalAs400Set() {
|
|
433
|
-
return this._localAs400Set;
|
|
434
|
-
}
|
|
435
|
-
getLocalExtraGengo() {
|
|
436
|
-
return this._localExtraGengo;
|
|
437
|
-
}
|
|
438
|
-
GetLocalFlag(f) {
|
|
439
|
-
return this._localFlags !== null && this._localFlags.indexOf(f) >= 0;
|
|
440
|
-
}
|
|
441
|
-
getSpecialAnsiExpression() {
|
|
442
|
-
return this._specialAnsiExpression;
|
|
443
|
-
}
|
|
444
|
-
getSpecialShowStatusBarPanes() {
|
|
445
|
-
return this._specialShowStatusBarPanes;
|
|
446
|
-
}
|
|
447
|
-
getTerminal() {
|
|
448
|
-
return this._terminal;
|
|
449
|
-
}
|
|
450
|
-
getWebClientReinitSession() {
|
|
451
|
-
return this._webclientReinitSession;
|
|
452
|
-
}
|
|
453
|
-
setWebClientReinitSession(session) {
|
|
454
|
-
this._webclientReinitSession = session;
|
|
455
|
-
}
|
|
456
|
-
getSpecialRouteToRootProgOnContextRecreation() {
|
|
457
|
-
return this._specialRouteToRootProgOnContextRecreation;
|
|
458
|
-
}
|
|
459
|
-
getUserID() {
|
|
460
|
-
return this._userId;
|
|
461
|
-
}
|
|
462
|
-
getUserInfo() {
|
|
463
|
-
return this._userInfo;
|
|
464
|
-
}
|
|
465
|
-
GetGUID() {
|
|
466
|
-
return this._guid;
|
|
467
|
-
}
|
|
468
|
-
GetControlsPersistencyPath() {
|
|
469
|
-
return this._controlsPersistencyPath;
|
|
470
|
-
}
|
|
471
|
-
getProjDir(compIdx) {
|
|
472
|
-
return this.getEnvDet(compIdx).ProjDir;
|
|
473
|
-
}
|
|
474
|
-
GetSpecialEngLogon() {
|
|
475
|
-
return false;
|
|
476
|
-
}
|
|
477
|
-
GetSpecialIgnoreButtonFormat() {
|
|
478
|
-
return false;
|
|
479
|
-
}
|
|
480
|
-
GetSpecialSwfControlNameProperty() {
|
|
481
|
-
return this._specialSwfControlName;
|
|
482
|
-
}
|
|
483
|
-
GetSpecialLogInternalExceptions() {
|
|
484
|
-
return true;
|
|
485
|
-
}
|
|
486
|
-
setOwner(val) {
|
|
487
|
-
this._owner = val;
|
|
488
|
-
}
|
|
489
|
-
setDateMode(compIdx, val) {
|
|
490
|
-
this.getEnvDet(compIdx).DateMode = val;
|
|
491
|
-
}
|
|
492
|
-
setCentury(compIdx, val) {
|
|
493
|
-
this.getEnvDet(compIdx).Century = val;
|
|
494
|
-
}
|
|
495
|
-
setIdleTime(compIdx, val) {
|
|
496
|
-
this.getEnvDet(compIdx).IdleTime = val;
|
|
497
|
-
}
|
|
498
|
-
setAllowUpdateInQueryMode(compIdx, val) {
|
|
499
|
-
this.getEnvDet(compIdx).UpdateInQueryMode = val;
|
|
500
|
-
}
|
|
501
|
-
setAllowCreateInModifyMode(compIdx, val) {
|
|
502
|
-
this.getEnvDet(compIdx).CreateInModifyMode = val;
|
|
503
|
-
}
|
|
504
|
-
setContextInactivityTimeout(val) {
|
|
505
|
-
this._contextInactivityTimeout = val;
|
|
506
|
-
}
|
|
507
|
-
setClientContextInactivityTimeout(val) {
|
|
508
|
-
this._clientContextInactivityTimeout = val;
|
|
509
|
-
}
|
|
510
|
-
setContextInactivityWarningTime(val) {
|
|
511
|
-
this._contextInactivityWarningTime = val;
|
|
512
|
-
}
|
|
513
|
-
setContextUnloadTimeout(val) {
|
|
514
|
-
this._contextUnloadTimeout = val;
|
|
515
|
-
}
|
|
516
|
-
setTerminal(val) {
|
|
517
|
-
this._terminal = val;
|
|
518
|
-
}
|
|
519
|
-
GetDropUserFormats() {
|
|
520
|
-
return this._dropUserFormats;
|
|
521
|
-
}
|
|
522
|
-
GetSpecialTextSizeFactoring() {
|
|
523
|
-
return this._specialTextSizeFactoring;
|
|
524
|
-
}
|
|
525
|
-
GetSpecialFlatEditOnClassicTheme() {
|
|
526
|
-
return this._specialFlatEditOnClassicTheme;
|
|
527
|
-
}
|
|
528
|
-
GetSpecialDisableMouseWheel() {
|
|
529
|
-
throw new NotImplementedException();
|
|
530
|
-
}
|
|
531
|
-
GetSpecialValNewPolicy() {
|
|
532
|
-
return this._specialValNewPolicy;
|
|
533
|
-
}
|
|
534
|
-
GetSpecialCancelOnCreate() {
|
|
535
|
-
return this._specialCancelOnCreate;
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
Environment.Instance = new Environment();
|
|
539
|
-
export class EnvironmentDetails {
|
|
540
|
-
constructor() {
|
|
541
|
-
this._createInModifyMode = false;
|
|
542
|
-
this._updateInQueryMode = false;
|
|
543
|
-
this.CompIdx = 0;
|
|
544
|
-
this.DateMode = '\0';
|
|
545
|
-
this.Century = 0;
|
|
546
|
-
this.IdleTime = 0;
|
|
547
|
-
this.ProjDir = null;
|
|
548
|
-
this.CompIdx = 0;
|
|
549
|
-
}
|
|
550
|
-
set UpdateInQueryMode(value) {
|
|
551
|
-
this._updateInQueryMode = value;
|
|
552
|
-
}
|
|
553
|
-
set CreateInModifyMode(value) {
|
|
554
|
-
this._createInModifyMode = value;
|
|
555
|
-
}
|
|
556
|
-
allowUpdateInQueryMode() {
|
|
557
|
-
return this._updateInQueryMode;
|
|
558
|
-
}
|
|
559
|
-
allowCreateInModifyMode() {
|
|
560
|
-
return this._createInModifyMode;
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFnQixPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQVEsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUcsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sYUFBYSxFQUNiLFdBQVcsRUFFWCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSy9DLE1BQU0sT0FBTyxXQUFXO0lBK0N0QjtRQTlDUSxrQkFBYSxHQUEwQyxJQUFJLFNBQVMsRUFBOEIsQ0FBQztRQUNuRyw4QkFBeUIsR0FBVyxDQUFDLENBQUM7UUFDdEMsb0NBQStCLEdBQVcsQ0FBQyxDQUFDO1FBQzVDLGtDQUE2QixHQUFXLENBQUMsQ0FBQztRQUMxQyxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFDN0IsMEJBQXFCLEdBQVcsQ0FBQyxDQUFDO1FBQ2xDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGdDQUEyQixHQUFZLEtBQUssQ0FBQztRQUM3QyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFXLElBQUksQ0FBQztRQUNqQyx3QkFBbUIsR0FBVyxJQUFJLENBQUM7UUFDbkMsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFDOUIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDMUIsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBQy9CLFVBQUssR0FBVyxJQUFJLENBQUM7UUFDckIsNkJBQXdCLEdBQVcsSUFBSSxDQUFDO1FBQ3hDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBVyxJQUFJLENBQUM7UUFDekIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMscUJBQWdCLEdBQVcsSUFBSSxDQUFDO1FBQ2hDLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBQzNCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFDekIsV0FBTSxHQUFXLElBQUksQ0FBQztRQUN0QixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQywyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFDeEMsK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBQzVDLCtDQUEwQyxHQUFZLEtBQUssQ0FBQztRQUM1RCwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFDdkMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFDM0MsbUNBQThCLEdBQVksS0FBSyxDQUFDO1FBQ2hELDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxZQUFPLEdBQVcsSUFBSSxDQUFDO1FBQ3ZCLGNBQVMsR0FBVyxDQUFDLENBQUM7UUFDdEIsWUFBTyxHQUFXLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLGtCQUFhLEdBQVcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZELHFCQUFnQixHQUFXLElBQUksQ0FBQztRQUVoQyw0QkFBdUIsR0FBVyxHQUFHLENBQUM7UUFDdEMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBWTlDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQVlsQyxrQ0FBNkIsR0FBWSxLQUFLLENBQUM7SUFyQnhCLENBQUM7SUFFeEIsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFVRCxJQUFJLHFCQUFxQixDQUFDLEtBQWM7SUFDeEMsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUlELElBQUksMkJBQTJCLENBQUMsS0FBYztJQUM5QyxDQUFDO0lBRUQsSUFBSSwyQkFBMkI7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSx1QkFBdUIsQ0FBQyxLQUFjO0lBQzFDLENBQUM7SUFNRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHRCxJQUFJLGlCQUFpQixDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBSUQsUUFBUSxDQUFDLG9CQUEwQjtRQUNqQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsWUFBWSxTQUFTLEVBQUU7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3RDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBS00sVUFBVSxDQUFDLE1BQWlCO1FBQ2pDLElBQUksVUFBVSxHQUFXLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNuRyxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRTtZQUVoRSxJQUFJLEdBQUcsR0FBVyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRyxJQUFJLFlBQVksR0FBaUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN0SCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEU7O1lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFNTyxVQUFVLENBQUMsWUFBMEI7UUFDM0MsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksUUFBZ0IsQ0FBQztRQUNyQixJQUFJLE9BQWUsQ0FBQztRQUNwQixJQUFJLEdBQXVCLENBQUM7UUFDNUIsSUFBSSxVQUFVLEdBQWUsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUVoRCxHQUFHLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBRS9CLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkQsU0FBUyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsUUFBUSxTQUFTLEVBQUU7Z0JBQ2pCLEtBQUssY0FBYyxDQUFDLGlCQUFpQjtvQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyx5QkFBeUI7b0JBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0NBQWdDO29CQUNsRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLFlBQVk7b0JBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pFLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsWUFBWTtvQkFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsYUFBYTtvQkFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7b0JBQ3ZCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsNEJBQTRCO29CQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEQsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxrQkFBa0I7b0JBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0MsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyx5QkFBeUI7b0JBQzNDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNsRSxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHdCQUF3QjtvQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZUFBZTtvQkFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLG1CQUFtQjtvQkFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNsRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLG1DQUFtQztvQkFDckQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hFLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsMENBQTBDO29CQUM1RCxJQUFJLENBQUMsOEJBQThCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDckUsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxnQkFBZ0I7b0JBQ2xDLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM1QyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztxQkFDL0M7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxjQUFjO29CQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsaUJBQWlCO29CQUNuQyxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO29CQUNsQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxlQUFlO29CQUNqQyxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO29CQUNsQyxHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBRTFDLElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxDQUFDO3dCQUNwQixHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDbkIsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxvQkFBb0I7b0JBQ3RDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHFCQUFxQjtvQkFDdkMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMscUJBQXFCO29CQUN2QyxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsMkJBQTJCO29CQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDckQsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxrQ0FBa0M7b0JBQ3BELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHlDQUF5QztvQkFDM0QsSUFBSSxDQUFDLCtCQUErQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xFLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsdUNBQXVDO29CQUN6RCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEUsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyx1QkFBdUI7b0JBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNuRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLDhCQUE4QjtvQkFDaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsb0JBQW9CO29CQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsc0JBQXNCO29CQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3JELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMseUJBQXlCO29CQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO29CQUNqQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUMvRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLG1CQUFtQjtvQkFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMseUJBQXlCO29CQUMzQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0QsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxvQ0FBb0M7b0JBQ3RELElBQUksQ0FBQywwQkFBMEIsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqRSxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHdEQUF3RDtvQkFDMUUsSUFBSSxDQUFDLDBDQUEwQyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pGLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsdUNBQXVDO29CQUN6RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxpQ0FBaUM7b0JBQ25ELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGdCQUFnQjtvQkFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsY0FBYztvQkFDaEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7b0JBQ3hCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZUFBZTtvQkFDakMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO29CQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO29CQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztvQkFDMUIsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxZQUFZO29CQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDdEIsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxpQ0FBaUM7b0JBQ25ELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZUFBZTtvQkFDakMsR0FBRyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7b0JBQ3ZCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsd0JBQXdCO29CQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO29CQUNqQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLDhCQUE4QjtvQkFDaEQsSUFBSSxDQUFDLG9CQUFvQixHQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0NBQWdDO29CQUNsRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDN0QsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxpQ0FBaUMsQ0FBQztnQkFDdEQsS0FBSyxjQUFjLENBQUMsa0NBQWtDLENBQUM7Z0JBQ3ZELEtBQUssY0FBYyxDQUFDLDhCQUE4QixDQUFDO2dCQUNuRCxLQUFLLGNBQWMsQ0FBQyxvQ0FBb0MsQ0FBQztnQkFDekQsS0FBSyxjQUFjLENBQUMseUNBQXlDLENBQUM7Z0JBQzlELEtBQUssY0FBYyxDQUFDLHNDQUFzQyxDQUFDO2dCQUMzRCxLQUFLLGNBQWMsQ0FBQyxrQ0FBa0M7b0JBQ3BELE1BQU07Z0JBQ1I7b0JBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxnREFBZ0QsR0FBRyxTQUFTLENBQUMsQ0FBQztvQkFDekcsTUFBTTthQUNUO1NBQ0Y7UUFDRCxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFXNUMsQ0FBQztJQU9LLFdBQVcsQ0FBQyxPQUFlLEVBQUUsTUFBaUI7O1lBQ2xELElBQUksT0FBTyxHQUFXLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUUxQyxJQUFJLFVBQVUsR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDbkcsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBR3BELElBQUksZ0JBQWdCLEdBQVcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUV6RSxJQUFJLFlBQVksR0FBaUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFdEUsSUFBSSxhQUFhLEdBQVcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBSTdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsOEJBQThCLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN0RztvQkFDSCxJQUFJLE9BQU8sR0FBVyxNQUFNLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3JGLElBQUk7d0JBQ0YsUUFBUSxPQUFPLEVBQUU7NEJBQ2YsS0FBSyxjQUFjLENBQUMsaUJBQWlCO2dDQUNuQyxNQUFNOzRCQUNSLEtBQUssY0FBYyxDQUFDLG9CQUFvQjtnQ0FDdEMsSUFBSSxjQUFjLEdBQWMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0NBQ3ZELE9BQU8sWUFBWSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxFQUFFLGNBQWMsQ0FBQyxFQUFFO2lDQUU5RjtnQ0FDRCxNQUFNO3lCQUNUO3FCQUNGO29CQUNELE9BQU8sRUFBRSxFQUFFO3dCQUNULFFBQVEsT0FBTyxFQUFFOzRCQUNmLEtBQUssY0FBYyxDQUFDLGlCQUFpQjtnQ0FDbkMsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dDQUM3SSxNQUFNOzRCQUNSLEtBQUssY0FBYyxDQUFDLG9CQUFvQjtnQ0FDdEMsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3lCQUNoSjtxQkFDRjtpQkFFRjtnQkFDRCxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUM7b0JBQ25CLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDbkM7UUFDSCxDQUFDO0tBQUE7SUFPTyxTQUFTLENBQUMsT0FBZTtRQUMvQixJQUFJLGtCQUFrQixHQUEyQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RyxJQUFJLGtCQUFrQixLQUFLLElBQUk7WUFDN0IsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQztJQU9ELFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQU1ELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBTUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFLRCxtQkFBbUIsQ0FBQyxLQUFhO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUtELHFCQUFxQixDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBTUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBT0QsV0FBVyxDQUFDLE9BQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0lBTUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBTUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBT0QsVUFBVSxDQUFDLE9BQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUN6QyxDQUFDO0lBT0Qsc0JBQXNCLENBQUMsT0FBZTtRQUNwQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBT0QsdUJBQXVCLENBQUMsT0FBZTtRQUNyQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBTUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFNRCxxQkFBcUIsQ0FBQyxPQUFlO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQU9ELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUtELFdBQVc7UUFDVCxJQUFJLFFBQWtCLENBQUM7UUFDdkIsSUFBSTtZQUNGLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sU0FBUyxFQUFFO1lBQ2hCLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDakI7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBUUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBT0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBS0QsMEJBQTBCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQ2pGLENBQUM7SUFNRCxpQ0FBaUM7UUFDL0IsT0FBTyxJQUFJLENBQUMsK0JBQStCLENBQUM7SUFDOUMsQ0FBQztJQU1ELDJCQUEyQjtRQUN6QixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUN4QyxDQUFDO0lBTUQsK0JBQStCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDO0lBQzVDLENBQUM7SUFLRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQU1ELGlCQUFpQjtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFNRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUtELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQU1ELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQU1ELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBS0Qsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFNRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFNRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUlELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBSUQsWUFBWSxDQUFDLENBQVM7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUtELHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsNEJBQTRCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQ3pDLENBQUM7SUFNRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFNRCx5QkFBeUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQUVELHlCQUF5QixDQUFFLE9BQWdCO1FBQ3hDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUM7SUFDMUMsQ0FBQztJQU1ELDRDQUE0QztRQUMxQyxPQUFPLElBQUksQ0FBQywwQ0FBMEMsQ0FBQztJQUN6RCxDQUFDO0lBTUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBTUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBSUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBTUQsMEJBQTBCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7SUFPRCxVQUFVLENBQUMsT0FBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3pDLENBQUM7SUFNRCxrQkFBa0I7UUFDaEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBTUQsNEJBQTRCO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQU9ELGdDQUFnQztRQUM5QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBTUQsK0JBQStCO1FBQzdCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU1ELFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLENBQUM7SUFPRCxXQUFXLENBQUMsT0FBZSxFQUFFLEdBQVc7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLENBQUM7SUFPRCxVQUFVLENBQUMsT0FBZSxFQUFFLEdBQVc7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3hDLENBQUM7SUFPRCxXQUFXLENBQUMsT0FBZSxFQUFFLEdBQVc7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0lBQ3pDLENBQUM7SUFPRCx5QkFBeUIsQ0FBQyxPQUFlLEVBQUUsR0FBWTtRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUNsRCxDQUFDO0lBT0QsMEJBQTBCLENBQUMsT0FBZSxFQUFFLEdBQVk7UUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7SUFDbkQsQ0FBQztJQU1ELDJCQUEyQixDQUFDLEdBQVc7UUFDckMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztJQUN2QyxDQUFDO0lBTUQsaUNBQWlDLENBQUMsR0FBVztRQUMzQyxJQUFJLENBQUMsK0JBQStCLEdBQUcsR0FBRyxDQUFDO0lBQzdDLENBQUM7SUFNRCwrQkFBK0IsQ0FBQyxHQUFXO1FBQ3pDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxHQUFHLENBQUM7SUFDM0MsQ0FBQztJQU1ELHVCQUF1QixDQUFDLEdBQVc7UUFDakMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztJQUNuQyxDQUFDO0lBTUQsV0FBVyxDQUFDLEdBQVc7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7SUFDdkIsQ0FBQztJQU1ELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBTUQsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQ3hDLENBQUM7SUFNRCxnQ0FBZ0M7UUFDOUIsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQUM7SUFDN0MsQ0FBQztJQUdELDJCQUEyQjtRQUN6QixNQUFNLElBQUksdUJBQXVCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBS0Qsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQzs7QUFoMkJNLG9CQUFRLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7QUFzMkJuRCxNQUFNLE9BQU8sa0JBQWtCO0lBc0I3QjtRQXJCUSx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBRTVDLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFDcEIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUN4QixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFVckIsWUFBTyxHQUFXLElBQUksQ0FBQztRQU1yQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBZkQsSUFBSSxpQkFBaUIsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksa0JBQWtCLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFjRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUtELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNwbGF5Q29udmVydG9yLCBJRW52aXJvbm1lbnQsIE1hbmFnZXIgfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7IERlYnVnLCBFbmNvZGluZywgSGFzaHRhYmxlLCBMaXN0LCBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiwgTlN0cmluZyB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgTG9nZ2VyLFxyXG4gIE9TRW52aXJvbm1lbnQsXHJcbiAgVXRpbERhdGVKcG4sXHJcbiAgVXRpbEltZUpwbixcclxuICBVdGlsU3RyQnl0ZU1vZGUsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBDb21tYW5kc1Byb2Nlc3Nvck1hbmFnZXIgfSBmcm9tICcuLi9Db21tYW5kc1Byb2Nlc3Nvck1hbmFnZXInO1xyXG5pbXBvcnQgeyBDb25zdEludGVyZmFjZSB9IGZyb20gJy4uL0NvbnN0SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2VydmVyQ29uZmlnIH0gZnJvbSAnLi4vU2VydmVyQ29uZmlnJztcclxuaW1wb3J0IHsgQWNjZXNzSGVscGVyIH0gZnJvbSAnLi4vQWNjZXNzSGVscGVyJztcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhpcyBjbGFzcyBob2xkcyBzb21lIG9mIHRoZSBNYWdpYyBlbnZpcm9ubWVudCBwYXJhbWV0ZXJzIHdoaWNoIHRoZSBjbGllbnQgbmVlZHNcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50IGltcGxlbWVudHMgSUVudmlyb25tZW50IHtcclxuICBwcml2YXRlIF9lbnZpcm9ubWVudHM6IEhhc2h0YWJsZTxudW1iZXIsIEVudmlyb25tZW50RGV0YWlscz4gPSBuZXcgSGFzaHRhYmxlPG51bWJlciwgRW52aXJvbm1lbnREZXRhaWxzPigpO1xyXG4gIHByaXZhdGUgX2NvbnRleHRJbmFjdGl2aXR5VGltZW91dDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9jbGllbnRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZTogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF90b29saXRpcFRpbWVvdXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY29udGV4dFVubG9hZFRpbWVvdXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfYWNjZXNzVGVzdDogYm9vbGVhbiA9IGZhbHNlOyAvLyBwcm9wZXJ0eSB0aGF0IGVuYWJsZXMgdGhlIGNvZGUgZm9yIHRlc3QgdG9vbHNcclxuICBwcml2YXRlIF9jYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2NvZGVQYWdlOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2RhdGVTZXBhcmF0b3I6IHN0cmluZyA9ICdcXDAnOyAvLyBkYXRlIHNlcGFyYXRvclxyXG4gIHByaXZhdGUgX2RlY2ltYWxTZXBhcmF0b3I6IHN0cmluZyA9ICdcXDAnOyAvLyBkZWNpbWFsIHNlcGFyYXRvclxyXG4gIHByaXZhdGUgX3Rob3VzYW5kc1NlcGFyYXRvcjogc3RyaW5nID0gJ1xcMCc7IC8vIHRob3VzYW5kcyBzZXBhcmF0b3JcclxuICBwcml2YXRlIF90aW1lU2VwYXJhdG9yOiBzdHJpbmcgPSAnXFwwJzsgLy8gdGltZSBzZXBhcmF0b3JcclxuICBwcml2YXRlIF9kZWZhdWx0Q29sb3I6IG51bWJlciA9IDA7IC8vIHNob3VsZCB3ZSBleGl0ICdjdXJyZW50JyBjb250cm9sIHdoZW4gYSBub24tcGFya2FibGUgY29udHJvbCBpcyBjbGlja2VkXHJcbiAgcHJpdmF0ZSBfZGVmYXVsdEZvY3VzQ29sb3I6IG51bWJlciA9IDA7IC8vIGRlZmF1bHQgZm9jdXMgY29sb3JcclxuICBwcml2YXRlIF9ndWlkOiBzdHJpbmcgPSBudWxsOyAvLyBndWlkIG9mIHRoZSBhcHBsaWNhdGlvblxyXG4gIHByaXZhdGUgX2NvbnRyb2xzUGVyc2lzdGVuY3lQYXRoOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2ltZUF1dG9PZmY6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gIHByaXZhdGUgX2xhbmd1YWdlOiBzdHJpbmcgPSAnXFwwJztcclxuICBwcml2YXRlIF9sb2NhbEFzNDAwU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbG9jYWxFeHRyYUdlbmdvOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xvY2FsRmxhZ3M6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbG93SGlnaDogYm9vbGVhbiA9IHRydWU7IC8vIHdoYXQgaXMgdGhlIG9yZGVyIG9mIGJ5dGVzIGluIGV4cHJlc3Npb25zIChMT1dfSElHSCBvciBISUdIX0xPVylcclxuICBwcml2YXRlIF9vd25lcjogc3RyaW5nID0gbnVsbDsgLy8gb3duZXJcclxuICBwcml2YXRlIF9kZWJ1Z01vZGU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2lnbmlmaWNhbnROdW1TaXplOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxBbnNpRXhwcmVzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxTaG93U3RhdHVzQmFyUGFuZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zcGVjaWFsUm91dGVUb1Jvb3RQcm9nT25Db250ZXh0UmVjcmVhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxFZGl0TGVmdEFsaWduOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFN3ZkNvbnRyb2xOYW1lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbEV4aXRDdHJsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFRleHRTaXplRmFjdG9yaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbEZsYXRFZGl0T25DbGFzc2ljVGhlbWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zcGVjaWFsQ2FuY2VsT25DcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zeXN0ZW06IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGVybWluYWw6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdXNlcklkOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX3VzZXJJbmZvOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2ZvcndhcmRTbGFzaDogc3RyaW5nID0gQ29uc3RhbnRzLkZvcndhcmRTbGFzaFdlYlVzYWdlOyAvLyByZWZlciB0byBhIGZvcndhcmQgc2xhc2ggYXMgYSByZWxhdGl2ZSB3ZWIgdXJsLlxyXG4gIHByaXZhdGUgX2Ryb3BVc2VyRm9ybWF0czogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfd2ViY2xpZW50UmVpbml0U2Vzc2lvbjogc3RyaW5nID0gXCJOXCI7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFZhbE5ld1BvbGljeTogYm9vbGVhbiA9IGZhbHNlOyAvLz8/XHJcblxyXG4gIHN0YXRpYyBJbnN0YW5jZTogRW52aXJvbm1lbnQgPSBuZXcgRW52aXJvbm1lbnQoKTtcclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgZ2V0IExhbmd1YWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNhdmUgc3BlY2lhbCB6b3JkZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFNwZWNpYWxPbGRab3JkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGlzIGZsYWcgaXMgb25seSByZWxldmFudCBmb3IgT25saW5lLiBIZW5jZSwgcmV0dXJuIHRydWUgaW4gY2FzZSBvZiBSQyBhcyBpdCBpcyB0aGUgZGVmYXVsdCB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0IFNwZWNpYWxOdW1wYWRQbHVzQ2hhcih2YWx1ZTogYm9vbGVhbikge1xyXG4gIH1cclxuXHJcbiAgZ2V0IFNwZWNpYWxOdW1wYWRQbHVzQ2hhcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgSWdub3JlUmVwbGFjZURlY2ltYWxTZXBhcmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc2V0IFNwZWNpYWxSZXN0b3JlTWF4aW1pemVkRm9ybSh2YWx1ZTogYm9vbGVhbikge1xyXG4gIH1cclxuXHJcbiAgZ2V0IFNwZWNpYWxSZXN0b3JlTWF4aW1pemVkRm9ybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNldCBTcGVjaWFsSWdub3JlQkdpbk1vZGlmeSh2YWx1ZTogYm9vbGVhbikge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcblxyXG4gIGdldCBTcGVjaWFsSWdub3JlQkdpbk1vZGlmeSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5pbnN0cnVjdHMgaG93IHRvIHJlZmVyIGEgZm9yd2FyZCBzbGFzaCAtIGVpdGhlciBhcyBhIHJlbGF0aXZlIHdlYiB1cmwsIG9yIGFzIGEgZmlsZSBpbiB0aGUgZmlsZSBzeXN0ZW0uLjwvc3VtbWFyeT5cclxuICBzZXQgRm9yd2FyZFNsYXNoVXNhZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZm9yd2FyZFNsYXNoID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgRm9yd2FyZFNsYXNoVXNhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3J3YXJkU2xhc2g7XHJcbiAgfVxyXG5cclxuICBmaWxsRGF0YShwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQ7XHJcbiAgZmlsbERhdGEodG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkO1xyXG4gIGZpbGxEYXRhKHRva2Vuc1ZlY3Rvck9yUGFyc2VyPzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzWzBdIGluc3RhbmNlb2YgWG1sUGFyc2VyKSB7XHJcbiAgICAgIHRoaXMuZmlsbERhdGFfMCh0b2tlbnNWZWN0b3JPclBhcnNlcik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsbERhdGFfMSh0b2tlbnNWZWN0b3JPclBhcnNlcik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgTmVlZCBwYXJ0IGlucHV0IFN0cmluZyB0byByZWxldmFudCBmb3IgdGhlIGNsYXNzIGRhdGEuIGVuZCA8ZW52IC4uLj4gdGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZmlsbERhdGFfMChwYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBTdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfRU5WKSArIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlYubGVuZ3RoKTtcclxuICAgICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICB0aGlzLmZpbGxEYXRhKHRva2Vuc1ZlY3Rvcik7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFbnZpcm9ubWVudC5GaWxsRGF0YSgpIG91dCBvZiBzdHJpbmcgYm91bmRzXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1ha2UgaW5pdGlhbGl6YXRpb24gb2YgcHJpdmF0ZSBlbGVtZW50cyBieSBmb3VuZCB0b2tlbnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9rZW5zVmVjdG9yXCI+Zm91bmQgdG9rZW5zLCB3aGljaCBjb25zaXN0IGF0dHJpYnV0ZS92YWx1ZSBvZiBldmVyeSBmb3VuZCBlbGVtZW50PC9wYXJhbT5cclxuICBwcml2YXRlIGZpbGxEYXRhXzEodG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkIHtcclxuICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZztcclxuICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nO1xyXG4gICAgbGV0IGhhc2hLZXk6IG51bWJlcjtcclxuICAgIGxldCBlbnY6IEVudmlyb25tZW50RGV0YWlscztcclxuICAgIGxldCB1dGlsSW1lSnBuOiBVdGlsSW1lSnBuID0gTWFuYWdlci5VdGlsSW1lSnBuO1xyXG5cclxuICAgIGVudiA9IG5ldyBFbnZpcm9ubWVudERldGFpbHMoKTtcclxuXHJcbiAgICBmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgdG9rZW5zVmVjdG9yLmxlbmd0aDsgaiArPSAyKSB7XHJcbiAgICAgIGF0dHJpYnV0ZSA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICB2YWx1ZVN0ciA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaiArIDEpKTtcclxuICAgICAgdmFsdWVTdHIgPSBYbWxQYXJzZXIudW5lc2NhcGUodmFsdWVTdHIpO1xyXG4gICAgICBzd2l0Y2ggKGF0dHJpYnV0ZSkge1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USE9VU0FORFM6XHJcbiAgICAgICAgICB0aGlzLl90aG91c2FuZHNTZXBhcmF0b3IgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUNJTUFMX1NFUEFSQVRPUjpcclxuICAgICAgICAgIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9XRUJDTElFTlRfUkVJTklUX1NFU1NJT046XHJcbiAgICAgICAgICB0aGlzLl93ZWJjbGllbnRSZWluaXRTZXNzaW9uID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREFURTpcclxuICAgICAgICAgIHRoaXMuX2RhdGVTZXBhcmF0b3IgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2Uuc2V0RGF0ZUNoYXIodGhpcy5fZGF0ZVNlcGFyYXRvci5jaGFyQ29kZUF0KDApKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9USU1FOlxyXG4gICAgICAgICAgdGhpcy5fdGltZVNlcGFyYXRvciA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX09XTkVSOlxyXG4gICAgICAgICAgdGhpcy5fb3duZXIgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TSUdOSUZJQ0FOVF9OVU1fU0laRTpcclxuICAgICAgICAgICAgdGhpcy5fc2lnbmlmaWNhbnROdW1TaXplID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVCVUdfTU9ERTpcclxuICAgICAgICAgIHRoaXMuX2RlYnVnTW9kZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BPSU5UX1RSQU5TTEFUSU9OOlxyXG4gICAgICAgICAgdGhpcy5fY2FuUmVwbGFjZURlY2ltYWxTZXBhcmF0b3IgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9FWElUQ1RSTDpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxFeGl0Q3RybCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MT1dISUdIOlxyXG4gICAgICAgICAgdGhpcy5fbG93SGlnaCA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9BQ0NFU1NfVEVTVDpcclxuICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rlc3QgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9URVhUX1NJWkVfRkFDVE9SSU5HOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbFRleHRTaXplRmFjdG9yaW5nID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfRkxBVF9FRElUX09OX0NMQVNTSUNfVEhFTUU6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsRmxhdEVkaXRPbkNsYXNzaWNUaGVtZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTkNPRElORzpcclxuICAgICAgICAgIGlmICh2YWx1ZVN0ciAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29kZVBhZ2UgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgICAgVXRpbFN0ckJ5dGVNb2RlLkVuY29kaW5nID0gdGhpcy5HZXRFbmNvZGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NZU1RFTTpcclxuICAgICAgICAgIHRoaXMuX3N5c3RlbSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09NUE9ORU5UOlxyXG4gICAgICAgICAgZW52LkNvbXBJZHggPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFTU9ERTpcclxuICAgICAgICAgIGVudi5EYXRlTW9kZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NFTlRVUlk6XHJcbiAgICAgICAgICBlbnYuQ2VudHVyeSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lETEVUSU1FOlxyXG4gICAgICAgICAgZW52LklkbGVUaW1lID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICAvLyBoYW5kbGUgdGhlIGRlZmF1bHQgaWRsZSB0aW1lIHZhbHVlXHJcbiAgICAgICAgICBpZiAoZW52LklkbGVUaW1lID09PSAwKVxyXG4gICAgICAgICAgICBlbnYuSWRsZVRpbWUgPSAxO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VQRF9JTl9RVUVSWTpcclxuICAgICAgICAgIGVudi5VcGRhdGVJblF1ZXJ5TW9kZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DUkVfSU5fTU9ESUZZOlxyXG4gICAgICAgICAgZW52LkNyZWF0ZUluTW9kaWZ5TW9kZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUZBVUxUX0NPTE9SOlxyXG4gICAgICAgICAgdGhpcy5fZGVmYXVsdENvbG9yID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVGQVVMVF9GT0NVU19DT0xPUjpcclxuICAgICAgICAgIHRoaXMuX2RlZmF1bHRGb2N1c0NvbG9yID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVQ6XHJcbiAgICAgICAgICB0aGlzLl9jb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DTElFTlRfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVQ6XHJcbiAgICAgICAgICB0aGlzLl9jbGllbnRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfV0FSTklOR19USU1FOlxyXG4gICAgICAgICAgdGhpcy5fY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RPT0xUSVBfVElNRU9VVDpcclxuICAgICAgICAgIHRoaXMuX3Rvb2xpdGlwVGltZW91dCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfVU5MT0FEX1RJTUVPVVQ6XHJcbiAgICAgICAgICB0aGlzLl9jb250ZXh0VW5sb2FkVGltZW91dCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lNRV9BVVRPX09GRjpcclxuICAgICAgICAgIHRoaXMuX2ltZUF1dG9PZmYgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTE9DQUxfQVM0MDBTRVQ6XHJcbiAgICAgICAgICB0aGlzLl9sb2NhbEFzNDAwU2V0ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xPQ0FMX0VYVFJBX0dFTkdPOlxyXG4gICAgICAgICAgdGhpcy5fbG9jYWxFeHRyYUdlbmdvID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmFkZEV4dHJhR2VuZ28odGhpcy5fbG9jYWxFeHRyYUdlbmdvKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MT0NBTF9GTEFHUzpcclxuICAgICAgICAgIHRoaXMuX2xvY2FsRmxhZ3MgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVBQ0lBTF9BTlNJX0VYUDpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxBbnNpRXhwcmVzc2lvbiA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1NIT1dfU1RBVFVTQkFSX1BBTkVTOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbFNob3dTdGF0dXNCYXJQYW5lcyA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1JPVVRFX1RPX1JPT1RfUFJPR19PTl9DT05URVhUX1JFQ1JFQVRJT046XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsUm91dGVUb1Jvb3RQcm9nT25Db250ZXh0UmVjcmVhdGlvbiA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1NQRUNJQUxfRURJVF9MRUZUX0FMSUdOOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbEVkaXRMZWZ0QWxpZ24gPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQUNJQUxfU1dGX0NPTlRST0xfTkFNRTpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxTd2ZDb250cm9sTmFtZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MQU5HVUFHRTpcclxuICAgICAgICAgIHRoaXMuX2xhbmd1YWdlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUklEOlxyXG4gICAgICAgICAgdGhpcy5fdXNlcklkID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19VU0VSTkFNRTpcclxuICAgICAgICAgIFNlcnZlckNvbmZpZy5JbnN0YW5jZS5zZXRVc2VybmFtZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEVSTUlOQUw6XHJcbiAgICAgICAgICB0aGlzLl90ZXJtaW5hbCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VTRVJJTkZPOlxyXG4gICAgICAgICAgdGhpcy5fdXNlckluZm8gPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9HVUlEOlxyXG4gICAgICAgICAgdGhpcy5fZ3VpZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRST0xTX1BFUlNJU1RFTkNZX1BBVEg6XHJcbiAgICAgICAgICB0aGlzLl9jb250cm9sc1BlcnNpc3RlbmN5UGF0aCA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1BST0pESVI6XHJcbiAgICAgICAgICBlbnYuUHJvakRpciA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RST1BfVVNFUkZPUk1BVFM6XHJcbiAgICAgICAgICB0aGlzLl9kcm9wVXNlckZvcm1hdHMgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1ZBTF9ORVdfUE9MSUNZOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbFZhbE5ld1BvbGljeSA9ICBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9DQU5DRUxfT05fQ1JFQVRFOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbENhbmNlbE9uQ3JlYXRlID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfTEVHQUNZX1RSSU1fUkFOR0U6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfTEVHQUNZX0VNUFRZX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUZBVUxUX0RJU0FCTEVEX0NPTE9SOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0FOU0lfQkxPQl9DSEVDS19OVUxMOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1RBQkxFX1JFRFVDRV9USVRMRV9IRUlHSFQ6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfRE9UTkVUX0FMTE9XX1pFUk9fREFURTpcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9SRVVTRV9UQUJMRV9FRElUT1I6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRW52aXJvbm1lbnQuZmlsbERhdGEoKTogdW5rbm93biBhdHRyaWJ1dGU6IFwiICsgYXR0cmlidXRlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBoYXNoS2V5ID0gZW52LkNvbXBJZHg7XHJcbiAgICB0aGlzLl9lbnZpcm9ubWVudHMuc2V0X0l0ZW0oaGFzaEtleSwgZW52KTtcclxuXHJcblxyXG4gICAgLy8gVE9ETzogc29tZWhvdyBhZGRBc3luYyB0aHJvd3Mgc29tZSBleGNlcHRpb24gZm9yIFNFVF9FTlZfVE9PTFRJUF9USU1FT1VULiBFdmFsdWF0ZSBhbmQgZml4IGl0LCBpZiBwb3NzaWJsZVxyXG4gICAgLy8gaWYgKHRoaXMuX3Rvb2xpdGlwVGltZW91dCA+IDApXHJcbiAgICAvLyAgIENvbW1hbmRzLmFkZEFzeW5jKENvbW1hbmRUeXBlLlNFVF9FTlZfVE9PTFRJUF9USU1FT1VULCA8T2JqZWN0Pm51bGwsIDxPYmplY3Q+dGhpcy5fdG9vbGl0aXBUaW1lb3V0KTtcclxuXHJcblxyXG5cclxuICAgIC8vIGlmICh0aGlzLl9sYW5ndWFnZSAhPT0gJyAnKVxyXG4gICAgLy8gICBDb21tYW5kcy5hZGRBc3luYyhDb21tYW5kVHlwZS5TRVRfRU5WX0xBTUdVQUdFLCBudWxsLCAwLCB0aGlzLl9sYW5ndWFnZS5jaGFyQ29kZUF0KDApKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaWxsIHRoZSBmaWxlIG1hcHBpbmcgd2hlbiBwYXNzZWQgdGhyb3VnaCB0aGUgY2FjaGU6IHBsYWNlZCBpbnRvIHRoZSBjYWNoZSBieSB0aGUgcnVudGltZS1lbmdpbmUsIHBhc3NlZFxyXG4gIC8vLyAgIGFzICc8ZmlsZXVybCB2YWwgPSBcIi8uLi5cIidcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiVEFHX1VSTFwiPjwvcGFyYW0+XHJcbiAgYXN5bmMgZmlsbEZyb21VcmwodGFnTmFtZTogc3RyaW5nLCBwYXJzZXI6IFhtbFBhcnNlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IFhNTGRhdGE6IHN0cmluZyA9IHBhcnNlci5nZXRYTUxkYXRhKCk7XHJcblxyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IFhNTGRhdGEubGVuZ3RoKSB7XHJcblxyXG4gICAgICAvLyBmaW5kIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnQW5kQXR0cmlidXRlczogc3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnQW5kQXR0cmlidXRlcy5pbmRleE9mKHRhZ05hbWUpICsgdGFnTmFtZS5sZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICBEZWJ1Zy5Bc3NlcnQodG9rZW5zVmVjdG9yLmdldF9JdGVtKDApID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9WQUxVRSk7XHJcblxyXG4gICAgICBsZXQgY2FjaGVkRmlsZVVybDogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbSgxKSk7XHJcbiAgICAgIGlmIChjYWNoZWRGaWxlVXJsLnRyaW0oKSA9PT0gXCJcIilcclxuICAgICAgLy8gbWlnaHQgaGFwcGVuIGluIGNhc2UgdGhlIHhwYSBzZXJ2ZXIgZmFpbGVkIHRvIHdyaXRlIHRvIGl0cyBjYWNoZSBmb2xkZXJcclxuICAgICAgLy8gKGUuZy4gdGhlIGNhY2hlIGZvbGRlciBpcyBpbnZhbGlkLCBkdWUgdG8gYSBjb25maWd1cmF0aW9uIG1pc3Rha2UsXHJcbiAgICAgIC8vIGluIHdoaWNoIGNhc2UgdGhlIGN1cnJlbnQgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIG1hdGNoZWQgd2l0aCBhbiBlcnJvciBpbiB0aGUgeHBhIHNlcnZlcidzIGxvZyBmaWxlIChHZW5lcmFsRXJyb3JMb2c9KSkuXHJcbiAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXJyb3JUb0xvZyhOU3RyaW5nLkZvcm1hdChcIkVtcHR5IGNhY2hlZCBmaWxlIFVSTDogJ3swfSdcIiwgdGFnQW5kQXR0cmlidXRlcy50cmltKCkpKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IENvbnRlbnQ6IHN0cmluZyA9IGF3YWl0IENvbW1hbmRzUHJvY2Vzc29yTWFuYWdlci5HZXRDb250ZW50KGNhY2hlZEZpbGVVcmwsIHRydWUpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfS0JETUFQX1VSTDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRU5WX1BBUkFNX1VSTDpcclxuICAgICAgICAgICAgICBsZXQgaW5uZXJYbWxQYXJzZXI6IFhtbFBhcnNlciA9IG5ldyBYbWxQYXJzZXIoQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgd2hpbGUgKEFjY2Vzc0hlbHBlci5lbnZQYXJhbXNUYWJsZS5taXJyb3JGcm9tWE1MKGlubmVyWG1sUGFyc2VyLmdldE5leHRUYWcoKSwgaW5uZXJYbWxQYXJzZXIpKSB7XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4KSB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHtcclxuICAgICAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfS0JETUFQX1VSTDpcclxuICAgICAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coTlN0cmluZy5Gb3JtYXQoXCJLZXlib2FyZCBNYXBwaW5nOiAnezB9J3sxfXsyfVwiLCBjYWNoZWRGaWxlVXJsLCBPU0Vudmlyb25tZW50LkVvbFNlcSwgZXguTWVzc2FnZSkpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU1fVVJMOlxyXG4gICAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIkVudiBQYXJhbXMgVGFibGU6ICd7MH0nezF9ezJ9XCIsIGNhY2hlZEZpbGVVcmwsIE9TRW52aXJvbm1lbnQuRW9sU2VxLCBleC5NZXNzYWdlKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbmRDb250ZXh0ID0gWE1MZGF0YS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfT1BFTiwgZW5kQ29udGV4dCk7XHJcbiAgICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSlcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KGVuZENvbnRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBFbnZpcm9ubWVudERldGFpbHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjb21wSWR4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgRW52aXJvbm1lbnREZXRhaWxzPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgZ2V0RW52RGV0KGNvbXBJZHg6IG51bWJlcik6IEVudmlyb25tZW50RGV0YWlscyB7XHJcbiAgICBsZXQgZW52aXJvbm1lbnREZXRhaWxzOiBFbnZpcm9ubWVudERldGFpbHMgPSA8RW52aXJvbm1lbnREZXRhaWxzPnRoaXMuX2Vudmlyb25tZW50cy5nZXRfSXRlbShjb21wSWR4KTtcclxuXHJcbiAgICBpZiAoZW52aXJvbm1lbnREZXRhaWxzID09PSBudWxsKVxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFbnZpcm9ubWVudC5nZXRFbnZEZXQoKSB0aGVyZSBpcyBubyBlbnZcIik7XHJcbiAgICByZXR1cm4gZW52aXJvbm1lbnREZXRhaWxzO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgZGF0ZSBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBEYXRlTW9kZTwvcmV0dXJucz5cclxuICBHZXREYXRlTW9kZShjb21wSWR4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkRhdGVNb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgVGhvdXNhbmRzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IFRob3VzYW5kczwvcmV0dXJucz5cclxuICBHZXRUaG91c2FuZHMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aG91c2FuZHNTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBEZWNpbWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IERlY2ltYWw8L3JldHVybnM+XHJcbiAgR2V0RGVjaW1hbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgRGVjaW1hbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0RGVjaW1hbFNlcGFyYXRvcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZWNpbWFsU2VwYXJhdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgRGVjaW1hbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0VGhvdXNhbmRzU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rob3VzYW5kc1NlcGFyYXRvciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0ZVNlcGFyYXRvcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kYXRlU2VwYXJhdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXRUaW1lU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RpbWVTZXBhcmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIERhdGUgU2VwYXJhdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IERhdGUgU2VwYXJhdG9yPC9yZXR1cm5zPlxyXG4gIEdldERhdGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRlU2VwYXJhdG9yO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgSWRsZVRpbWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IElkbGVUaW1lPC9yZXR1cm5zPlxyXG4gIGdldElkbGVUaW1lKGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuSWRsZVRpbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBvd25lclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBvd25lcjwvcmV0dXJucz5cclxuICBnZXRPd25lcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX293bmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgdGltZSBzZXBhcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGltZSBzZXBlcmF0b3I8L3JldHVybnM+XHJcbiAgR2V0VGltZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpbWVTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBjZW50dXJ5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPmNlbnR1cnk8L3JldHVybnM+XHJcbiAgR2V0Q2VudHVyeShjb21wSWR4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkNlbnR1cnk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgdXBkYXRlIGlzIGFsbG93ZWQgaW4gcXVlcnkgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+b2YgdGhlIHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gVXBkYXRlSW5RdWVyeU1vZGU8L3JldHVybnM+XHJcbiAgYWxsb3dVcGRhdGVJblF1ZXJ5TW9kZShjb21wSWR4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldEVudkRldChjb21wSWR4KS5hbGxvd1VwZGF0ZUluUXVlcnlNb2RlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgY3JlYXRlIGlzIGFsbG93ZWQgaW4gbW9kaWZ5IG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlPC9yZXR1cm5zPlxyXG4gIGFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKGNvbXBJZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLmFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBzaWduaWZpY2FudCBudW0gc2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc2lnbmlmaWNhbnQgbnVtIHNpemU8L3JldHVybnM+XHJcbiAgR2V0U2lnbmlmaWNhbnROdW1TaXplKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2lnbmlmaWNhbnROdW1TaXplO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgc2lnbmlmaWNhbnQgbnVtIHNpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgc2V0U2lnbmlmaWNhbnROdW1TaXplKG5ld1NpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fc2lnbmlmaWNhbnROdW1TaXplID0gbmV3U2l6ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGNvZGUgcGFnZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgY29kZSBwYWdlXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBnZXRDb2RlUGFnZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvZGVQYWdlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBjaGFyc2V0IG9mIHRoZSBjdXJyZW50IGRvY3VtZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRFbmNvZGluZygpOiBFbmNvZGluZyB7XHJcbiAgICBsZXQgZW5jb2Rpbmc6IEVuY29kaW5nO1xyXG4gICAgdHJ5IHtcclxuICAgICAgZW5jb2RpbmcgPSBFbmNvZGluZy5HZXRFbmNvZGluZyh0aGlzLl9jb2RlUGFnZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXhjZXB0aW9uKSB7XHJcbiAgICAgIGVuY29kaW5nID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBlbmNvZGluZztcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBzeXN0ZW0gbmFtZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgc3lzdGVtIG5hbWVcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldFN5c3RlbSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N5c3RlbTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSBkZWJ1ZyBsZXZlbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiAwIG5vIGRlYnVnIDEgZGVidWcgMiBkZWJ1ZyBhbmQgZGF0YSB0cmFuc2ZlcnMgaW4gaGV4ICggbm90IGluIGJhc2U2NClcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIEdldERlYnVnTGV2ZWwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWJ1Z01vZGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBpZiAnLicgc2hvdWxkIGJlIGNoYW5nZWQgdG8gdGhlIGRlY2ltYWwgc2VwYXJhdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBDYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5JZ25vcmVSZXBsYWNlRGVjaW1hbFNlcGFyYXRvciAmJiB0aGlzLl9jYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgQ2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0PC9yZXR1cm5zPlxyXG4gIGdldENsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENvbnRleHRJbmFjdGl2aXR5VGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgQ29udGV4dEluYWN0aXZpdHlUaW1lb3V0PC9yZXR1cm5zPlxyXG4gIGdldENvbnRleHRJbmFjdGl2aXR5VGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5VGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWVvdXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIENvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWVvdXQ8L3JldHVybnM+XHJcbiAgZ2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBDb250ZXh0VW5sb2FkVGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0Q29udGV4dFVubG9hZFRpbWVvdXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250ZXh0VW5sb2FkVGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHRvb2x0aXAgdGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgdG9vbHRpcFRpbWVvdXQ8L3JldHVybnM+XHJcbiAgR2V0VG9vbHRpcFRpbWVvdXQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90b29saXRpcFRpbWVvdXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB0aGUgU3BlY2lhbEVkaXRMZWZ0QWxpZ25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3BlY2lhbEVkaXRMZWZ0QWxpZ24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbEVkaXRMZWZ0QWxpZ247XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBUUlVFIGlmIHRoZSBieXRlcyBzZXF1ZW5jZSBmb3IgbnVtYmVycyBpbiBleHByZXNzaW9ucyBpcyBmcm9tIGxvdyB0byBoaWdoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRMb3dIaWdoKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvd0hpZ2g7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGRlZmF1bHQgY29sb3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0RGVmYXVsdENvbG9yKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdENvbG9yO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgZGVmYXVsdCBmb2N1cyBjb2xvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXREZWZhdWx0Rm9jdXNDb2xvcigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRGb2N1c0NvbG9yO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgaWYgd2Ugc2hvdWxkIGV4aXQgJ2N1cnJlbnQnIGNvbnRyb2wgd2hlbiBhIG5vbi1wYXJrYWJsZSBjb250cm9sIGlzIGNsaWNrZWRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFNwZWNpYWxFeGl0Q3RybCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsRXhpdEN0cmw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgSU1FQXV0b09mZiA9IFlcclxuICAvLy8gICAoSlBOOiBJTUUgc3VwcG9ydClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldEltZUF1dG9PZmYoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW1lQXV0b09mZjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiBBczQwMFNldCBmbGFnID0gWVxyXG4gIC8vLyAgIChEQkNTIFN1cHBvcnQpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRMb2NhbEFzNDAwU2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsQXM0MDBTZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+RnVuY3Rpb24gcmV0dXJuaW5nIGFkZGl0aW9uYWwgR2VuZ28gdmFsdWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRMb2NhbEV4dHJhR2VuZ28oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2NhbEV4dHJhR2VuZ287XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+RnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBmbGFnIGYgaXMgaW4gdGhlIGxvY2FsIGZsYWdzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0TG9jYWxGbGFnKGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsRmxhZ3MgIT09IG51bGwgJiYgdGhpcy5fbG9jYWxGbGFncy5pbmRleE9mKGYpID49IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgU3BlY2lhbEFuc2lFeHByZXNzaW9uIGZsYWcgPSBZPC9yZXR1cm5zPlxyXG4gIGdldFNwZWNpYWxBbnNpRXhwcmVzc2lvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsQW5zaUV4cHJlc3Npb247XHJcbiAgfVxyXG5cclxuICBnZXRTcGVjaWFsU2hvd1N0YXR1c0JhclBhbmVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxTaG93U3RhdHVzQmFyUGFuZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gcmV0dXJucyB0aGUgdGVybWluYWwgbnVtYmVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRlcm1pbmFsIG51bWJlci48L3JldHVybnM+XHJcbiAgZ2V0VGVybWluYWwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiByZXR1cm5zIHdlYiBjbGllbnQgcmUtaW5pdCBzZXNzaW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRlcm1pbmFsIG51bWJlci48L3JldHVybnM+XHJcbiAgZ2V0V2ViQ2xpZW50UmVpbml0U2Vzc2lvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dlYmNsaWVudFJlaW5pdFNlc3Npb247XHJcbiAgfVxyXG5cclxuICBzZXRXZWJDbGllbnRSZWluaXRTZXNzaW9uKCBzZXNzaW9uIDogc3RyaW5nKSB7XHJcbiAgICAgdGhpcy5fd2ViY2xpZW50UmVpbml0U2Vzc2lvbiA9IHNlc3Npb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gcmV0dXJucyB3ZWIgY2xpZW50IHJlLWluaXQgc2Vzc2lvbi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz50ZXJtaW5hbCBudW1iZXIuPC9yZXR1cm5zPlxyXG4gIGdldFNwZWNpYWxSb3V0ZVRvUm9vdFByb2dPbkNvbnRleHRSZWNyZWF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxSb3V0ZVRvUm9vdFByb2dPbkNvbnRleHRSZWNyZWF0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZ1bmN0aW9uIHJldHVybnMgdXNlciBJRCBvZiBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+dXNlciBpZC48L3JldHVybnM+XHJcbiAgZ2V0VXNlcklEKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlcklkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEZ1bmN0aW9uIHJldHVybmluZyB1c2VyIGluZm8gb2YgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnVzZXIgaW5mbzwvcmV0dXJucz5cclxuICBnZXRVc2VySW5mbygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldHMgZ3VpIElkIG9mIHRoZSBhcHBsaWNhdGlvbjwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldEdVSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ndWlkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgQ29udHJvbHNQZXJzaXN0ZW5jeVBhdGhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0Q29udHJvbHNQZXJzaXN0ZW5jeVBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9sc1BlcnNpc3RlbmN5UGF0aDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHByb2plY3QncyBkaXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbXBJZHhcIj5jb21wb25lbnQgaW5kZXguPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFByb2pEaXIoY29tcElkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldEVudkRldChjb21wSWR4KS5Qcm9qRGlyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBmbGFnIFNwZWNpYWxFTkdMb2dvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBSQyBzbyByZXR1cm4gZmFsc2UuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFNwZWNpYWxFbmdMb2dvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZmxhZyBTcGVjaWFsRU5HTG9nb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgUkMgc28gcmV0dXJuIGZhbHNlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRTcGVjaWFsSWdub3JlQnV0dG9uRm9ybWF0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyB2YWx1ZSBvZiBTcGVjaWFsU1dGQ29udHJvbE5hbWVQcm9wZXJ0eS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0U3BlY2lhbFN3ZkNvbnRyb2xOYW1lUHJvcGVydHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbFN3ZkNvbnRyb2xOYW1lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIHZhbHVlIG9mIFNwZWNpYWxMb2dJbnRlcm5hbEV4Y2VwdGlvbnMuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldFNwZWNpYWxMb2dJbnRlcm5hbEV4Y2VwdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIG93bmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0T3duZXIodmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX293bmVyID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgZGF0ZSBtb2RlIGluIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0RGF0ZU1vZGUoY29tcElkeDogbnVtYmVyLCB2YWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuRGF0ZU1vZGUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBjZW50dXJ5IGluIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q2VudHVyeShjb21wSWR4OiBudW1iZXIsIHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEVudkRldChjb21wSWR4KS5DZW50dXJ5ID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgaWRsZSB0aW1lIGluIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0SWRsZVRpbWUoY29tcElkeDogbnVtYmVyLCB2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuSWRsZVRpbWUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBhbGxvdy11cGRhdGUtaW4tcXVyeS1tb2RlIGZsYWcgaW4gdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRBbGxvd1VwZGF0ZUluUXVlcnlNb2RlKGNvbXBJZHg6IG51bWJlciwgdmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEVudkRldChjb21wSWR4KS5VcGRhdGVJblF1ZXJ5TW9kZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIGFsbG93LWNyZWF0ZS1pbi1tb2RpZnktbW9kZSBmbGFnIGluIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0QWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoY29tcElkeDogbnVtYmVyLCB2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkNyZWF0ZUluTW9kaWZ5TW9kZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRleHQgdGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldENvbnRleHRJbmFjdGl2aXR5VGltZW91dCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29udGV4dEluYWN0aXZpdHlUaW1lb3V0ID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgY2xpZW50IGNvbnRleHQgdGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldENsaWVudENvbnRleHRJbmFjdGl2aXR5VGltZW91dCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0ID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgY29udGV4dCBpbmFjdGl2aXR5IHdhcm5pbmcgdGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldENvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWUodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBjb250ZXh0IHVubG9hZCB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q29udGV4dFVubG9hZFRpbWVvdXQodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRleHRVbmxvYWRUaW1lb3V0ID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdGVybWluYWwgbnVtYmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0VGVybWluYWwodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rlcm1pbmFsID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgR2V0IHRoZSBVc2VyRm9ybWF0cyBmb3IgRHJhZyAmIERyb3AgT3BlcmF0aW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXREcm9wVXNlckZvcm1hdHMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9kcm9wVXNlckZvcm1hdHM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBHZXRTcGVjaWFsVGV4dFNpemVGYWN0b3JpbmcgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRTcGVjaWFsVGV4dFNpemVGYWN0b3JpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbFRleHRTaXplRmFjdG9yaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgR2V0U3BlY2lhbEZsYXRFZGl0T25DbGFzc2ljVGhlbWUgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRTcGVjaWFsRmxhdEVkaXRPbkNsYXNzaWNUaGVtZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsRmxhdEVkaXRPbkNsYXNzaWNUaGVtZTtcclxuICB9XHJcblxyXG5cclxuICBHZXRTcGVjaWFsRGlzYWJsZU1vdXNlV2hlZWwoKTogYm9vbGVhbiB7XHJcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBpZiBfc3BlY2lhbFZhbE5ld1BvbGljeSBmbGFnID0gWTwvcmV0dXJucz5cclxuICBHZXRTcGVjaWFsVmFsTmV3UG9saWN5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxWYWxOZXdQb2xpY3k7XHJcbiAgfVxyXG5cclxuICBHZXRTcGVjaWFsQ2FuY2VsT25DcmVhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbENhbmNlbE9uQ3JlYXRlO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICBUaGlzIGNsYXNzIGhvbGRzIGRldGFpbHMgZm9yIHNpbmdsZSBFbnZpcm9ubWVudCAocGVyIENvbXBvbmVudClcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50RGV0YWlscyB7XHJcbiAgcHJpdmF0ZSBfY3JlYXRlSW5Nb2RpZnlNb2RlOiBib29sZWFuID0gZmFsc2U7IC8vIGFsbG93IGNyZWF0ZSBpbiBtb2RpZnkgbW9kZSA/XHJcbiAgcHJpdmF0ZSBfdXBkYXRlSW5RdWVyeU1vZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy8gYWxsb3cgdXBkYXRlIGluIHF1ZXJ5IG1vZGUgP1xyXG5cclxuICBDb21wSWR4OiBudW1iZXIgPSAwO1xyXG4gIERhdGVNb2RlOiBzdHJpbmcgPSAnXFwwJztcclxuICBDZW50dXJ5OiBudW1iZXIgPSAwO1xyXG4gIElkbGVUaW1lOiBudW1iZXIgPSAwO1xyXG5cclxuICBzZXQgVXBkYXRlSW5RdWVyeU1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3VwZGF0ZUluUXVlcnlNb2RlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgQ3JlYXRlSW5Nb2RpZnlNb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jcmVhdGVJbk1vZGlmeU1vZGUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIFByb2pEaXI6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb25zdHJ1Y3RvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLkNvbXBJZHggPSAwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUUlVFIGlmIHVwZGF0ZSBpcyBhbGxvd2VkIGluIHF1ZXJ5IG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFsbG93VXBkYXRlSW5RdWVyeU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlSW5RdWVyeU1vZGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgdXBkYXRlIGlzIGFsbG93ZWQgaW4gcXVlcnkgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlSW5Nb2RpZnlNb2RlO1xyXG4gIH1cclxufVxyXG4iXX0=
|