@resolveio/client-lib-core 15.1.18 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/fesm2020/resolveio-client-lib-core.min.mjs +1 -0
  2. package/index.d.ts +0 -3
  3. package/package.json +1 -1
  4. package/esm2020/lib/account-manager.service.mjs +0 -222
  5. package/esm2020/lib/auth/auth-guard.service.mjs +0 -165
  6. package/esm2020/lib/auth/auth-permissions.service.mjs +0 -24
  7. package/esm2020/lib/auth/auth.service.mjs +0 -244
  8. package/esm2020/lib/auth/auth365.component.mjs +0 -44
  9. package/esm2020/lib/auth/can-deactivate-guard.service.mjs +0 -13
  10. package/esm2020/lib/auth/enroll.component.mjs +0 -81
  11. package/esm2020/lib/auth/forgot-password.component.mjs +0 -82
  12. package/esm2020/lib/core.component.mjs +0 -400
  13. package/esm2020/lib/core.module.mjs +0 -184
  14. package/esm2020/lib/core.service.mjs +0 -89
  15. package/esm2020/lib/directive/focus.mjs +0 -22
  16. package/esm2020/lib/directive/scroll.mjs +0 -55
  17. package/esm2020/lib/home/home.component.mjs +0 -77
  18. package/esm2020/lib/logger/logger.component.mjs +0 -220
  19. package/esm2020/lib/models/app-status.model.mjs +0 -2
  20. package/esm2020/lib/models/collection-document.model.mjs +0 -2
  21. package/esm2020/lib/models/cron-job.model.mjs +0 -2
  22. package/esm2020/lib/models/dialog.model.mjs +0 -2
  23. package/esm2020/lib/models/file.model.mjs +0 -2
  24. package/esm2020/lib/models/log-method-latency.model.mjs +0 -2
  25. package/esm2020/lib/models/navbar-main-tab.model.mjs +0 -2
  26. package/esm2020/lib/models/pagination.model.mjs +0 -2
  27. package/esm2020/lib/models/permission.model.mjs +0 -2
  28. package/esm2020/lib/models/select-data-label.model.mjs +0 -2
  29. package/esm2020/lib/models/subscription.model.mjs +0 -2
  30. package/esm2020/lib/models/support-ticket.model.mjs +0 -2
  31. package/esm2020/lib/models/user-group.model.mjs +0 -2
  32. package/esm2020/lib/models/user.model.mjs +0 -2
  33. package/esm2020/lib/offline-db.mjs +0 -519
  34. package/esm2020/lib/offline-manager.service.mjs +0 -107
  35. package/esm2020/lib/pipes/domsanitizor.pipe.mjs +0 -28
  36. package/esm2020/lib/pipes/filter.pipe.mjs +0 -36
  37. package/esm2020/lib/pipes/json-parse.pipe.mjs +0 -29
  38. package/esm2020/lib/pipes/minus-currency.pipe.mjs +0 -16
  39. package/esm2020/lib/pipes/phone.pipe.mjs +0 -47
  40. package/esm2020/lib/pipes/pipe.module.mjs +0 -54
  41. package/esm2020/lib/pipes/reverse-list.pipe.mjs +0 -17
  42. package/esm2020/lib/pipes/titlecase.pipe.mjs +0 -22
  43. package/esm2020/lib/report-builder.permission.mjs +0 -13
  44. package/esm2020/lib/resolveio-class.mjs +0 -41
  45. package/esm2020/lib/shared/shared.module.mjs +0 -96
  46. package/esm2020/lib/socket-manager.service.mjs +0 -339
  47. package/esm2020/lib/socket.service.mjs +0 -215
  48. package/esm2020/lib/super-admin.permission.mjs +0 -9
  49. package/esm2020/lib/support-ticket/detail/support-ticket-detail.component.mjs +0 -204
  50. package/esm2020/lib/support-ticket/edit/support-ticket-edit.component.mjs +0 -122
  51. package/esm2020/lib/support-ticket/list/support-ticket-list.component.mjs +0 -137
  52. package/esm2020/lib/support-ticket/new/support-ticket-new.component.mjs +0 -115
  53. package/esm2020/lib/support-ticket/support-ticket.component.mjs +0 -63
  54. package/esm2020/lib/support-ticket/support-ticket.module.mjs +0 -50
  55. package/esm2020/lib/support-ticket/support-ticket.routing.mjs +0 -20
  56. package/esm2020/lib/support-ticket/support-ticket.service.mjs +0 -17
  57. package/esm2020/lib/token-manager.service.mjs +0 -26
  58. package/esm2020/lib/user-settings/settings/users-settings.component.mjs +0 -296
  59. package/esm2020/lib/user-settings/user-settings.component.mjs +0 -57
  60. package/esm2020/lib/user-settings/user-settings.module.mjs +0 -41
  61. package/esm2020/lib/user-settings/user-settings.permission.mjs +0 -10
  62. package/esm2020/lib/user-settings/user-settings.routing.mjs +0 -14
  63. package/esm2020/lib/user-settings/user-settings.service.mjs +0 -17
  64. package/esm2020/lib/util/action-name.helper.mjs +0 -9
  65. package/esm2020/lib/util/aws.service.mjs +0 -79
  66. package/esm2020/lib/util/common.helper.mjs +0 -161
  67. package/esm2020/lib/util/validation.service.mjs +0 -185
  68. package/esm2020/lib/util/window-resize.service.mjs +0 -24
  69. package/esm2020/lib/util/window.service.mjs +0 -16
  70. package/esm2020/lib/widgets/alert/alert.model.mjs +0 -2
  71. package/esm2020/lib/widgets/alert/alert.service.mjs +0 -78
  72. package/esm2020/lib/widgets/collapse-table/collapse-table.component.mjs +0 -79
  73. package/esm2020/lib/widgets/collapse-table/collapse-table.module.mjs +0 -34
  74. package/esm2020/lib/widgets/data-table/data-table.component.mjs +0 -77
  75. package/esm2020/lib/widgets/data-table/data-table.model.mjs +0 -2
  76. package/esm2020/lib/widgets/data-table/data-table.module.mjs +0 -41
  77. package/esm2020/lib/widgets/date-shortcut/date-shortcut.component.mjs +0 -295
  78. package/esm2020/lib/widgets/date-shortcut/date-shortcut.module.mjs +0 -32
  79. package/esm2020/lib/widgets/dialog/dialog.confirm.content.mjs +0 -63
  80. package/esm2020/lib/widgets/dialog/dialog.error.content.mjs +0 -57
  81. package/esm2020/lib/widgets/dialog/dialog.input.content.mjs +0 -271
  82. package/esm2020/lib/widgets/dialog/dialog.login.content.mjs +0 -517
  83. package/esm2020/lib/widgets/dialog/dialog.notify.content.mjs +0 -57
  84. package/esm2020/lib/widgets/dialog/dialog.register.content.mjs +0 -328
  85. package/esm2020/lib/widgets/dialog/dialog.select-array-objs.content.mjs +0 -200
  86. package/esm2020/lib/widgets/dialog/dialog.select-array.content.mjs +0 -305
  87. package/esm2020/lib/widgets/dialog/dialog.select-data-labels.content.mjs +0 -191
  88. package/esm2020/lib/widgets/dialog/dialog.select-datetime.content.mjs +0 -185
  89. package/esm2020/lib/widgets/dialog/dialog.select-with-buttons-url.content.mjs +0 -162
  90. package/esm2020/lib/widgets/dialog/dialog.service.mjs +0 -97
  91. package/esm2020/lib/widgets/file/file-upload.component.mjs +0 -426
  92. package/esm2020/lib/widgets/file/file-upload.module.mjs +0 -48
  93. package/esm2020/lib/widgets/form-button/form-button.component.mjs +0 -94
  94. package/esm2020/lib/widgets/form-button/form-button.module.mjs +0 -28
  95. package/esm2020/lib/widgets/navbar-main/navbar-main.component.mjs +0 -220
  96. package/esm2020/lib/widgets/navbar-module/navbar-module.component.mjs +0 -104
  97. package/esm2020/lib/widgets/navbar-module/navbar-module.model.mjs +0 -2
  98. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +0 -38
  99. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +0 -24
  100. package/esm2020/lib/widgets/scheduler/scheduler.component.mjs +0 -184
  101. package/esm2020/lib/widgets/scheduler/scheduler.module.mjs +0 -37
  102. package/esm2020/lib/widgets/sort-table/sort-table-header.component.mjs +0 -67
  103. package/esm2020/lib/widgets/sort-table/sort-table-ngfor.component.mjs +0 -48
  104. package/esm2020/lib/widgets/sort-table/sort-table.directive.mjs +0 -174
  105. package/esm2020/lib/widgets/sort-table/sort-table.module.mjs +0 -38
  106. package/esm2020/lib/widgets/user-role/user-role.component.mjs +0 -27
  107. package/esm2020/lib/widgets/user-role/user-role.module.mjs +0 -24
  108. package/esm2020/public_api.mjs +0 -91
  109. package/esm2020/resolveio-client-lib-core.mjs +0 -5
  110. package/fesm2015/resolveio-client-lib-core.mjs +0 -9191
  111. package/fesm2015/resolveio-client-lib-core.mjs.map +0 -1
  112. package/fesm2020/resolveio-client-lib-core.mjs +0 -9184
  113. package/fesm2020/resolveio-client-lib-core.mjs.map +0 -1
  114. package/lib/account-manager.service.d.ts +0 -41
  115. package/lib/auth/auth-guard.service.d.ts +0 -26
  116. package/lib/auth/auth-permissions.service.d.ts +0 -10
  117. package/lib/auth/auth.service.d.ts +0 -30
  118. package/lib/auth/auth365.component.d.ts +0 -20
  119. package/lib/auth/can-deactivate-guard.service.d.ts +0 -11
  120. package/lib/auth/enroll.component.d.ts +0 -28
  121. package/lib/auth/forgot-password.component.d.ts +0 -28
  122. package/lib/core.component.d.ts +0 -64
  123. package/lib/core.module.d.ts +0 -35
  124. package/lib/core.service.d.ts +0 -49
  125. package/lib/directive/focus.d.ts +0 -10
  126. package/lib/directive/scroll.d.ts +0 -20
  127. package/lib/home/home.component.d.ts +0 -28
  128. package/lib/logger/logger.component.d.ts +0 -37
  129. package/lib/models/app-status.model.d.ts +0 -4
  130. package/lib/models/collection-document.model.d.ts +0 -6
  131. package/lib/models/cron-job.model.d.ts +0 -13
  132. package/lib/models/dialog.model.d.ts +0 -23
  133. package/lib/models/file.model.d.ts +0 -9
  134. package/lib/models/log-method-latency.model.d.ts +0 -7
  135. package/lib/models/navbar-main-tab.model.d.ts +0 -14
  136. package/lib/models/pagination.model.d.ts +0 -17
  137. package/lib/models/permission.model.d.ts +0 -14
  138. package/lib/models/select-data-label.model.d.ts +0 -9
  139. package/lib/models/subscription.model.d.ts +0 -19
  140. package/lib/models/support-ticket.model.d.ts +0 -71
  141. package/lib/models/user-group.model.d.ts +0 -20
  142. package/lib/models/user.model.d.ts +0 -70
  143. package/lib/offline-db.d.ts +0 -28
  144. package/lib/offline-manager.service.d.ts +0 -23
  145. package/lib/pipes/domsanitizor.pipe.d.ts +0 -10
  146. package/lib/pipes/filter.pipe.d.ts +0 -12
  147. package/lib/pipes/json-parse.pipe.d.ts +0 -7
  148. package/lib/pipes/minus-currency.pipe.d.ts +0 -7
  149. package/lib/pipes/phone.pipe.d.ts +0 -7
  150. package/lib/pipes/pipe.module.d.ts +0 -13
  151. package/lib/pipes/reverse-list.pipe.d.ts +0 -6
  152. package/lib/pipes/titlecase.pipe.d.ts +0 -7
  153. package/lib/report-builder.permission.d.ts +0 -2
  154. package/lib/resolveio-class.d.ts +0 -26
  155. package/lib/shared/shared.module.d.ts +0 -17
  156. package/lib/socket-manager.service.d.ts +0 -38
  157. package/lib/socket.service.d.ts +0 -44
  158. package/lib/super-admin.permission.d.ts +0 -2
  159. package/lib/support-ticket/detail/support-ticket-detail.component.d.ts +0 -32
  160. package/lib/support-ticket/edit/support-ticket-edit.component.d.ts +0 -30
  161. package/lib/support-ticket/list/support-ticket-list.component.d.ts +0 -26
  162. package/lib/support-ticket/new/support-ticket-new.component.d.ts +0 -26
  163. package/lib/support-ticket/support-ticket.component.d.ts +0 -20
  164. package/lib/support-ticket/support-ticket.module.d.ts +0 -15
  165. package/lib/support-ticket/support-ticket.routing.d.ts +0 -3
  166. package/lib/support-ticket/support-ticket.service.d.ts +0 -9
  167. package/lib/token-manager.service.d.ts +0 -11
  168. package/lib/user-settings/settings/users-settings.component.d.ts +0 -54
  169. package/lib/user-settings/user-settings.component.d.ts +0 -20
  170. package/lib/user-settings/user-settings.module.d.ts +0 -12
  171. package/lib/user-settings/user-settings.permission.d.ts +0 -2
  172. package/lib/user-settings/user-settings.routing.d.ts +0 -3
  173. package/lib/user-settings/user-settings.service.d.ts +0 -9
  174. package/lib/util/action-name.helper.d.ts +0 -1
  175. package/lib/util/aws.service.d.ts +0 -17
  176. package/lib/util/common.helper.d.ts +0 -12
  177. package/lib/util/validation.service.d.ts +0 -88
  178. package/lib/util/window-resize.service.d.ts +0 -12
  179. package/lib/util/window.service.d.ts +0 -6
  180. package/lib/widgets/alert/alert.model.d.ts +0 -1
  181. package/lib/widgets/alert/alert.service.d.ts +0 -11
  182. package/lib/widgets/collapse-table/collapse-table.component.d.ts +0 -23
  183. package/lib/widgets/collapse-table/collapse-table.module.d.ts +0 -9
  184. package/lib/widgets/data-table/data-table.component.d.ts +0 -23
  185. package/lib/widgets/data-table/data-table.model.d.ts +0 -13
  186. package/lib/widgets/data-table/data-table.module.d.ts +0 -12
  187. package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +0 -24
  188. package/lib/widgets/date-shortcut/date-shortcut.module.d.ts +0 -10
  189. package/lib/widgets/dialog/dialog.confirm.content.d.ts +0 -12
  190. package/lib/widgets/dialog/dialog.error.content.d.ts +0 -11
  191. package/lib/widgets/dialog/dialog.input.content.d.ts +0 -18
  192. package/lib/widgets/dialog/dialog.login.content.d.ts +0 -17
  193. package/lib/widgets/dialog/dialog.notify.content.d.ts +0 -11
  194. package/lib/widgets/dialog/dialog.register.content.d.ts +0 -13
  195. package/lib/widgets/dialog/dialog.select-array-objs.content.d.ts +0 -23
  196. package/lib/widgets/dialog/dialog.select-array.content.d.ts +0 -31
  197. package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +0 -22
  198. package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +0 -21
  199. package/lib/widgets/dialog/dialog.select-with-buttons-url.content.d.ts +0 -25
  200. package/lib/widgets/dialog/dialog.service.d.ts +0 -21
  201. package/lib/widgets/file/file-upload.component.d.ts +0 -49
  202. package/lib/widgets/file/file-upload.module.d.ts +0 -14
  203. package/lib/widgets/form-button/form-button.component.d.ts +0 -15
  204. package/lib/widgets/form-button/form-button.module.d.ts +0 -9
  205. package/lib/widgets/navbar-main/navbar-main.component.d.ts +0 -53
  206. package/lib/widgets/navbar-module/navbar-module.component.d.ts +0 -24
  207. package/lib/widgets/navbar-module/navbar-module.model.d.ts +0 -13
  208. package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +0 -17
  209. package/lib/widgets/responsive-button-group/responsive-button-group.module.d.ts +0 -8
  210. package/lib/widgets/scheduler/scheduler.component.d.ts +0 -50
  211. package/lib/widgets/scheduler/scheduler.module.d.ts +0 -11
  212. package/lib/widgets/sort-table/sort-table-header.component.d.ts +0 -23
  213. package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +0 -17
  214. package/lib/widgets/sort-table/sort-table.directive.d.ts +0 -48
  215. package/lib/widgets/sort-table/sort-table.module.d.ts +0 -11
  216. package/lib/widgets/user-role/user-role.component.d.ts +0 -10
  217. package/lib/widgets/user-role/user-role.module.d.ts +0 -8
@@ -1,215 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { LocalStorageService } from 'ngx-localstorage';
3
- import { BehaviorSubject } from 'rxjs';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "ngx-localstorage";
6
- export class SocketService {
7
- constructor(_storage) {
8
- this._storage = _storage;
9
- //These can be altered by calling code
10
- this.debug = false;
11
- //Time to wait before attempting reconnect (after close)
12
- this.reconnectInterval = 1000;
13
- //Time to wait for WebSocket to open (before aborting and retrying)
14
- this.timeoutInterval = 5000;
15
- this.timeout = null;
16
- this.readyState$ = new BehaviorSubject(0);
17
- //List of WebSocket sub-protocols
18
- this.protocols = [];
19
- this.pingInterval = null;
20
- this.pongTimeout = null;
21
- this.pingIntervalTime = 15000; // Time between each ping (e.g., 30 seconds)
22
- this.pongTimeoutTime = 12000; // Time to wait for pong before closing connection (e.g., 10 seconds)
23
- //Set up the default 'noop' event handlers
24
- this.onopen = function (event) { };
25
- this.onclose = function (event) { };
26
- this.onconnecting = function () { };
27
- this.onmessage = function (event) { };
28
- this.onerror = function (event) { };
29
- this.onOpenHandler = (event) => {
30
- clearTimeout(this.timeout);
31
- this.timeout = null;
32
- this.log(new Date(), 'WS', 'onopen', this.url);
33
- this.readyState = WebSocket.OPEN;
34
- this.readyState$.next(this.readyState);
35
- this.onopen(event);
36
- this.startPinging();
37
- };
38
- this.onCloseHandler = (event) => {
39
- if (this.ws && this.readyState !== WebSocket.CLOSED) {
40
- if (this.timeout) {
41
- clearTimeout(this.timeout);
42
- }
43
- this.timeout = null;
44
- this.ws.removeEventListener('open', this.onOpenHandler);
45
- this.ws.removeEventListener('close', this.onCloseHandler);
46
- this.ws.removeEventListener('message', this.onMessageHandler);
47
- this.ws.removeEventListener('error', this.onErrorHandler);
48
- this.ws = null;
49
- this.readyState = WebSocket.CLOSED;
50
- this.readyState$.next(this.readyState);
51
- this.log(new Date(), 'WS', 'onclose', this.url);
52
- this.onclose(event);
53
- setTimeout(() => {
54
- this.connect();
55
- }, this.reconnectInterval);
56
- this.stopPinging();
57
- }
58
- };
59
- this.onMessageHandler = (event) => {
60
- if (event.data === 'pong') {
61
- this.log(new Date(), 'WS', 'pong received');
62
- clearTimeout(this.pongTimeout);
63
- }
64
- else {
65
- let messageData = JSON.parse(event.data);
66
- messageData = this.convertUTCDateToLocalDate(messageData);
67
- this.onmessage(messageData);
68
- }
69
- };
70
- this.onErrorHandler = (event) => {
71
- this.log(new Date(), 'WS', 'onerror', this, event);
72
- this.onerror(event);
73
- this.reconnect();
74
- };
75
- document.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
76
- }
77
- openSocket(environment, protocols) {
78
- this.url = environment.WS_URL;
79
- this.protocols = protocols;
80
- this.connect();
81
- }
82
- connect() {
83
- if (!this.ws && this.readyState !== WebSocket.CONNECTING && this._storage.get('accessToken')) {
84
- this.readyState = WebSocket.CONNECTING;
85
- this.readyState$.next(this.readyState);
86
- if (this.timeout) {
87
- clearTimeout(this.timeout);
88
- }
89
- this.ws = new WebSocket(this.url, this.protocols);
90
- this.onconnecting();
91
- this.log(new Date(), 'WS', 'attempt-connect', this.url);
92
- this.timeout = setTimeout(() => {
93
- this.log(new Date(), 'WS', 'connection-timeout', this.url);
94
- this.close();
95
- }, this.timeoutInterval);
96
- this.ws.onopen = this.onOpenHandler;
97
- this.ws.onclose = this.onCloseHandler;
98
- this.ws.onmessage = this.onMessageHandler;
99
- this.ws.onerror = this.onErrorHandler;
100
- }
101
- }
102
- convertUTCDateToLocalDate(data) {
103
- if (Array.isArray(data)) {
104
- return data.map(item => this.convertUTCDateToLocalDate(item));
105
- }
106
- else if (typeof data === 'object' && data !== null) {
107
- const keys = Object.keys(data);
108
- keys.forEach((key) => {
109
- data[key] = this.convertUTCDateToLocalDate(data[key]);
110
- });
111
- return data;
112
- }
113
- else if (typeof data === 'string') {
114
- // Check if the string is an ISO date format
115
- const datePattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z$/;
116
- if (datePattern.test(data)) {
117
- return new Date(data);
118
- }
119
- }
120
- return data;
121
- }
122
- startPinging() {
123
- this.pingInterval = setInterval(() => {
124
- if (this.isWebSocketActive()) {
125
- this.send('ping');
126
- this.pongTimeout = setTimeout(() => {
127
- this.log(new Date(), 'WS', 'pong not received, closing connection');
128
- this.reconnect();
129
- }, this.pongTimeoutTime);
130
- }
131
- else {
132
- this.reconnect();
133
- }
134
- }, this.pingIntervalTime);
135
- }
136
- stopPinging() {
137
- if (this.pingInterval) {
138
- clearInterval(this.pingInterval);
139
- }
140
- if (this.pongTimeout) {
141
- clearTimeout(this.pongTimeout);
142
- }
143
- }
144
- convertDatesToUTC(obj) {
145
- for (let key in obj) {
146
- if (obj.hasOwnProperty(key)) {
147
- if (obj[key] instanceof Date) {
148
- // Convert Date to UTC ISO String
149
- obj[key] = obj[key].toISOString();
150
- }
151
- else if (typeof obj[key] === 'object' && obj[key] !== null) {
152
- // Recursively look for Date objects within arrays or nested objects
153
- this.convertDatesToUTC(obj[key]);
154
- }
155
- }
156
- }
157
- }
158
- send(...data) {
159
- if (this.isWebSocketActive()) {
160
- data.forEach(item => this.convertDatesToUTC(item));
161
- this.ws.send(JSON.stringify(data));
162
- return true;
163
- }
164
- else {
165
- this.log(new Date(), 'WS', 'send error', this.readyState);
166
- this.reconnect();
167
- return false;
168
- }
169
- }
170
- close() {
171
- if (this.ws) {
172
- this.log(new Date(), 'WS', 'closing socket');
173
- this.readyState = WebSocket.CLOSING;
174
- this.readyState$.next(this.readyState);
175
- this.ws.close();
176
- return true;
177
- }
178
- return false;
179
- }
180
- reconnect() {
181
- this.log(new Date(), 'WS', 'reconnect', this.readyState);
182
- if (this.readyState !== WebSocket.CONNECTING) {
183
- this.close();
184
- }
185
- }
186
- getBufferAmount() {
187
- if (this.ws) {
188
- return this.ws.bufferedAmount;
189
- }
190
- else {
191
- return 20480;
192
- }
193
- }
194
- log(...args) {
195
- if (this.debug) {
196
- console.log(...args);
197
- }
198
- }
199
- handleVisibilityChange() {
200
- if (document.visibilityState === 'visible') {
201
- if (!this.isWebSocketActive()) {
202
- this.reconnect();
203
- }
204
- }
205
- }
206
- isWebSocketActive() {
207
- return this.ws && this.ws.readyState === WebSocket.OPEN;
208
- }
209
- }
210
- SocketService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SocketService, deps: [{ token: i1.LocalStorageService }], target: i0.ɵɵFactoryTarget.Injectable });
211
- SocketService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SocketService });
212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SocketService, decorators: [{
213
- type: Injectable
214
- }], ctorParameters: function () { return [{ type: i1.LocalStorageService }]; } });
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFHdkMsTUFBTSxPQUFPLGFBQWE7SUFrQ3pCLFlBQW9CLFFBQTZCO1FBQTdCLGFBQVEsR0FBUixRQUFRLENBQXFCO1FBakNqRCxzQ0FBc0M7UUFDL0IsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVyQix3REFBd0Q7UUFDakQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWhDLG1FQUFtRTtRQUM1RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN0QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBSWhCLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsaUNBQWlDO1FBQ3pCLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFNekIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsNENBQTRDO1FBQ3RFLG9CQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMscUVBQXFFO1FBRXpHLDBDQUEwQztRQUNuQyxXQUFNLEdBQXdCLFVBQVUsS0FBWSxJQUFHLENBQUMsQ0FBQztRQUN6RCxZQUFPLEdBQTZCLFVBQVUsS0FBaUIsSUFBRyxDQUFDLENBQUM7UUFDcEUsaUJBQVksR0FBZSxjQUFhLENBQUMsQ0FBQztRQUMxQyxjQUFTLEdBQStCLFVBQVUsS0FBbUIsSUFBRyxDQUFDLENBQUM7UUFDMUUsWUFBTyxHQUE2QixVQUFV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LENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUM7SUFDekQsQ0FBQzs7MkdBcFBXLGFBQWE7K0dBQWIsYUFBYTs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJ25neC1sb2NhbHN0b3JhZ2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTb2NrZXRTZXJ2aWNlIHtcblx0Ly9UaGVzZSBjYW4gYmUgYWx0ZXJlZCBieSBjYWxsaW5nIGNvZGVcblx0cHVibGljIGRlYnVnID0gZmFsc2U7XG5cblx0Ly9UaW1lIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgcmVjb25uZWN0IChhZnRlciBjbG9zZSlcblx0cHVibGljIHJlY29ubmVjdEludGVydmFsID0gMTAwMDtcblx0XG5cdC8vVGltZSB0byB3YWl0IGZvciBXZWJTb2NrZXQgdG8gb3BlbiAoYmVmb3JlIGFib3J0aW5nIGFuZCByZXRyeWluZylcblx0cHVibGljIHRpbWVvdXRJbnRlcnZhbCA9IDUwMDA7XG5cdHByaXZhdGUgdGltZW91dCA9IG51bGw7XG5cblx0Ly9TaG91bGQgb25seSBiZSB1c2VkIHRvIHJlYWQgV2ViU29ja2V0IHJlYWR5U3RhdGVcblx0cHVibGljIHJlYWR5U3RhdGU6IG51bWJlcjtcblx0cHVibGljIHJlYWR5U3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgwKTtcblxuXHQvL0xpc3Qgb2YgV2ViU29ja2V0IHN1Yi1wcm90b2NvbHNcblx0cHJpdmF0ZSBwcm90b2NvbHM6IHN0cmluZ1tdID0gW107XG5cblx0Ly9UaGUgdW5kZXJseWluZyBXZWJTb2NrZXRcblx0cHVibGljIHdzOiBXZWJTb2NrZXQ7XG5cdHByaXZhdGUgdXJsOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBwaW5nSW50ZXJ2YWwgPSBudWxsO1xuICAgIHByaXZhdGUgcG9uZ1RpbWVvdXQgPSBudWxsO1xuICAgIHByaXZhdGUgcGluZ0ludGVydmFsVGltZSA9IDE1MDAwOyAvLyBUaW1lIGJldHdlZW4gZWFjaCBwaW5nIChlLmcuLCAzMCBzZWNvbmRzKVxuICAgIHByaXZhdGUgcG9uZ1RpbWVvdXRUaW1lID0gMTIwMDA7IC8vIFRpbWUgdG8gd2FpdCBmb3IgcG9uZyBiZWZvcmUgY2xvc2luZyBjb25uZWN0aW9uIChlLmcuLCAxMCBzZWNvbmRzKVxuXG5cdC8vU2V0IHVwIHRoZSBkZWZhdWx0ICdub29wJyBldmVudCBoYW5kbGVyc1xuXHRwdWJsaWMgb25vcGVuOiAoZXY6IEV2ZW50KSA9PiB2b2lkID0gZnVuY3Rpb24gKGV2ZW50OiBFdmVudCkge307XG5cdHB1YmxpYyBvbmNsb3NlOiAoZXY6IENsb3NlRXZlbnQpID0+IHZvaWQgPSBmdW5jdGlvbiAoZXZlbnQ6IENsb3NlRXZlbnQpIHt9O1xuXHRwdWJsaWMgb25jb25uZWN0aW5nOiAoKSA9PiB2b2lkID0gZnVuY3Rpb24gKCkge307XG5cdHB1YmxpYyBvbm1lc3NhZ2U6IChldjogTWVzc2FnZUV2ZW50KSA9PiB2b2lkID0gZnVuY3Rpb24gKGV2ZW50OiBNZXNzYWdlRXZlbnQpIHt9O1xuXHRwdWJsaWMgb25lcnJvcjogKGV2OiBFcnJvckV2ZW50KSA9PiB2b2lkID0gZnVuY3Rpb24gKGV2ZW50OiBFcnJvckV2ZW50KSB7fTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlKSB7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMuaGFuZGxlVmlzaWJpbGl0eUNoYW5nZS5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdHB1YmxpYyBvcGVuU29ja2V0KGVudmlyb25tZW50LCBwcm90b2NvbHMpIHtcblx0XHR0aGlzLnVybCA9IGVudmlyb25tZW50LldTX1VSTDtcblx0XHR0aGlzLnByb3RvY29scyA9IHByb3RvY29scztcblx0XHR0aGlzLmNvbm5lY3QoKTtcblx0fVxuXG5cdHByaXZhdGUgb25PcGVuSGFuZGxlciA9IChldmVudDogRXZlbnQpID0+IHsgXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cdFx0dGhpcy50aW1lb3V0ID0gbnVsbDtcblx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnb25vcGVuJywgdGhpcy51cmwpO1xuXHRcdHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5PUEVOO1xuXHRcdHRoaXMucmVhZHlTdGF0ZSQubmV4dCh0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdHRoaXMub25vcGVuKGV2ZW50KTtcblxuXHRcdHRoaXMuc3RhcnRQaW5naW5nKCk7XG5cdH07XG5cdHByaXZhdGUgb25DbG9zZUhhbmRsZXIgPSAoZXZlbnQ6IENsb3NlRXZlbnQpID0+IHtcblx0XHRpZiAodGhpcy53cyAmJiB0aGlzLnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5DTE9TRUQpIHtcblx0XHRcdGlmICh0aGlzLnRpbWVvdXQpIHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHRoaXMudGltZW91dCA9IG51bGw7XG5cblx0XHRcdHRoaXMud3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMub25PcGVuSGFuZGxlcik7XG5cdFx0XHR0aGlzLndzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy5vbkNsb3NlSGFuZGxlcik7XG5cdFx0XHR0aGlzLndzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm9uTWVzc2FnZUhhbmRsZXIpO1xuXHRcdFx0dGhpcy53cy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMub25FcnJvckhhbmRsZXIpO1xuXHRcdFx0dGhpcy53cyA9IG51bGw7XG5cblx0XHRcdHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TRUQ7XG5cdFx0XHR0aGlzLnJlYWR5U3RhdGUkLm5leHQodGhpcy5yZWFkeVN0YXRlKTtcblx0XHRcdFxuXHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ29uY2xvc2UnLCB0aGlzLnVybCk7XG5cdFx0XHR0aGlzLm9uY2xvc2UoZXZlbnQpO1xuXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5jb25uZWN0KCk7XG5cdFx0XHR9LCB0aGlzLnJlY29ubmVjdEludGVydmFsKTtcblxuXHRcdFx0dGhpcy5zdG9wUGluZ2luZygpO1xuXHRcdH1cblx0fTtcblx0cHJpdmF0ZSBvbk1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcblx0XHRpZiAoZXZlbnQuZGF0YSA9PT0gJ3BvbmcnKSB7XG5cdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAncG9uZyByZWNlaXZlZCcpO1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucG9uZ1RpbWVvdXQpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGxldCBtZXNzYWdlRGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG5cdFx0XHRtZXNzYWdlRGF0YSA9IHRoaXMuY29udmVydFVUQ0RhdGVUb0xvY2FsRGF0ZShtZXNzYWdlRGF0YSk7XG5cdFx0XHR0aGlzLm9ubWVzc2FnZShtZXNzYWdlRGF0YSk7XG5cdFx0fVxuXHR9O1xuXHRwcml2YXRlIG9uRXJyb3JIYW5kbGVyID0gKGV2ZW50OiBFcnJvckV2ZW50KSA9PiB7XG5cdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ29uZXJyb3InLCB0aGlzLCBldmVudCk7XG5cdFx0dGhpcy5vbmVycm9yKGV2ZW50KTtcblx0XHR0aGlzLnJlY29ubmVjdCgpO1xuXHR9O1xuXG5cdHByaXZhdGUgY29ubmVjdCgpIHtcblx0XHRpZiAoIXRoaXMud3MgJiYgdGhpcy5yZWFkeVN0YXRlICE9PSBXZWJTb2NrZXQuQ09OTkVDVElORyAmJiB0aGlzLl9zdG9yYWdlLmdldCgnYWNjZXNzVG9rZW4nKSkge1xuXHRcdFx0dGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG5cdFx0XHR0aGlzLnJlYWR5U3RhdGUkLm5leHQodGhpcy5yZWFkeVN0YXRlKTtcblx0XHRcdFxuXHRcdFx0aWYgKHRoaXMudGltZW91dCkge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodGhpcy51cmwsIHRoaXMucHJvdG9jb2xzKTtcblx0XHRcdFxuXHRcdFx0dGhpcy5vbmNvbm5lY3RpbmcoKTtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdhdHRlbXB0LWNvbm5lY3QnLCB0aGlzLnVybCk7XG5cblx0XHRcdHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnY29ubmVjdGlvbi10aW1lb3V0JywgdGhpcy51cmwpO1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9LCB0aGlzLnRpbWVvdXRJbnRlcnZhbCk7XG5cblx0XHRcdHRoaXMud3Mub25vcGVuID0gdGhpcy5vbk9wZW5IYW5kbGVyO1xuXHRcdFx0dGhpcy53cy5vbmNsb3NlID0gdGhpcy5vbkNsb3NlSGFuZGxlcjtcblx0XHRcdHRoaXMud3Mub25tZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2VIYW5kbGVyO1xuXHRcdFx0dGhpcy53cy5vbmVycm9yID0gdGhpcy5vbkVycm9ySGFuZGxlcjtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNvbnZlcnRVVENEYXRlVG9Mb2NhbERhdGUoZGF0YSkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG5cdFx0ICBcdHJldHVybiBkYXRhLm1hcChpdGVtID0+IHRoaXMuY29udmVydFVUQ0RhdGVUb0xvY2FsRGF0ZShpdGVtKSk7XG5cdFx0fSBcblx0XHRlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRcdFx0a2V5cy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0ZGF0YVtrZXldID0gdGhpcy5jb252ZXJ0VVRDRGF0ZVRvTG9jYWxEYXRlKGRhdGFba2V5XSk7XG5cdFx0XHR9KTtcblx0XHQgIFx0cmV0dXJuIGRhdGE7XG5cdFx0fSBcblx0XHRlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgaXMgYW4gSVNPIGRhdGUgZm9ybWF0XG5cdFx0XHRjb25zdCBkYXRlUGF0dGVybiA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT9aJC87XG5cdFx0XHRpZiAoZGF0ZVBhdHRlcm4udGVzdChkYXRhKSkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IERhdGUoZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRwcml2YXRlIHN0YXJ0UGluZ2luZygpIHtcblx0XHR0aGlzLnBpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmlzV2ViU29ja2V0QWN0aXZlKCkpIHtcblx0XHRcdFx0dGhpcy5zZW5kKCdwaW5nJyk7XG5cblx0XHRcdFx0dGhpcy5wb25nVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdwb25nIG5vdCByZWNlaXZlZCwgY2xvc2luZyBjb25uZWN0aW9uJyk7XG5cdFx0XHRcdFx0dGhpcy5yZWNvbm5lY3QoKTtcblx0XHRcdFx0fSwgdGhpcy5wb25nVGltZW91dFRpbWUpO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHRoaXMucmVjb25uZWN0KCk7XG5cdFx0XHR9XG5cdFx0fSwgdGhpcy5waW5nSW50ZXJ2YWxUaW1lKTtcblx0fVxuXG5cdHByaXZhdGUgc3RvcFBpbmdpbmcoKSB7XG5cdFx0aWYgKHRoaXMucGluZ0ludGVydmFsKSB7XG5cdFx0XHRjbGVhckludGVydmFsKHRoaXMucGluZ0ludGVydmFsKTtcblx0XHR9XG5cdFx0XG5cdFx0aWYgKHRoaXMucG9uZ1RpbWVvdXQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnBvbmdUaW1lb3V0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNvbnZlcnREYXRlc1RvVVRDKG9iaikge1xuXHRcdGZvciAobGV0IGtleSBpbiBvYmopIHtcblx0XHRcdGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRpZiAob2JqW2tleV0gaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdFx0Ly8gQ29udmVydCBEYXRlIHRvIFVUQyBJU08gU3RyaW5nXG5cdFx0XHRcdFx0b2JqW2tleV0gPSBvYmpba2V5XS50b0lTT1N0cmluZygpO1xuXHRcdFx0XHR9IFxuXHRcdFx0XHRlbHNlIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmIG9ialtrZXldICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0Ly8gUmVjdXJzaXZlbHkgbG9vayBmb3IgRGF0ZSBvYmplY3RzIHdpdGhpbiBhcnJheXMgb3IgbmVzdGVkIG9iamVjdHNcblx0XHRcdFx0XHR0aGlzLmNvbnZlcnREYXRlc1RvVVRDKG9ialtrZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZW5kKC4uLmRhdGE6IGFueVtdKSB7XG5cdFx0aWYgKHRoaXMuaXNXZWJTb2NrZXRBY3RpdmUoKSkge1xuXHRcdFx0ZGF0YS5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5jb252ZXJ0RGF0ZXNUb1VUQyhpdGVtKSk7XG5cdFx0XHR0aGlzLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdzZW5kIGVycm9yJywgdGhpcy5yZWFkeVN0YXRlKTtcblx0XHRcdHRoaXMucmVjb25uZWN0KCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLndzKSB7XG5cdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnY2xvc2luZyBzb2NrZXQnKTtcblx0XHRcdHRoaXMucmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5DTE9TSU5HO1xuXHRcdFx0dGhpcy5yZWFkeVN0YXRlJC5uZXh0KHRoaXMucmVhZHlTdGF0ZSk7XG5cdFx0XHR0aGlzLndzLmNsb3NlKCk7XG5cdFx0XHRcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgcmVjb25uZWN0KCkge1xuXHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdyZWNvbm5lY3QnLCB0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdGlmICh0aGlzLnJlYWR5U3RhdGUgIT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEJ1ZmZlckFtb3VudCgpIHtcblx0XHRpZiAodGhpcy53cykge1xuXHRcdFx0cmV0dXJuIHRoaXMud3MuYnVmZmVyZWRBbW91bnQ7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0cmV0dXJuIDIwNDgwO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgbG9nKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcblx0XHRcdGNvbnNvbGUubG9nKC4uLmFyZ3MpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSgpOiB2b2lkIHtcblx0XHRpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcblx0XHRcdGlmICghdGhpcy5pc1dlYlNvY2tldEFjdGl2ZSgpKSB7XG5cdFx0XHRcdHRoaXMucmVjb25uZWN0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpc1dlYlNvY2tldEFjdGl2ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy53cyAmJiB0aGlzLndzLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5PUEVOO1xuXHR9XG59XG4iXX0=
@@ -1,9 +0,0 @@
1
- export const SuperAdminModulePermission = {
2
- name: 'super-admin',
3
- views: [
4
- { link: '/super-admin/dashboard', label: 'Dashboard' },
5
- { link: '/super-admin/apm', label: 'APM' },
6
- { link: '/super-admin/monitor', label: 'Monitor' }
7
- ]
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwZXItYWRtaW4ucGVybWlzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zdXBlci1hZG1pbi5wZXJtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUEwQjtJQUNoRSxJQUFJLEVBQUUsYUFBYTtJQUNuQixLQUFLLEVBQUU7UUFDTixFQUFDLElBQUksRUFBRSx3QkFBd0IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFDO1FBQ3BELEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUM7UUFDeEMsRUFBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBQztLQUNoRDtDQUNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVQZXJtaXNzaW9uTW9kZWwgfSBmcm9tICcuL21vZGVscy9wZXJtaXNzaW9uLm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IFN1cGVyQWRtaW5Nb2R1bGVQZXJtaXNzaW9uOiBNb2R1bGVQZXJtaXNzaW9uTW9kZWwgPSB7XG5cdG5hbWU6ICdzdXBlci1hZG1pbicsXG5cdHZpZXdzOiBbXG5cdFx0e2xpbms6ICcvc3VwZXItYWRtaW4vZGFzaGJvYXJkJywgbGFiZWw6ICdEYXNoYm9hcmQnfSxcblx0XHR7bGluazogJy9zdXBlci1hZG1pbi9hcG0nLCBsYWJlbDogJ0FQTSd9LFxuXHRcdHtsaW5rOiAnL3N1cGVyLWFkbWluL21vbml0b3InLCBsYWJlbDogJ01vbml0b3InfVxuXHRdXG59O1xuIl19
@@ -1,204 +0,0 @@
1
- import { Component, ViewChild } from '@angular/core';
2
- import { ActivatedRoute } from '@angular/router';
3
- import { SupportTicketService } from '../support-ticket.service';
4
- import { ProviderService, BaseComponent } from '../../resolveio-class';
5
- import { Validators } from '@angular/forms';
6
- import { DialogService } from '../../widgets/dialog/dialog.service';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/router";
9
- import * as i2 from "../support-ticket.service";
10
- import * as i3 from "../../resolveio-class";
11
- import * as i4 from "../../widgets/dialog/dialog.service";
12
- import * as i5 from "@ng-bootstrap/ng-bootstrap";
13
- import * as i6 from "../../widgets/responsive-button-group/responsive-button-group.component";
14
- import * as i7 from "@angular/common";
15
- import * as i8 from "../../widgets/file/file-upload.component";
16
- ;
17
- export class SupportTicketDetailComponent extends BaseComponent {
18
- constructor(_route, _sts, _services, _ds) {
19
- super(_services);
20
- this._route = _route;
21
- this._sts = _sts;
22
- this._services = _services;
23
- this._ds = _ds;
24
- this.subscription$ = [];
25
- this.files = [];
26
- }
27
- ngOnInit() {
28
- this.id = this._route.snapshot.params['id'];
29
- this._sts.setSelectedSupportTicket(this.id);
30
- this._services._socket.call('supportGetSupportTicketWithId', this.id, (err, res) => {
31
- if (!res) {
32
- this._services._router.navigateByUrl('/support-ticket/list');
33
- this._ds.error('Could not find support ticket');
34
- return;
35
- }
36
- this.data = res;
37
- });
38
- }
39
- ngOnDestroy() {
40
- this.subscription$.forEach(sub => {
41
- sub.unsubscribe();
42
- });
43
- }
44
- onFileAdded(file) {
45
- this.data.files.push(file._id);
46
- this._services._socket.call('supportUpdateSupportTicket', this.data, (err, res) => {
47
- if (err || !res) {
48
- this._ds.error('Could not update support ticket files');
49
- this._services._socket.call('insertErrorLog', 'support-ticket-detail - update support-ticket files add', [
50
- this.data.files, err
51
- ]);
52
- }
53
- else {
54
- // this._services._alert.setAlert('info', 'Sending email(s).');
55
- // this._services._socket.callSupport('sendSupportTicketModifiedEmail', this.data, this.data.files, (errEmail, resEmail) => {
56
- // if (errEmail || !resEmail) {
57
- // this._ds.error('Could not email support ticket');
58
- // this._services._socket.call('insertErrorLog', 'support-ticket-detail - email support-ticket', [
59
- // {prop: 'status', data: this.data.status}, errEmail
60
- // ]);
61
- // }
62
- // else {
63
- // this._services._alert.setAlert('success', 'Support Ticket email has been sent');
64
- // }
65
- // });
66
- }
67
- });
68
- }
69
- onFilesRemoved(file) {
70
- this._ds.confirm('Are you sure you want to remove a file? This will email all current watchers?').then(yes => {
71
- if (this.data.files.indexOf(file._id) !== -1) {
72
- this.data.files.splice(this.data.files.indexOf(file._id), 1);
73
- this._services._socket.call('supportUpdateSupportTicket', this.data, (err, res) => {
74
- if (err || !res) {
75
- this._ds.error('Could not update support-ticket files');
76
- this._services._socket.call('insertErrorLog', 'support-ticket-detail - update files remove', [
77
- { prop: 'files', data: this.data.files }, err
78
- ]);
79
- }
80
- });
81
- }
82
- }, () => { });
83
- }
84
- edit() {
85
- this._services._router.navigateByUrl('/support-ticket/edit/' + this.id);
86
- }
87
- newMessage() {
88
- this._ds.input('Input Message', [
89
- {
90
- label: 'Message',
91
- form: 'message',
92
- data: '',
93
- validators: [Validators.required],
94
- validatorErrors: ['required'],
95
- validatorMsg: ['Message is required'],
96
- required: true,
97
- type: 'textarea'
98
- }
99
- ]).then(close => {
100
- this.data.messages.push({
101
- message: close.message.value,
102
- id_user: this._services._account.getUser()._id,
103
- user: this._services._account.getUser().fullname,
104
- date: new Date(),
105
- type: 'Client'
106
- });
107
- this._services._socket.call('supportUpdateSupportTicket', this.data, (err, res) => {
108
- if (res) {
109
- // this._services._alert.setAlert('success', 'Support ticket has been updated');
110
- // this._services._socket.callSupport('sendSupportTicketModifiedEmail', this.data, this.data.files, (errEmail, resEmail) => {
111
- // if (errEmail || !resEmail) {
112
- // this._ds.error('Could not email support ticket');
113
- // this._services._socket.call('insertErrorLog', 'support-ticket-detail - email support-ticket', [
114
- // {prop: 'status', data: this.data.status}, errEmail
115
- // ]);
116
- // }
117
- // else {
118
- // this._services._alert.setAlert('success', 'Support Ticket email has been sent');
119
- // }
120
- // });
121
- }
122
- else {
123
- this._services._socket.call('insertErrorLog', 'Support Ticket Detail - Add Message');
124
- this._ds.error('Support ticket could not update');
125
- }
126
- });
127
- }, () => { });
128
- }
129
- editMessage(index) {
130
- let message = this.data.messages[index];
131
- this._ds.input('Input Message', [
132
- {
133
- label: 'Message',
134
- form: 'message',
135
- data: message.message,
136
- validators: [Validators.required],
137
- validatorErrors: ['required'],
138
- validatorMsg: ['Message is required'],
139
- required: true,
140
- type: 'textarea'
141
- }
142
- ]).then(close => {
143
- message.message = close.message.value;
144
- this._services._socket.call('supportUpdateSupportTicket', this.data, (err, res) => {
145
- if (res) {
146
- // this._services._alert.setAlert('success', 'Support ticket has been updated');
147
- // this._services._socket.callSupport('sendSupportTicketModifiedEmail', this.data, this.data.files, (errEmail, resEmail) => {
148
- // if (errEmail || !resEmail) {
149
- // this._ds.error('Could not email support ticket');
150
- // this._services._socket.call('insertErrorLog', 'support-ticket-detail - email support-ticket', [
151
- // {prop: 'status', data: this.data.status}, errEmail
152
- // ]);
153
- // }
154
- // else {
155
- // this._services._alert.setAlert('success', 'Support Ticket email has been sent');
156
- // }
157
- // });
158
- }
159
- else {
160
- this._services._socket.call('insertErrorLog', 'Support Ticket Detail - Add Message');
161
- this._ds.error('Support ticket could not update');
162
- }
163
- });
164
- }, () => { });
165
- }
166
- deleteMessage(index) {
167
- this._ds.confirm('Are you sure you want to remove this message?').then(() => {
168
- this.data.messages.splice(index, 1);
169
- this._services._socket.call('supportUpdateSupportTicket', this.data, (err, res) => {
170
- if (res) {
171
- // this._services._alert.setAlert('success', 'Support ticket has been updated');
172
- // this._services._socket.callSupport('sendSupportTicketModifiedEmail', this.data, this.data.files, (errEmail, resEmail) => {
173
- // if (errEmail || !resEmail) {
174
- // this._ds.error('Could not email support ticket');
175
- // this._services._socket.call('insertErrorLog', 'support-ticket-detail - email support-ticket', [
176
- // {prop: 'status', data: this.data.status}, errEmail
177
- // ]);
178
- // }
179
- // else {
180
- // this._services._alert.setAlert('success', 'Support Ticket email has been sent');
181
- // }
182
- // });
183
- }
184
- else {
185
- this._services._socket.call('insertErrorLog', 'Support Ticket Detail - Add Message');
186
- this._ds.error('Support ticket could not update');
187
- }
188
- });
189
- }, () => { });
190
- }
191
- isMyMessage(message) {
192
- return this._services._account.getUser()._id === message.id_user;
193
- }
194
- }
195
- SupportTicketDetailComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SupportTicketDetailComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.SupportTicketService }, { token: i3.ProviderService }, { token: i4.DialogService }], target: i0.ɵɵFactoryTarget.Component });
196
- SupportTicketDetailComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SupportTicketDetailComponent, selector: "ng-component", providers: [ProviderService], viewQueries: [{ propertyName: "fileUpload", first: true, predicate: ["fileUpload"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<style>\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n }\n\n ngb-accordion {\n width: 100%;\n }\n\n dl {\n margin-bottom: 0px;\n }\n\n .selected {\n background-color: lightblue;\n }\n</style>\n\n<div class=\"col-lg-12\" *ngIf=\"data\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"supportTicketInfo, supportTicketMessages, files\">\n <ngb-panel id=\"supportTicketInfo\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Support Ticket Info</label>\n <i *ngIf=\"!acc.activeIds.includes('supportTicketInfo')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('supportTicketInfo')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"card\">\n <div class=\"card-header\"><b>General Info</b></div>\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <dl>\n <dt>Support Ticket #</dt>\n <dd>{{data.support_ticket_number | number}}</dd>\n <dt>Date Created</dt>\n <dd>{{data.date_created | date: 'short'}}</dd>\n </dl>\n </div>\n <div class=\"col-lg-4\">\n <dl>\n <dt>Type</dt>\n <dd>{{data.type}}</dd>\n <dt>User</dt>\n <dd>{{data.user_created}}</dd>\n </dl>\n </div>\n <div class=\"col-lg-4\">\n <dl>\n <dt>Status</dt>\n <dd>{{ data.status }}</dd>\n </dl>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card\">\n <div class=\"card-header\"><b>Problem Description</b></div>\n <div class=\"card-body\">\n <pre>{{data.issue}}</pre>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"supportTicketMessages\" *ngIf=\"data\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Messages</label>\n <i *ngIf=\"!acc.activeIds.includes('supportTicketMessages')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('supportTicketMessages')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <div class=\"card\" *ngFor=\"let message of data.messages; let i = index;\">\n <div class=\"card-header\"><b>User: {{message.user}} - Date: {{message.date | date : 'short'}}</b></div>\n <div class=\"card-body\" [ngClass]=\"[message.type === 'ResolveIO' ? 'selected' : '']\">\n <div class=\"row\" style=\"width: 100%\">\n <div class=\"col-lg-10\">\n <pre>{{message.message}}</pre>\n </div>\n <div class=\"col-lg-2\">\n <responsive-button-group collapseSize=\"900\">\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"editMessage(i)\" *ngIf=\"isMyMessage(message)\">Edit</button>\n <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteMessage(i)\" *ngIf=\"isMyMessage(message)\">Delete</button>\n </responsive-button-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\" style=\"margin-top: 10px;\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\" (click)=\"newMessage()\">New Message</button>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"files\">\n\t\t\t\t<ng-template ngbPanelTitle>\n\t\t\t\t\t<div> \n\t\t\t\t\t\t<label class=\"label-accordion\">Support Ticket Files</label>\n\t\t\t\t\t\t<i *ngIf=\"!acc.activeIds.includes('files')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t<i *ngIf=\"acc.activeIds.includes('files')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-template>\n\t\t\t\t<ng-template ngbPanelContent>\n\t\t\t\t\t<file-upload #fileUpload (fileAdded)=\"onFileAdded($event)\" (fileRemoved)=\"onFilesRemoved($event)\" [files]=\"files\" [allowDelete]=\"true\" [allowReplace]=\"true\"></file-upload>\n\t\t\t\t</ng-template>\n\t\t\t</ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <responsive-button-group collapseSize=\"900\">\n <button class=\"btn btn-warning\" type=\"button\" (click)=\"edit()\">Edit Support Ticket</button>\n </responsive-button-group>\n </div>\n</div>\n ", styles: ["\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n }\n\n ngb-accordion {\n width: 100%;\n }\n\n dl {\n margin-bottom: 0px;\n }\n\n .selected {\n background-color: lightblue;\n }\n"], dependencies: [{ kind: "component", type: i5.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i5.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i5.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i6.ResponsiveButtonGroupComponent, selector: "responsive-button-group", inputs: ["collapseSize"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.FileUploadComponent, selector: "file-upload", inputs: ["files", "allowDelete", "allowReplace", "showFileUpload", "fileType"], outputs: ["filesChanged", "fileAdded", "fileRemoved"] }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SupportTicketDetailComponent, decorators: [{
198
- type: Component,
199
- args: [{ providers: [ProviderService], template: "<style>\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n }\n\n ngb-accordion {\n width: 100%;\n }\n\n dl {\n margin-bottom: 0px;\n }\n\n .selected {\n background-color: lightblue;\n }\n</style>\n\n<div class=\"col-lg-12\" *ngIf=\"data\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"supportTicketInfo, supportTicketMessages, files\">\n <ngb-panel id=\"supportTicketInfo\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Support Ticket Info</label>\n <i *ngIf=\"!acc.activeIds.includes('supportTicketInfo')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('supportTicketInfo')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"card\">\n <div class=\"card-header\"><b>General Info</b></div>\n <div class=\"card-body\">\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <dl>\n <dt>Support Ticket #</dt>\n <dd>{{data.support_ticket_number | number}}</dd>\n <dt>Date Created</dt>\n <dd>{{data.date_created | date: 'short'}}</dd>\n </dl>\n </div>\n <div class=\"col-lg-4\">\n <dl>\n <dt>Type</dt>\n <dd>{{data.type}}</dd>\n <dt>User</dt>\n <dd>{{data.user_created}}</dd>\n </dl>\n </div>\n <div class=\"col-lg-4\">\n <dl>\n <dt>Status</dt>\n <dd>{{ data.status }}</dd>\n </dl>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card\">\n <div class=\"card-header\"><b>Problem Description</b></div>\n <div class=\"card-body\">\n <pre>{{data.issue}}</pre>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"supportTicketMessages\" *ngIf=\"data\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Messages</label>\n <i *ngIf=\"!acc.activeIds.includes('supportTicketMessages')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('supportTicketMessages')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <div class=\"card\" *ngFor=\"let message of data.messages; let i = index;\">\n <div class=\"card-header\"><b>User: {{message.user}} - Date: {{message.date | date : 'short'}}</b></div>\n <div class=\"card-body\" [ngClass]=\"[message.type === 'ResolveIO' ? 'selected' : '']\">\n <div class=\"row\" style=\"width: 100%\">\n <div class=\"col-lg-10\">\n <pre>{{message.message}}</pre>\n </div>\n <div class=\"col-lg-2\">\n <responsive-button-group collapseSize=\"900\">\n <button type=\"button\" class=\"btn btn-warning\" (click)=\"editMessage(i)\" *ngIf=\"isMyMessage(message)\">Edit</button>\n <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteMessage(i)\" *ngIf=\"isMyMessage(message)\">Delete</button>\n </responsive-button-group>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\" style=\"margin-top: 10px;\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\" (click)=\"newMessage()\">New Message</button>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"files\">\n\t\t\t\t<ng-template ngbPanelTitle>\n\t\t\t\t\t<div> \n\t\t\t\t\t\t<label class=\"label-accordion\">Support Ticket Files</label>\n\t\t\t\t\t\t<i *ngIf=\"!acc.activeIds.includes('files')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t<i *ngIf=\"acc.activeIds.includes('files')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-template>\n\t\t\t\t<ng-template ngbPanelContent>\n\t\t\t\t\t<file-upload #fileUpload (fileAdded)=\"onFileAdded($event)\" (fileRemoved)=\"onFilesRemoved($event)\" [files]=\"files\" [allowDelete]=\"true\" [allowReplace]=\"true\"></file-upload>\n\t\t\t\t</ng-template>\n\t\t\t</ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <responsive-button-group collapseSize=\"900\">\n <button class=\"btn btn-warning\" type=\"button\" (click)=\"edit()\">Edit Support Ticket</button>\n </responsive-button-group>\n </div>\n</div>\n " }]
200
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.SupportTicketService }, { type: i3.ProviderService }, { type: i4.DialogService }]; }, propDecorators: { fileUpload: [{
201
- type: ViewChild,
202
- args: ['fileUpload', { static: true }]
203
- }] } });
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydC10aWNrZXQtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zdXBwb3J0LXRpY2tldC9kZXRhaWwvc3VwcG9ydC10aWNrZXQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zdXBwb3J0LXRpY2tldC9kZXRhaWwvc3VwcG9ydC10aWNrZXQtZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7O0FBQ2hCLENBQUM7QUFPckQsTUFBTSxPQUFPLDRCQUE2QixTQUFRLGFBQWE7SUFXOUQsWUFBb0IsTUFBc0IsRUFBVSxJQUEwQixFQUFVLFNBQTBCLEVBQVUsR0FBa0I7UUFDN0ksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBREUsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFzQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBZTtRQVA5SSxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFLbkMsVUFBSyxHQUFnQixFQUFFLENBQUM7SUFJeEIsQ0FBQztJQUVELFFBQVE7UUFDUCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNsRixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPO2FBQ1A7WUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDaEMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFlO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDakYsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSx5REFBeUQsRUFBRTtvQkFDeEcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRztpQkFDcEIsQ0FBQyxDQUFDO2FBQ0g7aUJBRUk7Z0JBQ0osK0RBQStEO2dCQUUvRCw2SEFBNkg7Z0JBQzdILGdDQUFnQztnQkFDaEMsc0RBQXNEO2dCQUN0RCxvR0FBb0c7Z0JBQ3BHLHdEQUF3RDtnQkFDeEQsUUFBUTtnQkFDUixLQUFLO2dCQUNMLFVBQVU7Z0JBQ1YscUZBQXFGO2dCQUNyRixLQUFLO2dCQUNMLE1BQU07YUFDTjtRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFlO1FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLCtFQUErRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRTdELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNqRixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLDZDQUE2QyxFQUFFOzRCQUM1RixFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLEVBQUUsR0FBRzt5QkFDM0MsQ0FBQyxDQUFDO3FCQUNIO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2FBQ0g7UUFDRixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSTtRQUNILElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFVBQVU7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUU7WUFDL0I7Z0JBQ0MsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxFQUFFO2dCQUNSLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLGVBQWUsRUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDN0IsWUFBWSxFQUFFLENBQUMscUJBQXFCLENBQUM7Z0JBQ3JDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLElBQUksRUFBRSxVQUFVO2FBQ2hCO1NBQ0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDdkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUc7Z0JBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRO2dCQUNoRCxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ2hCLElBQUksRUFBRSxRQUFRO2FBQ2QsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pGLElBQUksR0FBRyxFQUFFO29CQUNSLGdGQUFnRjtvQkFFaEYsNkhBQTZIO29CQUM3SCxnQ0FBZ0M7b0JBQ2hDLHNEQUFzRDtvQkFDdEQsb0dBQW9HO29CQUNwRyx3REFBd0Q7b0JBQ3hELFFBQVE7b0JBQ1IsS0FBSztvQkFDTCxVQUFVO29CQUNWLHFGQUFxRjtvQkFDckYsS0FBSztvQkFDTCxNQUFNO2lCQUNOO3FCQUNJO29CQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO29CQUNyRixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2lCQUNsRDtZQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2hCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtZQUMvQjtnQkFDQyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUNyQixVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNqQyxlQUFlLEVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQzdCLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO2dCQUNyQyxRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsVUFBVTthQUNoQjtTQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZixPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBRXRDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNqRixJQUFJLEdBQUcsRUFBRTtvQkFDUixnRkFBZ0Y7b0JBRWhGLDZIQUE2SDtvQkFDN0gsZ0NBQWdDO29CQUNoQyxzREFBc0Q7b0JBQ3RELG9HQUFvRztvQkFDcEcsd0RBQXdEO29CQUN4RCxRQUFRO29CQUNSLEtBQUs7b0JBQ0wsVUFBVTtvQkFDVixxRkFBcUY7b0JBQ3JGLEtBQUs7b0JBQ0wsTUFBTTtpQkFDTjtxQkFDSTtvQkFDSixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUscUNBQXFDLENBQUMsQ0FBQztvQkFDckYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztpQkFDbEQ7WUFDRixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDM0UsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVwQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDakYsSUFBSSxHQUFHLEVBQUU7b0JBQ1IsZ0ZBQWdGO29CQUVoRiw2SEFBNkg7b0JBQzdILGdDQUFnQztvQkFDaEMsc0RBQXNEO29CQUN0RCxvR0FBb0c7b0JBQ3BHLHdEQUF3RDtvQkFDeEQsUUFBUTtvQkFDUixLQUFLO29CQUNMLFVBQVU7b0JBQ1YscUZBQXFGO29CQUNyRixLQUFLO29CQUNMLE1BQU07aUJBQ047cUJBQ0k7b0JBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLHFDQUFxQyxDQUFDLENBQUM7b0JBQ3JGLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7aUJBQ2xEO1lBQ0YsQ0FBQyxDQUFDLENBQUM7UUFDSixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQU87UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNsRSxDQUFDOzswSEF6TVcsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsdUNBSjdCLENBQUMsZUFBZSxDQUFDLHlLQ1g3Qiw4OE1BcUlJOzRGRHRIUyw0QkFBNEI7a0JBTHhDLFNBQVM7Z0NBQ0UsQ0FBQyxlQUFlLENBQUM7a01BTWEsVUFBVTtzQkFBbEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdXBwb3J0VGlja2V0U2VydmljZSB9IGZyb20gJy4uL3N1cHBvcnQtdGlja2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcm92aWRlclNlcnZpY2UsIEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9yZXNvbHZlaW8tY2xhc3MnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1cHBvcnRUaWNrZXRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9zdXBwb3J0LXRpY2tldC5tb2RlbCc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vd2lkZ2V0cy9kaWFsb2cvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpbGUubW9kZWwnOztcblxuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1Byb3ZpZGVyU2VydmljZV0sXG5cdHRlbXBsYXRlVXJsOiAnLi9zdXBwb3J0LXRpY2tldC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXG59KVxuXG5leHBvcnQgY2xhc3MgU3VwcG9ydFRpY2tldERldGFpbENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7IFxuXG5cdEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWQnLCB7c3RhdGljOiB0cnVlfSkgZmlsZVVwbG9hZDtcblxuXHRzdWJzY3JpcHRpb24kOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG5cdGlkOiBzdHJpbmc7XG5cdGRhdGE6IFN1cHBvcnRUaWNrZXRNb2RlbDtcblxuXHRmaWxlczogRmlsZU1vZGVsW10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgX3N0czogU3VwcG9ydFRpY2tldFNlcnZpY2UsIHByaXZhdGUgX3NlcnZpY2VzOiBQcm92aWRlclNlcnZpY2UsIHByaXZhdGUgX2RzOiBEaWFsb2dTZXJ2aWNlKSB7XG5cdFx0c3VwZXIoX3NlcnZpY2VzKTtcblx0fVxuXHRcdFxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLmlkID0gdGhpcy5fcm91dGUuc25hcHNob3QucGFyYW1zWydpZCddO1xuXHRcdHRoaXMuX3N0cy5zZXRTZWxlY3RlZFN1cHBvcnRUaWNrZXQodGhpcy5pZCk7XG5cblx0XHR0aGlzLl9zZXJ2aWNlcy5fc29ja2V0LmNhbGwoJ3N1cHBvcnRHZXRTdXBwb3J0VGlja2V0V2l0aElkJywgdGhpcy5pZCwgKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRpZiAoIXJlcykge1xuXHRcdFx0XHR0aGlzLl9zZXJ2aWNlcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9zdXBwb3J0LXRpY2tldC9saXN0Jyk7XG5cdFx0XHRcdHRoaXMuX2RzLmVycm9yKCdDb3VsZCBub3QgZmluZCBzdXBwb3J0IHRpY2tldCcpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdHRoaXMuZGF0YSA9IHJlcztcblx0XHR9KTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMuc3Vic2NyaXB0aW9uJC5mb3JFYWNoKHN1YiA9PiB7XG5cdFx0XHRzdWIudW5zdWJzY3JpYmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdG9uRmlsZUFkZGVkKGZpbGU6IEZpbGVNb2RlbCkge1x0XG5cdFx0dGhpcy5kYXRhLmZpbGVzLnB1c2goZmlsZS5faWQpO1xuXG5cdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdzdXBwb3J0VXBkYXRlU3VwcG9ydFRpY2tldCcsIHRoaXMuZGF0YSwgKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRpZiAoZXJyIHx8ICFyZXMpIHtcblx0XHRcdFx0dGhpcy5fZHMuZXJyb3IoJ0NvdWxkIG5vdCB1cGRhdGUgc3VwcG9ydCB0aWNrZXQgZmlsZXMnKTtcblx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdpbnNlcnRFcnJvckxvZycsICdzdXBwb3J0LXRpY2tldC1kZXRhaWwgLSB1cGRhdGUgc3VwcG9ydC10aWNrZXQgZmlsZXMgYWRkJywgW1xuXHRcdFx0XHRcdHRoaXMuZGF0YS5maWxlcywgZXJyXG5cdFx0XHRcdF0pO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Ly8gdGhpcy5fc2VydmljZXMuX2FsZXJ0LnNldEFsZXJ0KCdpbmZvJywgJ1NlbmRpbmcgZW1haWwocykuJyk7XG5cblx0XHRcdFx0Ly8gdGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsU3VwcG9ydCgnc2VuZFN1cHBvcnRUaWNrZXRNb2RpZmllZEVtYWlsJywgdGhpcy5kYXRhLCB0aGlzLmRhdGEuZmlsZXMsIChlcnJFbWFpbCwgcmVzRW1haWwpID0+IHtcblx0XHRcdFx0Ly8gXHRpZiAoZXJyRW1haWwgfHwgIXJlc0VtYWlsKSB7XG5cdFx0XHRcdC8vIFx0XHR0aGlzLl9kcy5lcnJvcignQ291bGQgbm90IGVtYWlsIHN1cHBvcnQgdGlja2V0Jyk7XG5cdFx0XHRcdC8vIFx0XHR0aGlzLl9zZXJ2aWNlcy5fc29ja2V0LmNhbGwoJ2luc2VydEVycm9yTG9nJywgJ3N1cHBvcnQtdGlja2V0LWRldGFpbCAtIGVtYWlsIHN1cHBvcnQtdGlja2V0JywgW1xuXHRcdFx0XHQvLyBcdFx0XHR7cHJvcDogJ3N0YXR1cycsIGRhdGE6IHRoaXMuZGF0YS5zdGF0dXN9LCBlcnJFbWFpbFxuXHRcdFx0XHQvLyBcdFx0XSk7XG5cdFx0XHRcdC8vIFx0fVxuXHRcdFx0XHQvLyBcdGVsc2Uge1xuXHRcdFx0XHQvLyBcdFx0dGhpcy5fc2VydmljZXMuX2FsZXJ0LnNldEFsZXJ0KCdzdWNjZXNzJywgJ1N1cHBvcnQgVGlja2V0IGVtYWlsIGhhcyBiZWVuIHNlbnQnKTtcblx0XHRcdFx0Ly8gXHR9XG5cdFx0XHRcdC8vIH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b25GaWxlc1JlbW92ZWQoZmlsZTogRmlsZU1vZGVsKSB7XG5cdFx0dGhpcy5fZHMuY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSBhIGZpbGU/IFRoaXMgd2lsbCBlbWFpbCBhbGwgY3VycmVudCB3YXRjaGVycz8nKS50aGVuKHllcyA9PiB7XG5cdFx0XHRpZiAodGhpcy5kYXRhLmZpbGVzLmluZGV4T2YoZmlsZS5faWQpICE9PSAtMSkge1xuXHRcdFx0XHR0aGlzLmRhdGEuZmlsZXMuc3BsaWNlKHRoaXMuZGF0YS5maWxlcy5pbmRleE9mKGZpbGUuX2lkKSwgMSk7XG5cblx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdzdXBwb3J0VXBkYXRlU3VwcG9ydFRpY2tldCcsIHRoaXMuZGF0YSwgKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRcdFx0aWYgKGVyciB8fCAhcmVzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9kcy5lcnJvcignQ291bGQgbm90IHVwZGF0ZSBzdXBwb3J0LXRpY2tldCBmaWxlcycpO1xuXHRcdFx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdpbnNlcnRFcnJvckxvZycsICdzdXBwb3J0LXRpY2tldC1kZXRhaWwgLSB1cGRhdGUgZmlsZXMgcmVtb3ZlJywgW1xuXHRcdFx0XHRcdFx0XHR7cHJvcDogJ2ZpbGVzJywgZGF0YTogdGhpcy5kYXRhLmZpbGVzfSwgZXJyXG5cdFx0XHRcdFx0XHRdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sICgpID0+IHt9KTtcblx0fVxuXG5cdGVkaXQoKSB7XG5cdFx0dGhpcy5fc2VydmljZXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvc3VwcG9ydC10aWNrZXQvZWRpdC8nICsgdGhpcy5pZCk7XG5cdH1cblxuXHRuZXdNZXNzYWdlKCkge1xuXHRcdHRoaXMuX2RzLmlucHV0KCdJbnB1dCBNZXNzYWdlJywgW1xuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogJ01lc3NhZ2UnLFxuXHRcdFx0XHRmb3JtOiAnbWVzc2FnZScsXG5cdFx0XHRcdGRhdGE6ICcnLFxuXHRcdFx0XHR2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0XHRcdHZhbGlkYXRvckVycm9yczogWydyZXF1aXJlZCddLFxuXHRcdFx0XHR2YWxpZGF0b3JNc2c6IFsnTWVzc2FnZSBpcyByZXF1aXJlZCddLFxuXHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0dHlwZTogJ3RleHRhcmVhJ1xuXHRcdFx0fVxuXHRcdF0pLnRoZW4oY2xvc2UgPT4ge1xuXHRcdFx0dGhpcy5kYXRhLm1lc3NhZ2VzLnB1c2goe1xuXHRcdFx0XHRtZXNzYWdlOiBjbG9zZS5tZXNzYWdlLnZhbHVlLFxuXHRcdFx0XHRpZF91c2VyOiB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuX2lkLFxuXHRcdFx0XHR1c2VyOiB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuZnVsbG5hbWUsXG5cdFx0XHRcdGRhdGU6IG5ldyBEYXRlKCksXG5cdFx0XHRcdHR5cGU6ICdDbGllbnQnXG5cdFx0XHR9KTtcblxuXHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdzdXBwb3J0VXBkYXRlU3VwcG9ydFRpY2tldCcsIHRoaXMuZGF0YSwgKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0XHQvLyB0aGlzLl9zZXJ2aWNlcy5fYWxlcnQuc2V0QWxlcnQoJ3N1Y2Nlc3MnLCAnU3VwcG9ydCB0aWNrZXQgaGFzIGJlZW4gdXBkYXRlZCcpO1xuXG5cdFx0XHRcdFx0Ly8gdGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsU3VwcG9ydCgnc2VuZFN1cHBvcnRUaWNrZXRNb2RpZmllZEVtYWlsJywgdGhpcy5kYXRhLCB0aGlzLmRhdGEuZmlsZXMsIChlcnJFbWFpbCwgcmVzRW1haWwpID0+IHtcblx0XHRcdFx0XHQvLyBcdGlmIChlcnJFbWFpbCB8fCAhcmVzRW1haWwpIHtcblx0XHRcdFx0XHQvLyBcdFx0dGhpcy5fZHMuZXJyb3IoJ0NvdWxkIG5vdCBlbWFpbCBzdXBwb3J0IHRpY2tldCcpO1xuXHRcdFx0XHRcdC8vIFx0XHR0aGlzLl9zZXJ2aWNlcy5fc29ja2V0LmNhbGwoJ2luc2VydEVycm9yTG9nJywgJ3N1cHBvcnQtdGlja2V0LWRldGFpbCAtIGVtYWlsIHN1cHBvcnQtdGlja2V0JywgW1xuXHRcdFx0XHRcdC8vIFx0XHRcdHtwcm9wOiAnc3RhdHVzJywgZGF0YTogdGhpcy5kYXRhLnN0YXR1c30sIGVyckVtYWlsXG5cdFx0XHRcdFx0Ly8gXHRcdF0pO1xuXHRcdFx0XHRcdC8vIFx0fVxuXHRcdFx0XHRcdC8vIFx0ZWxzZSB7XG5cdFx0XHRcdFx0Ly8gXHRcdHRoaXMuX3NlcnZpY2VzLl9hbGVydC5zZXRBbGVydCgnc3VjY2VzcycsICdTdXBwb3J0IFRpY2tldCBlbWFpbCBoYXMgYmVlbiBzZW50Jyk7XG5cdFx0XHRcdFx0Ly8gXHR9XG5cdFx0XHRcdFx0Ly8gfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdpbnNlcnRFcnJvckxvZycsICdTdXBwb3J0IFRpY2tldCBEZXRhaWwgLSBBZGQgTWVzc2FnZScpO1xuXHRcdFx0XHRcdHRoaXMuX2RzLmVycm9yKCdTdXBwb3J0IHRpY2tldCBjb3VsZCBub3QgdXBkYXRlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sICgpID0+IHt9KTtcblx0fVxuXG5cdGVkaXRNZXNzYWdlKGluZGV4KSB7XG5cdFx0bGV0IG1lc3NhZ2UgPSB0aGlzLmRhdGEubWVzc2FnZXNbaW5kZXhdO1xuXHRcdHRoaXMuX2RzLmlucHV0KCdJbnB1dCBNZXNzYWdlJywgW1xuXHRcdFx0e1xuXHRcdFx0XHRsYWJlbDogJ01lc3NhZ2UnLFxuXHRcdFx0XHRmb3JtOiAnbWVzc2FnZScsXG5cdFx0XHRcdGRhdGE6IG1lc3NhZ2UubWVzc2FnZSxcblx0XHRcdFx0dmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxuXHRcdFx0XHR2YWxpZGF0b3JFcnJvcnM6IFsncmVxdWlyZWQnXSxcblx0XHRcdFx0dmFsaWRhdG9yTXNnOiBbJ01lc3NhZ2UgaXMgcmVxdWlyZWQnXSxcblx0XHRcdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0XHRcdHR5cGU6ICd0ZXh0YXJlYSdcblx0XHRcdH1cblx0XHRdKS50aGVuKGNsb3NlID0+IHtcblx0XHRcdG1lc3NhZ2UubWVzc2FnZSA9IGNsb3NlLm1lc3NhZ2UudmFsdWU7XG5cblx0XHRcdHRoaXMuX3NlcnZpY2VzLl9zb2NrZXQuY2FsbCgnc3VwcG9ydFVwZGF0ZVN1cHBvcnRUaWNrZXQnLCB0aGlzLmRhdGEsIChlcnIsIHJlcykgPT4ge1xuXHRcdFx0XHRpZiAocmVzKSB7XG5cdFx0XHRcdFx0Ly8gdGhpcy5fc2VydmljZXMuX2FsZXJ0LnNldEFsZXJ0KCdzdWNjZXNzJywgJ1N1cHBvcnQgdGlja2V0IGhhcyBiZWVuIHVwZGF0ZWQnKTtcblxuXHRcdFx0XHRcdC8vIHRoaXMuX3NlcnZpY2VzLl9zb2NrZXQuY2FsbFN1cHBvcnQoJ3NlbmRTdXBwb3J0VGlja2V0TW9kaWZpZWRFbWFpbCcsIHRoaXMuZGF0YSwgdGhpcy5kYXRhLmZpbGVzLCAoZXJyRW1haWwsIHJlc0VtYWlsKSA9PiB7XG5cdFx0XHRcdFx0Ly8gXHRpZiAoZXJyRW1haWwgfHwgIXJlc0VtYWlsKSB7XG5cdFx0XHRcdFx0Ly8gXHRcdHRoaXMuX2RzLmVycm9yKCdDb3VsZCBub3QgZW1haWwgc3VwcG9ydCB0aWNrZXQnKTtcblx0XHRcdFx0XHQvLyBcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdpbnNlcnRFcnJvckxvZycsICdzdXBwb3J0LXRpY2tldC1kZXRhaWwgLSBlbWFpbCBzdXBwb3J0LXRpY2tldCcsIFtcblx0XHRcdFx0XHQvLyBcdFx0XHR7cHJvcDogJ3N0YXR1cycsIGRhdGE6IHRoaXMuZGF0YS5zdGF0dXN9LCBlcnJFbWFpbFxuXHRcdFx0XHRcdC8vIFx0XHRdKTtcblx0XHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0XHQvLyBcdGVsc2Uge1xuXHRcdFx0XHRcdC8vIFx0XHR0aGlzLl9zZXJ2aWNlcy5fYWxlcnQuc2V0QWxlcnQoJ3N1Y2Nlc3MnLCAnU3VwcG9ydCBUaWNrZXQgZW1haWwgaGFzIGJlZW4gc2VudCcpO1xuXHRcdFx0XHRcdC8vIFx0fVxuXHRcdFx0XHRcdC8vIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3NlcnZpY2VzLl9zb2NrZXQuY2FsbCgnaW5zZXJ0RXJyb3JMb2cnLCAnU3VwcG9ydCBUaWNrZXQgRGV0YWlsIC0gQWRkIE1lc3NhZ2UnKTtcblx0XHRcdFx0XHR0aGlzLl9kcy5lcnJvcignU3VwcG9ydCB0aWNrZXQgY291bGQgbm90IHVwZGF0ZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9LCAoKSA9PiB7fSk7XG5cdH1cblxuXHRkZWxldGVNZXNzYWdlKGluZGV4KSB7XG5cdFx0dGhpcy5fZHMuY29uZmlybSgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIG1lc3NhZ2U/JykudGhlbigoKSA9PiB7XG5cdFx0XHR0aGlzLmRhdGEubWVzc2FnZXMuc3BsaWNlKGluZGV4LCAxKTtcblxuXHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdzdXBwb3J0VXBkYXRlU3VwcG9ydFRpY2tldCcsIHRoaXMuZGF0YSwgKGVyciwgcmVzKSA9PiB7XG5cdFx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0XHQvLyB0aGlzLl9zZXJ2aWNlcy5fYWxlcnQuc2V0QWxlcnQoJ3N1Y2Nlc3MnLCAnU3VwcG9ydCB0aWNrZXQgaGFzIGJlZW4gdXBkYXRlZCcpO1xuXG5cdFx0XHRcdFx0Ly8gdGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsU3VwcG9ydCgnc2VuZFN1cHBvcnRUaWNrZXRNb2RpZmllZEVtYWlsJywgdGhpcy5kYXRhLCB0aGlzLmRhdGEuZmlsZXMsIChlcnJFbWFpbCwgcmVzRW1haWwpID0+IHtcblx0XHRcdFx0XHQvLyBcdGlmIChlcnJFbWFpbCB8fCAhcmVzRW1haWwpIHtcblx0XHRcdFx0XHQvLyBcdFx0dGhpcy5fZHMuZXJyb3IoJ0NvdWxkIG5vdCBlbWFpbCBzdXBwb3J0IHRpY2tldCcpO1xuXHRcdFx0XHRcdC8vIFx0XHR0aGlzLl9zZXJ2aWNlcy5fc29ja2V0LmNhbGwoJ2luc2VydEVycm9yTG9nJywgJ3N1cHBvcnQtdGlja2V0LWRldGFpbCAtIGVtYWlsIHN1cHBvcnQtdGlja2V0JywgW1xuXHRcdFx0XHRcdC8vIFx0XHRcdHtwcm9wOiAnc3RhdHVzJywgZGF0YTogdGhpcy5kYXRhLnN0YXR1c30sIGVyckVtYWlsXG5cdFx0XHRcdFx0Ly8gXHRcdF0pO1xuXHRcdFx0XHRcdC8vIFx0fVxuXHRcdFx0XHRcdC8vIFx0ZWxzZSB7XG5cdFx0XHRcdFx0Ly8gXHRcdHRoaXMuX3NlcnZpY2VzLl9hbGVydC5zZXRBbGVydCgnc3VjY2VzcycsICdTdXBwb3J0IFRpY2tldCBlbWFpbCBoYXMgYmVlbiBzZW50Jyk7XG5cdFx0XHRcdFx0Ly8gXHR9XG5cdFx0XHRcdFx0Ly8gfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdpbnNlcnRFcnJvckxvZycsICdTdXBwb3J0IFRpY2tldCBEZXRhaWwgLSBBZGQgTWVzc2FnZScpO1xuXHRcdFx0XHRcdHRoaXMuX2RzLmVycm9yKCdTdXBwb3J0IHRpY2tldCBjb3VsZCBub3QgdXBkYXRlJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0sICgpID0+IHt9KTtcblx0fVxuXG5cdGlzTXlNZXNzYWdlKG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLl9pZCA9PT0gbWVzc2FnZS5pZF91c2VyO1xuXHR9XG59IiwiPHN0eWxlPlxuICAgIC5sYWJlbC1hY2NvcmRpb24ge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwcHg7XG4gICAgfVxuXG4gICAgLmZhLXBsdXMge1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgfVxuXG4gICAgLmZhLW1pbnVzIHtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgIH1cblxuICAgIG5nYi1hY2NvcmRpb24ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICBkbCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICB9XG5cbiAgICAuc2VsZWN0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGJsdWU7XG4gICAgfVxuPC9zdHlsZT5cblxuPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiICpuZ0lmPVwiZGF0YVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPG5nYi1hY2NvcmRpb24gI2FjYz1cIm5nYkFjY29yZGlvblwiIGFjdGl2ZUlkcz1cInN1cHBvcnRUaWNrZXRJbmZvLCBzdXBwb3J0VGlja2V0TWVzc2FnZXMsIGZpbGVzXCI+XG4gICAgICAgICAgICA8bmdiLXBhbmVsIGlkPVwic3VwcG9ydFRpY2tldEluZm9cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj4gXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1hY2NvcmRpb25cIj5TdXBwb3J0IFRpY2tldCBJbmZvPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ3N1cHBvcnRUaWNrZXRJbmZvJylcIiBjbGFzcz1cImZhIGZhLXBsdXMgZmxvYXQtZW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCdzdXBwb3J0VGlja2V0SW5mbycpXCIgY2xhc3M9XCJmYSBmYS1taW51cyBmbG9hdC1lbmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPjxiPkdlbmVyYWwgSW5mbzwvYj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD5TdXBwb3J0IFRpY2tldCAjPC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+e3tkYXRhLnN1cHBvcnRfdGlja2V0X251bWJlciB8IG51bWJlcn19PC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+RGF0ZSBDcmVhdGVkPC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+e3tkYXRhLmRhdGVfY3JlYXRlZCB8IGRhdGU6ICdzaG9ydCd9fTwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlR5cGU8L2R0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD57e2RhdGEudHlwZX19PC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+VXNlcjwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPnt7ZGF0YS51c2VyX2NyZWF0ZWR9fTwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlN0YXR1czwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPnt7IGRhdGEuc3RhdHVzIH19PC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+PGI+UHJvYmxlbSBEZXNjcmlwdGlvbjwvYj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJlPnt7ZGF0YS5pc3N1ZX19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmdiLXBhbmVsPlxuICAgICAgICAgICAgPG5nYi1wYW5lbCBpZD1cInN1cHBvcnRUaWNrZXRNZXNzYWdlc1wiICpuZ0lmPVwiZGF0YVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWFjY29yZGlvblwiPk1lc3NhZ2VzPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ3N1cHBvcnRUaWNrZXRNZXNzYWdlcycpXCIgY2xhc3M9XCJmYSBmYS1wbHVzIGZsb2F0LWVuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiYWNjLmFjdGl2ZUlkcy5pbmNsdWRlcygnc3VwcG9ydFRpY2tldE1lc3NhZ2VzJylcIiBjbGFzcz1cImZhIGZhLW1pbnVzIGZsb2F0LWVuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBkYXRhLm1lc3NhZ2VzOyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj48Yj5Vc2VyOiB7e21lc3NhZ2UudXNlcn19IC0gRGF0ZToge3ttZXNzYWdlLmRhdGUgfCBkYXRlIDogJ3Nob3J0J319PC9iPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCIgW25nQ2xhc3NdPVwiW21lc3NhZ2UudHlwZSA9PT0gJ1Jlc29sdmVJTycgPyAnc2VsZWN0ZWQnIDogJyddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3ttZXNzYWdlLm1lc3NhZ2V9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVzcG9uc2l2ZS1idXR0b24tZ3JvdXAgY29sbGFwc2VTaXplPVwiOTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2FybmluZ1wiIChjbGljayk9XCJlZGl0TWVzc2FnZShpKVwiICpuZ0lmPVwiaXNNeU1lc3NhZ2UobWVzc2FnZSlcIj5FZGl0PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cImRlbGV0ZU1lc3NhZ2UoaSlcIiAqbmdJZj1cImlzTXlNZXNzYWdlKG1lc3NhZ2UpXCI+RGVsZXRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwibmV3TWVzc2FnZSgpXCI+TmV3IE1lc3NhZ2U8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZ2ItcGFuZWw+XG4gICAgICAgICAgICA8bmdiLXBhbmVsIGlkPVwiZmlsZXNcIj5cblx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nYlBhbmVsVGl0bGU+XG5cdFx0XHRcdFx0PGRpdj4gXG5cdFx0XHRcdFx0XHQ8bGFiZWwgY2xhc3M9XCJsYWJlbC1hY2NvcmRpb25cIj5TdXBwb3J0IFRpY2tldCBGaWxlczwvbGFiZWw+XG5cdFx0XHRcdFx0XHQ8aSAqbmdJZj1cIiFhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCdmaWxlcycpXCIgY2xhc3M9XCJmYSBmYS1wbHVzIGZsb2F0LWVuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cblx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiYWNjLmFjdGl2ZUlkcy5pbmNsdWRlcygnZmlsZXMnKVwiIGNsYXNzPVwiZmEgZmEtbWludXMgZmxvYXQtZW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxuXHRcdFx0XHRcdDxmaWxlLXVwbG9hZCAjZmlsZVVwbG9hZCAoZmlsZUFkZGVkKT1cIm9uRmlsZUFkZGVkKCRldmVudClcIiAoZmlsZVJlbW92ZWQpPVwib25GaWxlc1JlbW92ZWQoJGV2ZW50KVwiIFtmaWxlc109XCJmaWxlc1wiIFthbGxvd0RlbGV0ZV09XCJ0cnVlXCIgW2FsbG93UmVwbGFjZV09XCJ0cnVlXCI+PC9maWxlLXVwbG9hZD5cblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvbmdiLXBhbmVsPlxuICAgICAgICA8L25nYi1hY2NvcmRpb24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiIHN0eWxlPVwicGFkZGluZy10b3A6IDE1cHg7XCI+XG4gICAgICAgIDxyZXNwb25zaXZlLWJ1dHRvbi1ncm91cCBjb2xsYXBzZVNpemU9XCI5MDBcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImVkaXQoKVwiPkVkaXQgU3VwcG9ydCBUaWNrZXQ8L2J1dHRvbj5cbiAgICAgICAgPC9yZXNwb25zaXZlLWJ1dHRvbi1ncm91cD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuICAgICJdfQ==