@magic-xpa/engine 4.1100.0-dev4110.252 → 4.1100.0-dev4110.256

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. package/esm2022/src/ClientManager.mjs +2 -2
  2. package/esm2022/src/CommandsProcessorBase.mjs +1 -1
  3. package/esm2022/src/CommandsProcessorManager.mjs +1 -1
  4. package/esm2022/src/CommandsTable.mjs +1 -1
  5. package/esm2022/src/CurrentClientVersion.mjs +2 -2
  6. package/esm2022/src/GUIManager.mjs +1 -1
  7. package/esm2022/src/GuiEventsProcessor.mjs +1 -1
  8. package/esm2022/src/ServerConfig.mjs +1 -1
  9. package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +1 -1
  10. package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +1 -1
  11. package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +1 -1
  12. package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +1 -1
  13. package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +1 -1
  14. package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +1 -1
  15. package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +1 -1
  16. package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +1 -1
  17. package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +1 -1
  18. package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +1 -1
  19. package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +1 -1
  20. package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +1 -1
  21. package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +1 -1
  22. package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +1 -1
  23. package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +1 -1
  24. package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +1 -1
  25. package/esm2022/src/data/DataView.mjs +1 -1
  26. package/esm2022/src/data/DvCache.mjs +1 -1
  27. package/esm2022/src/data/Field.mjs +1 -1
  28. package/esm2022/src/data/FieldsTable.mjs +1 -1
  29. package/esm2022/src/data/Key.mjs +1 -1
  30. package/esm2022/src/data/Record.mjs +2 -2
  31. package/esm2022/src/data/RecordsTable.mjs +1 -1
  32. package/esm2022/src/data/TaskTransactionManager.mjs +1 -1
  33. package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +1 -1
  34. package/esm2022/src/env/EnvVariablesTable.mjs +1 -1
  35. package/esm2022/src/env/Environment.mjs +1 -1
  36. package/esm2022/src/env/LanguageData.mjs +1 -1
  37. package/esm2022/src/env/MirrorString.mjs +1 -1
  38. package/esm2022/src/event/ActionManager.mjs +1 -1
  39. package/esm2022/src/event/Event.mjs +1 -1
  40. package/esm2022/src/event/EventHandler.mjs +1 -1
  41. package/esm2022/src/event/EventHandlerPosition.mjs +1 -1
  42. package/esm2022/src/event/EventsManager.mjs +1 -1
  43. package/esm2022/src/event/RunTimeEvent.mjs +1 -1
  44. package/esm2022/src/event/UserEventsTable.mjs +1 -1
  45. package/esm2022/src/exp/ExpTable.mjs +1 -1
  46. package/esm2022/src/exp/Expression.mjs +1 -1
  47. package/esm2022/src/exp/ExpressionEvaluator.mjs +1 -1
  48. package/esm2022/src/exp/ExpressionLocalJpn.mjs +1 -1
  49. package/esm2022/src/exp/GlobalParamsTable.mjs +1 -1
  50. package/esm2022/src/exp/YesNoExp.mjs +1 -1
  51. package/esm2022/src/gui/FormsTable.mjs +1 -1
  52. package/esm2022/src/gui/MgControl.mjs +1 -1
  53. package/esm2022/src/gui/MgForm.mjs +1 -1
  54. package/esm2022/src/http/HttpManager.mjs +1 -1
  55. package/esm2022/src/http/client/HttpClientAsync.mjs +1 -1
  56. package/esm2022/src/http/client/HttpClientBase.mjs +1 -1
  57. package/esm2022/src/http/client/HttpClientEvents.mjs +1 -1
  58. package/esm2022/src/http/client/HttpClientSync.mjs +1 -1
  59. package/esm2022/src/http/client/HttpUtility.mjs +1 -1
  60. package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +1 -1
  61. package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +1 -1
  62. package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +1 -1
  63. package/esm2022/src/remote/RemoteCommandsProcessor.mjs +1 -1
  64. package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +1 -1
  65. package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +1 -1
  66. package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +1 -1
  67. package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +1 -1
  68. package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +1 -1
  69. package/esm2022/src/remote/ServerError.mjs +1 -1
  70. package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +1 -1
  71. package/esm2022/src/rt/Argument.mjs +1 -1
  72. package/esm2022/src/rt/ArgumentsList.mjs +1 -1
  73. package/esm2022/src/rt/Boundary.mjs +1 -1
  74. package/esm2022/src/rt/CompMainPrgTable.mjs +1 -1
  75. package/esm2022/src/rt/DataviewHeaderBase.mjs +1 -1
  76. package/esm2022/src/rt/DataviewHeaders.mjs +1 -1
  77. package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +1 -1
  78. package/esm2022/src/rt/ExecutionStack.mjs +1 -1
  79. package/esm2022/src/rt/HandlersTable.mjs +1 -1
  80. package/esm2022/src/rt/LastFocusedManager.mjs +1 -1
  81. package/esm2022/src/rt/Operation.mjs +1 -1
  82. package/esm2022/src/rt/OperationTable.mjs +1 -1
  83. package/esm2022/src/rt/Recompute.mjs +1 -1
  84. package/esm2022/src/rt/RecomputeTable.mjs +1 -1
  85. package/esm2022/src/rt/RemoteDataviewHeader.mjs +1 -1
  86. package/esm2022/src/rt/TableCache.mjs +1 -1
  87. package/esm2022/src/rt/TableCacheManager.mjs +1 -1
  88. package/esm2022/src/rt/Transaction.mjs +1 -1
  89. package/esm2022/src/security/UserDetails.mjs +1 -1
  90. package/esm2022/src/tasks/MGData.mjs +1 -1
  91. package/esm2022/src/tasks/MGDataCollection.mjs +1 -1
  92. package/esm2022/src/tasks/RCTimer.mjs +1 -1
  93. package/esm2022/src/tasks/RemoteTaskService.mjs +1 -1
  94. package/esm2022/src/tasks/Task.mjs +1 -1
  95. package/esm2022/src/tasks/TaskBase.mjs +1 -1
  96. package/esm2022/src/tasks/TaskServiceBase.mjs +1 -1
  97. package/esm2022/src/tasks/TasksTable.mjs +1 -1
  98. package/esm2022/src/tasks/sort/SortCollection.mjs +1 -1
  99. package/esm2022/src/util/ConstUtils.mjs +1 -1
  100. package/esm2022/src/util/FlowMonitorQueue.mjs +1 -1
  101. package/esm2022/src/util/HeapSort.mjs +1 -1
  102. package/esm2022/src/util/MgPriorityBlockingQueue.mjs +1 -1
  103. package/esm2022/src/util/MgPriorityQueue.mjs +1 -1
  104. package/esm2022/src/util/PrmMap.mjs +1 -1
  105. package/esm2022/src/util/Scrambler.mjs +1 -1
  106. package/esm2022/src/util/UniqueIDUtils.mjs +1 -1
  107. package/esm2022/src/util/cookie.service.mjs +1 -1
  108. package/fesm2022/magic-xpa-engine.mjs +3 -3
  109. package/fesm2022/magic-xpa-engine.mjs.map +1 -1
  110. package/package.json +4 -4
@@ -396,4 +396,4 @@ export class RunTimeEvent extends RunTimeEventBase {
396
396
  ]);
397
397
  }
398
398
  }
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuVGltZUV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ldmVudC9SdW5UaW1lRXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RixPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDakcsT0FBTyxFQUFDLFlBQVksRUFBa0IsYUFBYSxFQUFFLFNBQVMsRUFBWSxhQUFhLEdBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSzdDLE1BQU0sT0FBTyxZQUFhLFNBQVEsZ0JBQWdCO0lBTXhDLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0lBQzFDLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFFdEMsYUFBYSxHQUFpQixZQUFZLENBQUMsTUFBTSxDQUFDO0lBRWxELGNBQWMsR0FBYSxJQUFJLENBQUM7SUFDaEMsUUFBUSxHQUFrQixJQUFJLENBQUM7SUFDL0Is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TUFBTSxDQUFDLG9DQUFvQyxFQUFFO1lBQzFELElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDdkcsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFyLCBJQ29tcGFyYWJsZSwgSW50MzIsIExpc3QsIE5TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gXCJAbWFnaWMteHBhL21zY29yZWxpYlwiO1xyXG5pbXBvcnQge0ZvcmNlRXhpdCwgSW50ZXJuYWxJbnRlcmZhY2UsIFByaW9yaXR5LCBYTUxDb25zdGFudHMsIFhtbFBhcnNlcn0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtHdWlGaWVsZEJhc2UsIExhc3RGb2N1c2VkVmFsLCBNZ0NvbnRyb2xCYXNlLCBNb2RpZmllcnMsIFByb3BlcnR5LCBQcm9wSW50ZXJmYWNlLH0gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7RXZlbnRTdWJUeXBlfSBmcm9tIFwiLi4vZW51bXNcIjtcclxuaW1wb3J0IHtFdmVudH0gZnJvbSBcIi4vRXZlbnRcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7QXJndW1lbnRzTGlzdH0gZnJvbSBcIi4uL3J0L0FyZ3VtZW50c0xpc3RcIjtcclxuaW1wb3J0IHtNR0RhdGF9IGZyb20gXCIuLi90YXNrcy9NR0RhdGFcIjtcclxuaW1wb3J0IHtUYXNrQmFzZX0gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tCYXNlXCI7XHJcbmltcG9ydCB7UnVuVGltZUV2ZW50QmFzZX0gZnJvbSBcIi4vUnVuVGltZUV2ZW50QmFzZVwiO1xyXG5pbXBvcnQge0FjY2Vzc0hlbHBlcn0gZnJvbSBcIi4uL0FjY2Vzc0hlbHBlclwiO1xyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICB0aGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIHJ1bnRpbWUgZXZlbnRzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBSdW5UaW1lRXZlbnQgZXh0ZW5kcyBSdW5UaW1lRXZlbnRCYXNlIGltcGxlbWVudHMgSUNvbXBhcmFibGUge1xyXG5cclxuICAvLyBBVFRFTlRJT04gIVxyXG4gIC8vIGFueSBjaGFuZ2UgdG8gdGhlIG1lbWJlciB2YXJpYWJsZXMgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGNoYW5nZSB0byB0aGUgQ1RPUiB0aGF0XHJcbiAgLy8gZ2V0cyBvbmUgYXJndW1lbnQgb2YgdGhlIHR5cGUgJ0V2ZW50JyBhbmQgb25lIGFyZ3VtZW50IG9mIHRoZSB0eXBlICdSdW5UaW1lRXZlbnQnLlxyXG5cclxuICBwcml2YXRlIF9jb250cm9sc0xpc3Q6IExpc3Q8TWdDb250cm9sQmFzZT4gPSBudWxsOyAvLyBsaXN0IG9mIGNvbnRyb2xzXHJcbiAgcHJpdmF0ZSBfZGlyZWN0aW9uOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2Rpc3BsYXlMaW5lOiBudW1iZXIgPSBJbnQzMi5NaW5WYWx1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfZXZlbnRTdWJUeXBlOiBFdmVudFN1YlR5cGUgPSBFdmVudFN1YlR5cGUuTm9ybWFsO1xyXG5cclxuICBwcml2YXRlIF9hY3RFbmFibGVMaXN0OiBudW1iZXJbXSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfYXJnTGlzdDogQXJndW1lbnRzTGlzdCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY3RybDogTWdDb250cm9sQmFzZSA9IG51bGw7IC8vIHRoZSBjb250cm9sIG9uIHdoaWNoIHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkXHJcbiAgcHJpdmF0ZSBfZG90TmV0T2JqZWN0OiBhbnkgPSBudWxsOyAvLyBvYmplY3Qga2V5IG9mIGEgY29udHJvbFxyXG4gIHByaXZhdGUgX2V2ZW50RmxkOiBHdWlGaWVsZEJhc2UgPSBudWxsOyAvLyBGb3IgdmFyaWFibGUgZXZlbnRzIC0gdGhlIGZpZWxkIG9uIHdoaWNoIHRoZSBjb250cm9sIHdhcyB0cmlnZ2VyZWRcclxuICBwcml2YXRlIF9mcm9tU2VydmVyOiBib29sZWFuID0gZmFsc2U7ICAvLyBpZiBUUlVFLCB0aGUgZXZlbnQgd2FzIGNyZWF0ZWQgb24gdGhlIHNlcnZlciBhbmQgc2VudCB0byB0aGUgY2xpZW50XHJcbiAgcHJpdmF0ZSBfZ3VpVHJpZ2dlcmVkRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgdHJ1ZSwgdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgR1VJIGxldmVsIChpbmNsdWRlcyB0aW1lciBldmVudHMpXHJcbiAgcHJpdmF0ZSBfaW1tZWRpYXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNJZGxlVGltZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9pc1JlYWxSZWZyZXNoOiBib29sZWFuID0gdHJ1ZTsgLy8gdXNlZCBvbmx5IGluIE1HX0FDVF9WSUVXX1JFRlJFU0ggZXZlbnRzIHRvIGluZGljYXRlIGEgcmVmcmVzaCBpbnZva2VkIFNwZWNpZmljYWxseSBieSB0aGUgdXNlclxyXG4gIHByaXZhdGUgX21nZElkOiBudW1iZXIgPSAwOyAvLyBtZ2RhdGEgaWQgdGhhdCBzZW50IHRpbWVyIGV2ZW50XHJcbiAgcHJpdmF0ZSBfcm91dGVQYXJhbXM6IExpc3Q8YW55PiA9IG51bGw7XHJcblxyXG4gIC8vIFVzZWQgb25seSBpZiAndGFzaycgaXMgYSBtYWluIHByZy4gQSByZWZlcmVuY2UgdG8gdGhlIHRhc2sgd2hpY2hcclxuICAvLyBjYXVzZWQgdGhlIG1haW4gcHJnIHRvIGJlY29tZSBhY3RpdmUgaW4gdGhlIHJ1bnRpbWUuXHJcbiAgcHJpdmF0ZSBfbXByZ0NyZWF0b3I6IFRhc2tCYXNlID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfcHJpb3JpdHk6IFByaW9yaXR5ID0gUHJpb3JpdHkuSElHSDsgLy8gcHJpb3JpdHkgb2YgZXZlbnQgZm9yIGV2ZW50cyBxdWV1ZVxyXG5cclxuICBwcml2YXRlIF9wcm9kdWNlQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgVFJVRSwgdGhlIGV2ZW50IHNob3VsZCBwcm9kdWNlIGNsaWNrXHJcbiAgcHJpdmF0ZSBfcmV2ZXJzaWJsZUV4aXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3Rpb25FbmQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uU3RhcnQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2VuZEFsbDogYm9vbGVhbiA9IGZhbHNlOyAgLy8gdGhpcyBmbGFnIGlzIHNldCBmb3Igc2VuZGluZyBhbGwgcmVjb3Jkc1xyXG4gIHByaXZhdGUgX3Rhc2s6IFRhc2tCYXNlID0gbnVsbDsgLy8gYSByZWZlcmVuY2UgdG8gdGhlIHRhc2tcclxuICBwcml2YXRlIF90YXNrVGFnOiBzdHJpbmcgPSBudWxsOyAvLyB0aGUgdGFzayBpZCBvbiB3aGljaCB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZFxyXG4gIHByaXZhdGUgX3ZhbDogYW55ID0gbnVsbDtcclxuICBwcml2YXRlIF9zaG91bGRIYW5kbGVab29tOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNldCBTaG91bGRIYW5kbGVab29tKHZhbHVlOiBib29sZWFuKSB7IFxyXG4gICAgICB0aGlzLl9zaG91bGRIYW5kbGVab29tID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgU2hvdWxkSGFuZGxlWm9vbSgpOiBib29sZWFuIHsgXHJcbiAgICAgIHJldHVybiB0aGlzLl9zaG91bGRIYW5kbGVab29tO1xyXG4gIH1cclxuXHJcbiAgc2V0IENvbnRyb2wodmFsdWU6IE1nQ29udHJvbEJhc2UpIHtcclxuICAgIHRoaXMuX2N0cmwgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBEaXNwbGF5TGluZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5TGluZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IENvbnRyb2woKTogTWdDb250cm9sQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3RybDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2hvdWxkIHRoZSBjb250cm9sIHNldCBvbiB0aGUgZXZlbnQgYmUgaWdub3JlZC4gaWYgdHJ1ZSwgd2hlbiBwcm9jZXNzaW5nIHRoZSBldmVudCB3ZSBzaG91bGRcclxuICAvLy8gdXNlIHRoZSBjdXJyZW50IGZvY3VzZWQgY29udHJvbCBpbnN0ZWFkIG9mIHRoZSBvbmUgc2V0IG9uIHRoZSBldmVudC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIElnbm9yZVNwZWNpZmllZENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgTGFzdEZvY3VzZWRWYWw6IExhc3RGb2N1c2VkVmFsID0gbnVsbDsgLy8gdmFsdWUgb2YgbGFzdCBlZGl0ZWQgY29udHJvbFxyXG5cclxuICBnZXQgQ29udHJvbHNMaXN0KCk6IExpc3Q8TWdDb250cm9sQmFzZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2xzTGlzdDtcclxuICB9XHJcblxyXG4gIGdldCBEaXJlY3Rpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXJlY3Rpb247XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcih0YXNrUmVmOiBUYXNrQmFzZSk7XHJcbiAgY29uc3RydWN0b3IodGFza1JlZjogVGFza0Jhc2UsIGN0cmxSZWY6IE1nQ29udHJvbEJhc2UpO1xyXG4gIGNvbnN0cnVjdG9yKGN0cmxSZWY6IE1nQ29udHJvbEJhc2UpO1xyXG4gIGNvbnN0cnVjdG9yKGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3RvcihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBndWlUcmlnZ2VyZWRFdmVudDogYm9vbGVhbiwgaWdub3JlU3BlY2lmaWVkQ29udHJvbDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IodGFza3JlZjogVGFza0Jhc2UsIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3RvcihmbGRSZWY6IEd1aUZpZWxkQmFzZSk7XHJcbiAgY29uc3RydWN0b3IoY3RybFJlZjogTWdDb250cm9sQmFzZSwgbGluZTogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBsaW5lOiBudW1iZXIsIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3RvcihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBjb250cm9sc0xpc3Q6IExpc3Q8TWdDb250cm9sQmFzZT4sIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuKTtcclxuICBjb25zdHJ1Y3RvcihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBkaXJlY3Rpb246IG51bWJlciwgbGluZTogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBjb2x1bW5IZWFkZXI6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTtcclxuICBjb25zdHJ1Y3RvcihldnQ6IEV2ZW50LCBydEV2dDogUnVuVGltZUV2ZW50KTtcclxuICBjb25zdHJ1Y3RvcihydEV2dDogUnVuVGltZUV2ZW50KTtcclxuICBjb25zdHJ1Y3Rvcih0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dDogYW55LCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrPzogYW55LCBpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lPzogYW55LCB5T3JDdGxJZHg/OiBudW1iZXIsIHdpZHRoPzogbnVtYmVyLCBoZWlnaHQ/OiBudW1iZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBUYXNrQmFzZSkpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfNSh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBUYXNrQmFzZSkgJiYgKGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgPT09IG51bGwgfHwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayBpbnN0YW5jZW9mIE1nQ29udHJvbEJhc2UpKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzYodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQsIGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2spO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgTWdDb250cm9sQmFzZSkpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfNyh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSAmJiAoY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayA9PT0gbnVsbCB8fCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrLmNvbnN0cnVjdG9yID09PSBCb29sZWFuKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl84KHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0LCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCA9PT0gbnVsbCB8fCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIE1nQ29udHJvbEJhc2UpICYmIChjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrID09PSBudWxsIHx8IGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2suY29uc3RydWN0b3IgPT09IEJvb2xlYW4pICYmIChpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lID09PSBudWxsIHx8IGlnbm9yZVNwZWNpZmllZENvbnRyb2xPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JYT3JDb250cm9sT3JBY3RpdmF0ZWRGcm9tTURJRnJhbWUuY29uc3RydWN0b3IgPT09IEJvb2xlYW4pKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzkodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQsIGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2ssIGlnbm9yZVNwZWNpZmllZENvbnRyb2xPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JYT3JDb250cm9sT3JBY3RpdmF0ZWRGcm9tTURJRnJhbWUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgVGFza0Jhc2UpICYmIChjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrID09PSBudWxsIHx8IGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2suY29uc3RydWN0b3IgPT09IEJvb2xlYW4pKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzEwKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0LCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmICh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCA9PT0gbnVsbCB8fCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIEd1aUZpZWxkQmFzZSkpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMTEodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgTWdDb250cm9sQmFzZSkgJiYgKGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgPT09IG51bGwgfHwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzay5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xMih0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSAmJiAoY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayA9PT0gbnVsbCB8fCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lID09PSBudWxsIHx8IGlnbm9yZVNwZWNpZmllZENvbnRyb2xPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JYT3JDb250cm9sT3JBY3RpdmF0ZWRGcm9tTURJRnJhbWUuY29uc3RydWN0b3IgPT09IEJvb2xlYW4pKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzEzKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0LCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrLCBpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmICh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCA9PT0gbnVsbCB8fCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIE1nQ29udHJvbEJhc2UpICYmIChjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrID09PSBudWxsIHx8IGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgaW5zdGFuY2VvZiBMaXN0KSAmJiAoaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZSA9PT0gbnVsbCB8fCBpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lLmNvbnN0cnVjdG9yID09PSBCb29sZWFuKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xNCh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzaywgaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZSk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSAmJiAoY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayA9PT0gbnVsbCB8fCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpICYmIChpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lID09PSBudWxsIHx8IGlnbm9yZVNwZWNpZmllZENvbnRyb2xPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JYT3JDb250cm9sT3JBY3RpdmF0ZWRGcm9tTURJRnJhbWUuY29uc3RydWN0b3IgPT09IE51bWJlcikpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMTUodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQsIGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2spO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDYpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMTYodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgRXZlbnQpICYmIChjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrID09PSBudWxsIHx8IGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgaW5zdGFuY2VvZiBSdW5UaW1lRXZlbnQpKSB7XHJcbiAgICAgIC8vIENhbGwgYmFzZSBjbGFzcyBjb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIHRoZSBldmVudCB0eXBlIGFuZCB0aGUgb3RoZXIgZmllbGRzXHJcbiAgICAgIHN1cGVyLmNvbnN0cnVjdG9yXzEodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQpO1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzE3KCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrKTtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgUnVuVGltZUV2ZW50KVxyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0KTtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0YXNrUmVmXCI+YSByZWZlcmVuY2UgdG8gdGhlIHRhc2s8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfNSh0YXNrUmVmOiBUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0KHRhc2tSZWYpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPnJlZmVyZW5jZSB0byB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxSZWZcIj5yZWZlcmVuY2UgdG8gY29udHJvbDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl82KHRhc2tSZWY6IFRhc2tCYXNlLCBjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzUoKGN0cmxSZWYgIT09IG51bGwpID8gKDxUYXNrQmFzZT5jdHJsUmVmLmdldEZvcm0oKS5nZXRUYXNrKCkpIDogdGFza1JlZik7XHJcbiAgICB0aGlzLkNvbnRyb2wgPSBjdHJsUmVmO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFJlZlwiPmEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl83KGN0cmxSZWY6IE1nQ29udHJvbEJhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfNihudWxsLCBjdHJsUmVmKTtcclxuICAgIGlmIChjdHJsUmVmICE9PSBudWxsICYmIHN1cGVyLmdldFR5cGUoKSA9PT0gQ2hhci5NaW5WYWx1ZSkgLy8gbm90IGluaXRpYWxpemVkIHlldFxyXG4gICAge1xyXG4gICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSwgaWYgYSBUUklHR0VSIHByb3BlcnR5IGV4aXN0cywgcGFyc2UgdGhlIGV2ZW50IGFuZCBhZGQgaXQgdG8gdGhlIGNvbnRyb2xcclxuICAgICAgbGV0IHByb3A6IFByb3BlcnR5ID0gY3RybFJlZi5HZXRDb21wdXRlZFByb3BlcnR5KFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RSSUdHRVIpO1xyXG4gICAgICBpZiAocHJvcCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCB4bWxQYXJzZXI6IFhtbFBhcnNlciA9IG5ldyBYbWxQYXJzZXIocHJvcC5HZXRDb21wdXRlZFZhbHVlKCkpO1xyXG4gICAgICAgIHN1cGVyLmZpbGxEYXRhKHhtbFBhcnNlciwgPFRhc2tCYXNlPmN0cmxSZWYuZ2V0Rm9ybSgpLmdldFRhc2soKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxSZWZcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImd1aVRyaWdnZXJlZEV2ZW50XCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzgoY3RybFJlZjogTWdDb250cm9sQmFzZSwgZ3VpVHJpZ2dlcmVkRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfNyhjdHJsUmVmKTtcclxuICAgIHRoaXMuX2d1aVRyaWdnZXJlZEV2ZW50ID0gZ3VpVHJpZ2dlcmVkRXZlbnQ7XHJcbiAgICBpZiAoZ3VpVHJpZ2dlcmVkRXZlbnQpIHtcclxuICAgICAgLy8gRXZlbnRzIHRoYXQgYXJlIHRyaWdnZXJlZCBieSBHVUkgbGV2ZWwsIG11c3QgYmUgZXhlY3V0ZWQgYWZ0ZXIgYWxsXHJcbiAgICAgIC8vIG90aGVyIGV2ZW50cywgdGh1cyB0aGF5IGhhdmUgbG93IHByaW9yaXR5O1xyXG4gICAgICB0aGlzLl9wcmlvcml0eSA9IFByaW9yaXR5LkxPVztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxSZWZcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImd1aVRyaWdnZXJlZEV2ZW50XCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzkoY3RybFJlZjogTWdDb250cm9sQmFzZSwgZ3VpVHJpZ2dlcmVkRXZlbnQ6IGJvb2xlYW4sIGlnbm9yZVNwZWNpZmllZENvbnRyb2w6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfOChjdHJsUmVmLCBndWlUcmlnZ2VyZWRFdmVudCk7XHJcbiAgICB0aGlzLklnbm9yZVNwZWNpZmllZENvbnRyb2wgPSBpZ25vcmVTcGVjaWZpZWRDb250cm9sO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza3JlZlwiPnJlZmVyZW5jZSB0byB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImd1aVRyaWdnZXJlZEV2ZW50XCI+PC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEwKHRhc2tyZWY6IFRhc2tCYXNlLCBndWlUcmlnZ2VyZWRFdmVudDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl81KHRhc2tyZWYpO1xyXG4gICAgdGhpcy5fZ3VpVHJpZ2dlcmVkRXZlbnQgPSBndWlUcmlnZ2VyZWRFdmVudDtcclxuICAgIGlmIChndWlUcmlnZ2VyZWRFdmVudCkge1xyXG4gICAgICB0aGlzLl9wcmlvcml0eSA9IFByaW9yaXR5LkxPVztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZsZFJlZlwiPmEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xMShmbGRSZWY6IEd1aUZpZWxkQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fZXZlbnRGbGQgPSBmbGRSZWY7XHJcbiAgICB0aGlzLmluaXQoKGZsZFJlZiAhPT0gbnVsbCkgPyAoPFRhc2tCYXNlPmZsZFJlZi5nZXRUYXNrKCkpIDogbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsUmVmXCI+YSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgb24gd2hpY2ggdGhlIGV2ZW50IG9jY3VyZWQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImxpbmVcIj50aGUgbGluZSBvZiB0aGUgdGFibGUgaW4gd2hpY2ggdGhlIGNvbnRyb2wgaXMgbG9jYXRlZCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMTIoY3RybFJlZjogTWdDb250cm9sQmFzZSwgbGluZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzcoY3RybFJlZik7XHJcbiAgICB0aGlzLl9kaXNwbGF5TGluZSA9IGxpbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEzKGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGxpbmU6IG51bWJlciwgZ3VpVHJpZ2dlcmVkRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfOChjdHJsUmVmLCBndWlUcmlnZ2VyZWRFdmVudCk7XHJcbiAgICB0aGlzLl9kaXNwbGF5TGluZSA9IGxpbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzE0KGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGNvbnRyb2xzTGlzdDogTGlzdDxNZ0NvbnRyb2xCYXNlPiwgZ3VpVHJpZ2dlcmVkRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfOChjdHJsUmVmLCBndWlUcmlnZ2VyZWRFdmVudCk7XHJcbiAgICB0aGlzLl9jb250cm9sc0xpc3QgPSBjb250cm9sc0xpc3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzE1KGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGRpcmVjdGlvbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzgoY3RybFJlZiwgdHJ1ZSk7XHJcbiAgICB0aGlzLl9kaXJlY3Rpb24gPSBkaXJlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzE2KGN0cmxSZWY6IE1nQ29udHJvbEJhc2UgKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzgoY3RybFJlZiwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUiAtIGNyZWF0ZXMgYSBuZXcgcnVuIHRpbWUgZXZlbnQgYnkgY29weWluZyB0aGUgbWVtYmVyIHZhcmlhYmxlcyBvZiBhIGdpdmVuXHJcbiAgLy8vICAgZXZlbnQgYW5kIHRoZSBtZW1iZXIgdmFyaWFibGVzIG9mIGEgZ2l2ZW4gcnVuIHRpbWUgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZXZ0XCI+YSByZWZlcmVuY2UgdG8gdGhlIGV2ZW50IHRvIGJlIHVzZWQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJ0RXZ0XCI+YSByZWZlcmVuY2UgdG8gdGhlIHJ1biB0aW1lIGV2ZW50IHRvIGJlIHVzZWQgPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzE3KCBydEV2dDogUnVuVGltZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrVGFnID0gcnRFdnQuX3Rhc2tUYWc7XHJcbiAgICB0aGlzLl90YXNrID0gcnRFdnQuX3Rhc2s7XHJcbiAgICB0aGlzLkNvbnRyb2wgPSBydEV2dC5Db250cm9sO1xyXG4gICAgdGhpcy5fZXZlbnRGbGQgPSBydEV2dC5fZXZlbnRGbGQ7XHJcbiAgICB0aGlzLl9tZ2RJZCA9IHJ0RXZ0Ll9tZ2RJZDtcclxuICAgIHRoaXMuX2Rpc3BsYXlMaW5lID0gcnRFdnQuX2Rpc3BsYXlMaW5lO1xyXG4gICAgdGhpcy5fcmV2ZXJzaWJsZUV4aXQgPSBydEV2dC5fcmV2ZXJzaWJsZUV4aXQ7XHJcbiAgICB0aGlzLl9hcmdMaXN0ID0gcnRFdnQuX2FyZ0xpc3Q7XHJcbiAgICB0aGlzLl9pbW1lZGlhdGUgPSBydEV2dC5faW1tZWRpYXRlO1xyXG4gICAgdGhpcy5fbXByZ0NyZWF0b3IgPSBydEV2dC5fbXByZ0NyZWF0b3I7XHJcbiAgICB0aGlzLl9wcmlvcml0eSA9IHJ0RXZ0Ll9wcmlvcml0eTtcclxuICAgIHRoaXMuX2d1aVRyaWdnZXJlZEV2ZW50ID0gcnRFdnQuX2d1aVRyaWdnZXJlZEV2ZW50O1xyXG4gICAgdGhpcy5faXNJZGxlVGltZXIgPSBydEV2dC5faXNJZGxlVGltZXI7XHJcbiAgICB0aGlzLl92YWwgPSBydEV2dC5fdmFsO1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uU3RhcnQgPSBydEV2dC5fc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb25FbmQgPSBydEV2dC5fc2VsZWN0aW9uRW5kO1xyXG4gICAgdGhpcy5fY29udHJvbHNMaXN0ID0gcnRFdnQuX2NvbnRyb2xzTGlzdDtcclxuICAgIHRoaXMuX2RpcmVjdGlvbiA9IHJ0RXZ0Ll9kaXJlY3Rpb247XHJcbiAgICB0aGlzLl9kb3ROZXRPYmplY3QgPSBydEV2dC5fZG90TmV0T2JqZWN0O1xyXG4gICAgdGhpcy5MYXN0Rm9jdXNlZFZhbCA9IHJ0RXZ0Lkxhc3RGb2N1c2VkVmFsO1xyXG4gICAgdGhpcy5fcm91dGVQYXJhbXMgPSBydEV2dC5fcm91dGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGltcGxlbWVudGluZyBjb21wYXJhdG9yLCB0aGUgZXZlbnRzIGFyZSBjb21wYXJlZCBieSBwcmlvcml0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgQ29tcGFyZVRvKG9iajogYW55KTogbnVtYmVyIHtcclxuICAgIGxldCBvdGhlclRpbWVFdmVudDogUnVuVGltZUV2ZW50ID0gPFJ1blRpbWVFdmVudD5vYmo7XHJcbiAgICBsZXQgb3RoZXJQcmlvcml0eTogUHJpb3JpdHkgPSBvdGhlclRpbWVFdmVudC5fcHJpb3JpdHk7XHJcbiAgICBsZXQgcmVzdWx0OiBudW1iZXIgPSBvdGhlclByaW9yaXR5IC0gdGhpcy5fcHJpb3JpdHk7XHJcbiAgICBpZiAocmVzdWx0ID09PSAwKVxyXG4gICAgICByZXN1bHQgPSA8bnVtYmVyPih0aGlzLl90aW1lc3RhbXAgLSBvdGhlclRpbWVFdmVudC5fdGltZXN0YW1wKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIHJlcGxpY2Egb2YgdGhpcyBydW50aW1lIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZXBsaWNhdGUoKTogUnVuVGltZUV2ZW50IHtcclxuICAgIGxldCBydW5UaW1lRXZlbnQ6IFJ1blRpbWVFdmVudCA9IG5ldyBSdW5UaW1lRXZlbnQodGhpcyk7XHJcbiAgICBydW5UaW1lRXZlbnQuc2V0VGltZXN0YW1wKCk7XHJcbiAgICByZXR1cm4gcnVuVGltZUV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGEgaGVscGVyIG1ldGhvZCB0aGF0IGRvZXMgc29tZSBjb21tb24gaW5pdGlhbGl6YXRpb24gZm9yIHNvbWUgb2YgdGhlIGNvbnN0cnVjdG9yc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpbml0KHRhc2tSZWY6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrID0gKHRhc2tSZWYgfHwgKDxNR0RhdGE+QWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLmdldEN1cnJNR0RhdGEoKSkuZ2V0Rmlyc3RUYXNrKCkpO1xyXG4gICAgdGhpcy5fdGFza1RhZyA9ICgodGhpcy5fdGFzayA9PT0gbnVsbCkgPyBcIlwiIDogdGhpcy5fdGFzay5nZXRUYXNrVGFnKCkpO1xyXG4gICAgdGhpcy5fbXByZ0NyZWF0b3IgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGNvbnZlcnRzIHBhcmFtZXRlcnMgdG8gYXJndW1lbnQgbGlzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29udmVydFBhcmFtc1RvQXJncygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FyZ0xpc3QgPSBuZXcgQXJndW1lbnRzTGlzdCgpO1xyXG4gICAgdGhpcy5fYXJnTGlzdC5idWlsZExpc3RGcm9tUGFyYW1zKHRoaXMuX3BhcmFtZXRlcnMsIHRoaXMuX3BhcmFtQXR0cnMsIHRoaXMuX3BhcmFtVmFscywgdGhpcy5fcGFyYW1OdWxscyk7XHJcbiAgICB0aGlzLl9wYXJhbWV0ZXJzID0gMDtcclxuICAgIHRoaXMuX3BhcmFtQXR0cnMgPSBudWxsO1xyXG4gICAgdGhpcy5fcGFyYW1WYWxzID0gbnVsbDtcclxuICAgIHRoaXMuX3BhcmFtTnVsbHMgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgdGFza1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0VGFzaygpOiBUYXNrQmFzZSB7XHJcbiAgICBzdXBlci5maW5kVXNlckV2ZW50KCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYVRhc2tcIj4tIHJlZmVyZW5jZSB0byBhIHRhc2s8L3BhcmFtPlxyXG4gIHNldFRhc2sodGFza1JlZjogVGFza0Jhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Rhc2sgPSB0YXNrUmVmO1xyXG5cclxuICAgIGlmICh0aGlzLl90YXNrICE9PSBudWxsKVxyXG4gICAgICB0aGlzLl90YXNrVGFnID0gdGhpcy5fdGFzay5nZXRUYXNrVGFnKCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX3Rhc2tUYWcgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIFRpbWVyIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNlY29uZHNcIj50aGUgbnVtYmVyIG9mIHNlY29uZHMgZm9yIHRoaXMgZXZlbnRzPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm51bWJlclduZFwiPnRoZSBtZ2RhdGEgSUQgZm9yIHRoZSBldmVudDwvcGFyYW0+XHJcbiAgc2V0VGltZXIoc2VjOiBudW1iZXIsIG1nZElEOiBudW1iZXIsIGlzSWRsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fdHlwZSA9IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfVElNRVIgLyonVCcqLztcclxuICAgIHRoaXMuX3NlY29uZHMgPSBzZWM7XHJcbiAgICB0aGlzLl9tZ2RJZCA9IG1nZElEO1xyXG4gICAgdGhpcy5faXNJZGxlVGltZXIgPSBpc0lkbGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgbGluZSBpbiB0YWJsZSBvZiBjb250cm9sIGluIGEgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxpbmUgbnVtYmVyPC9yZXR1cm5zPlxyXG4gIGdldERpc3BsYXlMaW5lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzcGxheUxpbmU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IG51bWJlciBvZiB3aW5kb3cgKGZvciB0aW1lciBldmVudHMpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRNZ2RJRCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX21nZElkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgYnJlYWsgbGV2ZWwgb2YgRXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldEJya0xldmVsKCk6IHN0cmluZztcclxuICBnZXRCcmtMZXZlbChmbG93TW9uaXRvcjogYm9vbGVhbik6IHN0cmluZztcclxuICBnZXRCcmtMZXZlbChmbG93TW9uaXRvcj86IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnJrTGV2ZWxfMDAoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdldEJya0xldmVsXzAxKGZsb3dNb25pdG9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QnJrTGV2ZWxfMDAoKTogc3RyaW5nIHtcclxuICAgIGxldCBsZXZlbDogc3RyaW5nID0gc3VwZXIuZ2V0QnJrTGV2ZWwoKTtcclxuICAgIGlmICh0aGlzLl90eXBlID09PSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX0lOVEVSTkFMKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5JbnRlcm5hbEV2ZW50KSB7XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9QUkVGSVg6XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9TVUZGSVg6XHJcbiAgICAgICAgY2FzZSBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfQ1RSTF9WRVJJRklDQVRJT046XHJcbiAgICAgICAgICBsZXZlbCArPSB0aGlzLkNvbnRyb2wuTmFtZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX1ZBUklBQkxFOlxyXG4gICAgICAgICAgbGV2ZWwgKz0gdGhpcy5fZXZlbnRGbGQuZ2V0VmFyTmFtZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsZXZlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QnJrTGV2ZWxfMDEoZmxvd01vbml0b3I6IGJvb2xlYW4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN1cGVyLmdldEJya0xldmVsKGZsb3dNb25pdG9yKTtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgbmV3IGNvbnRyb2wgZm9yIHRoZSBydW50aW1lIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld0N0cmxcIj5hIHJlZmVyZW5jZSB0byB0aGUgbmV3IGNvbnRyb2wgPC9wYXJhbT5cclxuICBzZXRDdHJsKG5ld0N0cmw6IE1nQ29udHJvbEJhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX2N0cmwgPSBuZXdDdHJsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgcmV2ZXJzaWJsZSBleGl0IGZsYWcgdG8gZmFsc2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldE5vblJldmVyc2libGVFeGl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmV2ZXJzaWJsZUV4aXQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmV2ZXJzaWJsZSBleGl0IGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHJldmVyc2libGVFeGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JldmVyc2libGVFeGl0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGJ1aWxkIFhNTCBFdmVudCBzdHJpbmcgZm9yIFNlcnZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHVibGljIGJ1aWxkWE1MKG1lc3NhZ2U6IFN0cmluZ0J1aWxkZXIpOiB2b2lkIHtcclxuICAgIG1lc3NhZ2UuQXBwZW5kKFwiXFxuICAgXCIgKyBYTUxDb25zdGFudHMuVEFHX09QRU4gKyBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQpO1xyXG5cclxuICAgIGlmICh0aGlzLl90eXBlICE9PSBDaGFyLk1pblZhbHVlKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRVZFTlRUWVBFICsgXCI9XFxcIlwiICsgdGhpcy5fdHlwZSArIFwiXFxcIlwiKTtcclxuXHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9TWVNURU0gJiYgdGhpcy5rYmRJdG0gIT0gbnVsbCkge1xyXG4gICAgICBsZXQgbW9kaWZpZXI6IE1vZGlmaWVycyA9IHRoaXMua2JkSXRtLmdldE1vZGlmaWVyKCk7XHJcbiAgICAgIGlmIChtb2RpZmllciAhPT0gTW9kaWZpZXJzLk1PRElGSUVSX05PTkUpXHJcbiAgICAgICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBDb25zdEludGVyZmFjZS5NR19BVFRSX01PRElGSUVSICsgXCI9XFxcIlwiICsgbW9kaWZpZXIgKyBcIlxcXCJcIik7XHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9LRVlDT0RFICsgXCI9XFxcIlwiICsgdGhpcy5rYmRJdG0uZ2V0S2V5Q29kZSgpICsgXCJcXFwiXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuSW50ZXJuYWxFdmVudCAhPT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9JTlRFUk5BTEVWRU5UICsgXCI9XFxcIlwiICsgdGhpcy5JbnRlcm5hbEV2ZW50ICsgXCJcXFwiXCIpO1xyXG4gICAgaWYgKHRoaXMuX3NlY29uZHMgIT09IEludDMyLk1pblZhbHVlKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU0VDT05EUyArIFwiPVxcXCJcIiArIHRoaXMuX3NlY29uZHMgKyBcIlxcXCJcIik7XHJcbiAgICBpZiAodGhpcy5FeHAgIT0gbnVsbClcclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBYTUxDb25zdGFudHMuTUdfQVRUUl9FWFAgKyBcIj1cXFwiXCIgKyB0aGlzLkV4cC5nZXRJZCgpICsgXCJcXFwiXCIpO1xyXG4gICAgaWYgKHRoaXMuX2ZvcmNlRXhpdCAhPT0gRm9yY2VFeGl0Lk5vbmUpXHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgWE1MQ29uc3RhbnRzLk1HX0FUVFJfRVhQICsgXCI9XFxcIlwiICsgPHN0cmluZz50aGlzLl9mb3JjZUV4aXQgKyBcIlxcXCJcIik7XHJcbiAgICBpZiAodGhpcy5Vc2VyRXZ0ICE9IG51bGwpXHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSICsgXCI9XFxcIlwiICsgdGhpcy5Vc2VyRXZ0VGFza1RhZyArIFwiLFwiICsgdGhpcy5fdXNlckV2dElkeCArIFwiXFxcIlwiKTtcclxuXHJcbiAgICBtZXNzYWdlLkFwcGVuZChYTUxDb25zdGFudHMuVEFHX1RFUk0pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgYXJnTGlzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgYXJnTGlzdDwvcmV0dXJucz5cclxuICBnZXRBcmdMaXN0KCk6IEFyZ3VtZW50c0xpc3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FyZ0xpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBhcmdMaXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFBcmdMaXN0XCI+PC9wYXJhbT5cclxuICBzZXRBcmdMaXN0KGFBcmdMaXN0OiBBcmd1bWVudHNMaXN0KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gdGhpcy5fYXJnTGlzdCA9PT0gbnVsbDtcclxuICAgIHRoaXMuX2FyZ0xpc3QgPSBhQXJnTGlzdDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBhcmdMaXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFBcmdMaXN0XCI+PC9wYXJhbT5cclxuICBzZXRSb3V0ZVBhcmFtTGlzdChyb3V0ZVBhcmFtczogTGlzdDxhbnk+KTogdm9pZCB7XHJcbiAgICB0aGlzLl9yb3V0ZVBhcmFtcyA9IHJvdXRlUGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91dGVQYXJhbUxpc3QoKTogTGlzdDxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9yb3V0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSB2YWx1ZSB0byB0aGUgaW1tZWRpYXRlIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+dGhlIHZhbHVlIHRvIHVzZTwvcGFyYW0+XHJcbiAgc2V0SW1tZWRpYXRlKHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5faW1tZWRpYXRlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbW1lZGlhdGUgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNJbW1lZGlhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW1tZWRpYXRlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIHdoaWNoIGlzIFwicmVzcG9uc2libGVcIiBmb3IgYSBtYWluIHByb2dyYW0gdG8gYmVjb21lIGFjdGl2ZS5cclxuICAvLy8gICBGb3IgZXhhbXBsZTogaWYgdGFzayBBIGNhbGxzIHRhc2sgQiBhbmQgQidzIGN0bElkeCBpcyBkaWZmZXJlbnQgdGhhbiBBJ3MsIHRoZW4gQidzIG1haW5cclxuICAvLy8gICBwcm9ncmFtIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgdGFzayBoaXJhcmNoeSB0aHVzIEIgaXMgXCJyZXNwb25zaWJsZVwiIGZvciB0aGUgbWFpbiBwcmcuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNyY1wiPnRoZSBcInJlc3BvbnNpYmxlXCIgdGFzay48L3BhcmFtPlxyXG4gIHNldE1haW5QcmdDcmVhdG9yKHNyYzogVGFza0Jhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX21wcmdDcmVhdG9yID0gc3JjO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgdGFzayB3aGljaCBpcyBcInJlc3BvbnNpYmxlXCIgZm9yIGEgbWFpbiBwcm9ncmFtJ3MgZXhlY3V0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBcInJlc3BvbnNpYmxlXCIgdGFzay48L3JldHVybnM+XHJcbiAgZ2V0TWFpblByZ0NyZWF0b3IoKTogVGFza0Jhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX21wcmdDcmVhdG9yO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBpc1JlYWxSZWZyZXNoIGZsYWcgdG8gYSBnaXZlbiB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0SXNSZWFsUmVmcmVzaCh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzUmVhbFJlZnJlc2ggPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdHlwZSBvZiBhIHJlZnJlc2ggZXZlbnQgdHJ1ZSBpcyByZWFsIHJlZnJlc2ggZS5pLiBvbmUgaW52b2tlZCBkaXJlY3RsbHkgYnkgdGhlIHVzZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFJlZnJlc2hUeXBlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzUmVhbFJlZnJlc2g7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgbWFyayB0aGUgZXZlbnQgYXMgYW4gZXZlbnQgd2hpY2ggd2FzIGNyZWF0ZWQgYnkgdGhlIHNlcnZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgc2V0RnJvbVNlcnZlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Zyb21TZXJ2ZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIG1hcmsgdGhlIGV2ZW50IGFzIGFuIGV2ZW50IHdoaWNoIHdhcyBub3QgY3JlYXRlZCBieSB0aGUgc2VydmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZXNldEZyb21TZXJ2ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mcm9tU2VydmVyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHJldHVybnM+IGFuIGluZGljYXRpb24gd2hlYXRoZXIgdGhlIHNlcnZlciBjcmVhdGVkIHRoaXMgZXZlbnRcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGlzRnJvbVNlcnZlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9mcm9tU2VydmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBhbiBpbmRpY2F0aW9uIHdoZWF0aGVyIHRoZSBldmVudCBpcyBhIHBhcnQgb2YgcXVpdCBwcm9jZXNzXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBpc1F1aXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRTdWJUeXBlID09PSBFdmVudFN1YlR5cGUuQ2FuY2VsSXNRdWl0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEluZGljYXRlcyB0aGF0IHdlIGRvIG5vdCB3YW50IHRoZSBNR19BQ1RfQ0FOQ0VMIHRvIHBlcmZvcm0gcm9sbGJhY2suXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIFJvbGxiYWNrSW5DYW5jZWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRTdWJUeXBlICE9PSBFdmVudFN1YlR5cGUuQ2FuY2VsV2l0aE5vUm9sbGJhY2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICB3aGlsZSBleGl0IHRoZSB0YXNrIGR1ZSBlcnJvciAoY2FuIGJlIG9uIGFueSBlcnJvciBpbiBkYXRhYmFzZSBpbiBub24gaW50ZXJhY3RpdmUpXHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBFeGl0RHVlVG9FcnJvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ldmVudFN1YlR5cGUgPT09IEV2ZW50U3ViVHlwZS5FeGl0RHVlVG9FcnJvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBJbmRpY2F0ZXMgdGhhdCB3ZSBkbyBub3Qgd2FudCB0aGUgTUdfQUNUX0NBTkNFTCB0byBwZXJmb3JtIHJvbGxiYWNrLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBSdFZpZXdSZWZyZXNoVXNlQ3VycmVudFJvdygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ldmVudFN1YlR5cGUgPT09IEV2ZW50U3ViVHlwZS5SdFJlZnJlc2hWaWV3VXNlQ3VycmVudFJvdztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHN1YiBldmVudCB0eXBlICh1c2UgZm9yIGNhbmNlbCAmIHJ0X3ZpZXdfcmVmcmVzaCBhY3Rpb24pXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBTZXRFdmVudFN1YlR5cGUoZXZlbnRTdWJUeXBlOiBFdmVudFN1YlR5cGUpOiB2b2lkIHtcclxuICAgIHRoaXMuX2V2ZW50U3ViVHlwZSA9IGV2ZW50U3ViVHlwZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIEZpZWxkQmFzZSB3aG9zZSBjaGFuZ2UgdHJpZ2dlcmVkIHRoaXMgZXZlbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz5yZWZlcmVuY2UgdG8gdGhlIGZpZWxkIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudDwvcmV0dXJucz5cclxuICBnZXRGbGQoKTogR3VpRmllbGRCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9ldmVudEZsZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHdWkgRXZlbnQgLSBldmVudCB0aGF0IHdlcmUgYWRkZWQgYnkgR3VpIExheWVyLCBsaWtlIGNsaWNrLCB0aW1lciwgZWN0XHJcbiAgLy8vICAgRm9yIGFsbCB0aGlzIGV2ZW50IHRoZSBwcmlvcml0eSBpcyBsb3dcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdHJ1ZSBmb3IgR1VJIEV2ZW50cyA8L3JldHVybnM+XHJcbiAgaXNHdWlUcmlnZ2VyZWRFdmVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ndWlUcmlnZ2VyZWRFdmVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gcHJpb3JpdHkgPC9yZXR1cm5zPlxyXG4gIGdldFByaW9yaXR5KCk6IFByaW9yaXR5IHtcclxuICAgIHJldHVybiB0aGlzLl9wcmlvcml0eTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHByaW9yaXR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByaW9yaXR5XCI+IDwvcGFyYW0+XHJcbiAgc2V0UHJpb3JpdHkocHJpb3JpdHk6IFByaW9yaXR5KTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcmlvcml0eSA9IHByaW9yaXR5O1xyXG4gIH1cclxuXHJcbiAgaXNJZGxlVGltZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNJZGxlVGltZXI7XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHZhbDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWwgPSB2YWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0U3RhcnRTZWxlY3Rpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25TdGFydDtcclxuICB9XHJcblxyXG4gIGdldEVuZFNlbGVjdGlvbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbkVuZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHNldEVkaXRQYXJtc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGFydFwiPnN0YXJ0IHNlbGVjdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJlbmRcIj5lbmQgc2VsZWN0aW9uPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRleHRcIj50aGUgdGV4dCBiZWluZyB3cml0dGVuPC9wYXJhbT5cclxuICBzZXRFZGl0UGFybXMoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcclxuICAgIHRoaXMuX3NlbGVjdGlvbkVuZCA9IGVuZDtcclxuICAgIHRoaXMuc2V0VmFsdWUodGV4dCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGZvciBwcm9kdWNlQ2xpY2sgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc1Byb2R1Y2VDbGljaygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9kdWNlQ2xpY2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHByb2R1Y2UgY2xpY2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvZHVjZUNsaWNrXCI+PC9wYXJhbT5cclxuICBzZXRQcm9kdWNlQ2xpY2socHJvZHVjZUNsaWNrOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9kdWNlQ2xpY2sgPSBwcm9kdWNlQ2xpY2s7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB0aGUgYWN0aW9uIGxpc3QgdG8gZW5hYmxlL2Rpc2FibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0QWN0RW5hYmxlTGlzdCgpOiBudW1iZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0RW5hYmxlTGlzdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gc2VuZCBhbGwgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBpc1NlbmRBbGwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VuZEFsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgc2VuZGFsbCBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInNlbmRBbGxcIj4gPC9wYXJhbT5cclxuICBzZXRTZW5kQWxsKHNlbmRBbGw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbmRBbGwgPSBzZW5kQWxsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENoZWNrIGlmIHRoaXMgZXZlbnQgaXMgYmxvY2tlZCBieSB0aGUgY3VycmVudGx5IGFjdGl2ZSB3aW5kb3cuIElmIHRoZVxyXG4gIC8vLyAgIGN1cnJlbnQgd2luZG93IGlzIG1vZGFsLCBhbmQgdGhlIGV2ZW50IGRlZmluZWQgaW4gb25lIG9mIGl0cyBhbmNlc3RvcnMsXHJcbiAgLy8vICAgdGhlIGV2ZW50IHNob3VsZCBub3QgYmUgZXhlY3V0ZWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFjdGl2ZVdpbmRvd0RhdGFcIj5UaGUgTUdEYXRhIG9iamVjdCBkZXNjcmliaW5nIHRoZSBjdXJyZW50bHkgYWN0aXZlIHdpbmRvdy48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz5cclxuICAvLy8gICBUaGUgbWV0aG9kIHJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudGx5IGFjdGl2ZSB3aW5kb3cgaXMgbW9kYWwgaXMgYVxyXG4gIC8vLyAgIGRlc2NlbmRhbnQgb2YgdGhlIGV2ZW50J3MgdGFzay4gT3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuXHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBwdWJsaWMgaXNCbG9ja2VkQnlNb2RhbFdpbmRvdyhhY3RpdmVXaW5kb3dEYXRhOiBNR0RhdGEpOiBib29sZWFuIHtcclxuICAgIGlmIChhY3RpdmVXaW5kb3dEYXRhLklzTW9kYWwpIHtcclxuICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgZXZlbnQncyB0YXNrIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBhY3RpdmUgd2luZG93J3MgdGFzay5cclxuICAgICAgbGV0IGV2ZW50VGFzazogVGFza0Jhc2UgPSB0aGlzLmdldFRhc2soKTtcclxuICAgICAgbGV0IGJhc2VUYXNrOiBUYXNrQmFzZSA9IGFjdGl2ZVdpbmRvd0RhdGEuZ2V0VGFzaygwKTtcclxuICAgICAgaWYgKGV2ZW50VGFzayAhPT0gYmFzZVRhc2sgJiYgYmFzZVRhc2suaXNEZXNjZW5kZW50T2YoZXZlbnRUYXNrKSlcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gTlN0cmluZy5Gb3JtYXQoXCJ7e1JURXZlbnQgezB9ICh7MX0pLCB0eXBlIHsyfXszfX19XCIsIFtcclxuICAgICAgdGhpcy5nZXRCcmtMZXZlbCgpLCB0aGlzLkludGVybmFsRXZlbnQsIHRoaXMuX3R5cGUsICh0aGlzLl90YXNrID09PSBudWxsKSA/IFwiXCIgOiAoXCIgb24gXCIgKyB0aGlzLl90YXNrKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVuVGltZUV2ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ldmVudC9SdW5UaW1lRXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RixPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDakcsT0FBTyxFQUFDLFlBQVksRUFBa0IsYUFBYSxFQUFFLFNBQVMsRUFBWSxhQUFhLEdBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3RDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSzdDLE1BQU0sT0FBTyxZQUFhLFNBQVEsZ0JBQWdCO0lBTXhDLGFBQWEsR0FBd0IsSUFBSSxDQUFDO0lBQzFDLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsWUFBWSxHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFFdEMsYUFBYSxHQUFpQixZQUFZLENBQUMsTUFBTSxDQUFDO0lBRWxELGNBQWMsR0FBYSxJQUFJLENBQUM7SUFDaEMsUUFBUSxHQUFrQixJQUFJLENBQUM7SUFDL0IsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFDNUIsYUFBYSxHQUFRLElBQUksQ0FBQztJQUMxQixTQUFTLEdBQWlCLElBQUksQ0FBQztJQUMvQixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUNwQyxVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLFlBQVksR0FBWSxLQUFLLENBQUM7SUFDOUIsY0FBYyxHQUFZLElBQUksQ0FBQztJQUMvQixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLFlBQVksR0FBYyxJQUFJLENBQUM7SUFJL0IsWUFBWSxHQUFhLElBQUksQ0FBQztJQUU5QixTQUFTLEdBQWEsUUFBUSxDQUFDLElBQUksQ0FBQztJQUVwQyxhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLGVBQWUsR0FBWSxJQUFJLENBQUM7SUFFaEMsYUFBYSxHQUFXLENBQUMsQ0FBQztJQUMxQixlQUFlLEdBQVcsQ0FBQyxDQUFDO0lBQzVCLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDMUIsS0FBSyxHQUFhLElBQUksQ0FBQztJQUN2QixRQUFRLEdBQVcsSUFBSSxDQUFDO0lBQ3hCLElBQUksR0FBUSxJQUFJLENBQUM7SUFDakIsaUJBQWlCLEdBQVksS0FBSyxDQUFDO0lBRTNDLElBQUksZ0JBQWdCLENBQUMsS0FBYztRQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBb0I7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBTUQsc0JBQXNCLEdBQVksS0FBSyxDQUFDO0lBRXhDLGNBQWMsR0FBbUIsSUFBSSxDQUFDO0lBRXRDLElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFnQkQsWUFBWSxzQ0FBMkMsRUFBRSwyRkFBaUcsRUFBRSxrRkFBd0YsRUFBRSxTQUFrQixFQUFFLEtBQWMsRUFBRSxNQUFlO1FBQ3ZTLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxzQ0FBc0MsWUFBWSxRQUFRLENBQUM7WUFDM0ksSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2FBRXhELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsS0FBSyxJQUFJLElBQUksc0NBQXNDLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQywyRkFBMkYsS0FBSyxJQUFJLElBQUksMkZBQTJGLFlBQVksYUFBYSxDQUFDO1lBQ2xYLElBQUksQ0FBQyxhQUFhLENBQUMsc0NBQXNDLEVBQUUsMkZBQTJGLENBQUMsQ0FBQzthQUVySixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEtBQUssSUFBSSxJQUFJLHNDQUFzQyxZQUFZLGFBQWEsQ0FBQztZQUNySixJQUFJLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7YUFFeEQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxzQ0FBc0MsWUFBWSxhQUFhLENBQUMsSUFBSSxDQUFDLDJGQUEyRixLQUFLLElBQUksSUFBSSwyRkFBMkYsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDO1lBQ3RYLElBQUksQ0FBQyxhQUFhLENBQUMsc0NBQXNDLEVBQUUsMkZBQTJGLENBQUMsQ0FBQzthQUVySixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEtBQUssSUFBSSxJQUFJLHNDQUFzQyxZQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMsMkZBQTJGLEtBQUssSUFBSSxJQUFJLDJGQUEyRixDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLGtGQUFrRixLQUFLLElBQUksSUFBSSxrRkFBa0YsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDO1lBQ3JrQixJQUFJLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxFQUFFLDJGQUEyRixFQUFFLGtGQUFrRixDQUFDLENBQUM7YUFFek8sSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxzQ0FBc0MsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLDJGQUEyRixLQUFLLElBQUksSUFBSSwyRkFBMkYsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDO1lBQ2pYLElBQUksQ0FBQyxjQUFjLENBQUMsc0NBQXNDLEVBQUUsMkZBQTJGLENBQUMsQ0FBQzthQUV0SixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEtBQUssSUFBSSxJQUFJLHNDQUFzQyxZQUFZLFlBQVksQ0FBQztZQUNwSixJQUFJLENBQUMsY0FBYyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7YUFFekQsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxzQ0FBc0MsWUFBWSxhQUFhLENBQUMsSUFBSSxDQUFDLDJGQUEyRixLQUFLLElBQUksSUFBSSwyRkFBMkYsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDO1lBQ3JYLElBQUksQ0FBQyxjQUFjLENBQUMsc0NBQXNDLEVBQUUsMkZBQTJGLENBQUMsQ0FBQzthQUV0SixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEtBQUssSUFBSSxJQUFJLHNDQUFzQyxZQUFZLGFBQWEsQ0FBQyxJQUFJLENBQUMsMkZBQTJGLEtBQUssSUFBSSxJQUFJLDJGQUEyRixDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLGtGQUFrRixLQUFLLElBQUksSUFBSSxrRkFBa0YsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDO1lBQ3BrQixJQUFJLENBQUMsY0FBYyxDQUFDLHNDQUFzQyxFQUFFLDJGQUEyRixFQUFFLGtGQUFrRixDQUFDLENBQUM7YUFFMU8sSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxzQ0FBc0MsWUFBWSxhQUFhLENBQUMsSUFBSSxDQUFDLDJGQUEyRixLQUFLLElBQUksSUFBSSwyRkFBMkYsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGtGQUFrRixLQUFLLElBQUksSUFBSSxrRkFBa0YsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDO1lBQzdqQixJQUFJLENBQUMsY0FBYyxDQUFDLHNDQUFzQyxFQUFFLDJGQUEyRixFQUFFLGtGQUFrRixDQUFDLENBQUM7YUFFMU8sSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxzQ0FBc0MsWUFBWSxhQUFhLENBQUMsSUFBSSxDQUFDLDJGQUEyRixLQUFLLElBQUksSUFBSSwyRkFBMkYsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxrRkFBa0YsS0FBSyxJQUFJLElBQUksa0ZBQWtGLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQztZQUNua0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQ0FBc0MsRUFBRSwyRkFBMkYsQ0FBQyxDQUFDO2FBRXRKLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsc0NBQXNDLENBQUMsQ0FBQzthQUV6RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEtBQUssSUFBSSxJQUFJLHNDQUFzQyxZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsMkZBQTJGLEtBQUssSUFBSSxJQUFJLDJGQUEyRixZQUFZLFlBQVksQ0FBQyxFQUFFO1lBRWhYLEtBQUssQ0FBQyxhQUFhLENBQUMsc0NBQXNDLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsY0FBYyxDQUFFLDJGQUEyRixDQUFDLENBQUM7U0FDbkg7YUFFSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLHNDQUFzQyxZQUFZLFlBQVk7WUFDL0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztJQUVoRSxDQUFDO0lBTU8sYUFBYSxDQUFDLE9BQWlCO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQU9PLGFBQWEsQ0FBQyxPQUFpQixFQUFFLE9BQXNCO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQU1PLGFBQWEsQ0FBQyxPQUFzQjtRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQ3pEO1lBRUUsSUFBSSxJQUFJLEdBQWEsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2xGLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtnQkFDakIsSUFBSSxTQUFTLEdBQWMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFDbEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQVksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDbEU7U0FDRjtJQUNILENBQUM7SUFPTyxhQUFhLENBQUMsT0FBc0IsRUFBRSxpQkFBMEI7UUFDdEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7UUFDNUMsSUFBSSxpQkFBaUIsRUFBRTtZQUdyQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBT08sYUFBYSxDQUFDLE9BQXNCLEVBQUUsaUJBQTBCLEVBQUUsc0JBQStCO1FBQ3ZHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDO0lBQ3ZELENBQUM7SUFPTyxjQUFjLENBQUMsT0FBaUIsRUFBRSxpQkFBMEI7UUFDbEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUM7UUFDNUMsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBTU8sY0FBYyxDQUFDLE1BQW9CO1FBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFZLE1BQU0sQ0FBQyxPQUFPLEVBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQU9PLGNBQWMsQ0FBQyxPQUFzQixFQUFFLElBQVk7UUFDekQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQXNCLEVBQUUsSUFBWSxFQUFFLGlCQUEwQjtRQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBc0IsRUFBRSxZQUFpQyxFQUFFLGlCQUEwQjtRQUMxRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBc0IsRUFBRSxTQUFpQjtRQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQXNCO1FBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFRTyxjQUFjLENBQUUsS0FBbUI7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ3pDLENBQUM7SUFNRCxTQUFTLENBQUMsR0FBUTtRQUNoQixJQUFJLGNBQWMsR0FBK0IsR0FBRyxDQUFDO1FBQ3JELElBQUksYUFBYSxHQUFhLGNBQWMsQ0FBQyxTQUFTLENBQUM7UUFDdkQsSUFBSSxNQUFNLEdBQVcsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEQsSUFBSSxNQUFNLEtBQUssQ0FBQztZQUNkLE1BQU0sR0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFLRCxTQUFTO1FBQ1AsSUFBSSxZQUFZLEdBQWlCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBS08sSUFBSSxDQUFDLE9BQWlCO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxPQUFPLElBQWEsWUFBWSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFLRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFLRCxPQUFPO1FBQ0wsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBTUQsT0FBTyxDQUFDLE9BQWlCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQzs7WUFFeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQU9ELFFBQVEsQ0FBQyxHQUFXLEVBQUUsS0FBYSxFQUFFLE1BQWU7UUFDbEQsSUFBSSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQVM7UUFDckQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7SUFDN0IsQ0FBQztJQU9ELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUtELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQU9ELFdBQVcsQ0FBQyxXQUFxQjtRQUMvQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksS0FBSyxHQUFXLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLG1CQUFtQixFQUFFO1lBQ3JELFFBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDMUIsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDMUMsS0FBSyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDMUMsS0FBSyxpQkFBaUIsQ0FBQyx3QkFBd0I7b0JBQzdDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDM0IsTUFBTTtnQkFDUixLQUFLLGlCQUFpQixDQUFDLGVBQWU7b0JBQ3BDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNyQyxNQUFNO2FBQ1Q7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGNBQWMsQ0FBQyxXQUFvQjtRQUN6QyxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQU1ELE9BQU8sQ0FBQyxPQUFzQjtRQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUN2QixDQUFDO0lBS0Qsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFLRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFLTSxRQUFRLENBQUMsT0FBc0I7UUFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFOUUsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVyRixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQzFFLElBQUksUUFBUSxHQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEQsSUFBSSxRQUFRLEtBQUssU0FBUyxDQUFDLGFBQWE7Z0JBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxlQUFlLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7U0FDaEc7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLFFBQVE7WUFDdkMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLHFCQUFxQixHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pHLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUTtZQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsZUFBZSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJO1lBQ2xCLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxXQUFXLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkYsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxJQUFJO1lBQ3BDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQyxXQUFXLEdBQUcsS0FBSyxHQUFXLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDMUYsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUk7WUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLFlBQVksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVsSCxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBTUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBTUQsVUFBVSxDQUFDLFFBQXVCO1FBQ2hDLElBQUksTUFBTSxHQUFZLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFNRCxpQkFBaUIsQ0FBQyxXQUFzQjtRQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFNRCxZQUFZLENBQUMsR0FBWTtRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN4QixDQUFDO0lBS0QsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBUUQsaUJBQWlCLENBQUMsR0FBYTtRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBTUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFLRCxnQkFBZ0IsQ0FBQyxHQUFZO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFLRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFLRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUtELGVBQWU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBSUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBSUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxZQUFZLENBQUMsWUFBWSxDQUFDO0lBQzFELENBQUM7SUFNRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssWUFBWSxDQUFDLG9CQUFvQixDQUFDO0lBQ2xFLENBQUM7SUFLRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFlBQVksQ0FBQyxjQUFjLENBQUM7SUFDNUQsQ0FBQztJQU1ELDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssWUFBWSxDQUFDLDBCQUEwQixDQUFDO0lBQ3hFLENBQUM7SUFLRCxlQUFlLENBQUMsWUFBMEI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7SUFDcEMsQ0FBQztJQU1ELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQU9ELG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBS0QsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBTUQsV0FBVyxDQUFDLFFBQWtCO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFHRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQVFELFlBQVksQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLElBQVk7UUFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBTUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBTUQsZUFBZSxDQUFDLFlBQXFCO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFPRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQU1ELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQU1ELFVBQVUsQ0FBQyxPQUFnQjtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBWU0sc0JBQXNCLENBQUMsZ0JBQXdCO1FBQ3BELElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFO1lBRTVCLElBQUksU0FBUyxHQUFhLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN6QyxJQUFJLFFBQVEsR0FBYSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxTQUFTLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO2dCQUM5RCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxvQ0FBb0MsRUFBRTtZQUMxRCxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ3ZHLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhciwgSUNvbXBhcmFibGUsIEludDMyLCBMaXN0LCBOU3RyaW5nLCBTdHJpbmdCdWlsZGVyfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtGb3JjZUV4aXQsIEludGVybmFsSW50ZXJmYWNlLCBQcmlvcml0eSwgWE1MQ29uc3RhbnRzLCBYbWxQYXJzZXJ9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7R3VpRmllbGRCYXNlLCBMYXN0Rm9jdXNlZFZhbCwgTWdDb250cm9sQmFzZSwgTW9kaWZpZXJzLCBQcm9wZXJ0eSwgUHJvcEludGVyZmFjZSx9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge0V2ZW50U3ViVHlwZX0gZnJvbSBcIi4uL2VudW1zXCI7XHJcbmltcG9ydCB7RXZlbnR9IGZyb20gXCIuL0V2ZW50XCI7XHJcbmltcG9ydCB7Q29uc3RJbnRlcmZhY2V9IGZyb20gXCIuLi9Db25zdEludGVyZmFjZVwiO1xyXG5pbXBvcnQge0FyZ3VtZW50c0xpc3R9IGZyb20gXCIuLi9ydC9Bcmd1bWVudHNMaXN0XCI7XHJcbmltcG9ydCB7TUdEYXRhfSBmcm9tIFwiLi4vdGFza3MvTUdEYXRhXCI7XHJcbmltcG9ydCB7VGFza0Jhc2V9IGZyb20gXCIuLi90YXNrcy9UYXNrQmFzZVwiO1xyXG5pbXBvcnQge1J1blRpbWVFdmVudEJhc2V9IGZyb20gXCIuL1J1blRpbWVFdmVudEJhc2VcIjtcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgdGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBydW50aW1lIGV2ZW50c1xyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgUnVuVGltZUV2ZW50IGV4dGVuZHMgUnVuVGltZUV2ZW50QmFzZSBpbXBsZW1lbnRzIElDb21wYXJhYmxlIHtcclxuXHJcbiAgLy8gQVRURU5USU9OICFcclxuICAvLyBhbnkgY2hhbmdlIHRvIHRoZSBtZW1iZXIgdmFyaWFibGVzIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjaGFuZ2UgdG8gdGhlIENUT1IgdGhhdFxyXG4gIC8vIGdldHMgb25lIGFyZ3VtZW50IG9mIHRoZSB0eXBlICdFdmVudCcgYW5kIG9uZSBhcmd1bWVudCBvZiB0aGUgdHlwZSAnUnVuVGltZUV2ZW50Jy5cclxuXHJcbiAgcHJpdmF0ZSBfY29udHJvbHNMaXN0OiBMaXN0PE1nQ29udHJvbEJhc2U+ID0gbnVsbDsgLy8gbGlzdCBvZiBjb250cm9sc1xyXG4gIHByaXZhdGUgX2RpcmVjdGlvbjogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIF9kaXNwbGF5TGluZTogbnVtYmVyID0gSW50MzIuTWluVmFsdWU7XHJcblxyXG4gIHByaXZhdGUgX2V2ZW50U3ViVHlwZTogRXZlbnRTdWJUeXBlID0gRXZlbnRTdWJUeXBlLk5vcm1hbDtcclxuXHJcbiAgcHJpdmF0ZSBfYWN0RW5hYmxlTGlzdDogbnVtYmVyW10gPSBudWxsO1xyXG4gIHByaXZhdGUgX2FyZ0xpc3Q6IEFyZ3VtZW50c0xpc3QgPSBudWxsO1xyXG4gIHByaXZhdGUgX2N0cmw6IE1nQ29udHJvbEJhc2UgPSBudWxsOyAvLyB0aGUgY29udHJvbCBvbiB3aGljaCB0aGUgZXZlbnQgd2FzIHRyaWdnZXJlZFxyXG4gIHByaXZhdGUgX2RvdE5ldE9iamVjdDogYW55ID0gbnVsbDsgLy8gb2JqZWN0IGtleSBvZiBhIGNvbnRyb2xcclxuICBwcml2YXRlIF9ldmVudEZsZDogR3VpRmllbGRCYXNlID0gbnVsbDsgLy8gRm9yIHZhcmlhYmxlIGV2ZW50cyAtIHRoZSBmaWVsZCBvbiB3aGljaCB0aGUgY29udHJvbCB3YXMgdHJpZ2dlcmVkXHJcbiAgcHJpdmF0ZSBfZnJvbVNlcnZlcjogYm9vbGVhbiA9IGZhbHNlOyAgLy8gaWYgVFJVRSwgdGhlIGV2ZW50IHdhcyBjcmVhdGVkIG9uIHRoZSBzZXJ2ZXIgYW5kIHNlbnQgdG8gdGhlIGNsaWVudFxyXG4gIHByaXZhdGUgX2d1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuID0gZmFsc2U7IC8vIGlmIHRydWUsIHRoZSBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IEdVSSBsZXZlbCAoaW5jbHVkZXMgdGltZXIgZXZlbnRzKVxyXG4gIHByaXZhdGUgX2ltbWVkaWF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2lzSWRsZVRpbWVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNSZWFsUmVmcmVzaDogYm9vbGVhbiA9IHRydWU7IC8vIHVzZWQgb25seSBpbiBNR19BQ1RfVklFV19SRUZSRVNIIGV2ZW50cyB0byBpbmRpY2F0ZSBhIHJlZnJlc2ggaW52b2tlZCBTcGVjaWZpY2FsbHkgYnkgdGhlIHVzZXJcclxuICBwcml2YXRlIF9tZ2RJZDogbnVtYmVyID0gMDsgLy8gbWdkYXRhIGlkIHRoYXQgc2VudCB0aW1lciBldmVudFxyXG4gIHByaXZhdGUgX3JvdXRlUGFyYW1zOiBMaXN0PGFueT4gPSBudWxsO1xyXG5cclxuICAvLyBVc2VkIG9ubHkgaWYgJ3Rhc2snIGlzIGEgbWFpbiBwcmcuIEEgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIHdoaWNoXHJcbiAgLy8gY2F1c2VkIHRoZSBtYWluIHByZyB0byBiZWNvbWUgYWN0aXZlIGluIHRoZSBydW50aW1lLlxyXG4gIHByaXZhdGUgX21wcmdDcmVhdG9yOiBUYXNrQmFzZSA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX3ByaW9yaXR5OiBQcmlvcml0eSA9IFByaW9yaXR5LkhJR0g7IC8vIHByaW9yaXR5IG9mIGV2ZW50IGZvciBldmVudHMgcXVldWVcclxuXHJcbiAgcHJpdmF0ZSBfcHJvZHVjZUNsaWNrOiBib29sZWFuID0gZmFsc2U7IC8vIGlmIFRSVUUsIHRoZSBldmVudCBzaG91bGQgcHJvZHVjZSBjbGlja1xyXG4gIHByaXZhdGUgX3JldmVyc2libGVFeGl0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uRW5kOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvblN0YXJ0OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NlbmRBbGw6IGJvb2xlYW4gPSBmYWxzZTsgIC8vIHRoaXMgZmxhZyBpcyBzZXQgZm9yIHNlbmRpbmcgYWxsIHJlY29yZHNcclxuICBwcml2YXRlIF90YXNrOiBUYXNrQmFzZSA9IG51bGw7IC8vIGEgcmVmZXJlbmNlIHRvIHRoZSB0YXNrXHJcbiAgcHJpdmF0ZSBfdGFza1RhZzogc3RyaW5nID0gbnVsbDsgLy8gdGhlIHRhc2sgaWQgb24gd2hpY2ggdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWRcclxuICBwcml2YXRlIF92YWw6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfc2hvdWxkSGFuZGxlWm9vbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzZXQgU2hvdWxkSGFuZGxlWm9vbSh2YWx1ZTogYm9vbGVhbikgeyBcclxuICAgICAgdGhpcy5fc2hvdWxkSGFuZGxlWm9vbSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFNob3VsZEhhbmRsZVpvb20oKTogYm9vbGVhbiB7IFxyXG4gICAgICByZXR1cm4gdGhpcy5fc2hvdWxkSGFuZGxlWm9vbTtcclxuICB9XHJcblxyXG4gIHNldCBDb250cm9sKHZhbHVlOiBNZ0NvbnRyb2xCYXNlKSB7XHJcbiAgICB0aGlzLl9jdHJsID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXQgRGlzcGxheUxpbmUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fZGlzcGxheUxpbmUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBDb250cm9sKCk6IE1nQ29udHJvbEJhc2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N0cmw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNob3VsZCB0aGUgY29udHJvbCBzZXQgb24gdGhlIGV2ZW50IGJlIGlnbm9yZWQuIGlmIHRydWUsIHdoZW4gcHJvY2Vzc2luZyB0aGUgZXZlbnQgd2Ugc2hvdWxkXHJcbiAgLy8vIHVzZSB0aGUgY3VycmVudCBmb2N1c2VkIGNvbnRyb2wgaW5zdGVhZCBvZiB0aGUgb25lIHNldCBvbiB0aGUgZXZlbnQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBJZ25vcmVTcGVjaWZpZWRDb250cm9sOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIExhc3RGb2N1c2VkVmFsOiBMYXN0Rm9jdXNlZFZhbCA9IG51bGw7IC8vIHZhbHVlIG9mIGxhc3QgZWRpdGVkIGNvbnRyb2xcclxuXHJcbiAgZ2V0IENvbnRyb2xzTGlzdCgpOiBMaXN0PE1nQ29udHJvbEJhc2U+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9sc0xpc3Q7XHJcbiAgfVxyXG5cclxuICBnZXQgRGlyZWN0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlyZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IodGFza1JlZjogVGFza0Jhc2UpO1xyXG4gIGNvbnN0cnVjdG9yKHRhc2tSZWY6IFRhc2tCYXNlLCBjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlKTtcclxuICBjb25zdHJ1Y3RvcihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlKTtcclxuICBjb25zdHJ1Y3RvcihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBndWlUcmlnZ2VyZWRFdmVudDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IoY3RybFJlZjogTWdDb250cm9sQmFzZSwgZ3VpVHJpZ2dlcmVkRXZlbnQ6IGJvb2xlYW4sIGlnbm9yZVNwZWNpZmllZENvbnRyb2w6IGJvb2xlYW4pO1xyXG4gIGNvbnN0cnVjdG9yKHRhc2tyZWY6IFRhc2tCYXNlLCBndWlUcmlnZ2VyZWRFdmVudDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IoZmxkUmVmOiBHdWlGaWVsZEJhc2UpO1xyXG4gIGNvbnN0cnVjdG9yKGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGxpbmU6IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IoY3RybFJlZjogTWdDb250cm9sQmFzZSwgbGluZTogbnVtYmVyLCBndWlUcmlnZ2VyZWRFdmVudDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IoY3RybFJlZjogTWdDb250cm9sQmFzZSwgY29udHJvbHNMaXN0OiBMaXN0PE1nQ29udHJvbEJhc2U+LCBndWlUcmlnZ2VyZWRFdmVudDogYm9vbGVhbik7XHJcbiAgY29uc3RydWN0b3IoY3RybFJlZjogTWdDb250cm9sQmFzZSwgZGlyZWN0aW9uOiBudW1iZXIsIGxpbmU6IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IoY3RybFJlZjogTWdDb250cm9sQmFzZSwgY29sdW1uSGVhZGVyOiBzdHJpbmcsIHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik7XHJcbiAgY29uc3RydWN0b3IoZXZ0OiBFdmVudCwgcnRFdnQ6IFJ1blRpbWVFdmVudCk7XHJcbiAgY29uc3RydWN0b3IocnRFdnQ6IFJ1blRpbWVFdmVudCk7XHJcbiAgY29uc3RydWN0b3IodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQ6IGFueSwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzaz86IGFueSwgaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZT86IGFueSwgeU9yQ3RsSWR4PzogbnVtYmVyLCB3aWR0aD86IG51bWJlciwgaGVpZ2h0PzogbnVtYmVyKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgVGFza0Jhc2UpKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzUodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgVGFza0Jhc2UpICYmIChjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrID09PSBudWxsIHx8IGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl82KHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0LCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmICh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCA9PT0gbnVsbCB8fCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIE1nQ29udHJvbEJhc2UpKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzcodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgTWdDb250cm9sQmFzZSkgJiYgKGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgPT09IG51bGwgfHwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzay5jb25zdHJ1Y3RvciA9PT0gQm9vbGVhbikpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfOCh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSAmJiAoY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayA9PT0gbnVsbCB8fCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrLmNvbnN0cnVjdG9yID09PSBCb29sZWFuKSAmJiAoaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZSA9PT0gbnVsbCB8fCBpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lLmNvbnN0cnVjdG9yID09PSBCb29sZWFuKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl85KHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0LCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrLCBpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmICh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCA9PT0gbnVsbCB8fCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIFRhc2tCYXNlKSAmJiAoY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayA9PT0gbnVsbCB8fCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrLmNvbnN0cnVjdG9yID09PSBCb29sZWFuKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xMCh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBHdWlGaWVsZEJhc2UpKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzExKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0KTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmICh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCA9PT0gbnVsbCB8fCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIE1nQ29udHJvbEJhc2UpICYmIChjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrID09PSBudWxsIHx8IGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2suY29uc3RydWN0b3IgPT09IE51bWJlcikpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMTIodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQsIGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2spO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgTWdDb250cm9sQmFzZSkgJiYgKGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgPT09IG51bGwgfHwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzay5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAoaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZSA9PT0gbnVsbCB8fCBpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lLmNvbnN0cnVjdG9yID09PSBCb29sZWFuKSlcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xMyh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzaywgaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZSk7XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgPT09IG51bGwgfHwgdGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQgaW5zdGFuY2VvZiBNZ0NvbnRyb2xCYXNlKSAmJiAoY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayA9PT0gbnVsbCB8fCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrIGluc3RhbmNlb2YgTGlzdCkgJiYgKGlnbm9yZVNwZWNpZmllZENvbnRyb2xPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JYT3JDb250cm9sT3JBY3RpdmF0ZWRGcm9tTURJRnJhbWUgPT09IG51bGwgfHwgaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZS5jb25zdHJ1Y3RvciA9PT0gQm9vbGVhbikpXHJcbiAgICAgIHRoaXMuY29uc3RydWN0b3JfMTQodGFza1JlZk9yQ3RybFJlZk9yVGFza3JlZk9yRmxkUmVmT3JFdnQsIGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2ssIGlnbm9yZVNwZWNpZmllZENvbnRyb2xPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JYT3JDb250cm9sT3JBY3RpdmF0ZWRGcm9tTURJRnJhbWUpO1xyXG5cclxuICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0ID09PSBudWxsIHx8IHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0IGluc3RhbmNlb2YgTWdDb250cm9sQmFzZSkgJiYgKGN0cmxSZWZPckd1aVRyaWdnZXJlZEV2ZW50T3JMaW5lT3JDb250cm9sc0xpc3RPckRpcmVjdGlvbk9yQ29sdW1uSGVhZGVyT3JSdEV2dE9yQ3VycmVudFRhc2sgPT09IG51bGwgfHwgY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzay5jb25zdHJ1Y3RvciA9PT0gTnVtYmVyKSAmJiAoaWdub3JlU3BlY2lmaWVkQ29udHJvbE9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPclhPckNvbnRyb2xPckFjdGl2YXRlZEZyb21NRElGcmFtZSA9PT0gbnVsbCB8fCBpZ25vcmVTcGVjaWZpZWRDb250cm9sT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yWE9yQ29udHJvbE9yQWN0aXZhdGVkRnJvbU1ESUZyYW1lLmNvbnN0cnVjdG9yID09PSBOdW1iZXIpKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzE1KHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0LCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA2KVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzE2KHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0KTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmICh0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCA9PT0gbnVsbCB8fCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIEV2ZW50KSAmJiAoY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayA9PT0gbnVsbCB8fCBjdHJsUmVmT3JHdWlUcmlnZ2VyZWRFdmVudE9yTGluZU9yQ29udHJvbHNMaXN0T3JEaXJlY3Rpb25PckNvbHVtbkhlYWRlck9yUnRFdnRPckN1cnJlbnRUYXNrIGluc3RhbmNlb2YgUnVuVGltZUV2ZW50KSkge1xyXG4gICAgICAvLyBDYWxsIGJhc2UgY2xhc3MgY29uc3RydWN0b3IgdG8gaW5pdGlhbGl6ZSB0aGUgZXZlbnQgdHlwZSBhbmQgdGhlIG90aGVyIGZpZWxkc1xyXG4gICAgICBzdXBlci5jb25zdHJ1Y3Rvcl8xKHRhc2tSZWZPckN0cmxSZWZPclRhc2tyZWZPckZsZFJlZk9yRXZ0KTtcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8xNyggY3RybFJlZk9yR3VpVHJpZ2dlcmVkRXZlbnRPckxpbmVPckNvbnRyb2xzTGlzdE9yRGlyZWN0aW9uT3JDb2x1bW5IZWFkZXJPclJ0RXZ0T3JDdXJyZW50VGFzayk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCBpbnN0YW5jZW9mIFJ1blRpbWVFdmVudClcclxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB0YXNrUmVmT3JDdHJsUmVmT3JUYXNrcmVmT3JGbGRSZWZPckV2dCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPmEgcmVmZXJlbmNlIHRvIHRoZSB0YXNrPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzUodGFza1JlZjogVGFza0Jhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdCh0YXNrUmVmKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tSZWZcIj5yZWZlcmVuY2UgdG8gdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdHJsUmVmXCI+cmVmZXJlbmNlIHRvIGNvbnRyb2w8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfNih0YXNrUmVmOiBUYXNrQmFzZSwgY3RybFJlZjogTWdDb250cm9sQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl81KChjdHJsUmVmICE9PSBudWxsKSA/ICg8VGFza0Jhc2U+Y3RybFJlZi5nZXRGb3JtKCkuZ2V0VGFzaygpKSA6IHRhc2tSZWYpO1xyXG4gICAgdGhpcy5Db250cm9sID0gY3RybFJlZjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxSZWZcIj5hIHJlZmVyZW5jZSB0byB0aGUgY29udHJvbCA8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfNyhjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzYobnVsbCwgY3RybFJlZik7XHJcbiAgICBpZiAoY3RybFJlZiAhPT0gbnVsbCAmJiBzdXBlci5nZXRUeXBlKCkgPT09IENoYXIuTWluVmFsdWUpIC8vIG5vdCBpbml0aWFsaXplZCB5ZXRcclxuICAgIHtcclxuICAgICAgLy8gb24gdGhlIGZpcnN0IHRpbWUsIGlmIGEgVFJJR0dFUiBwcm9wZXJ0eSBleGlzdHMsIHBhcnNlIHRoZSBldmVudCBhbmQgYWRkIGl0IHRvIHRoZSBjb250cm9sXHJcbiAgICAgIGxldCBwcm9wOiBQcm9wZXJ0eSA9IGN0cmxSZWYuR2V0Q29tcHV0ZWRQcm9wZXJ0eShQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUklHR0VSKTtcclxuICAgICAgaWYgKHByb3AgIT09IG51bGwpIHtcclxuICAgICAgICBsZXQgeG1sUGFyc2VyOiBYbWxQYXJzZXIgPSBuZXcgWG1sUGFyc2VyKHByb3AuR2V0Q29tcHV0ZWRWYWx1ZSgpKTtcclxuICAgICAgICBzdXBlci5maWxsRGF0YSh4bWxQYXJzZXIsIDxUYXNrQmFzZT5jdHJsUmVmLmdldEZvcm0oKS5nZXRUYXNrKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsUmVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlUcmlnZ2VyZWRFdmVudFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl84KGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzcoY3RybFJlZik7XHJcbiAgICB0aGlzLl9ndWlUcmlnZ2VyZWRFdmVudCA9IGd1aVRyaWdnZXJlZEV2ZW50O1xyXG4gICAgaWYgKGd1aVRyaWdnZXJlZEV2ZW50KSB7XHJcbiAgICAgIC8vIEV2ZW50cyB0aGF0IGFyZSB0cmlnZ2VyZWQgYnkgR1VJIGxldmVsLCBtdXN0IGJlIGV4ZWN1dGVkIGFmdGVyIGFsbFxyXG4gICAgICAvLyBvdGhlciBldmVudHMsIHRodXMgdGhheSBoYXZlIGxvdyBwcmlvcml0eTtcclxuICAgICAgdGhpcy5fcHJpb3JpdHkgPSBQcmlvcml0eS5MT1c7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsUmVmXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlUcmlnZ2VyZWRFdmVudFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl85KGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuLCBpZ25vcmVTcGVjaWZpZWRDb250cm9sOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzgoY3RybFJlZiwgZ3VpVHJpZ2dlcmVkRXZlbnQpO1xyXG4gICAgdGhpcy5JZ25vcmVTcGVjaWZpZWRDb250cm9sID0gaWdub3JlU3BlY2lmaWVkQ29udHJvbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDVE9SXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tyZWZcIj5yZWZlcmVuY2UgdG8gdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJndWlUcmlnZ2VyZWRFdmVudFwiPjwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xMCh0YXNrcmVmOiBUYXNrQmFzZSwgZ3VpVHJpZ2dlcmVkRXZlbnQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfNSh0YXNrcmVmKTtcclxuICAgIHRoaXMuX2d1aVRyaWdnZXJlZEV2ZW50ID0gZ3VpVHJpZ2dlcmVkRXZlbnQ7XHJcbiAgICBpZiAoZ3VpVHJpZ2dlcmVkRXZlbnQpIHtcclxuICAgICAgdGhpcy5fcHJpb3JpdHkgPSBQcmlvcml0eS5MT1c7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGRSZWZcIj5hIHJlZmVyZW5jZSB0byB0aGUgZmllbGQ8L3BhcmFtPlxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMTEoZmxkUmVmOiBHdWlGaWVsZEJhc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX2V2ZW50RmxkID0gZmxkUmVmO1xyXG4gICAgdGhpcy5pbml0KChmbGRSZWYgIT09IG51bGwpID8gKDxUYXNrQmFzZT5mbGRSZWYuZ2V0VGFzaygpKSA6IG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3RybFJlZlwiPmEgcmVmZXJlbmNlIHRvIHRoZSBjb250cm9sIG9uIHdoaWNoIHRoZSBldmVudCBvY2N1cmVkIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJsaW5lXCI+dGhlIGxpbmUgb2YgdGhlIHRhYmxlIGluIHdoaWNoIHRoZSBjb250cm9sIGlzIGxvY2F0ZWQgPC9wYXJhbT5cclxuICBwcml2YXRlIGNvbnN0cnVjdG9yXzEyKGN0cmxSZWY6IE1nQ29udHJvbEJhc2UsIGxpbmU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl83KGN0cmxSZWYpO1xyXG4gICAgdGhpcy5fZGlzcGxheUxpbmUgPSBsaW5lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xMyhjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBsaW5lOiBudW1iZXIsIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzgoY3RybFJlZiwgZ3VpVHJpZ2dlcmVkRXZlbnQpO1xyXG4gICAgdGhpcy5fZGlzcGxheUxpbmUgPSBsaW5lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xNChjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBjb250cm9sc0xpc3Q6IExpc3Q8TWdDb250cm9sQmFzZT4sIGd1aVRyaWdnZXJlZEV2ZW50OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzgoY3RybFJlZiwgZ3VpVHJpZ2dlcmVkRXZlbnQpO1xyXG4gICAgdGhpcy5fY29udHJvbHNMaXN0ID0gY29udHJvbHNMaXN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xNShjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlLCBkaXJlY3Rpb246IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl84KGN0cmxSZWYsIHRydWUpO1xyXG4gICAgdGhpcy5fZGlyZWN0aW9uID0gZGlyZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xNihjdHJsUmVmOiBNZ0NvbnRyb2xCYXNlICk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl84KGN0cmxSZWYsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIENUT1IgLSBjcmVhdGVzIGEgbmV3IHJ1biB0aW1lIGV2ZW50IGJ5IGNvcHlpbmcgdGhlIG1lbWJlciB2YXJpYWJsZXMgb2YgYSBnaXZlblxyXG4gIC8vLyAgIGV2ZW50IGFuZCB0aGUgbWVtYmVyIHZhcmlhYmxlcyBvZiBhIGdpdmVuIHJ1biB0aW1lIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImV2dFwiPmEgcmVmZXJlbmNlIHRvIHRoZSBldmVudCB0byBiZSB1c2VkIDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJydEV2dFwiPmEgcmVmZXJlbmNlIHRvIHRoZSBydW4gdGltZSBldmVudCB0byBiZSB1c2VkIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xNyggcnRFdnQ6IFJ1blRpbWVFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFza1RhZyA9IHJ0RXZ0Ll90YXNrVGFnO1xyXG4gICAgdGhpcy5fdGFzayA9IHJ0RXZ0Ll90YXNrO1xyXG4gICAgdGhpcy5Db250cm9sID0gcnRFdnQuQ29udHJvbDtcclxuICAgIHRoaXMuX2V2ZW50RmxkID0gcnRFdnQuX2V2ZW50RmxkO1xyXG4gICAgdGhpcy5fbWdkSWQgPSBydEV2dC5fbWdkSWQ7XHJcbiAgICB0aGlzLl9kaXNwbGF5TGluZSA9IHJ0RXZ0Ll9kaXNwbGF5TGluZTtcclxuICAgIHRoaXMuX3JldmVyc2libGVFeGl0ID0gcnRFdnQuX3JldmVyc2libGVFeGl0O1xyXG4gICAgdGhpcy5fYXJnTGlzdCA9IHJ0RXZ0Ll9hcmdMaXN0O1xyXG4gICAgdGhpcy5faW1tZWRpYXRlID0gcnRFdnQuX2ltbWVkaWF0ZTtcclxuICAgIHRoaXMuX21wcmdDcmVhdG9yID0gcnRFdnQuX21wcmdDcmVhdG9yO1xyXG4gICAgdGhpcy5fcHJpb3JpdHkgPSBydEV2dC5fcHJpb3JpdHk7XHJcbiAgICB0aGlzLl9ndWlUcmlnZ2VyZWRFdmVudCA9IHJ0RXZ0Ll9ndWlUcmlnZ2VyZWRFdmVudDtcclxuICAgIHRoaXMuX2lzSWRsZVRpbWVyID0gcnRFdnQuX2lzSWRsZVRpbWVyO1xyXG4gICAgdGhpcy5fdmFsID0gcnRFdnQuX3ZhbDtcclxuICAgIHRoaXMuX3NlbGVjdGlvblN0YXJ0ID0gcnRFdnQuX3NlbGVjdGlvblN0YXJ0O1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uRW5kID0gcnRFdnQuX3NlbGVjdGlvbkVuZDtcclxuICAgIHRoaXMuX2NvbnRyb2xzTGlzdCA9IHJ0RXZ0Ll9jb250cm9sc0xpc3Q7XHJcbiAgICB0aGlzLl9kaXJlY3Rpb24gPSBydEV2dC5fZGlyZWN0aW9uO1xyXG4gICAgdGhpcy5fZG90TmV0T2JqZWN0ID0gcnRFdnQuX2RvdE5ldE9iamVjdDtcclxuICAgIHRoaXMuTGFzdEZvY3VzZWRWYWwgPSBydEV2dC5MYXN0Rm9jdXNlZFZhbDtcclxuICAgIHRoaXMuX3JvdXRlUGFyYW1zID0gcnRFdnQuX3JvdXRlUGFyYW1zO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpbXBsZW1lbnRpbmcgY29tcGFyYXRvciwgdGhlIGV2ZW50cyBhcmUgY29tcGFyZWQgYnkgcHJpb3JpdHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIENvbXBhcmVUbyhvYmo6IGFueSk6IG51bWJlciB7XHJcbiAgICBsZXQgb3RoZXJUaW1lRXZlbnQ6IFJ1blRpbWVFdmVudCA9IDxSdW5UaW1lRXZlbnQ+b2JqO1xyXG4gICAgbGV0IG90aGVyUHJpb3JpdHk6IFByaW9yaXR5ID0gb3RoZXJUaW1lRXZlbnQuX3ByaW9yaXR5O1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyID0gb3RoZXJQcmlvcml0eSAtIHRoaXMuX3ByaW9yaXR5O1xyXG4gICAgaWYgKHJlc3VsdCA9PT0gMClcclxuICAgICAgcmVzdWx0ID0gPG51bWJlcj4odGhpcy5fdGltZXN0YW1wIC0gb3RoZXJUaW1lRXZlbnQuX3RpbWVzdGFtcCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYSByZXBsaWNhIG9mIHRoaXMgcnVudGltZSBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVwbGljYXRlKCk6IFJ1blRpbWVFdmVudCB7XHJcbiAgICBsZXQgcnVuVGltZUV2ZW50OiBSdW5UaW1lRXZlbnQgPSBuZXcgUnVuVGltZUV2ZW50KHRoaXMpO1xyXG4gICAgcnVuVGltZUV2ZW50LnNldFRpbWVzdGFtcCgpO1xyXG4gICAgcmV0dXJuIHJ1blRpbWVFdmVudDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBhIGhlbHBlciBtZXRob2QgdGhhdCBkb2VzIHNvbWUgY29tbW9uIGluaXRpYWxpemF0aW9uIGZvciBzb21lIG9mIHRoZSBjb25zdHJ1Y3RvcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgaW5pdCh0YXNrUmVmOiBUYXNrQmFzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGFzayA9ICh0YXNrUmVmIHx8ICg8TUdEYXRhPkFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5nZXRDdXJyTUdEYXRhKCkpLmdldEZpcnN0VGFzaygpKTtcclxuICAgIHRoaXMuX3Rhc2tUYWcgPSAoKHRoaXMuX3Rhc2sgPT09IG51bGwpID8gXCJcIiA6IHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpKTtcclxuICAgIHRoaXMuX21wcmdDcmVhdG9yID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb252ZXJ0cyBwYXJhbWV0ZXJzIHRvIGFyZ3VtZW50IGxpc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnZlcnRQYXJhbXNUb0FyZ3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hcmdMaXN0ID0gbmV3IEFyZ3VtZW50c0xpc3QoKTtcclxuICAgIHRoaXMuX2FyZ0xpc3QuYnVpbGRMaXN0RnJvbVBhcmFtcyh0aGlzLl9wYXJhbWV0ZXJzLCB0aGlzLl9wYXJhbUF0dHJzLCB0aGlzLl9wYXJhbVZhbHMsIHRoaXMuX3BhcmFtTnVsbHMpO1xyXG4gICAgdGhpcy5fcGFyYW1ldGVycyA9IDA7XHJcbiAgICB0aGlzLl9wYXJhbUF0dHJzID0gbnVsbDtcclxuICAgIHRoaXMuX3BhcmFtVmFscyA9IG51bGw7XHJcbiAgICB0aGlzLl9wYXJhbU51bGxzID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2soKTogVGFza0Jhc2Uge1xyXG4gICAgc3VwZXIuZmluZFVzZXJFdmVudCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImFUYXNrXCI+LSByZWZlcmVuY2UgdG8gYSB0YXNrPC9wYXJhbT5cclxuICBzZXRUYXNrKHRhc2tSZWY6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrID0gdGFza1JlZjtcclxuXHJcbiAgICBpZiAodGhpcy5fdGFzayAhPT0gbnVsbClcclxuICAgICAgdGhpcy5fdGFza1RhZyA9IHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl90YXNrVGFnID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgYSBUaW1lciBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzZWNvbmRzXCI+dGhlIG51bWJlciBvZiBzZWNvbmRzIGZvciB0aGlzIGV2ZW50czwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJudW1iZXJXbmRcIj50aGUgbWdkYXRhIElEIGZvciB0aGUgZXZlbnQ8L3BhcmFtPlxyXG4gIHNldFRpbWVyKHNlYzogbnVtYmVyLCBtZ2RJRDogbnVtYmVyLCBpc0lkbGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX3R5cGUgPSBDb25zdEludGVyZmFjZS5FVkVOVF9UWVBFX1RJTUVSIC8qJ1QnKi87XHJcbiAgICB0aGlzLl9zZWNvbmRzID0gc2VjO1xyXG4gICAgdGhpcy5fbWdkSWQgPSBtZ2RJRDtcclxuICAgIHRoaXMuX2lzSWRsZVRpbWVyID0gaXNJZGxlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGxpbmUgaW4gdGFibGUgb2YgY29udHJvbCBpbiBhIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBsaW5lIG51bWJlcjwvcmV0dXJucz5cclxuICBnZXREaXNwbGF5TGluZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlMaW5lO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBudW1iZXIgb2Ygd2luZG93IChmb3IgdGltZXIgZXZlbnRzKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0TWdkSUQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tZ2RJZDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGJyZWFrIGxldmVsIG9mIEV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRCcmtMZXZlbCgpOiBzdHJpbmc7XHJcbiAgZ2V0QnJrTGV2ZWwoZmxvd01vbml0b3I6IGJvb2xlYW4pOiBzdHJpbmc7XHJcbiAgZ2V0QnJrTGV2ZWwoZmxvd01vbml0b3I/OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldEJya0xldmVsXzAwKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5nZXRCcmtMZXZlbF8wMShmbG93TW9uaXRvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJya0xldmVsXzAwKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbGV2ZWw6IHN0cmluZyA9IHN1cGVyLmdldEJya0xldmVsKCk7XHJcbiAgICBpZiAodGhpcy5fdHlwZSA9PT0gQ29uc3RJbnRlcmZhY2UuRVZFTlRfVFlQRV9JTlRFUk5BTCkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuSW50ZXJuYWxFdmVudCkge1xyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfUFJFRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfU1VGRklYOlxyXG4gICAgICAgIGNhc2UgSW50ZXJuYWxJbnRlcmZhY2UuTUdfQUNUX0NUUkxfVkVSSUZJQ0FUSU9OOlxyXG4gICAgICAgICAgbGV2ZWwgKz0gdGhpcy5Db250cm9sLk5hbWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9WQVJJQUJMRTpcclxuICAgICAgICAgIGxldmVsICs9IHRoaXMuX2V2ZW50RmxkLmdldFZhck5hbWUoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGV2ZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJya0xldmVsXzAxKGZsb3dNb25pdG9yOiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdXBlci5nZXRCcmtMZXZlbChmbG93TW9uaXRvcik7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhIG5ldyBjb250cm9sIGZvciB0aGUgcnVudGltZSBldmVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJuZXdDdHJsXCI+YSByZWZlcmVuY2UgdG8gdGhlIG5ldyBjb250cm9sIDwvcGFyYW0+XHJcbiAgc2V0Q3RybChuZXdDdHJsOiBNZ0NvbnRyb2xCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdHJsID0gbmV3Q3RybDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJldmVyc2libGUgZXhpdCBmbGFnIHRvIGZhbHNlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXROb25SZXZlcnNpYmxlRXhpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JldmVyc2libGVFeGl0ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHJldmVyc2libGUgZXhpdCBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICByZXZlcnNpYmxlRXhpdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXZlcnNpYmxlRXhpdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBidWlsZCBYTUwgRXZlbnQgc3RyaW5nIGZvciBTZXJ2ZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBidWlsZFhNTChtZXNzYWdlOiBTdHJpbmdCdWlsZGVyKTogdm9pZCB7XHJcbiAgICBtZXNzYWdlLkFwcGVuZChcIlxcbiAgIFwiICsgWE1MQ29uc3RhbnRzLlRBR19PUEVOICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VWRU5UKTtcclxuXHJcbiAgICBpZiAodGhpcy5fdHlwZSAhPT0gQ2hhci5NaW5WYWx1ZSlcclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBDb25zdEludGVyZmFjZS5NR19BVFRSX0VWRU5UVFlQRSArIFwiPVxcXCJcIiArIHRoaXMuX3R5cGUgKyBcIlxcXCJcIik7XHJcblxyXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IENvbnN0SW50ZXJmYWNlLkVWRU5UX1RZUEVfU1lTVEVNICYmIHRoaXMua2JkSXRtICE9IG51bGwpIHtcclxuICAgICAgbGV0IG1vZGlmaWVyOiBNb2RpZmllcnMgPSB0aGlzLmtiZEl0bS5nZXRNb2RpZmllcigpO1xyXG4gICAgICBpZiAobW9kaWZpZXIgIT09IE1vZGlmaWVycy5NT0RJRklFUl9OT05FKVxyXG4gICAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9NT0RJRklFUiArIFwiPVxcXCJcIiArIG1vZGlmaWVyICsgXCJcXFwiXCIpO1xyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfS0VZQ09ERSArIFwiPVxcXCJcIiArIHRoaXMua2JkSXRtLmdldEtleUNvZGUoKSArIFwiXFxcIlwiKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLkludGVybmFsRXZlbnQgIT09IEludDMyLk1pblZhbHVlKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSU5URVJOQUxFVkVOVCArIFwiPVxcXCJcIiArIHRoaXMuSW50ZXJuYWxFdmVudCArIFwiXFxcIlwiKTtcclxuICAgIGlmICh0aGlzLl9zZWNvbmRzICE9PSBJbnQzMi5NaW5WYWx1ZSlcclxuICAgICAgbWVzc2FnZS5BcHBlbmQoXCIgXCIgKyBDb25zdEludGVyZmFjZS5NR19BVFRSX1NFQ09ORFMgKyBcIj1cXFwiXCIgKyB0aGlzLl9zZWNvbmRzICsgXCJcXFwiXCIpO1xyXG4gICAgaWYgKHRoaXMuRXhwICE9IG51bGwpXHJcbiAgICAgIG1lc3NhZ2UuQXBwZW5kKFwiIFwiICsgWE1MQ29uc3RhbnRzLk1HX0FUVFJfRVhQICsgXCI9XFxcIlwiICsgdGhpcy5FeHAuZ2V0SWQoKSArIFwiXFxcIlwiKTtcclxuICAgIGlmICh0aGlzLl9mb3JjZUV4aXQgIT09IEZvcmNlRXhpdC5Ob25lKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIFhNTENvbnN0YW50cy5NR19BVFRSX0VYUCArIFwiPVxcXCJcIiArIDxzdHJpbmc+dGhpcy5fZm9yY2VFeGl0ICsgXCJcXFwiXCIpO1xyXG4gICAgaWYgKHRoaXMuVXNlckV2dCAhPSBudWxsKVxyXG4gICAgICBtZXNzYWdlLkFwcGVuZChcIiBcIiArIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUiArIFwiPVxcXCJcIiArIHRoaXMuVXNlckV2dFRhc2tUYWcgKyBcIixcIiArIHRoaXMuX3VzZXJFdnRJZHggKyBcIlxcXCJcIik7XHJcblxyXG4gICAgbWVzc2FnZS5BcHBlbmQoWE1MQ29uc3RhbnRzLlRBR19URVJNKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGFyZ0xpc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGFyZ0xpc3Q8L3JldHVybnM+XHJcbiAgZ2V0QXJnTGlzdCgpOiBBcmd1bWVudHNMaXN0IHtcclxuICAgIHJldHVybiB0aGlzLl9hcmdMaXN0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgYXJnTGlzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhQXJnTGlzdFwiPjwvcGFyYW0+XHJcbiAgc2V0QXJnTGlzdChhQXJnTGlzdDogQXJndW1lbnRzTGlzdCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IHRoaXMuX2FyZ0xpc3QgPT09IG51bGw7XHJcbiAgICB0aGlzLl9hcmdMaXN0ID0gYUFyZ0xpc3Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgYXJnTGlzdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhQXJnTGlzdFwiPjwvcGFyYW0+XHJcbiAgc2V0Um91dGVQYXJhbUxpc3Qocm91dGVQYXJhbXM6IExpc3Q8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5fcm91dGVQYXJhbXMgPSByb3V0ZVBhcmFtcztcclxuICB9XHJcblxyXG4gIGdldFJvdXRlUGFyYW1MaXN0KCk6IExpc3Q8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcm91dGVQYXJhbXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGEgdmFsdWUgdG8gdGhlIGltbWVkaWF0ZSBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPnRoZSB2YWx1ZSB0byB1c2U8L3BhcmFtPlxyXG4gIHNldEltbWVkaWF0ZSh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2ltbWVkaWF0ZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgaW1tZWRpYXRlIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGlzSW1tZWRpYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ltbWVkaWF0ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGFzayB3aGljaCBpcyBcInJlc3BvbnNpYmxlXCIgZm9yIGEgbWFpbiBwcm9ncmFtIHRvIGJlY29tZSBhY3RpdmUuXHJcbiAgLy8vICAgRm9yIGV4YW1wbGU6IGlmIHRhc2sgQSBjYWxscyB0YXNrIEIgYW5kIEIncyBjdGxJZHggaXMgZGlmZmVyZW50IHRoYW4gQSdzLCB0aGVuIEIncyBtYWluXHJcbiAgLy8vICAgcHJvZ3JhbSB3aWxsIGJlIGluc2VydGVkIGludG8gdGhlIHRhc2sgaGlyYXJjaHkgdGh1cyBCIGlzIFwicmVzcG9uc2libGVcIiBmb3IgdGhlIG1haW4gcHJnLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzcmNcIj50aGUgXCJyZXNwb25zaWJsZVwiIHRhc2suPC9wYXJhbT5cclxuICBzZXRNYWluUHJnQ3JlYXRvcihzcmM6IFRhc2tCYXNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9tcHJnQ3JlYXRvciA9IHNyYztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHRhc2sgd2hpY2ggaXMgXCJyZXNwb25zaWJsZVwiIGZvciBhIG1haW4gcHJvZ3JhbSdzIGV4ZWN1dGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgXCJyZXNwb25zaWJsZVwiIHRhc2suPC9yZXR1cm5zPlxyXG4gIGdldE1haW5QcmdDcmVhdG9yKCk6IFRhc2tCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLl9tcHJnQ3JlYXRvcjtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyB0aGUgaXNSZWFsUmVmcmVzaCBmbGFnIHRvIGEgZ2l2ZW4gdmFsdWVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldElzUmVhbFJlZnJlc2godmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pc1JlYWxSZWZyZXNoID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHR5cGUgb2YgYSByZWZyZXNoIGV2ZW50IHRydWUgaXMgcmVhbCByZWZyZXNoIGUuaS4gb25lIGludm9rZWQgZGlyZWN0bGx5IGJ5IHRoZSB1c2VyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRSZWZyZXNoVHlwZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlYWxSZWZyZXNoO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIG1hcmsgdGhlIGV2ZW50IGFzIGFuIGV2ZW50IHdoaWNoIHdhcyBjcmVhdGVkIGJ5IHRoZSBzZXJ2ZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldEZyb21TZXJ2ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mcm9tU2VydmVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBtYXJrIHRoZSBldmVudCBhcyBhbiBldmVudCB3aGljaCB3YXMgbm90IGNyZWF0ZWQgYnkgdGhlIHNlcnZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcmVzZXRGcm9tU2VydmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZnJvbVNlcnZlciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiBhbiBpbmRpY2F0aW9uIHdoZWF0aGVyIHRoZSBzZXJ2ZXIgY3JlYXRlZCB0aGlzIGV2ZW50XHJcbiAgLy8vIDwvcmV0dXJucz5cclxuICBpc0Zyb21TZXJ2ZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJvbVNlcnZlcjtcclxuICB9XHJcblxyXG4gIC8vLyA8cmV0dXJucz4gYW4gaW5kaWNhdGlvbiB3aGVhdGhlciB0aGUgZXZlbnQgaXMgYSBwYXJ0IG9mIHF1aXQgcHJvY2Vzc1xyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgaXNRdWl0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50U3ViVHlwZSA9PT0gRXZlbnRTdWJUeXBlLkNhbmNlbElzUXVpdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBJbmRpY2F0ZXMgdGhhdCB3ZSBkbyBub3Qgd2FudCB0aGUgTUdfQUNUX0NBTkNFTCB0byBwZXJmb3JtIHJvbGxiYWNrLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBSb2xsYmFja0luQ2FuY2VsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50U3ViVHlwZSAhPT0gRXZlbnRTdWJUeXBlLkNhbmNlbFdpdGhOb1JvbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgd2hpbGUgZXhpdCB0aGUgdGFzayBkdWUgZXJyb3IgKGNhbiBiZSBvbiBhbnkgZXJyb3IgaW4gZGF0YWJhc2UgaW4gbm9uIGludGVyYWN0aXZlKVxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgRXhpdER1ZVRvRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRTdWJUeXBlID09PSBFdmVudFN1YlR5cGUuRXhpdER1ZVRvRXJyb3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSW5kaWNhdGVzIHRoYXQgd2UgZG8gbm90IHdhbnQgdGhlIE1HX0FDVF9DQU5DRUwgdG8gcGVyZm9ybSByb2xsYmFjay5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgUnRWaWV3UmVmcmVzaFVzZUN1cnJlbnRSb3coKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRTdWJUeXBlID09PSBFdmVudFN1YlR5cGUuUnRSZWZyZXNoVmlld1VzZUN1cnJlbnRSb3c7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyBzdWIgZXZlbnQgdHlwZSAodXNlIGZvciBjYW5jZWwgJiBydF92aWV3X3JlZnJlc2ggYWN0aW9uKVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgU2V0RXZlbnRTdWJUeXBlKGV2ZW50U3ViVHlwZTogRXZlbnRTdWJUeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLl9ldmVudFN1YlR5cGUgPSBldmVudFN1YlR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBGaWVsZEJhc2Ugd2hvc2UgY2hhbmdlIHRyaWdnZXJlZCB0aGlzIGV2ZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+cmVmZXJlbmNlIHRvIHRoZSBmaWVsZCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQ8L3JldHVybnM+XHJcbiAgZ2V0RmxkKCk6IEd1aUZpZWxkQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRGbGQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgR3VpIEV2ZW50IC0gZXZlbnQgdGhhdCB3ZXJlIGFkZGVkIGJ5IEd1aSBMYXllciwgbGlrZSBjbGljaywgdGltZXIsIGVjdFxyXG4gIC8vLyAgIEZvciBhbGwgdGhpcyBldmVudCB0aGUgcHJpb3JpdHkgaXMgbG93XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgZm9yIEdVSSBFdmVudHMgPC9yZXR1cm5zPlxyXG4gIGlzR3VpVHJpZ2dlcmVkRXZlbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ3VpVHJpZ2dlcmVkRXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHByaW9yaXR5IDwvcmV0dXJucz5cclxuICBnZXRQcmlvcml0eSgpOiBQcmlvcml0eSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJpb3JpdHk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyBwcmlvcml0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcmlvcml0eVwiPiA8L3BhcmFtPlxyXG4gIHNldFByaW9yaXR5KHByaW9yaXR5OiBQcmlvcml0eSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJpb3JpdHkgPSBwcmlvcml0eTtcclxuICB9XHJcblxyXG4gIGlzSWRsZVRpbWVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzSWRsZVRpbWVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmFsID0gdmFsO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldFN0YXJ0U2VsZWN0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uU3RhcnQ7XHJcbiAgfVxyXG5cclxuICBnZXRFbmRTZWxlY3Rpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25FbmQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0cyBzZXRFZGl0UGFybXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwic3RhcnRcIj5zdGFydCBzZWxlY3Rpb248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZW5kXCI+ZW5kIHNlbGVjdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0ZXh0XCI+dGhlIHRleHQgYmVpbmcgd3JpdHRlbjwvcGFyYW0+XHJcbiAgc2V0RWRpdFBhcm1zKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb25FbmQgPSBlbmQ7XHJcbiAgICB0aGlzLnNldFZhbHVlKHRleHQpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBmb3IgcHJvZHVjZUNsaWNrIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNQcm9kdWNlQ2xpY2soKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvZHVjZUNsaWNrO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBwcm9kdWNlIGNsaWNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb2R1Y2VDbGlja1wiPjwvcGFyYW0+XHJcbiAgc2V0UHJvZHVjZUNsaWNrKHByb2R1Y2VDbGljazogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJvZHVjZUNsaWNrID0gcHJvZHVjZUNsaWNrO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIGFjdGlvbiBsaXN0IHRvIGVuYWJsZS9kaXNhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldEFjdEVuYWJsZUxpc3QoKTogbnVtYmVyW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdEVuYWJsZUxpc3Q7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHNlbmQgYWxsIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNTZW5kQWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbmRBbGw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHNlbmRhbGwgZmxhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzZW5kQWxsXCI+IDwvcGFyYW0+XHJcbiAgc2V0U2VuZEFsbChzZW5kQWxsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZW5kQWxsID0gc2VuZEFsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBDaGVjayBpZiB0aGlzIGV2ZW50IGlzIGJsb2NrZWQgYnkgdGhlIGN1cnJlbnRseSBhY3RpdmUgd2luZG93LiBJZiB0aGVcclxuICAvLy8gICBjdXJyZW50IHdpbmRvdyBpcyBtb2RhbCwgYW5kIHRoZSBldmVudCBkZWZpbmVkIGluIG9uZSBvZiBpdHMgYW5jZXN0b3JzLFxyXG4gIC8vLyAgIHRoZSBldmVudCBzaG91bGQgbm90IGJlIGV4ZWN1dGVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJhY3RpdmVXaW5kb3dEYXRhXCI+VGhlIE1HRGF0YSBvYmplY3QgZGVzY3JpYmluZyB0aGUgY3VycmVudGx5IGFjdGl2ZSB3aW5kb3cuPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+XHJcbiAgLy8vICAgVGhlIG1ldGhvZCByZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnRseSBhY3RpdmUgd2luZG93IGlzIG1vZGFsIGlzIGFcclxuICAvLy8gICBkZXNjZW5kYW50IG9mIHRoZSBldmVudCdzIHRhc2suIE90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLlxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgcHVibGljIGlzQmxvY2tlZEJ5TW9kYWxXaW5kb3coYWN0aXZlV2luZG93RGF0YTogTUdEYXRhKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYWN0aXZlV2luZG93RGF0YS5Jc01vZGFsKSB7XHJcbiAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGV2ZW50J3MgdGFzayBpcyBhbiBhbmNlc3RvciBvZiB0aGUgYWN0aXZlIHdpbmRvdydzIHRhc2suXHJcbiAgICAgIGxldCBldmVudFRhc2s6IFRhc2tCYXNlID0gdGhpcy5nZXRUYXNrKCk7XHJcbiAgICAgIGxldCBiYXNlVGFzazogVGFza0Jhc2UgPSBhY3RpdmVXaW5kb3dEYXRhLmdldFRhc2soMCk7XHJcbiAgICAgIGlmIChldmVudFRhc2sgIT09IGJhc2VUYXNrICYmIGJhc2VUYXNrLmlzRGVzY2VuZGVudE9mKGV2ZW50VGFzaykpXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KFwie3tSVEV2ZW50IHswfSAoezF9KSwgdHlwZSB7Mn17M319fVwiLCBbXHJcbiAgICAgIHRoaXMuZ2V0QnJrTGV2ZWwoKSwgdGhpcy5JbnRlcm5hbEV2ZW50LCB0aGlzLl90eXBlLCAodGhpcy5fdGFzayA9PT0gbnVsbCkgPyBcIlwiIDogKFwiIG9uIFwiICsgdGhpcy5fdGFzaylcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -44,4 +44,4 @@ export class UserEventsTable {
44
44
  return this._userEventsTab.length;
45
45
  }
46
46
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckV2ZW50c1RhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ldmVudC9Vc2VyRXZlbnRzVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFFbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsTUFBTSxPQUFPLGVBQWU7SUFDbEIsY0FBYyxHQUFnQixJQUFJLENBQUM7SUFLM0M7UUFDRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksSUFBSSxFQUFTLENBQUM7SUFDMUMsQ0FBQztJQUtELFFBQVEsQ0FBQyxHQUFTLEVBQUMsTUFBaUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBTU8sZ0JBQWdCLENBQUMsTUFBaUIsRUFBRSxZQUFvQixFQUFFLEdBQVM7UUFDekUsSUFBSSxZQUFZLEtBQUssSUFBSTtZQUN2QixPQUFPLEtBQUssQ0FBQztRQUVmLFFBQVEsWUFBWSxFQUFFLENBQUM7WUFDckIsS0FBSyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDakMsSUFBSSxHQUFHLEdBQVUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDN0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssY0FBYyxDQUFDLGtCQUFrQjtnQkFDcEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXBHLE1BQU07WUFFUixLQUFLLGNBQWMsQ0FBQyxzQkFBc0I7Z0JBQ3hDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUMvQixPQUFPLEtBQUssQ0FBQztZQUVmO2dCQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsNkRBQTZELEdBQUcsWUFBWSxDQUFDLENBQUM7Z0JBQ3pILE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFNRCxRQUFRLENBQUMsR0FBVztRQUVsQixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtZQUM5RSxPQUFPLElBQUksQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQU1ELE9BQU87UUFFTCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSTtZQUM5QixPQUFPLENBQUMsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlzdCB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTG9nZ2VyLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlciB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vdGFza3MvVGFzayc7XHJcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudCc7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5cclxuLy8gVXNlciBldmVudHMgdGFibGU6PHVzZXJldmVudHM+IGV2ZW50IOKApjwvdXNlcmV2ZW50cz5cclxuZXhwb3J0IGNsYXNzIFVzZXJFdmVudHNUYWJsZSB7XHJcbiAgcHJpdmF0ZSBfdXNlckV2ZW50c1RhYjogTGlzdDxFdmVudD4gPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl91c2VyRXZlbnRzVGFiID0gbmV3IExpc3Q8RXZlbnQ+KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgaW5wdXQgc3RyaW5nIGFuZCBmaWxsIGlubmVyIGRhdGEgOiBWZWN0b3IgdXNlckV2ZW50c1RhYlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEodHNrOiBUYXNrLHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICB3aGlsZSAodGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlciwgcGFyc2VyLmdldE5leHRUYWcoKSwgdHNrKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPnBvc3NpYmxlICB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgdHNrOiBUYXNrKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgc3dpdGNoIChmb3VuZFRhZ05hbWUpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQ6IHtcclxuICAgICAgICBsZXQgZXZ0OiBFdmVudCA9IG5ldyBFdmVudCgpO1xyXG4gICAgICAgIGV2dC5maWxsRGF0YShwYXJzZXIsIHRzayk7XHJcbiAgICAgICAgdGhpcy5fdXNlckV2ZW50c1RhYi5wdXNoKGV2dCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUl9FVkVOVFM6XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIC8vIGVuZCBvZiBvdXRlciB0YWcgYW5kIGl0cyBcIj5cIlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUl9FVkVOVFNfRU5EOlxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIFVzZXJFdmVudHNUYWJsZS5pbml0SW5uZXJPYmplY3RzIDogXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB1c2VyIGV2ZW50IGJ5IGl0cyBpbmRleCBpbiB0aGUgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBpbmRleCBvZiB0aGUgcmVxdWVzdGVkIGV2ZW50IDwvcGFyYW0+XHJcbiAgZ2V0RXZlbnQoaWR4OiBudW1iZXIpOiBFdmVudCB7XHJcblxyXG4gICAgaWYgKGlkeCA8IDAgfHwgdGhpcy5fdXNlckV2ZW50c1RhYiA9PT0gbnVsbCB8fCBpZHggPj0gdGhpcy5fdXNlckV2ZW50c1RhYi5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJFdmVudHNUYWIuZ2V0X0l0ZW0oaWR4KTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHNpemUgb2YgdGhlIHVzZXIgZXZlbnRzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcblxyXG4gICAgaWYgKHRoaXMuX3VzZXJFdmVudHNUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJFdmVudHNUYWIubGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iXX0=
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlckV2ZW50c1RhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ldmVudC9Vc2VyRXZlbnRzVGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sa0JBQWtCLENBQUM7QUFFbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHbkQsTUFBTSxPQUFPLGVBQWU7SUFDbEIsY0FBYyxHQUFnQixJQUFJLENBQUM7SUFLM0M7UUFDRSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksSUFBSSxFQUFTLENBQUM7SUFDMUMsQ0FBQztJQUtELFFBQVEsQ0FBQyxHQUFTLEVBQUMsTUFBaUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtTQUMvRDtJQUNILENBQUM7SUFNTyxnQkFBZ0IsQ0FBQyxNQUFpQixFQUFFLFlBQW9CLEVBQUUsR0FBUztRQUN6RSxJQUFJLFlBQVksS0FBSyxJQUFJO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBRWYsUUFBUSxZQUFZLEVBQUU7WUFDcEIsS0FBSyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzdCLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsTUFBTTthQUNQO1lBQ0QsS0FBSyxjQUFjLENBQUMsa0JBQWtCO2dCQUNwQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFcEcsTUFBTTtZQUVSLEtBQUssY0FBYyxDQUFDLHNCQUFzQjtnQkFDeEMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQy9CLE9BQU8sS0FBSyxDQUFDO1lBRWY7Z0JBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyw2REFBNkQsR0FBRyxZQUFZLENBQUMsQ0FBQztnQkFDekgsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFNRCxRQUFRLENBQUMsR0FBVztRQUVsQixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTTtZQUM5RSxPQUFPLElBQUksQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQU1ELE9BQU87UUFFTCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSTtZQUM5QixPQUFPLENBQUMsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlzdCB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTG9nZ2VyLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlciB9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vdGFza3MvVGFzayc7XHJcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudCc7XHJcbmltcG9ydCB7IENvbnN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5cclxuLy8gVXNlciBldmVudHMgdGFibGU6PHVzZXJldmVudHM+IGV2ZW50IOKApjwvdXNlcmV2ZW50cz5cclxuZXhwb3J0IGNsYXNzIFVzZXJFdmVudHNUYWJsZSB7XHJcbiAgcHJpdmF0ZSBfdXNlckV2ZW50c1RhYjogTGlzdDxFdmVudD4gPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLl91c2VyRXZlbnRzVGFiID0gbmV3IExpc3Q8RXZlbnQ+KCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgaW5wdXQgc3RyaW5nIGFuZCBmaWxsIGlubmVyIGRhdGEgOiBWZWN0b3IgdXNlckV2ZW50c1RhYlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZmlsbERhdGEodHNrOiBUYXNrLHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICB3aGlsZSAodGhpcy5pbml0SW5uZXJPYmplY3RzKHBhcnNlciwgcGFyc2VyLmdldE5leHRUYWcoKSwgdHNrKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPnBvc3NpYmxlICB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgdHNrOiBUYXNrKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZm91bmRUYWdOYW1lID09PSBudWxsKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgc3dpdGNoIChmb3VuZFRhZ05hbWUpIHtcclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfRVZFTlQ6IHtcclxuICAgICAgICBsZXQgZXZ0OiBFdmVudCA9IG5ldyBFdmVudCgpO1xyXG4gICAgICAgIGV2dC5maWxsRGF0YShwYXJzZXIsIHRzayk7XHJcbiAgICAgICAgdGhpcy5fdXNlckV2ZW50c1RhYi5wdXNoKGV2dCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUl9FVkVOVFM6XHJcbiAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19DTE9TRSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKSArIDEpO1xyXG4gICAgICAgIC8vIGVuZCBvZiBvdXRlciB0YWcgYW5kIGl0cyBcIj5cIlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUl9FVkVOVFNfRU5EOlxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIFVzZXJFdmVudHNUYWJsZS5pbml0SW5uZXJPYmplY3RzIDogXCIgKyBmb3VuZFRhZ05hbWUpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCB1c2VyIGV2ZW50IGJ5IGl0cyBpbmRleCBpbiB0aGUgdmVjdG9yXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImlkeFwiPnRoZSBpbmRleCBvZiB0aGUgcmVxdWVzdGVkIGV2ZW50IDwvcGFyYW0+XHJcbiAgZ2V0RXZlbnQoaWR4OiBudW1iZXIpOiBFdmVudCB7XHJcblxyXG4gICAgaWYgKGlkeCA8IDAgfHwgdGhpcy5fdXNlckV2ZW50c1RhYiA9PT0gbnVsbCB8fCBpZHggPj0gdGhpcy5fdXNlckV2ZW50c1RhYi5sZW5ndGgpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJFdmVudHNUYWIuZ2V0X0l0ZW0oaWR4KTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IHNpemUgb2YgdGhlIHVzZXIgZXZlbnRzIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcblxyXG4gICAgaWYgKHRoaXMuX3VzZXJFdmVudHNUYWIgPT09IG51bGwpXHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJFdmVudHNUYWIubGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -54,4 +54,4 @@ export class ExpTable {
54
54
  return count;
55
55
  }
56
56
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V4cC9FeHBUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxRQUFRO0lBQ1gsS0FBSyxHQUFxQixJQUFJLElBQUksRUFBYyxDQUFDO0lBUXpELFFBQVEsQ0FBQyxJQUFVLEVBQUUsTUFBaUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBT08sZ0JBQWdCLENBQUMsTUFBaUIsRUFBRSxZQUFvQixFQUFFLElBQVU7UUFDMUUsSUFBSSxZQUFZLEtBQUssSUFBSTtZQUN2QixPQUFPLEtBQUssQ0FBQztRQUVmLElBQUksWUFBWSxLQUFLLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxJQUFJLFVBQVUsR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLENBQUM7YUFDSSxJQUFJLFlBQVksS0FBSyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekQsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRixDQUFDO2FBQ0ksSUFBSSxZQUFZLEtBQUssQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDakUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO2FBQ0ksQ0FBQztZQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsdURBQXVELEdBQUcsWUFBWSxDQUFDLENBQUM7WUFDbkgsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBT0QsVUFBVSxDQUFDLEVBQVU7UUFDbkIsSUFBSSxHQUFlLENBQUM7UUFDcEIsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUNSLE9BQU8sSUFBSSxDQUFDO1FBRWQsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbkQsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQ3BCLE9BQU8sR0FBRyxDQUFDO1lBRWIsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNiLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFPRCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLEdBQUcsR0FBZSxJQUFJLENBQUM7UUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDckMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQU1ELE9BQU87UUFDTCxJQUFJLEtBQUssR0FBVyxDQUFDLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUk7WUFDckIsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTVCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlzdCB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTG9nZ2VyLCBYbWxQYXJzZXIgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4vRXhwcmVzc2lvbic7XHJcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi90YXNrcy9UYXNrJztcclxuaW1wb3J0IHsgQ29uc3RJbnRlcmZhY2UgfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXhwVGFibGUge1xyXG4gIHByaXZhdGUgX2V4cHM6IExpc3Q8RXhwcmVzc2lvbj4gPSBuZXcgTGlzdDxFeHByZXNzaW9uPigpO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQWxsIGRhdGEgaW5zaWRlIDxleHB0YWJsZT4gLi4uPC9leHB0YWJsZT5cclxuICAvLy8gICBGdW5jdGlvbiBmb3IgZmlsbGluZyBvd24gZmllbGRzLCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlubmVyIG9iamVzY3RzLlxyXG4gIC8vLyAgIFBhcnNpbmcgdGhlIGlucHV0IFN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPnRvIHBhcmVudCB0YXNrPC9wYXJhbT5cclxuICBmaWxsRGF0YSh0YXNrOiBUYXNrLCBwYXJzZXI6IFhtbFBhcnNlciApOiB2b2lkIHtcclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCB0YXNrKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPnBvc3NpYmxlICB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj50byBwYXJlbnQgVGFzazwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgdGFzazogVGFzayk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FWFApIHtcclxuICAgICAgbGV0IGV4cHJlc3Npb246IEV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbigpO1xyXG4gICAgICBleHByZXNzaW9uLmZpbGxEYXRhKHRhc2ssIHBhcnNlcik7XHJcbiAgICAgIHRoaXMuX2V4cHMucHVzaChleHByZXNzaW9uKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VYUFRBQkxFKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFwiPlwiLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7IC8vIGVuZCBvZiBvdXRlciB0YWQgYW5kIGl0cyBcIj5cIlxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSAoJy8nICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VYUFRBQkxFKSkge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBFeHBUYWJsZS5pbml0SW5uZXJPYmplY3RzKCk6IFwiICsgZm91bmRUYWdOYW1lKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBFeHByZXNzaW9uIGJ5IGl0cyBJRFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPnRoZSBpZCBvZiB0aGUgZXhwcmVzc2lvbiA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gcmVmZXJlbmNlIHRvIEV4cHJlc3Npb24gd2l0aCBpZD1JRCA8L3JldHVybnM+XHJcbiAgZ2V0RXhwQnlJZChpZDogbnVtYmVyKTogRXhwcmVzc2lvbiB7XHJcbiAgICBsZXQgZXhwOiBFeHByZXNzaW9uO1xyXG4gICAgaWYgKGlkIDwgMClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX2V4cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZXhwID0gdGhpcy5fZXhwcy5nZXRfSXRlbShpKTtcclxuICAgICAgaWYgKGV4cC5nZXRJZCgpID09PSBpZClcclxuICAgICAgICByZXR1cm4gZXhwO1xyXG5cclxuICAgICAgZXhwID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBleHA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgRXhwcmVzc2lvbiBieSBpdHMgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aXMgdGhlIGlkIG9mIHRoZSByZXF1ZXN0ZWQgZmllbGQgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCA8L3JldHVybnM+XHJcbiAgZ2V0RXhwKGlkeDogbnVtYmVyKTogRXhwcmVzc2lvbiB7XHJcbiAgICBsZXQgZXhwOiBFeHByZXNzaW9uID0gbnVsbDtcclxuICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLl9leHBzLmxlbmd0aClcclxuICAgICAgZXhwID0gdGhpcy5fZXhwcy5nZXRfSXRlbShpZHgpO1xyXG5cclxuICAgIHJldHVybiBleHA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgRXhwcmVzc2lvbnMgaW4gdGhlIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHRhYmxlIDwvcmV0dXJucz5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX2V4cHMgIT09IG51bGwpXHJcbiAgICAgIGNvdW50ID0gdGhpcy5fZXhwcy5sZW5ndGg7XHJcblxyXG4gICAgcmV0dXJuIGNvdW50O1xyXG4gIH1cclxufVxyXG4iXX0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwVGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2V4cC9FeHBUYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxRQUFRO0lBQ1gsS0FBSyxHQUFxQixJQUFJLElBQUksRUFBYyxDQUFDO0lBUXpELFFBQVEsQ0FBQyxJQUFVLEVBQUUsTUFBaUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNoRTtJQUNILENBQUM7SUFPTyxnQkFBZ0IsQ0FBQyxNQUFpQixFQUFFLFlBQW9CLEVBQUUsSUFBVTtRQUMxRSxJQUFJLFlBQVksS0FBSyxJQUFJO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1FBRWYsSUFBSSxZQUFZLEtBQUssY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUM5QyxJQUFJLFVBQVUsR0FBZSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdCO2FBQ0ksSUFBSSxZQUFZLEtBQUssY0FBYyxDQUFDLGVBQWUsRUFBRTtZQUN4RCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ2xGO2FBQ0ksSUFBSSxZQUFZLEtBQUssQ0FBQyxHQUFHLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQ2hFLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFDSTtZQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsdURBQXVELEdBQUcsWUFBWSxDQUFDLENBQUM7WUFDbkgsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQU9ELFVBQVUsQ0FBQyxFQUFVO1FBQ25CLElBQUksR0FBZSxDQUFDO1FBQ3BCLElBQUksRUFBRSxHQUFHLENBQUM7WUFDUixPQUFPLElBQUksQ0FBQztRQUVkLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDcEIsT0FBTyxHQUFHLENBQUM7WUFFYixHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ1o7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFPRCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLEdBQUcsR0FBZSxJQUFJLENBQUM7UUFDM0IsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDckMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQU1ELE9BQU87UUFDTCxJQUFJLEtBQUssR0FBVyxDQUFDLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUk7WUFDckIsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTVCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGlzdCB9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHsgTG9nZ2VyLCBYbWxQYXJzZXIgfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4vRXhwcmVzc2lvbic7XHJcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi90YXNrcy9UYXNrJztcclxuaW1wb3J0IHsgQ29uc3RJbnRlcmZhY2UgfSBmcm9tICcuLi9Db25zdEludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXhwVGFibGUge1xyXG4gIHByaXZhdGUgX2V4cHM6IExpc3Q8RXhwcmVzc2lvbj4gPSBuZXcgTGlzdDxFeHByZXNzaW9uPigpO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQWxsIGRhdGEgaW5zaWRlIDxleHB0YWJsZT4gLi4uPC9leHB0YWJsZT5cclxuICAvLy8gICBGdW5jdGlvbiBmb3IgZmlsbGluZyBvd24gZmllbGRzLCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGlubmVyIG9iamVzY3RzLlxyXG4gIC8vLyAgIFBhcnNpbmcgdGhlIGlucHV0IFN0cmluZy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1wiPnRvIHBhcmVudCB0YXNrPC9wYXJhbT5cclxuICBmaWxsRGF0YSh0YXNrOiBUYXNrLCBwYXJzZXI6IFhtbFBhcnNlciApOiB2b2lkIHtcclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCB0YXNrKSkge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFRvIGFsbG9jYXRlIGFuZCBmaWxsIGlubmVyIG9iamVjdHMgb2YgdGhlIGNsYXNzXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvdW5kVGFnTmFtZVwiPnBvc3NpYmxlICB0YWcgbmFtZSwgbmFtZSBvZiBvYmplY3QsIHdoaWNoIG5lZWQgYmUgYWxsb2NhdGVkPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj50byBwYXJlbnQgVGFzazwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0SW5uZXJPYmplY3RzKHBhcnNlcjogWG1sUGFyc2VyLCBmb3VuZFRhZ05hbWU6IHN0cmluZywgdGFzazogVGFzayk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGZvdW5kVGFnTmFtZSA9PT0gbnVsbClcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGlmIChmb3VuZFRhZ05hbWUgPT09IENvbnN0SW50ZXJmYWNlLk1HX1RBR19FWFApIHtcclxuICAgICAgbGV0IGV4cHJlc3Npb246IEV4cHJlc3Npb24gPSBuZXcgRXhwcmVzc2lvbigpO1xyXG4gICAgICBleHByZXNzaW9uLmZpbGxEYXRhKHRhc2ssIHBhcnNlcik7XHJcbiAgICAgIHRoaXMuX2V4cHMucHVzaChleHByZXNzaW9uKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvdW5kVGFnTmFtZSA9PT0gQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VYUFRBQkxFKSB7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgocGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFwiPlwiLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpICsgMSk7IC8vIGVuZCBvZiBvdXRlciB0YWQgYW5kIGl0cyBcIj5cIlxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZm91bmRUYWdOYW1lID09PSAoJy8nICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VYUFRBQkxFKSkge1xyXG4gICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBFeHBUYWJsZS5pbml0SW5uZXJPYmplY3RzKCk6IFwiICsgZm91bmRUYWdOYW1lKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBFeHByZXNzaW9uIGJ5IGl0cyBJRFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJpZFwiPnRoZSBpZCBvZiB0aGUgZXhwcmVzc2lvbiA8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gcmVmZXJlbmNlIHRvIEV4cHJlc3Npb24gd2l0aCBpZD1JRCA8L3JldHVybnM+XHJcbiAgZ2V0RXhwQnlJZChpZDogbnVtYmVyKTogRXhwcmVzc2lvbiB7XHJcbiAgICBsZXQgZXhwOiBFeHByZXNzaW9uO1xyXG4gICAgaWYgKGlkIDwgMClcclxuICAgICAgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHRoaXMuX2V4cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZXhwID0gdGhpcy5fZXhwcy5nZXRfSXRlbShpKTtcclxuICAgICAgaWYgKGV4cC5nZXRJZCgpID09PSBpZClcclxuICAgICAgICByZXR1cm4gZXhwO1xyXG5cclxuICAgICAgZXhwID0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBleHA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGEgRXhwcmVzc2lvbiBieSBpdHMgaW5kZXhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiaWR4XCI+aXMgdGhlIGlkIG9mIHRoZSByZXF1ZXN0ZWQgZmllbGQgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZCA8L3JldHVybnM+XHJcbiAgZ2V0RXhwKGlkeDogbnVtYmVyKTogRXhwcmVzc2lvbiB7XHJcbiAgICBsZXQgZXhwOiBFeHByZXNzaW9uID0gbnVsbDtcclxuICAgIGlmIChpZHggPj0gMCAmJiBpZHggPCB0aGlzLl9leHBzLmxlbmd0aClcclxuICAgICAgZXhwID0gdGhpcy5fZXhwcy5nZXRfSXRlbShpZHgpO1xyXG5cclxuICAgIHJldHVybiBleHA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgRXhwcmVzc2lvbnMgaW4gdGhlIHRhYmxlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG51bWJlciBvZiBmaWVsZHMgaW4gdGhlIHRhYmxlIDwvcmV0dXJucz5cclxuICBnZXRTaXplKCk6IG51bWJlciB7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuX2V4cHMgIT09IG51bGwpXHJcbiAgICAgIGNvdW50ID0gdGhpcy5fZXhwcy5sZW5ndGg7XHJcblxyXG4gICAgcmV0dXJuIGNvdW50O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -197,4 +197,4 @@ export class Expression_ReturnValue {
197
197
  this.type = type_;
198
198
  }
199
199
  }
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZXhwL0V4cHJlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFPLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJekUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSy9DLE1BQU0sT0FBTyxVQUFVO0lBQ2IsWUFBWSxHQUFtQixJQUFJLENBQUM7SUFDcEMsYUFBYSxHQUFrQixJQUFJLENBQUM7SUFDcEMsVUFBVSxHQUFXLElBQUksQ0FBQztJQUMxQixTQUFTLEdBQWMsSUFBSSxDQUFDO0lBQzVCLEdBQUcsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUNqQixZQUFZLEdBQXFCLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUN2RCxZQUFZLEdBQVcsSUFBSSxDQUFDO0lBQzVCLEtBQUssR0FBUyxJQUFJLENBQUM7SUFDbkIsS0FBSyxHQUFxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDaEQsdUJBQXVCLEdBQXFCLGdC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QyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQVNELGNBQWMsQ0FBQyxNQUFjLEVBQUUsS0FBdUI7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztDQUNGO0FBS0QsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxLQUFLLEdBQVcsSUFBSSxDQUFDO0lBQ3JCLElBQUksR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBSy9DLFlBQVksTUFBYyxFQUFFLEtBQXVCO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTlN0cmluZywgTk51bWJlciwgTnVtYmVyU3R5bGVzfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtTdG9yYWdlQXR0cmlidXRlLCBMb2dnZXIsIE1pc2MsIEJhc2U2NCwgWG1sUGFyc2VyLCBYTUxDb25zdGFudHN9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7RXhwVmFsLCBWZWN0b3JUeXBlLCBSZWNvcmRVdGlscywgTlVNX1RZUEV9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge0lSZXN1bHRWYWx1ZX0gZnJvbSBcIi4uL3J0L0lSZXN1bHRWYWx1ZVwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtDb21tYW5kc1RhYmxlfSBmcm9tIFwiLi4vQ29tbWFuZHNUYWJsZVwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb25FdmFsdWF0b3J9IGZyb20gXCIuL0V4cHJlc3Npb25FdmFsdWF0b3JcIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi4vdGFza3MvVGFza1wiO1xyXG5pbXBvcnQge1J1blRpbWVFdmVudH0gZnJvbSBcIi4uL2V2ZW50L1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge0NvbW1hbmRGYWN0b3J5fSBmcm9tIFwiLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnlcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uL2Vudi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBBY2Nlc3NIZWxwZXIgfSBmcm9tIFwiLi4vQWNjZXNzSGVscGVyXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGRhdGEgZm9yIDxleHAgLi4uPiB0YWdcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb24gaW1wbGVtZW50cyBJUmVzdWx0VmFsdWUge1xyXG4gIHByaXZhdGUgX2NtZFRvU2VydmVyOiBJQ2xpZW50Q29tbWFuZCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY21kc1RvU2VydmVyOiBDb21tYW5kc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF9jb21wdXRlQnk6IHN0cmluZyA9ICdcXDAnO1xyXG4gIHByaXZhdGUgX2V4cEJ5dGVzOiBJbnQ4QXJyYXkgPSBudWxsO1xyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAtMTtcclxuICBwcml2YXRlIF9wcmV2UmVzVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICBwcml2YXRlIF9yZXN1bHRWYWx1ZTogc3RyaW5nID0gbnVsbDsgLy8gdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgc2VydmVyXHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTsgLy8gdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCB3aGljaCBpcyByZXR1cm5lZCBieSB0aGUgc2VydmVyXHJcbiAgcHJpdmF0ZSBfY2xpZW50U3RvcmFnZUF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTsgLy8gdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCB3aXRjaCBpcyByZXR1cm5lZCBieSB0aGUgY2xpZW50ICh1c2UgZm9yIGN1c3RvbSBwcm9wZXJ0aWVzKVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0U3RvcmFnZUF0dHJpYnV0ZSgpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRTdG9yYWdlQXR0cmlidXRlO1xyXG4gIH1cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYW5kIHJldHVybiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1R5cGVcIj5pcyB0aGUgZXhwZWN0ZWQgdHlwZSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuZ3RoXCI+b2YgZXhwZWN0ZWQgQWxwaGEgc3RyaW5nIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBldmFsdWF0ZWQgdmFsdWUgb3IgbnVsbCBpZiB2YWx1ZSBldmFsdWF0ZWQgdG8gbnVsbCAoYnkgRXhwcmVzc2lvbkV2YWx1YXRvcikgPC9yZXR1cm5zPlxyXG4gIGFzeW5jIGV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgocmVzVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgbGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJldFZhbDogc3RyaW5nO1xyXG4gICAgbGV0IHJldEV4cHJlc3Npb25TdG9yYWdlIDogU3RvcmFnZUF0dHJpYnV0ZSA9ICBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgICBpZiAodGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpIHtcclxuXHJcbiAgICAgIGxldCBleHBWYWw6IEV4cFZhbCA9IGF3YWl0IEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbCh0aGlzLl9leHBCeXRlcywgcmVzVHlwZSwgdGhpcy5fdGFzayk7XHJcblxyXG4gICAgICBpZiAoZXhwVmFsLklzTnVsbClcclxuICAgICAgICByZXRWYWwgPSBudWxsO1xyXG4gICAgICBlbHNlIGlmIChyZXNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SICYmIGV4cFZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICAgIGlmIChWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKGV4cFZhbC5TdHJWYWwpKVxyXG4gICAgICAgICAgICByZXRWYWwgPSBleHBWYWwuVG9NZ1ZhbCgpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXRWYWwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZXhwVmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IgJiYgcmVzVHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJiByZXNUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpXHJcbiAgICAgICAgcmV0VmFsID0gbnVsbDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldFZhbCA9IGV4cFZhbC5Ub01nVmFsKCk7XHJcblxyXG4gICAgICBpZiAoIWV4cFZhbC5Jc051bGwpXHJcbiAgICAgICAgcmV0RXhwcmVzc2lvblN0b3JhZ2UgPSBleHBWYWwuQXR0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldExhc3RSdEV2ZW50KCk7XHJcbiAgICAgIGxldCBtcHJnQ3JlYXRvcjogVGFzayA9IG51bGw7XHJcblxyXG4gICAgICBpZiAocnRFdnQgIT09IG51bGwpXHJcbiAgICAgICAgbXByZ0NyZWF0b3IgPSA8VGFzaz5ydEV2dC5nZXRNYWluUHJnQ3JlYXRvcigpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGNvbW1hbmQgb2JqZWN0IG9ubHkgd2hlbiBuZWNlc3NhcnlcclxuICAgICAgaWYgKHJlc1R5cGUgIT09IHRoaXMuX3ByZXZSZXNUeXBlKVxyXG4gICAgICAgIHRoaXMuX2NtZFRvU2VydmVyID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRXZhbHVhdGVDb21tYW5kKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpLCByZXNUeXBlLCB0aGlzLl9pZCwgbGVuZ3RoLCBtcHJnQ3JlYXRvcik7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5leGVjUmVxdWVzdFdpdGhTdWJmb3JtUmVjb3JkQ3ljbGUodGhpcy5fY21kc1RvU2VydmVyLCB0aGlzLl9jbWRUb1NlcnZlciwgdGhpcyk7XHJcblxyXG4gICAgICBpZiAocmVzVHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmIHJlc1R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgcmV0VmFsID0gdGhpcy5fcmVzdWx0VmFsdWU7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3Jlc3VsdFZhbHVlICE9PSBudWxsICYmIHRoaXMuX3Jlc3VsdFZhbHVlID09PSBcIiBcIilcclxuICAgICAgICByZXRWYWwgPSBcIlwiO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0VmFsID0gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nKHRoaXMuX3Jlc3VsdFZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ByZXZSZXNUeXBlID0gcmVzVHlwZTtcclxuICAgIGlmIChyZXNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5PTkUpXHJcbiAgICAgIHRoaXMuX2NsaWVudFN0b3JhZ2VBdHRyaWJ1dGUgPSByZXRFeHByZXNzaW9uU3RvcmFnZTtcclxuICAgIHJldHVybiByZXRWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5ndGhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgRGlzY2FyZENuZFJhbmdlUmVzdWx0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IEV4cHJlc3Npb25FdmFsdWF0b3IuRGlzY2FyZENuZFJhbmdlUmVzdWx0KHRoaXMuX2V4cEJ5dGVzLCB0aGlzLl90YXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1R5cGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgZXZhbHVhdGVXaXRoUmVzVHlwZShyZXNUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogUHJvbWlzZTxFeHBWYWw+IHtcclxuICAgIGxldCBpc051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBleHBWYWw6IEV4cFZhbDtcclxuXHJcbiAgICBpZiAodGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpXHJcbiAgICAgIGV4cFZhbCA9IGF3YWl0IEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbCh0aGlzLl9leHBCeXRlcywgcmVzVHlwZSwgdGhpcy5fdGFzayk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBydEV2dDogUnVuVGltZUV2ZW50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIgLmdldExhc3RSdEV2ZW50KCk7XHJcbiAgICAgIGxldCBtcHJnQ3JlYXRvcjogVGFzayA9IG51bGw7XHJcblxyXG4gICAgICBpZiAocnRFdnQgIT09IG51bGwpXHJcbiAgICAgICAgbXByZ0NyZWF0b3IgPSA8VGFzaz5ydEV2dC5nZXRNYWluUHJnQ3JlYXRvcigpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGNvbW1hbmQgb2JqZWN0IG9ubHkgd2hlbiBuZWNlc3NhcnlcclxuICAgICAgaWYgKHJlc1R5cGUgIT09IHRoaXMuX3ByZXZSZXNUeXBlKVxyXG4gICAgICAgIHRoaXMuX2NtZFRvU2VydmVyID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRXZhbHVhdGVDb21tYW5kKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpLCByZXNUeXBlLCB0aGlzLl9pZCwgMCwgbXByZ0NyZWF0b3IpO1xyXG5cclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLmV4ZWNSZXF1ZXN0V2l0aFN1YmZvcm1SZWNvcmRDeWNsZSh0aGlzLl9jbWRzVG9TZXJ2ZXIsIHRoaXMuX2NtZFRvU2VydmVyLCB0aGlzKTtcclxuXHJcbiAgICAgIGxldCByZXRWYWw6IHN0cmluZztcclxuICAgICAgaWYgKHJlc1R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiByZXNUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIHJldFZhbCA9IHRoaXMuX3Jlc3VsdFZhbHVlO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLl9yZXN1bHRWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLl9yZXN1bHRWYWx1ZSA9PT0gXCIgXCIpXHJcbiAgICAgICAgcmV0VmFsID0gXCJcIjtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldFZhbCA9IFJlY29yZFV0aWxzLmJ5dGVTdHJlYW1Ub1N0cmluZyh0aGlzLl9yZXN1bHRWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAocmV0VmFsID09PSBudWxsKVxyXG4gICAgICAgIGlzTnVsbCA9IHRydWU7XHJcblxyXG4gICAgICAvLyBJZiB3ZSBkb24ndCBrbm93IHdoYXQgcmVzdWx0IHR5cGUgd2UgZ290LCBhbmQgd2FudCB0byBrZWVwIGl0LCBhcyBpbiBFeHBDYWxjXHJcbiAgICAgIGlmIChyZXNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5PTkUpXHJcbiAgICAgICAgcmVzVHlwZSA9IHRoaXMuX3R5cGU7XHJcblxyXG4gICAgICBleHBWYWwgPSBuZXcgRXhwVmFsKHJlc1R5cGUsIGlzTnVsbCwgcmV0VmFsKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ByZXZSZXNUeXBlID0gcmVzVHlwZTtcclxuICAgIHJldHVybiBleHBWYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIFJldHVyblZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeVxyXG4gIGFzeW5jIGV2YWx1YXRlV2l0aFJlc0xlbmd0aChsZW5ndGg6IG51bWJlcik6IFByb21pc2U8RXhwcmVzc2lvbl9SZXR1cm5WYWx1ZT4ge1xyXG4gICAgbGV0IHJlc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpIHtcclxuICAgICAgbGV0IGV4cFZhbDogRXhwVmFsID0gYXdhaXQgRXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsKHRoaXMuX2V4cEJ5dGVzLCByZXNUeXBlLCB0aGlzLl90YXNrKTtcclxuXHJcbiAgICAgIC8vIGV2ZW4gaWYgYWN0dWFsIGRvdG5ldCBvYmogaXMgbnVsbCwgd2UgbmVlZCB0byByZXR1cm4gYmxvYlByZWZpeFxyXG4gICAgICBpZiAoZXhwVmFsLklzTnVsbClcclxuICAgICAgICB2YWwgPSBudWxsO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gZXhwVmFsLlRvTWdWYWwoKTtcclxuXHJcbiAgICAgIHJlc1R5cGUgPSBleHBWYWwuQXR0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgdmFsID0gYXdhaXQgdGhpcy5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKHJlc1R5cGUsIGxlbmd0aCk7XHJcbiAgICAgICByZXNUeXBlID0gdGhpcy5fdHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbl9SZXR1cm5WYWx1ZSh2YWwsIHJlc1R5cGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZmlsbERhdGEodGFza1JlZjogVGFzaywgcGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8U3RyaW5nPjtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19URVJNLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG5cclxuICAgIGlmICh0aGlzLl90YXNrID09IG51bGwpXHJcbiAgICAgIHRoaXMuX3Rhc2sgPSB0YXNrUmVmO1xyXG5cclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FWFApICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VYUC5sZW5ndGgpO1xyXG4gICAgICB0b2tlbnNWZWN0b3IgPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3Rvcik7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBDb21tYW5kLkZpbGxEYXRhKCkgb3V0IG9mIHN0cmluZyBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIGV4cHJlc3Npb24gWE1MIHRhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj50aGUgdmVjdG9yIG9mIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHZhbHVlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxTdHJpbmc+KTogdm9pZCB7XHJcbiAgICBsZXQgZXhwU3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgYXR0cmlidXRlOiBTdHJpbmcsIHZhbHVlU3RyO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgYXR0cmlidXRlID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIHZhbHVlU3RyID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1ZBTFVFOlxyXG4gICAgICAgICAgLy8gaWYgd2Ugd29yayBpbiBoZXhcclxuICAgICAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREZWJ1Z0xldmVsKCkgPiAxKSB7XHJcbiAgICAgICAgICAgIGV4cFN0ciA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQnl0ZUFycmF5KGV4cFN0cik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX2V4cEJ5dGVzID0gTWlzYy5Ub1NCeXRlQXJyYXkoQmFzZTY0LmRlY29kZVRvQnl0ZSh2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSUQ6XHJcbiAgICAgICAgICB0aGlzLl9pZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT01QVVRFX0JZOlxyXG4gICAgICAgICAgdGhpcy5fY29tcHV0ZUJ5ID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIEV4cHJlc3Npb24uaW5pdEVsZW1lbnRzIGNsYXNzLiBJbnNlcnQgY2FzZSB0byBFeHByZXNzaW9uLmluaXRFbGVtZW50cyBmb3IgXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpXHJcbiAgICAgIHRoaXMuX2NtZHNUb1NlcnZlciA9IDxDb21tYW5kc1RhYmxlPnRoaXMuX3Rhc2suZ2V0TUdEYXRhKCkuQ21kc1RvU2VydmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIHRoZSBleHByZXNzaW9uIGFzIGEgYnl0ZSBhcnJheVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBidWlsZEJ5dGVBcnJheShleHBTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGV4cFN0ciA9PT0gbnVsbCB8fCBleHBTdHIubGVuZ3RoID09PSAwIHx8IGV4cFN0ci5sZW5ndGggJSAyID4gMCkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFeHByZXNzaW9uLmJ1aWxkQnl0ZUFycmF5KCkgZXhwU3RyIGNhbm5vdCBiZSBjaGFuZ2VkIFwiICsgZXhwU3RyKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2V4cEJ5dGVzID0gbmV3IEludDhBcnJheShleHBTdHIubGVuZ3RoIC8gMik7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZXhwU3RyLmxlbmd0aDsgaSA9IGkgKyAyKSB7XHJcbiAgICAgIGxldCB0d29IZXhEaWdpdHM6IHN0cmluZyA9IGV4cFN0ci5zdWJzdHIoaSwgMik7XHJcbiAgICAgIHRoaXMuX2V4cEJ5dGVzW2kgLyAyXSA9IE5VTV9UWVBFLnRvU0J5dGUoTk51bWJlci5QYXJzZSh0d29IZXhEaWdpdHMsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgSUQgb2YgdGhlIEV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldElkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBleHByZXNzaW9uIG1heSBiZSBjb21wdXRlZCBieSB0aGUgQ2xpZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbXB1dGVkQnlDbGllbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUJ5ICE9PSAnUycvKidTJyovOyAvLyBpLmUsIENsaWVudCBvciBEb24ndCBjYXJlXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBleHByZXNzaW9uIGNhbiBiZSBjb21wdXRlZCBPTkxZIGJ5IHRoZSBDbGllbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbXB1dGVkQnlDbGllbnRPbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVCeSA9PT0gJ0MnLyonQycqLztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gY2FuIGJlIGNvbXB1dGVkIE9OTFkgYnkgdGhlIFNlcnZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29tcHV0ZWRCeVNlcnZlck9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUJ5ID09PSAnUycvKidTJyovO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2soKTogVGFzayB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgcmVzdWx0IHZhbHVlIGJ5IHRoZSBSZXN1bHQgY29tbWFuZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXN1bHRcIj50aGUgcmVzdWx0IGNvbXB1dGVkIGJ5IHRoZSBzZXJ2ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVfXCI+dGhlIHR5cGUgb2YgdGhlIHJlc3VsdCB3aGljaCB3YXMgY29tcHV0ZWQgYnkgdGhlIHNlcnZlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIFNldFJlc3VsdFZhbHVlKHJlc3VsdDogc3RyaW5nLCB0eXBlXzogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVzdWx0VmFsdWUgPSByZXN1bHQ7XHJcbiAgICB0aGlzLl90eXBlID0gdHlwZV87XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KFwie3tFeHByZXNzaW9uICN7MH0gb2YgezF9fX1cIiwgdGhpcy5faWQsIHRoaXMuX3Rhc2spO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICByZXByZXNlbnRzIHRoZSByZXR1cm5lZCBldmFsdWF0ZWQgZXhwcmVzc2lvbiB2YWx1ZSBhbmQgaXQncyB0eXBlIChhdHRyaWJ1dGUpXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uX1JldHVyblZhbHVlIHtcclxuICBtZ1ZhbDogc3RyaW5nID0gbnVsbDtcclxuICB0eXBlOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IobWdWYWxfOiBzdHJpbmcsIHR5cGVfOiBTdG9yYWdlQXR0cmlidXRlKSB7XHJcbiAgICB0aGlzLm1nVmFsID0gbWdWYWxfO1xyXG4gICAgdGhpcy50eXBlID0gdHlwZV87XHJcbiAgfVxyXG59XHJcbiJdfQ==
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VuZ2luZS9zcmMvZXhwL0V4cHJlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFPLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFDLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRyxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJekUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSy9DLE1BQU0sT0FBTyxVQUFVO0lBQ2IsWUFBWSxHQUFtQixJQUFJLENBQUM7SUFDcEMsYUFBYSxHQUFrQixJQUFJLENBQUM7SUFDcEMsVUFBVSxHQUFXLElBQUksQ0FBQztJQUMxQixTQUFTLEdBQWMsSUFBSSxDQUFDO0lBQzVCLEdBQUcsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUNqQixZQUFZLEdBQXFCLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUN2RCxZQUFZLEdBQVcsSUFBSSxDQUFDO0lBQzVCLEtBQUssR0FBUyxJQUFJLENBQUM7SUFDbkIsS0FBSyxHQUFxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDaEQsdUJBQXVCLEdBQXFCLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUsxRTtJQUNBLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztJQU9ELEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxPQUF5QixFQUFFLE1BQWM7UUFDN0UsSUFBSSxNQUFjLENBQUM7UUFDbkIsSUFBSSxvQkFBb0IsR0FBdUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQ3JFLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFFM0IsSUFBSSxNQUFNLEdBQVcsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXpGLElBQUksTUFBTSxDQUFDLE1BQU07Z0JBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQztpQkFDWCxJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3hGLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQ2hELE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7O29CQUUxQixNQUFNLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO2lCQUNFLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksT0FBTyxLQUFLLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxPQUFPLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtnQkFDcEksTUFBTSxHQUFHLElBQUksQ0FBQzs7Z0JBRWQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUU1QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07Z0JBQ2hCLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDdEM7YUFDSTtZQUNILElBQUksS0FBSyxHQUFpQixZQUFZLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RFLElBQUksV0FBVyxHQUFTLElBQUksQ0FBQztZQUU3QixJQUFJLEtBQUssS0FBSyxJQUFJO2dCQUNoQixXQUFXLEdBQVMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFHaEQsSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLFlBQVk7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVILE1BQU0sWUFBWSxDQUFDLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFFOUcsSUFBSSxPQUFPLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXO2dCQUMvRSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztpQkFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEdBQUc7Z0JBQzlELE1BQU0sR0FBRyxFQUFFLENBQUM7O2dCQUVaLE1BQU0sR0FBRyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDNUIsSUFBSSxPQUFPLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtZQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsb0JBQW9CLENBQUM7UUFDdEQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQVFELEtBQUssQ0FBQyxxQkFBcUI7UUFDekIsT0FBTyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFPRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBeUI7UUFDakQsSUFBSSxNQUFNLEdBQVksS0FBSyxDQUFDO1FBQzVCLElBQUksTUFBYyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLE1BQU0sR0FBRyxNQUFNLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFFMUU7WUFDSCxJQUFJLEtBQUssR0FBaUIsWUFBWSxDQUFDLGFBQWEsQ0FBRSxjQUFjLEVBQUUsQ0FBQztZQUN2RSxJQUFJLFdBQVcsR0FBUyxJQUFJLENBQUM7WUFFN0IsSUFBSSxLQUFLLEtBQUssSUFBSTtnQkFDaEIsV0FBVyxHQUFTLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBR2hELElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxZQUFZO2dCQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUV2SCxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTlHLElBQUksTUFBYyxDQUFDO1lBQ25CLElBQUksT0FBTyxLQUFLLGdCQUFnQixDQUFDLElBQUksSUFBSSxPQUFPLEtBQUssZ0JBQWdCLENBQUMsV0FBVztnQkFDL0UsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7aUJBQ3hCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxHQUFHO2dCQUM5RCxNQUFNLEdBQUcsRUFBRSxDQUFDOztnQkFFWixNQUFNLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUU3RCxJQUFJLE1BQU0sS0FBSyxJQUFJO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDO1lBR2hCLElBQUksT0FBTyxLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ25DLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBRXZCLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQU1ELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUFjO1FBQ3hDLElBQUksT0FBTyxHQUFxQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDdEQsSUFBSSxHQUFXLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtZQUMzQixJQUFJLE1BQU0sR0FBVyxNQUFNLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFHekYsSUFBSSxNQUFNLENBQUMsTUFBTTtnQkFDZixHQUFHLEdBQUcsSUFBSSxDQUFDOztnQkFFWCxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXpCLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ3ZCO2FBQ0k7WUFDRixHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBS00sUUFBUSxDQUFDLE9BQWEsRUFBRSxNQUFpQjtRQUM5QyxJQUFJLFlBQTBCLENBQUM7UUFDL0IsSUFBSSxVQUFVLEdBQVcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRW5HLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJO1lBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBRXZCLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFO1lBRWhFLElBQUksR0FBRyxHQUFXLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hHLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRTs7WUFFQyxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQU9PLFlBQVksQ0FBQyxZQUEwQjtRQUM3QyxJQUFJLE1BQWMsQ0FBQztRQUNuQixJQUFJLFNBQWlCLEVBQUUsUUFBUSxDQUFDO1FBRWhDLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkQsU0FBUyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFMUMsUUFBUSxTQUFTLEVBQUU7Z0JBQ2pCLEtBQUssWUFBWSxDQUFDLGFBQWE7b0JBRTdCLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQzVDLE1BQU0sR0FBRyxRQUFRLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQzdCOzt3QkFFQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUNwRSxNQUFNO2dCQUVSLEtBQUssWUFBWSxDQUFDLFVBQVU7b0JBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdEMsTUFBTTtnQkFFUixLQUFLLGNBQWMsQ0FBQyxrQkFBa0I7b0JBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QixNQUFNO2dCQUVSO29CQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsb0dBQW9HLEdBQUcsU0FBUyxDQUFDLENBQUM7b0JBQzdKLE1BQU07YUFDVDtTQUNGO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixJQUFJLENBQUMsYUFBYSxHQUFrQixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQztJQUM1RSxDQUFDO0lBS08sY0FBYyxDQUFDLE1BQWM7UUFDbkMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuRSxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLDBEQUEwRCxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ2hILE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNwRCxJQUFJLFlBQVksR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQy9GO0lBQ0gsQ0FBQztJQUtELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUtPLGdCQUFnQjtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssR0FBRyxDQUFRO0lBQ3hDLENBQUM7SUFLRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBUTtJQUN4QyxDQUFDO0lBS0Qsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQVE7SUFDeEMsQ0FBQztJQUtELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQVNELGNBQWMsQ0FBQyxNQUFjLEVBQUUsS0FBdUI7UUFDcEQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztDQUNGO0FBS0QsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxLQUFLLEdBQVcsSUFBSSxDQUFDO0lBQ3JCLElBQUksR0FBcUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBSy9DLFlBQVksTUFBYyxFQUFFLEtBQXVCO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TGlzdCwgTlN0cmluZywgTk51bWJlciwgTnVtYmVyU3R5bGVzfSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtTdG9yYWdlQXR0cmlidXRlLCBMb2dnZXIsIE1pc2MsIEJhc2U2NCwgWG1sUGFyc2VyLCBYTUxDb25zdGFudHN9IGZyb20gXCJAbWFnaWMteHBhL3V0aWxzXCI7XHJcbmltcG9ydCB7RXhwVmFsLCBWZWN0b3JUeXBlLCBSZWNvcmRVdGlscywgTlVNX1RZUEV9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge0lSZXN1bHRWYWx1ZX0gZnJvbSBcIi4uL3J0L0lSZXN1bHRWYWx1ZVwiO1xyXG5pbXBvcnQge0lDbGllbnRDb21tYW5kfSBmcm9tIFwiLi4vY29tbWFuZHMvSUNsaWVudENvbW1hbmRcIjtcclxuaW1wb3J0IHtDb21tYW5kc1RhYmxlfSBmcm9tIFwiLi4vQ29tbWFuZHNUYWJsZVwiO1xyXG5pbXBvcnQge0V4cHJlc3Npb25FdmFsdWF0b3J9IGZyb20gXCIuL0V4cHJlc3Npb25FdmFsdWF0b3JcIjtcclxuaW1wb3J0IHtUYXNrfSBmcm9tIFwiLi4vdGFza3MvVGFza1wiO1xyXG5pbXBvcnQge1J1blRpbWVFdmVudH0gZnJvbSBcIi4uL2V2ZW50L1J1blRpbWVFdmVudFwiO1xyXG5pbXBvcnQge0NvbW1hbmRGYWN0b3J5fSBmcm9tIFwiLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnlcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uL2Vudi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBBY2Nlc3NIZWxwZXIgfSBmcm9tIFwiLi4vQWNjZXNzSGVscGVyXCI7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIGRhdGEgZm9yIDxleHAgLi4uPiB0YWdcclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb24gaW1wbGVtZW50cyBJUmVzdWx0VmFsdWUge1xyXG4gIHByaXZhdGUgX2NtZFRvU2VydmVyOiBJQ2xpZW50Q29tbWFuZCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY21kc1RvU2VydmVyOiBDb21tYW5kc1RhYmxlID0gbnVsbDtcclxuICBwcml2YXRlIF9jb21wdXRlQnk6IHN0cmluZyA9ICdcXDAnO1xyXG4gIHByaXZhdGUgX2V4cEJ5dGVzOiBJbnQ4QXJyYXkgPSBudWxsO1xyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAtMTtcclxuICBwcml2YXRlIF9wcmV2UmVzVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTtcclxuICBwcml2YXRlIF9yZXN1bHRWYWx1ZTogc3RyaW5nID0gbnVsbDsgLy8gdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgc2VydmVyXHJcbiAgcHJpdmF0ZSBfdGFzazogVGFzayA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdHlwZTogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTsgLy8gdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCB3aGljaCBpcyByZXR1cm5lZCBieSB0aGUgc2VydmVyXHJcbiAgcHJpdmF0ZSBfY2xpZW50U3RvcmFnZUF0dHJpYnV0ZTogU3RvcmFnZUF0dHJpYnV0ZSA9IFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTsgLy8gdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCB3aXRjaCBpcyByZXR1cm5lZCBieSB0aGUgY2xpZW50ICh1c2UgZm9yIGN1c3RvbSBwcm9wZXJ0aWVzKVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0U3RvcmFnZUF0dHJpYnV0ZSgpOiBTdG9yYWdlQXR0cmlidXRlIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRTdG9yYWdlQXR0cmlidXRlO1xyXG4gIH1cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYW5kIHJldHVybiB0aGUgcmVzdWx0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInJlc1R5cGVcIj5pcyB0aGUgZXhwZWN0ZWQgdHlwZSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGVuZ3RoXCI+b2YgZXhwZWN0ZWQgQWxwaGEgc3RyaW5nIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBldmFsdWF0ZWQgdmFsdWUgb3IgbnVsbCBpZiB2YWx1ZSBldmFsdWF0ZWQgdG8gbnVsbCAoYnkgRXhwcmVzc2lvbkV2YWx1YXRvcikgPC9yZXR1cm5zPlxyXG4gIGFzeW5jIGV2YWx1YXRlV2l0aFJlc3VsdFR5cGVBbmRMZW5ndGgocmVzVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSwgbGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgbGV0IHJldFZhbDogc3RyaW5nO1xyXG4gICAgbGV0IHJldEV4cHJlc3Npb25TdG9yYWdlIDogU3RvcmFnZUF0dHJpYnV0ZSA9ICBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgICBpZiAodGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpIHtcclxuXHJcbiAgICAgIGxldCBleHBWYWw6IEV4cFZhbCA9IGF3YWl0IEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbCh0aGlzLl9leHBCeXRlcywgcmVzVHlwZSwgdGhpcy5fdGFzayk7XHJcblxyXG4gICAgICBpZiAoZXhwVmFsLklzTnVsbClcclxuICAgICAgICByZXRWYWwgPSBudWxsO1xyXG4gICAgICBlbHNlIGlmIChyZXNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SICYmIGV4cFZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpIHtcclxuICAgICAgICAgIGlmIChWZWN0b3JUeXBlLnZhbGlkYXRlQmxvYkNvbnRlbnRzKGV4cFZhbC5TdHJWYWwpKVxyXG4gICAgICAgICAgICByZXRWYWwgPSBleHBWYWwuVG9NZ1ZhbCgpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXRWYWwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoZXhwVmFsLkF0dHIgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IgJiYgcmVzVHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUiAmJiByZXNUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0IpXHJcbiAgICAgICAgcmV0VmFsID0gbnVsbDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldFZhbCA9IGV4cFZhbC5Ub01nVmFsKCk7XHJcblxyXG4gICAgICBpZiAoIWV4cFZhbC5Jc051bGwpXHJcbiAgICAgICAgcmV0RXhwcmVzc2lvblN0b3JhZ2UgPSBleHBWYWwuQXR0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgcnRFdnQ6IFJ1blRpbWVFdmVudCA9IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmdldExhc3RSdEV2ZW50KCk7XHJcbiAgICAgIGxldCBtcHJnQ3JlYXRvcjogVGFzayA9IG51bGw7XHJcblxyXG4gICAgICBpZiAocnRFdnQgIT09IG51bGwpXHJcbiAgICAgICAgbXByZ0NyZWF0b3IgPSA8VGFzaz5ydEV2dC5nZXRNYWluUHJnQ3JlYXRvcigpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGNvbW1hbmQgb2JqZWN0IG9ubHkgd2hlbiBuZWNlc3NhcnlcclxuICAgICAgaWYgKHJlc1R5cGUgIT09IHRoaXMuX3ByZXZSZXNUeXBlKVxyXG4gICAgICAgIHRoaXMuX2NtZFRvU2VydmVyID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRXZhbHVhdGVDb21tYW5kKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpLCByZXNUeXBlLCB0aGlzLl9pZCwgbGVuZ3RoLCBtcHJnQ3JlYXRvcik7XHJcbiAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5tZ0RhdGFUYWJsZS5leGVjUmVxdWVzdFdpdGhTdWJmb3JtUmVjb3JkQ3ljbGUodGhpcy5fY21kc1RvU2VydmVyLCB0aGlzLl9jbWRUb1NlcnZlciwgdGhpcyk7XHJcblxyXG4gICAgICBpZiAocmVzVHlwZSAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CICYmIHJlc1R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1IpXHJcbiAgICAgICAgcmV0VmFsID0gdGhpcy5fcmVzdWx0VmFsdWU7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3Jlc3VsdFZhbHVlICE9PSBudWxsICYmIHRoaXMuX3Jlc3VsdFZhbHVlID09PSBcIiBcIilcclxuICAgICAgICByZXRWYWwgPSBcIlwiO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0VmFsID0gUmVjb3JkVXRpbHMuYnl0ZVN0cmVhbVRvU3RyaW5nKHRoaXMuX3Jlc3VsdFZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ByZXZSZXNUeXBlID0gcmVzVHlwZTtcclxuICAgIGlmIChyZXNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5PTkUpXHJcbiAgICAgIHRoaXMuX2NsaWVudFN0b3JhZ2VBdHRyaWJ1dGUgPSByZXRFeHByZXNzaW9uU3RvcmFnZTtcclxuICAgIHJldHVybiByZXRWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXNUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsZW5ndGhcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgRGlzY2FyZENuZFJhbmdlUmVzdWx0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IEV4cHJlc3Npb25FdmFsdWF0b3IuRGlzY2FyZENuZFJhbmdlUmVzdWx0KHRoaXMuX2V4cEJ5dGVzLCB0aGlzLl90YXNrKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1R5cGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgYXN5bmMgZXZhbHVhdGVXaXRoUmVzVHlwZShyZXNUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogUHJvbWlzZTxFeHBWYWw+IHtcclxuICAgIGxldCBpc051bGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBleHBWYWw6IEV4cFZhbDtcclxuXHJcbiAgICBpZiAodGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpXHJcbiAgICAgIGV4cFZhbCA9IGF3YWl0IEV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbCh0aGlzLl9leHBCeXRlcywgcmVzVHlwZSwgdGhpcy5fdGFzayk7XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBydEV2dDogUnVuVGltZUV2ZW50ID0gQWNjZXNzSGVscGVyLmV2ZW50c01hbmFnZXIgLmdldExhc3RSdEV2ZW50KCk7XHJcbiAgICAgIGxldCBtcHJnQ3JlYXRvcjogVGFzayA9IG51bGw7XHJcblxyXG4gICAgICBpZiAocnRFdnQgIT09IG51bGwpXHJcbiAgICAgICAgbXByZ0NyZWF0b3IgPSA8VGFzaz5ydEV2dC5nZXRNYWluUHJnQ3JlYXRvcigpO1xyXG5cclxuICAgICAgLy8gY3JlYXRlIGEgbmV3IGNvbW1hbmQgb2JqZWN0IG9ubHkgd2hlbiBuZWNlc3NhcnlcclxuICAgICAgaWYgKHJlc1R5cGUgIT09IHRoaXMuX3ByZXZSZXNUeXBlKVxyXG4gICAgICAgIHRoaXMuX2NtZFRvU2VydmVyID0gQ29tbWFuZEZhY3RvcnkuQ3JlYXRlRXZhbHVhdGVDb21tYW5kKHRoaXMuX3Rhc2suZ2V0VGFza1RhZygpLCByZXNUeXBlLCB0aGlzLl9pZCwgMCwgbXByZ0NyZWF0b3IpO1xyXG5cclxuICAgICAgYXdhaXQgQWNjZXNzSGVscGVyLm1nRGF0YVRhYmxlLmV4ZWNSZXF1ZXN0V2l0aFN1YmZvcm1SZWNvcmRDeWNsZSh0aGlzLl9jbWRzVG9TZXJ2ZXIsIHRoaXMuX2NtZFRvU2VydmVyLCB0aGlzKTtcclxuXHJcbiAgICAgIGxldCByZXRWYWw6IHN0cmluZztcclxuICAgICAgaWYgKHJlc1R5cGUgIT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiAmJiByZXNUeXBlICE9PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgIHJldFZhbCA9IHRoaXMuX3Jlc3VsdFZhbHVlO1xyXG4gICAgICBlbHNlIGlmICh0aGlzLl9yZXN1bHRWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLl9yZXN1bHRWYWx1ZSA9PT0gXCIgXCIpXHJcbiAgICAgICAgcmV0VmFsID0gXCJcIjtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHJldFZhbCA9IFJlY29yZFV0aWxzLmJ5dGVTdHJlYW1Ub1N0cmluZyh0aGlzLl9yZXN1bHRWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAocmV0VmFsID09PSBudWxsKVxyXG4gICAgICAgIGlzTnVsbCA9IHRydWU7XHJcblxyXG4gICAgICAvLyBJZiB3ZSBkb24ndCBrbm93IHdoYXQgcmVzdWx0IHR5cGUgd2UgZ290LCBhbmQgd2FudCB0byBrZWVwIGl0LCBhcyBpbiBFeHBDYWxjXHJcbiAgICAgIGlmIChyZXNUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5PTkUpXHJcbiAgICAgICAgcmVzVHlwZSA9IHRoaXMuX3R5cGU7XHJcblxyXG4gICAgICBleHBWYWwgPSBuZXcgRXhwVmFsKHJlc1R5cGUsIGlzTnVsbCwgcmV0VmFsKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3ByZXZSZXNUeXBlID0gcmVzVHlwZTtcclxuICAgIHJldHVybiBleHBWYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGFuZCByZXR1cm4gdGhlIFJldHVyblZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeVxyXG4gIGFzeW5jIGV2YWx1YXRlV2l0aFJlc0xlbmd0aChsZW5ndGg6IG51bWJlcik6IFByb21pc2U8RXhwcmVzc2lvbl9SZXR1cm5WYWx1ZT4ge1xyXG4gICAgbGV0IHJlc1R5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUgPSBTdG9yYWdlQXR0cmlidXRlLk5PTkU7XHJcbiAgICBsZXQgdmFsOiBzdHJpbmc7XHJcbiAgICBpZiAodGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpIHtcclxuICAgICAgbGV0IGV4cFZhbDogRXhwVmFsID0gYXdhaXQgRXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsKHRoaXMuX2V4cEJ5dGVzLCByZXNUeXBlLCB0aGlzLl90YXNrKTtcclxuXHJcbiAgICAgIC8vIGV2ZW4gaWYgYWN0dWFsIGRvdG5ldCBvYmogaXMgbnVsbCwgd2UgbmVlZCB0byByZXR1cm4gYmxvYlByZWZpeFxyXG4gICAgICBpZiAoZXhwVmFsLklzTnVsbClcclxuICAgICAgICB2YWwgPSBudWxsO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdmFsID0gZXhwVmFsLlRvTWdWYWwoKTtcclxuXHJcbiAgICAgIHJlc1R5cGUgPSBleHBWYWwuQXR0cjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgdmFsID0gYXdhaXQgdGhpcy5ldmFsdWF0ZVdpdGhSZXN1bHRUeXBlQW5kTGVuZ3RoKHJlc1R5cGUsIGxlbmd0aCk7XHJcbiAgICAgICByZXNUeXBlID0gdGhpcy5fdHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbl9SZXR1cm5WYWx1ZSh2YWwsIHJlc1R5cGUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHBhcnNlIHRoZSBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZmlsbERhdGEodGFza1JlZjogVGFzaywgcGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8U3RyaW5nPjtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19URVJNLCBwYXJzZXIuZ2V0Q3VyckluZGV4KCkpO1xyXG5cclxuICAgIGlmICh0aGlzLl90YXNrID09IG51bGwpXHJcbiAgICAgIHRoaXMuX3Rhc2sgPSB0YXNrUmVmO1xyXG5cclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FWFApICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VYUC5sZW5ndGgpO1xyXG4gICAgICB0b2tlbnNWZWN0b3IgPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIHRoaXMuaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3Rvcik7XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBDb21tYW5kLkZpbGxEYXRhKCkgb3V0IG9mIHN0cmluZyBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcGFyc2UgdGhlIGV4cHJlc3Npb24gWE1MIHRhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0b2tlbnNWZWN0b3JcIj50aGUgdmVjdG9yIG9mIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHZhbHVlc1xyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxTdHJpbmc+KTogdm9pZCB7XHJcbiAgICBsZXQgZXhwU3RyOiBzdHJpbmc7XHJcbiAgICBsZXQgYXR0cmlidXRlOiBTdHJpbmcsIHZhbHVlU3RyO1xyXG5cclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgYXR0cmlidXRlID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIHZhbHVlU3RyID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX1ZBTFVFOlxyXG4gICAgICAgICAgLy8gaWYgd2Ugd29yayBpbiBoZXhcclxuICAgICAgICAgIGlmIChFbnZpcm9ubWVudC5JbnN0YW5jZS5HZXREZWJ1Z0xldmVsKCkgPiAxKSB7XHJcbiAgICAgICAgICAgIGV4cFN0ciA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkQnl0ZUFycmF5KGV4cFN0cik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX2V4cEJ5dGVzID0gTWlzYy5Ub1NCeXRlQXJyYXkoQmFzZTY0LmRlY29kZVRvQnl0ZSh2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfSUQ6XHJcbiAgICAgICAgICB0aGlzLl9pZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT01QVVRFX0JZOlxyXG4gICAgICAgICAgdGhpcy5fY29tcHV0ZUJ5ID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIEV4cHJlc3Npb24uaW5pdEVsZW1lbnRzIGNsYXNzLiBJbnNlcnQgY2FzZSB0byBFeHByZXNzaW9uLmluaXRFbGVtZW50cyBmb3IgXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5jb21wdXRlZEJ5Q2xpZW50KCkpXHJcbiAgICAgIHRoaXMuX2NtZHNUb1NlcnZlciA9IDxDb21tYW5kc1RhYmxlPnRoaXMuX3Rhc2suZ2V0TUdEYXRhKCkuQ21kc1RvU2VydmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIEJ1aWxkIHRoZSBleHByZXNzaW9uIGFzIGEgYnl0ZSBhcnJheVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBidWlsZEJ5dGVBcnJheShleHBTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGV4cFN0ciA9PT0gbnVsbCB8fCBleHBTdHIubGVuZ3RoID09PSAwIHx8IGV4cFN0ci5sZW5ndGggJSAyID4gMCkge1xyXG4gICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFeHByZXNzaW9uLmJ1aWxkQnl0ZUFycmF5KCkgZXhwU3RyIGNhbm5vdCBiZSBjaGFuZ2VkIFwiICsgZXhwU3RyKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2V4cEJ5dGVzID0gbmV3IEludDhBcnJheShleHBTdHIubGVuZ3RoIC8gMik7XHJcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgZXhwU3RyLmxlbmd0aDsgaSA9IGkgKyAyKSB7XHJcbiAgICAgIGxldCB0d29IZXhEaWdpdHM6IHN0cmluZyA9IGV4cFN0ci5zdWJzdHIoaSwgMik7XHJcbiAgICAgIHRoaXMuX2V4cEJ5dGVzW2kgLyAyXSA9IE5VTV9UWVBFLnRvU0J5dGUoTk51bWJlci5QYXJzZSh0d29IZXhEaWdpdHMsIE51bWJlclN0eWxlcy5IZXhOdW1iZXIpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgSUQgb2YgdGhlIEV4cHJlc3Npb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldElkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBleHByZXNzaW9uIG1heSBiZSBjb21wdXRlZCBieSB0aGUgQ2xpZW50XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGNvbXB1dGVkQnlDbGllbnQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUJ5ICE9PSAnUycvKidTJyovOyAvLyBpLmUsIENsaWVudCBvciBEb24ndCBjYXJlXHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0cnVlIGlmIHRoZSBleHByZXNzaW9uIGNhbiBiZSBjb21wdXRlZCBPTkxZIGJ5IHRoZSBDbGllbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbXB1dGVkQnlDbGllbnRPbmx5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVCeSA9PT0gJ0MnLyonQycqLztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gY2FuIGJlIGNvbXB1dGVkIE9OTFkgYnkgdGhlIFNlcnZlclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29tcHV0ZWRCeVNlcnZlck9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUJ5ID09PSAnUycvKidTJyovO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIHRhc2tcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldFRhc2soKTogVGFzayB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgcmVzdWx0IHZhbHVlIGJ5IHRoZSBSZXN1bHQgY29tbWFuZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXN1bHRcIj50aGUgcmVzdWx0IGNvbXB1dGVkIGJ5IHRoZSBzZXJ2ZXJcclxuICAvLy8gPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInR5cGVfXCI+dGhlIHR5cGUgb2YgdGhlIHJlc3VsdCB3aGljaCB3YXMgY29tcHV0ZWQgYnkgdGhlIHNlcnZlclxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIFNldFJlc3VsdFZhbHVlKHJlc3VsdDogc3RyaW5nLCB0eXBlXzogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVzdWx0VmFsdWUgPSByZXN1bHQ7XHJcbiAgICB0aGlzLl90eXBlID0gdHlwZV87XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KFwie3tFeHByZXNzaW9uICN7MH0gb2YgezF9fX1cIiwgdGhpcy5faWQsIHRoaXMuX3Rhc2spO1xyXG4gIH1cclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PlxyXG4vLy8gICByZXByZXNlbnRzIHRoZSByZXR1cm5lZCBldmFsdWF0ZWQgZXhwcmVzc2lvbiB2YWx1ZSBhbmQgaXQncyB0eXBlIChhdHRyaWJ1dGUpXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uX1JldHVyblZhbHVlIHtcclxuICBtZ1ZhbDogc3RyaW5nID0gbnVsbDtcclxuICB0eXBlOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgQ1RPUlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgY29uc3RydWN0b3IobWdWYWxfOiBzdHJpbmcsIHR5cGVfOiBTdG9yYWdlQXR0cmlidXRlKSB7XHJcbiAgICB0aGlzLm1nVmFsID0gbWdWYWxfO1xyXG4gICAgdGhpcy50eXBlID0gdHlwZV87XHJcbiAgfVxyXG59XHJcbiJdfQ==