@en-solutions/tgm-client-sdk 1.6.21

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 (533) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +788 -0
  3. package/esm2022/en-solutions-tgm-client-sdk.mjs +5 -0
  4. package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs +308 -0
  5. package/esm2022/lib/components/database-manager/database-manager.module.mjs +66 -0
  6. package/esm2022/lib/components/database-manager/object-browser/object-browser.component.mjs +98 -0
  7. package/esm2022/lib/components/database-manager/query-editor/query-editor.component.mjs +196 -0
  8. package/esm2022/lib/components/database-manager/query-toolbar/query-toolbar.component.mjs +70 -0
  9. package/esm2022/lib/components/database-manager/record-detail/record-detail.component.mjs +112 -0
  10. package/esm2022/lib/components/database-manager/registry/entity-registry.mjs +512 -0
  11. package/esm2022/lib/components/database-manager/results-grid/results-grid.component.mjs +165 -0
  12. package/esm2022/lib/components/database-manager/services/entity-schema.service.mjs +91 -0
  13. package/esm2022/lib/components/database-manager/services/query-executor.service.mjs +204 -0
  14. package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs +166 -0
  15. package/esm2022/lib/components/database-manager/table-structure/table-structure.component.mjs +42 -0
  16. package/esm2022/lib/components/database-manager/types/database-manager.types.mjs +6 -0
  17. package/esm2022/lib/components/reporting/export-button/export-button.component.mjs +203 -0
  18. package/esm2022/lib/components/reporting/generated-report-list/generated-report-list.component.mjs +285 -0
  19. package/esm2022/lib/components/reporting/report-definition-form/report-definition-form.component.mjs +206 -0
  20. package/esm2022/lib/components/reporting/report-definition-list/report-definition-list.component.mjs +252 -0
  21. package/esm2022/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.mjs +122 -0
  22. package/esm2022/lib/components/reporting/report-stats/report-stats.component.mjs +164 -0
  23. package/esm2022/lib/components/reporting/report-template-list/report-template-list.component.mjs +114 -0
  24. package/esm2022/lib/components/reporting/reporting.module.mjs +60 -0
  25. package/esm2022/lib/components/video-call/incoming-call/incoming-call.component.mjs +80 -0
  26. package/esm2022/lib/components/video-call/services/livekit-room.service.mjs +142 -0
  27. package/esm2022/lib/components/video-call/services/video-call-signaling.service.mjs +42 -0
  28. package/esm2022/lib/components/video-call/services/video-call-state.service.mjs +52 -0
  29. package/esm2022/lib/components/video-call/types/video-call.types.mjs +2 -0
  30. package/esm2022/lib/components/video-call/video-call.module.mjs +42 -0
  31. package/esm2022/lib/components/video-call/video-controls/video-controls.component.mjs +33 -0
  32. package/esm2022/lib/components/video-call/video-participant/video-participant.component.mjs +68 -0
  33. package/esm2022/lib/components/video-call/video-room/video-room.component.mjs +89 -0
  34. package/esm2022/lib/core/auth-interceptor.mjs +33 -0
  35. package/esm2022/lib/core/client-interceptor.mjs +34 -0
  36. package/esm2022/lib/core/error-handler.mjs +32 -0
  37. package/esm2022/lib/core/http-client.service.mjs +254 -0
  38. package/esm2022/lib/core/websocket.service.mjs +185 -0
  39. package/esm2022/lib/models/admin/audit.models.mjs +2 -0
  40. package/esm2022/lib/models/admin/backup.models.mjs +2 -0
  41. package/esm2022/lib/models/admin/client.models.mjs +2 -0
  42. package/esm2022/lib/models/admin/email-provider.models.mjs +2 -0
  43. package/esm2022/lib/models/admin/erp.models.mjs +2 -0
  44. package/esm2022/lib/models/admin/identity-provider.models.mjs +2 -0
  45. package/esm2022/lib/models/admin/index.mjs +14 -0
  46. package/esm2022/lib/models/admin/messaging-provider.models.mjs +2 -0
  47. package/esm2022/lib/models/admin/platform-admin.models.mjs +2 -0
  48. package/esm2022/lib/models/admin/queue.models.mjs +2 -0
  49. package/esm2022/lib/models/admin/role.models.mjs +2 -0
  50. package/esm2022/lib/models/admin/sandbox.models.mjs +2 -0
  51. package/esm2022/lib/models/admin/ticket.models.mjs +2 -0
  52. package/esm2022/lib/models/admin/webhook.models.mjs +2 -0
  53. package/esm2022/lib/models/api/ai.models.mjs +2 -0
  54. package/esm2022/lib/models/api/aip.models.mjs +2 -0
  55. package/esm2022/lib/models/api/cat.models.mjs +2 -0
  56. package/esm2022/lib/models/api/company.models.mjs +2 -0
  57. package/esm2022/lib/models/api/compliance.models.mjs +2 -0
  58. package/esm2022/lib/models/api/component.models.mjs +2 -0
  59. package/esm2022/lib/models/api/cortex-edge.models.mjs +2 -0
  60. package/esm2022/lib/models/api/cortex-event.models.mjs +2 -0
  61. package/esm2022/lib/models/api/cortex-insight.models.mjs +2 -0
  62. package/esm2022/lib/models/api/cortex-node.models.mjs +2 -0
  63. package/esm2022/lib/models/api/custom-field.models.mjs +2 -0
  64. package/esm2022/lib/models/api/deferral.models.mjs +2 -0
  65. package/esm2022/lib/models/api/diagnostic-report.models.mjs +2 -0
  66. package/esm2022/lib/models/api/document.models.mjs +2 -0
  67. package/esm2022/lib/models/api/energy.models.mjs +2 -0
  68. package/esm2022/lib/models/api/failure.models.mjs +2 -0
  69. package/esm2022/lib/models/api/fleet.models.mjs +2 -0
  70. package/esm2022/lib/models/api/inspection.models.mjs +2 -0
  71. package/esm2022/lib/models/api/intervention.models.mjs +2 -0
  72. package/esm2022/lib/models/api/iot.models.mjs +2 -0
  73. package/esm2022/lib/models/api/knowledge.models.mjs +2 -0
  74. package/esm2022/lib/models/api/loto.models.mjs +2 -0
  75. package/esm2022/lib/models/api/maintenance-record.models.mjs +2 -0
  76. package/esm2022/lib/models/api/maintenance.models.mjs +2 -0
  77. package/esm2022/lib/models/api/material.models.mjs +2 -0
  78. package/esm2022/lib/models/api/media.models.mjs +2 -0
  79. package/esm2022/lib/models/api/misc.models.mjs +2 -0
  80. package/esm2022/lib/models/api/project.models.mjs +2 -0
  81. package/esm2022/lib/models/api/quality.models.mjs +2 -0
  82. package/esm2022/lib/models/api/reporting.models.mjs +3 -0
  83. package/esm2022/lib/models/api/reservoir-websocket.models.mjs +17 -0
  84. package/esm2022/lib/models/api/reservoir.models.mjs +2 -0
  85. package/esm2022/lib/models/api/search.models.mjs +2 -0
  86. package/esm2022/lib/models/api/sensor.models.mjs +2 -0
  87. package/esm2022/lib/models/api/unit.models.mjs +2 -0
  88. package/esm2022/lib/models/api/user.models.mjs +2 -0
  89. package/esm2022/lib/models/api/warranty.models.mjs +2 -0
  90. package/esm2022/lib/models/api/work-permit.models.mjs +2 -0
  91. package/esm2022/lib/models/api/workflow.models.mjs +2 -0
  92. package/esm2022/lib/models/auth/index.mjs +4 -0
  93. package/esm2022/lib/models/auth/login.models.mjs +2 -0
  94. package/esm2022/lib/models/auth/sso.models.mjs +2 -0
  95. package/esm2022/lib/models/auth/totp.models.mjs +2 -0
  96. package/esm2022/lib/models/base.models.mjs +99 -0
  97. package/esm2022/lib/models/chat/chat.models.mjs +2 -0
  98. package/esm2022/lib/models/enums/cat.enums.mjs +17 -0
  99. package/esm2022/lib/models/enums/energy.enums.mjs +8 -0
  100. package/esm2022/lib/models/enums/erp.enums.mjs +5 -0
  101. package/esm2022/lib/models/enums/index.mjs +15 -0
  102. package/esm2022/lib/models/enums/inspection.enums.mjs +7 -0
  103. package/esm2022/lib/models/enums/loto.enums.mjs +25 -0
  104. package/esm2022/lib/models/enums/misc.enums.mjs +19 -0
  105. package/esm2022/lib/models/enums/quality.enums.mjs +22 -0
  106. package/esm2022/lib/models/enums/reservoir.enums.mjs +13 -0
  107. package/esm2022/lib/models/enums/sso.enums.mjs +3 -0
  108. package/esm2022/lib/models/enums/status.enums.mjs +41 -0
  109. package/esm2022/lib/models/enums/time.enums.mjs +5 -0
  110. package/esm2022/lib/models/enums/type.enums.mjs +45 -0
  111. package/esm2022/lib/models/enums/user.enums.mjs +6 -0
  112. package/esm2022/lib/models/enums/work-permit.enums.mjs +33 -0
  113. package/esm2022/lib/models/index.mjs +42 -0
  114. package/esm2022/lib/models/realtime/realtime-event.models.mjs +9 -0
  115. package/esm2022/lib/models/video/video-call.models.mjs +2 -0
  116. package/esm2022/lib/services/admin/activity-log.service.mjs +28 -0
  117. package/esm2022/lib/services/admin/announcement.service.mjs +37 -0
  118. package/esm2022/lib/services/admin/article-admin.service.mjs +37 -0
  119. package/esm2022/lib/services/admin/audit-log.service.mjs +53 -0
  120. package/esm2022/lib/services/admin/backup.service.mjs +28 -0
  121. package/esm2022/lib/services/admin/cache-admin.service.mjs +64 -0
  122. package/esm2022/lib/services/admin/client-admin.service.mjs +101 -0
  123. package/esm2022/lib/services/admin/client-api-key.service.mjs +31 -0
  124. package/esm2022/lib/services/admin/client-ocr.service.mjs +28 -0
  125. package/esm2022/lib/services/admin/client-usage.service.mjs +31 -0
  126. package/esm2022/lib/services/admin/data-export.service.mjs +19 -0
  127. package/esm2022/lib/services/admin/document-admin.service.mjs +40 -0
  128. package/esm2022/lib/services/admin/email-admin.service.mjs +28 -0
  129. package/esm2022/lib/services/admin/email-provider.service.mjs +58 -0
  130. package/esm2022/lib/services/admin/erp-admin.service.mjs +111 -0
  131. package/esm2022/lib/services/admin/identity-provider.service.mjs +46 -0
  132. package/esm2022/lib/services/admin/impersonation.service.mjs +19 -0
  133. package/esm2022/lib/services/admin/index.mjs +31 -0
  134. package/esm2022/lib/services/admin/messaging-provider.service.mjs +55 -0
  135. package/esm2022/lib/services/admin/notification.service.mjs +31 -0
  136. package/esm2022/lib/services/admin/platform-admin.service.mjs +34 -0
  137. package/esm2022/lib/services/admin/platform-webhook.service.mjs +34 -0
  138. package/esm2022/lib/services/admin/queue-admin.service.mjs +55 -0
  139. package/esm2022/lib/services/admin/role-admin.service.mjs +81 -0
  140. package/esm2022/lib/services/admin/sandbox-admin.service.mjs +34 -0
  141. package/esm2022/lib/services/admin/scheduler-admin.service.mjs +34 -0
  142. package/esm2022/lib/services/admin/subscription.service.mjs +28 -0
  143. package/esm2022/lib/services/admin/system-health.service.mjs +22 -0
  144. package/esm2022/lib/services/admin/user-admin.service.mjs +67 -0
  145. package/esm2022/lib/services/admin/user-permission.service.mjs +40 -0
  146. package/esm2022/lib/services/admin/webhook-admin.service.mjs +61 -0
  147. package/esm2022/lib/services/api/agent.service.mjs +29 -0
  148. package/esm2022/lib/services/api/ai-feedback.service.mjs +17 -0
  149. package/esm2022/lib/services/api/ai.service.mjs +66 -0
  150. package/esm2022/lib/services/api/aip-analysis.service.mjs +20 -0
  151. package/esm2022/lib/services/api/aip-financial.service.mjs +29 -0
  152. package/esm2022/lib/services/api/aip-geographic.service.mjs +30 -0
  153. package/esm2022/lib/services/api/aip-network.service.mjs +29 -0
  154. package/esm2022/lib/services/api/aip-performance.service.mjs +29 -0
  155. package/esm2022/lib/services/api/aip-resource.service.mjs +23 -0
  156. package/esm2022/lib/services/api/aip-workflow.service.mjs +32 -0
  157. package/esm2022/lib/services/api/aip.service.mjs +158 -0
  158. package/esm2022/lib/services/api/alert.service.mjs +26 -0
  159. package/esm2022/lib/services/api/anomaly-detection.service.mjs +40 -0
  160. package/esm2022/lib/services/api/asset-lifecycle.service.mjs +78 -0
  161. package/esm2022/lib/services/api/audit-entry.service.mjs +22 -0
  162. package/esm2022/lib/services/api/base-crud.service.mjs +37 -0
  163. package/esm2022/lib/services/api/bid.service.mjs +17 -0
  164. package/esm2022/lib/services/api/budget.service.mjs +17 -0
  165. package/esm2022/lib/services/api/bulk-operation.service.mjs +65 -0
  166. package/esm2022/lib/services/api/capex-project.service.mjs +17 -0
  167. package/esm2022/lib/services/api/cat.service.mjs +77 -0
  168. package/esm2022/lib/services/api/client-article.service.mjs +23 -0
  169. package/esm2022/lib/services/api/community.service.mjs +41 -0
  170. package/esm2022/lib/services/api/company-material-type.service.mjs +17 -0
  171. package/esm2022/lib/services/api/company-material.service.mjs +17 -0
  172. package/esm2022/lib/services/api/company.service.mjs +30 -0
  173. package/esm2022/lib/services/api/compliance.service.mjs +74 -0
  174. package/esm2022/lib/services/api/component-info.service.mjs +17 -0
  175. package/esm2022/lib/services/api/component-location.service.mjs +17 -0
  176. package/esm2022/lib/services/api/component.service.mjs +53 -0
  177. package/esm2022/lib/services/api/cortex-event.service.mjs +17 -0
  178. package/esm2022/lib/services/api/cortex-insight.service.mjs +23 -0
  179. package/esm2022/lib/services/api/cortex-node.service.mjs +17 -0
  180. package/esm2022/lib/services/api/cortex.service.mjs +29 -0
  181. package/esm2022/lib/services/api/custom-field.service.mjs +70 -0
  182. package/esm2022/lib/services/api/custom.service.mjs +43 -0
  183. package/esm2022/lib/services/api/dashboard.service.mjs +44 -0
  184. package/esm2022/lib/services/api/deferral.service.mjs +54 -0
  185. package/esm2022/lib/services/api/department.service.mjs +17 -0
  186. package/esm2022/lib/services/api/device-gateway.service.mjs +33 -0
  187. package/esm2022/lib/services/api/diagnostic-report.service.mjs +23 -0
  188. package/esm2022/lib/services/api/digital-twin.service.mjs +56 -0
  189. package/esm2022/lib/services/api/document.service.mjs +53 -0
  190. package/esm2022/lib/services/api/dynamic-crud.service.mjs +67 -0
  191. package/esm2022/lib/services/api/energy-analytics.service.mjs +42 -0
  192. package/esm2022/lib/services/api/energy-production.service.mjs +17 -0
  193. package/esm2022/lib/services/api/energy.service.mjs +91 -0
  194. package/esm2022/lib/services/api/entity-comment.service.mjs +31 -0
  195. package/esm2022/lib/services/api/event.service.mjs +17 -0
  196. package/esm2022/lib/services/api/export.service.mjs +216 -0
  197. package/esm2022/lib/services/api/extension.service.mjs +56 -0
  198. package/esm2022/lib/services/api/failure.service.mjs +53 -0
  199. package/esm2022/lib/services/api/fleet.service.mjs +140 -0
  200. package/esm2022/lib/services/api/inactive-component.service.mjs +17 -0
  201. package/esm2022/lib/services/api/index.mjs +101 -0
  202. package/esm2022/lib/services/api/inspection.service.mjs +29 -0
  203. package/esm2022/lib/services/api/intervention-request.service.mjs +17 -0
  204. package/esm2022/lib/services/api/intervention.service.mjs +17 -0
  205. package/esm2022/lib/services/api/knowledge.service.mjs +209 -0
  206. package/esm2022/lib/services/api/license.service.mjs +25 -0
  207. package/esm2022/lib/services/api/location.service.mjs +17 -0
  208. package/esm2022/lib/services/api/log.service.mjs +17 -0
  209. package/esm2022/lib/services/api/login-history.service.mjs +17 -0
  210. package/esm2022/lib/services/api/maintenance-plan.service.mjs +17 -0
  211. package/esm2022/lib/services/api/maintenance-record.service.mjs +17 -0
  212. package/esm2022/lib/services/api/material-consumable.service.mjs +41 -0
  213. package/esm2022/lib/services/api/material-instrument.service.mjs +29 -0
  214. package/esm2022/lib/services/api/material-item.service.mjs +53 -0
  215. package/esm2022/lib/services/api/material-tooling.service.mjs +41 -0
  216. package/esm2022/lib/services/api/measurement-unit.service.mjs +17 -0
  217. package/esm2022/lib/services/api/misc-crud.service.mjs +329 -0
  218. package/esm2022/lib/services/api/note.service.mjs +37 -0
  219. package/esm2022/lib/services/api/outage-resource.service.mjs +28 -0
  220. package/esm2022/lib/services/api/plant-data.service.mjs +31 -0
  221. package/esm2022/lib/services/api/procurement.service.mjs +53 -0
  222. package/esm2022/lib/services/api/project.service.mjs +17 -0
  223. package/esm2022/lib/services/api/property-template.service.mjs +17 -0
  224. package/esm2022/lib/services/api/quality.service.mjs +29 -0
  225. package/esm2022/lib/services/api/recurring-event.service.mjs +17 -0
  226. package/esm2022/lib/services/api/reporting.service.mjs +117 -0
  227. package/esm2022/lib/services/api/reservoir-data.service.mjs +19 -0
  228. package/esm2022/lib/services/api/reservoir.service.mjs +209 -0
  229. package/esm2022/lib/services/api/room.service.mjs +17 -0
  230. package/esm2022/lib/services/api/sandbox.service.mjs +62 -0
  231. package/esm2022/lib/services/api/scheduled-report.service.mjs +17 -0
  232. package/esm2022/lib/services/api/search.service.mjs +77 -0
  233. package/esm2022/lib/services/api/sensor.service.mjs +36 -0
  234. package/esm2022/lib/services/api/sla-policy.service.mjs +17 -0
  235. package/esm2022/lib/services/api/sla.service.mjs +17 -0
  236. package/esm2022/lib/services/api/threshold-alert-rule.service.mjs +17 -0
  237. package/esm2022/lib/services/api/ticket.service.mjs +73 -0
  238. package/esm2022/lib/services/api/time-entry.service.mjs +17 -0
  239. package/esm2022/lib/services/api/todo.service.mjs +17 -0
  240. package/esm2022/lib/services/api/unit.service.mjs +17 -0
  241. package/esm2022/lib/services/api/upload.service.mjs +84 -0
  242. package/esm2022/lib/services/api/user.service.mjs +107 -0
  243. package/esm2022/lib/services/api/warehouse.service.mjs +29 -0
  244. package/esm2022/lib/services/api/warranty.service.mjs +29 -0
  245. package/esm2022/lib/services/api/work-order.service.mjs +28 -0
  246. package/esm2022/lib/services/api/work-permit.service.mjs +17 -0
  247. package/esm2022/lib/services/api/workflow.service.mjs +86 -0
  248. package/esm2022/lib/services/auth/auth.service.mjs +97 -0
  249. package/esm2022/lib/services/auth/index.mjs +5 -0
  250. package/esm2022/lib/services/auth/platform-auth.service.mjs +39 -0
  251. package/esm2022/lib/services/auth/sso-auth.service.mjs +46 -0
  252. package/esm2022/lib/services/auth/totp.service.mjs +34 -0
  253. package/esm2022/lib/services/chat/chat-rest.service.mjs +104 -0
  254. package/esm2022/lib/services/chat/chat-websocket.service.mjs +70 -0
  255. package/esm2022/lib/services/chat/index.mjs +3 -0
  256. package/esm2022/lib/services/index.mjs +8 -0
  257. package/esm2022/lib/services/realtime/index.mjs +2 -0
  258. package/esm2022/lib/services/realtime/realtime-event.service.mjs +187 -0
  259. package/esm2022/lib/services/reservoir/index.mjs +2 -0
  260. package/esm2022/lib/services/reservoir/reservoir-websocket.service.mjs +105 -0
  261. package/esm2022/lib/services/video/index.mjs +3 -0
  262. package/esm2022/lib/services/video/video-call-rest.service.mjs +42 -0
  263. package/esm2022/lib/services/video/video-call-websocket.service.mjs +55 -0
  264. package/esm2022/lib/tgm-sdk.config.mjs +32 -0
  265. package/esm2022/lib/tgm-sdk.module.mjs +38 -0
  266. package/esm2022/public-api.mjs +52 -0
  267. package/fesm2022/en-solutions-tgm-client-sdk.mjs +11029 -0
  268. package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -0
  269. package/index.d.ts +5 -0
  270. package/lib/components/database-manager/database-manager/database-manager.component.d.ts +70 -0
  271. package/lib/components/database-manager/database-manager.module.d.ts +15 -0
  272. package/lib/components/database-manager/object-browser/object-browser.component.d.ts +35 -0
  273. package/lib/components/database-manager/query-editor/query-editor.component.d.ts +31 -0
  274. package/lib/components/database-manager/query-toolbar/query-toolbar.component.d.ts +23 -0
  275. package/lib/components/database-manager/record-detail/record-detail.component.d.ts +35 -0
  276. package/lib/components/database-manager/registry/entity-registry.d.ts +16 -0
  277. package/lib/components/database-manager/results-grid/results-grid.component.d.ts +62 -0
  278. package/lib/components/database-manager/services/entity-schema.service.d.ts +37 -0
  279. package/lib/components/database-manager/services/query-executor.service.d.ts +57 -0
  280. package/lib/components/database-manager/table-data-viewer/table-data-viewer.component.d.ts +54 -0
  281. package/lib/components/database-manager/table-structure/table-structure.component.d.ts +16 -0
  282. package/lib/components/database-manager/types/database-manager.types.d.ts +71 -0
  283. package/lib/components/reporting/export-button/export-button.component.d.ts +50 -0
  284. package/lib/components/reporting/generated-report-list/generated-report-list.component.d.ts +93 -0
  285. package/lib/components/reporting/report-definition-form/report-definition-form.component.d.ts +65 -0
  286. package/lib/components/reporting/report-definition-list/report-definition-list.component.d.ts +90 -0
  287. package/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.d.ts +46 -0
  288. package/lib/components/reporting/report-stats/report-stats.component.d.ts +47 -0
  289. package/lib/components/reporting/report-template-list/report-template-list.component.d.ts +39 -0
  290. package/lib/components/reporting/reporting.module.d.ts +14 -0
  291. package/lib/components/video-call/incoming-call/incoming-call.component.d.ts +20 -0
  292. package/lib/components/video-call/services/livekit-room.service.d.ts +28 -0
  293. package/lib/components/video-call/services/video-call-signaling.service.d.ts +21 -0
  294. package/lib/components/video-call/services/video-call-state.service.d.ts +25 -0
  295. package/lib/components/video-call/types/video-call.types.d.ts +49 -0
  296. package/lib/components/video-call/video-call.module.d.ts +11 -0
  297. package/lib/components/video-call/video-controls/video-controls.component.d.ts +13 -0
  298. package/lib/components/video-call/video-participant/video-participant.component.d.ts +17 -0
  299. package/lib/components/video-call/video-room/video-room.component.d.ts +30 -0
  300. package/lib/core/auth-interceptor.d.ts +13 -0
  301. package/lib/core/client-interceptor.d.ts +14 -0
  302. package/lib/core/error-handler.d.ts +13 -0
  303. package/lib/core/http-client.service.d.ts +61 -0
  304. package/lib/core/websocket.service.d.ts +37 -0
  305. package/lib/models/admin/audit.models.d.ts +73 -0
  306. package/lib/models/admin/backup.models.d.ts +101 -0
  307. package/lib/models/admin/client.models.d.ts +99 -0
  308. package/lib/models/admin/email-provider.models.d.ts +56 -0
  309. package/lib/models/admin/erp.models.d.ts +188 -0
  310. package/lib/models/admin/identity-provider.models.d.ts +1 -0
  311. package/lib/models/admin/index.d.ts +13 -0
  312. package/lib/models/admin/messaging-provider.models.d.ts +49 -0
  313. package/lib/models/admin/platform-admin.models.d.ts +33 -0
  314. package/lib/models/admin/queue.models.d.ts +54 -0
  315. package/lib/models/admin/role.models.d.ts +50 -0
  316. package/lib/models/admin/sandbox.models.d.ts +54 -0
  317. package/lib/models/admin/ticket.models.d.ts +48 -0
  318. package/lib/models/admin/webhook.models.d.ts +65 -0
  319. package/lib/models/api/ai.models.d.ts +75 -0
  320. package/lib/models/api/aip.models.d.ts +545 -0
  321. package/lib/models/api/cat.models.d.ts +260 -0
  322. package/lib/models/api/company.models.d.ts +125 -0
  323. package/lib/models/api/compliance.models.d.ts +74 -0
  324. package/lib/models/api/component.models.d.ts +294 -0
  325. package/lib/models/api/cortex-edge.models.d.ts +14 -0
  326. package/lib/models/api/cortex-event.models.d.ts +12 -0
  327. package/lib/models/api/cortex-insight.models.d.ts +25 -0
  328. package/lib/models/api/cortex-node.models.d.ts +10 -0
  329. package/lib/models/api/custom-field.models.d.ts +37 -0
  330. package/lib/models/api/deferral.models.d.ts +81 -0
  331. package/lib/models/api/diagnostic-report.models.d.ts +29 -0
  332. package/lib/models/api/document.models.d.ts +95 -0
  333. package/lib/models/api/energy.models.d.ts +210 -0
  334. package/lib/models/api/failure.models.d.ts +171 -0
  335. package/lib/models/api/fleet.models.d.ts +193 -0
  336. package/lib/models/api/inspection.models.d.ts +110 -0
  337. package/lib/models/api/intervention.models.d.ts +254 -0
  338. package/lib/models/api/iot.models.d.ts +15 -0
  339. package/lib/models/api/knowledge.models.d.ts +340 -0
  340. package/lib/models/api/loto.models.d.ts +51 -0
  341. package/lib/models/api/maintenance-record.models.d.ts +100 -0
  342. package/lib/models/api/maintenance.models.d.ts +188 -0
  343. package/lib/models/api/material.models.d.ts +261 -0
  344. package/lib/models/api/media.models.d.ts +106 -0
  345. package/lib/models/api/misc.models.d.ts +929 -0
  346. package/lib/models/api/project.models.d.ts +118 -0
  347. package/lib/models/api/quality.models.d.ts +153 -0
  348. package/lib/models/api/reporting.models.d.ts +76 -0
  349. package/lib/models/api/reservoir-websocket.models.d.ts +48 -0
  350. package/lib/models/api/reservoir.models.d.ts +274 -0
  351. package/lib/models/api/search.models.d.ts +30 -0
  352. package/lib/models/api/sensor.models.d.ts +117 -0
  353. package/lib/models/api/unit.models.d.ts +82 -0
  354. package/lib/models/api/user.models.d.ts +253 -0
  355. package/lib/models/api/warranty.models.d.ts +51 -0
  356. package/lib/models/api/work-permit.models.d.ts +70 -0
  357. package/lib/models/api/workflow.models.d.ts +52 -0
  358. package/lib/models/auth/index.d.ts +3 -0
  359. package/lib/models/auth/login.models.d.ts +134 -0
  360. package/lib/models/auth/sso.models.d.ts +136 -0
  361. package/lib/models/auth/totp.models.d.ts +19 -0
  362. package/lib/models/base.models.d.ts +90 -0
  363. package/lib/models/chat/chat.models.d.ts +171 -0
  364. package/lib/models/enums/cat.enums.d.ts +114 -0
  365. package/lib/models/enums/energy.enums.d.ts +50 -0
  366. package/lib/models/enums/erp.enums.d.ts +49 -0
  367. package/lib/models/enums/index.d.ts +14 -0
  368. package/lib/models/enums/inspection.enums.d.ts +61 -0
  369. package/lib/models/enums/loto.enums.d.ts +41 -0
  370. package/lib/models/enums/misc.enums.d.ts +151 -0
  371. package/lib/models/enums/quality.enums.d.ts +25 -0
  372. package/lib/models/enums/reservoir.enums.d.ts +80 -0
  373. package/lib/models/enums/sso.enums.d.ts +15 -0
  374. package/lib/models/enums/status.enums.d.ts +296 -0
  375. package/lib/models/enums/time.enums.d.ts +51 -0
  376. package/lib/models/enums/type.enums.d.ts +324 -0
  377. package/lib/models/enums/user.enums.d.ts +31 -0
  378. package/lib/models/enums/work-permit.enums.d.ts +56 -0
  379. package/lib/models/index.d.ts +41 -0
  380. package/lib/models/realtime/realtime-event.models.d.ts +95 -0
  381. package/lib/models/video/video-call.models.d.ts +65 -0
  382. package/lib/services/admin/activity-log.service.d.ts +13 -0
  383. package/lib/services/admin/announcement.service.d.ts +17 -0
  384. package/lib/services/admin/article-admin.service.d.ts +17 -0
  385. package/lib/services/admin/audit-log.service.d.ts +22 -0
  386. package/lib/services/admin/backup.service.d.ts +15 -0
  387. package/lib/services/admin/cache-admin.service.d.ts +26 -0
  388. package/lib/services/admin/client-admin.service.d.ts +38 -0
  389. package/lib/services/admin/client-api-key.service.d.ts +15 -0
  390. package/lib/services/admin/client-ocr.service.d.ts +14 -0
  391. package/lib/services/admin/client-usage.service.d.ts +15 -0
  392. package/lib/services/admin/data-export.service.d.ts +10 -0
  393. package/lib/services/admin/document-admin.service.d.ts +18 -0
  394. package/lib/services/admin/email-admin.service.d.ts +14 -0
  395. package/lib/services/admin/email-provider.service.d.ts +25 -0
  396. package/lib/services/admin/erp-admin.service.d.ts +41 -0
  397. package/lib/services/admin/identity-provider.service.d.ts +21 -0
  398. package/lib/services/admin/impersonation.service.d.ts +11 -0
  399. package/lib/services/admin/index.d.ts +30 -0
  400. package/lib/services/admin/messaging-provider.service.d.ts +24 -0
  401. package/lib/services/admin/notification.service.d.ts +15 -0
  402. package/lib/services/admin/platform-admin.service.d.ts +17 -0
  403. package/lib/services/admin/platform-webhook.service.d.ts +16 -0
  404. package/lib/services/admin/queue-admin.service.d.ts +24 -0
  405. package/lib/services/admin/role-admin.service.d.ts +37 -0
  406. package/lib/services/admin/sandbox-admin.service.d.ts +17 -0
  407. package/lib/services/admin/scheduler-admin.service.d.ts +61 -0
  408. package/lib/services/admin/subscription.service.d.ts +15 -0
  409. package/lib/services/admin/system-health.service.d.ts +11 -0
  410. package/lib/services/admin/user-admin.service.d.ts +27 -0
  411. package/lib/services/admin/user-permission.service.d.ts +18 -0
  412. package/lib/services/admin/webhook-admin.service.d.ts +26 -0
  413. package/lib/services/api/agent.service.d.ts +16 -0
  414. package/lib/services/api/ai-feedback.service.d.ts +9 -0
  415. package/lib/services/api/ai.service.d.ts +36 -0
  416. package/lib/services/api/aip-analysis.service.d.ts +13 -0
  417. package/lib/services/api/aip-financial.service.d.ts +16 -0
  418. package/lib/services/api/aip-geographic.service.d.ts +16 -0
  419. package/lib/services/api/aip-network.service.d.ts +16 -0
  420. package/lib/services/api/aip-performance.service.d.ts +16 -0
  421. package/lib/services/api/aip-resource.service.d.ts +14 -0
  422. package/lib/services/api/aip-workflow.service.d.ts +24 -0
  423. package/lib/services/api/aip.service.d.ts +73 -0
  424. package/lib/services/api/alert.service.d.ts +15 -0
  425. package/lib/services/api/anomaly-detection.service.d.ts +26 -0
  426. package/lib/services/api/asset-lifecycle.service.d.ts +29 -0
  427. package/lib/services/api/audit-entry.service.d.ts +13 -0
  428. package/lib/services/api/base-crud.service.d.ts +18 -0
  429. package/lib/services/api/bid.service.d.ts +10 -0
  430. package/lib/services/api/budget.service.d.ts +10 -0
  431. package/lib/services/api/bulk-operation.service.d.ts +26 -0
  432. package/lib/services/api/capex-project.service.d.ts +10 -0
  433. package/lib/services/api/cat.service.d.ts +40 -0
  434. package/lib/services/api/client-article.service.d.ts +14 -0
  435. package/lib/services/api/community.service.d.ts +21 -0
  436. package/lib/services/api/company-material-type.service.d.ts +10 -0
  437. package/lib/services/api/company-material.service.d.ts +9 -0
  438. package/lib/services/api/company.service.d.ts +15 -0
  439. package/lib/services/api/compliance.service.d.ts +35 -0
  440. package/lib/services/api/component-info.service.d.ts +10 -0
  441. package/lib/services/api/component-location.service.d.ts +10 -0
  442. package/lib/services/api/component.service.d.ts +32 -0
  443. package/lib/services/api/cortex-event.service.d.ts +10 -0
  444. package/lib/services/api/cortex-insight.service.d.ts +14 -0
  445. package/lib/services/api/cortex-node.service.d.ts +10 -0
  446. package/lib/services/api/cortex.service.d.ts +15 -0
  447. package/lib/services/api/custom-field.service.d.ts +33 -0
  448. package/lib/services/api/custom.service.d.ts +23 -0
  449. package/lib/services/api/dashboard.service.d.ts +18 -0
  450. package/lib/services/api/deferral.service.d.ts +29 -0
  451. package/lib/services/api/department.service.d.ts +9 -0
  452. package/lib/services/api/device-gateway.service.d.ts +16 -0
  453. package/lib/services/api/diagnostic-report.service.d.ts +14 -0
  454. package/lib/services/api/digital-twin.service.d.ts +29 -0
  455. package/lib/services/api/document.service.d.ts +28 -0
  456. package/lib/services/api/dynamic-crud.service.d.ts +41 -0
  457. package/lib/services/api/energy-analytics.service.d.ts +16 -0
  458. package/lib/services/api/energy-production.service.d.ts +10 -0
  459. package/lib/services/api/energy.service.d.ts +46 -0
  460. package/lib/services/api/entity-comment.service.d.ts +16 -0
  461. package/lib/services/api/event.service.d.ts +10 -0
  462. package/lib/services/api/export.service.d.ts +48 -0
  463. package/lib/services/api/extension.service.d.ts +24 -0
  464. package/lib/services/api/failure.service.d.ts +28 -0
  465. package/lib/services/api/fleet.service.d.ts +71 -0
  466. package/lib/services/api/inactive-component.service.d.ts +10 -0
  467. package/lib/services/api/index.d.ts +101 -0
  468. package/lib/services/api/inspection.service.d.ts +16 -0
  469. package/lib/services/api/intervention-request.service.d.ts +10 -0
  470. package/lib/services/api/intervention.service.d.ts +10 -0
  471. package/lib/services/api/knowledge.service.d.ts +106 -0
  472. package/lib/services/api/license.service.d.ts +14 -0
  473. package/lib/services/api/location.service.d.ts +9 -0
  474. package/lib/services/api/log.service.d.ts +9 -0
  475. package/lib/services/api/login-history.service.d.ts +10 -0
  476. package/lib/services/api/maintenance-plan.service.d.ts +10 -0
  477. package/lib/services/api/maintenance-record.service.d.ts +10 -0
  478. package/lib/services/api/material-consumable.service.d.ts +22 -0
  479. package/lib/services/api/material-instrument.service.d.ts +16 -0
  480. package/lib/services/api/material-item.service.d.ts +28 -0
  481. package/lib/services/api/material-tooling.service.d.ts +22 -0
  482. package/lib/services/api/measurement-unit.service.d.ts +10 -0
  483. package/lib/services/api/misc-crud.service.d.ts +167 -0
  484. package/lib/services/api/note.service.d.ts +14 -0
  485. package/lib/services/api/outage-resource.service.d.ts +15 -0
  486. package/lib/services/api/plant-data.service.d.ts +14 -0
  487. package/lib/services/api/procurement.service.d.ts +27 -0
  488. package/lib/services/api/project.service.d.ts +10 -0
  489. package/lib/services/api/property-template.service.d.ts +10 -0
  490. package/lib/services/api/quality.service.d.ts +16 -0
  491. package/lib/services/api/recurring-event.service.d.ts +10 -0
  492. package/lib/services/api/reporting.service.d.ts +38 -0
  493. package/lib/services/api/reservoir-data.service.d.ts +10 -0
  494. package/lib/services/api/reservoir.service.d.ts +109 -0
  495. package/lib/services/api/room.service.d.ts +10 -0
  496. package/lib/services/api/sandbox.service.d.ts +26 -0
  497. package/lib/services/api/scheduled-report.service.d.ts +10 -0
  498. package/lib/services/api/search.service.d.ts +54 -0
  499. package/lib/services/api/sensor.service.d.ts +17 -0
  500. package/lib/services/api/sla-policy.service.d.ts +10 -0
  501. package/lib/services/api/sla.service.d.ts +10 -0
  502. package/lib/services/api/threshold-alert-rule.service.d.ts +10 -0
  503. package/lib/services/api/ticket.service.d.ts +60 -0
  504. package/lib/services/api/time-entry.service.d.ts +10 -0
  505. package/lib/services/api/todo.service.d.ts +10 -0
  506. package/lib/services/api/unit.service.d.ts +10 -0
  507. package/lib/services/api/upload.service.d.ts +50 -0
  508. package/lib/services/api/user.service.d.ts +59 -0
  509. package/lib/services/api/warehouse.service.d.ts +15 -0
  510. package/lib/services/api/warranty.service.d.ts +16 -0
  511. package/lib/services/api/work-order.service.d.ts +17 -0
  512. package/lib/services/api/work-permit.service.d.ts +10 -0
  513. package/lib/services/api/workflow.service.d.ts +33 -0
  514. package/lib/services/auth/auth.service.d.ts +33 -0
  515. package/lib/services/auth/index.d.ts +4 -0
  516. package/lib/services/auth/platform-auth.service.d.ts +16 -0
  517. package/lib/services/auth/sso-auth.service.d.ts +21 -0
  518. package/lib/services/auth/totp.service.d.ts +18 -0
  519. package/lib/services/chat/chat-rest.service.d.ts +40 -0
  520. package/lib/services/chat/chat-websocket.service.d.ts +34 -0
  521. package/lib/services/chat/index.d.ts +2 -0
  522. package/lib/services/index.d.ts +7 -0
  523. package/lib/services/realtime/index.d.ts +1 -0
  524. package/lib/services/realtime/realtime-event.service.d.ts +137 -0
  525. package/lib/services/reservoir/index.d.ts +1 -0
  526. package/lib/services/reservoir/reservoir-websocket.service.d.ts +47 -0
  527. package/lib/services/video/index.d.ts +2 -0
  528. package/lib/services/video/video-call-rest.service.d.ts +19 -0
  529. package/lib/services/video/video-call-websocket.service.d.ts +31 -0
  530. package/lib/tgm-sdk.config.d.ts +36 -0
  531. package/lib/tgm-sdk.module.d.ts +13 -0
  532. package/package.json +40 -0
  533. package/public-api.d.ts +42 -0
@@ -0,0 +1,206 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ export class ReportDefinitionFormComponent {
8
+ // ── Data ──
9
+ definition;
10
+ saving = false;
11
+ // ── Options (override defaults) ──
12
+ reportTypes = [
13
+ 'MAINTENANCE_SUMMARY',
14
+ 'INSPECTION_COMPLIANCE',
15
+ 'EQUIPMENT_HEALTH',
16
+ 'FAILURE_ANALYSIS',
17
+ 'TECHNICIAN_PERFORMANCE',
18
+ 'COST_ANALYSIS',
19
+ 'RESERVOIR_OPERATIONS',
20
+ 'WATER_QUALITY',
21
+ 'REGULATORY_COMPLIANCE',
22
+ 'ALERT_ANALYSIS',
23
+ ];
24
+ reportFormats = ['PDF', 'EXCEL', 'CSV'];
25
+ schedules = ['NONE', 'DAILY', 'WEEKLY', 'MONTHLY'];
26
+ deliveryMethods = ['DOWNLOAD', 'EMAIL'];
27
+ // ── Labels ──
28
+ title = '';
29
+ nameLabel = 'Name';
30
+ namePlaceholder = 'Report definition name';
31
+ descriptionLabel = 'Description';
32
+ descriptionPlaceholder = 'Optional description';
33
+ reportTypeLabel = 'Report Type';
34
+ reportFormatLabel = 'Format';
35
+ scheduleLabel = 'Schedule';
36
+ deliveryMethodLabel = 'Delivery Method';
37
+ emailRecipientsLabel = 'Email Recipients';
38
+ emailRecipientsPlaceholder = 'comma-separated emails';
39
+ filtersLabel = 'Filters (JSON)';
40
+ filtersPlaceholder = '{"key": "value"}';
41
+ enabledLabel = 'Enabled';
42
+ saveButtonLabel = '';
43
+ cancelButtonLabel = 'Cancel';
44
+ // ── CSS overrides ──
45
+ containerClass = '';
46
+ formClass = '';
47
+ // ── Custom templates ──
48
+ headerTemplate;
49
+ footerTemplate;
50
+ fieldsTemplate;
51
+ // ── Events ──
52
+ save = new EventEmitter();
53
+ cancel = new EventEmitter();
54
+ // Form model
55
+ form = {
56
+ name: '',
57
+ description: '',
58
+ reportType: 'MAINTENANCE_SUMMARY',
59
+ reportFormat: 'PDF',
60
+ schedule: 'NONE',
61
+ deliveryMethod: 'DOWNLOAD',
62
+ emailRecipients: '',
63
+ filtersJson: '',
64
+ enabled: true,
65
+ };
66
+ get isEdit() {
67
+ return !!this.definition;
68
+ }
69
+ get formTitle() {
70
+ if (this.title)
71
+ return this.title;
72
+ return this.isEdit ? 'Edit Report Definition' : 'Create Report Definition';
73
+ }
74
+ get saveLabel() {
75
+ if (this.saveButtonLabel)
76
+ return this.saveButtonLabel;
77
+ return this.isEdit ? 'Update' : 'Create';
78
+ }
79
+ get showEmailRecipients() {
80
+ return this.form.deliveryMethod === 'EMAIL';
81
+ }
82
+ ngOnChanges(changes) {
83
+ if (changes['definition']) {
84
+ this.populateForm();
85
+ }
86
+ }
87
+ onSave() {
88
+ let filters;
89
+ if (this.form.filtersJson.trim()) {
90
+ try {
91
+ filters = JSON.parse(this.form.filtersJson);
92
+ }
93
+ catch {
94
+ filters = undefined;
95
+ }
96
+ }
97
+ const request = {
98
+ name: this.form.name,
99
+ description: this.form.description || undefined,
100
+ reportType: this.form.reportType,
101
+ reportFormat: this.form.reportFormat,
102
+ schedule: this.form.schedule,
103
+ deliveryMethod: this.form.deliveryMethod,
104
+ emailRecipients: this.form.emailRecipients || undefined,
105
+ filters,
106
+ enabled: this.form.enabled,
107
+ };
108
+ this.save.emit(request);
109
+ }
110
+ onCancel() {
111
+ this.cancel.emit();
112
+ }
113
+ populateForm() {
114
+ if (this.definition) {
115
+ this.form = {
116
+ name: this.definition.name,
117
+ description: this.definition.description ?? '',
118
+ reportType: this.definition.reportType,
119
+ reportFormat: this.definition.reportFormat,
120
+ schedule: this.definition.schedule,
121
+ deliveryMethod: this.definition.deliveryMethod,
122
+ emailRecipients: this.definition.emailRecipients ?? '',
123
+ filtersJson: this.definition.filters ? JSON.stringify(this.definition.filters, null, 2) : '',
124
+ enabled: this.definition.enabled,
125
+ };
126
+ }
127
+ else {
128
+ this.form = {
129
+ name: '',
130
+ description: '',
131
+ reportType: this.reportTypes[0] ?? 'MAINTENANCE_SUMMARY',
132
+ reportFormat: this.reportFormats[0] ?? 'PDF',
133
+ schedule: 'NONE',
134
+ deliveryMethod: 'DOWNLOAD',
135
+ emailRecipients: '',
136
+ filtersJson: '',
137
+ enabled: true,
138
+ };
139
+ }
140
+ }
141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportDefinitionFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ReportDefinitionFormComponent, isStandalone: true, selector: "tgm-report-definition-form", inputs: { definition: "definition", saving: "saving", reportTypes: "reportTypes", reportFormats: "reportFormats", schedules: "schedules", deliveryMethods: "deliveryMethods", title: "title", nameLabel: "nameLabel", namePlaceholder: "namePlaceholder", descriptionLabel: "descriptionLabel", descriptionPlaceholder: "descriptionPlaceholder", reportTypeLabel: "reportTypeLabel", reportFormatLabel: "reportFormatLabel", scheduleLabel: "scheduleLabel", deliveryMethodLabel: "deliveryMethodLabel", emailRecipientsLabel: "emailRecipientsLabel", emailRecipientsPlaceholder: "emailRecipientsPlaceholder", filtersLabel: "filtersLabel", filtersPlaceholder: "filtersPlaceholder", enabledLabel: "enabledLabel", saveButtonLabel: "saveButtonLabel", cancelButtonLabel: "cancelButtonLabel", containerClass: "containerClass", formClass: "formClass", headerTemplate: "headerTemplate", footerTemplate: "footerTemplate", fieldsTemplate: "fieldsTemplate" }, outputs: { save: "save", cancel: "cancel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tgm-def-form\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { isEdit: isEdit }\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <h3 class=\"tgm-def-form__title\">{{ formTitle }}</h3>\n </ng-template>\n\n <!-- Custom fields template -->\n <ng-container *ngIf=\"fieldsTemplate; else defaultFields\">\n <ng-container *ngTemplateOutlet=\"fieldsTemplate; context: { form: form, isEdit: isEdit }\"></ng-container>\n </ng-container>\n\n <!-- Default fields -->\n <ng-template #defaultFields>\n <div class=\"tgm-form\" [ngClass]=\"formClass\">\n <!-- Name -->\n <div class=\"tgm-form-group\">\n <label class=\"tgm-form-label\">{{ nameLabel }}</label>\n <input class=\"tgm-input\" type=\"text\" [(ngModel)]=\"form.name\" [placeholder]=\"namePlaceholder\" name=\"name\" />\n </div>\n\n <!-- Description -->\n <div class=\"tgm-form-group\">\n <label class=\"tgm-form-label\">{{ descriptionLabel }}</label>\n <textarea class=\"tgm-input tgm-textarea\" [(ngModel)]=\"form.description\" [placeholder]=\"descriptionPlaceholder\" name=\"description\" rows=\"2\"></textarea>\n </div>\n\n <!-- Report Type & Format (side by side) -->\n <div class=\"tgm-form-row\">\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ reportTypeLabel }}</label>\n <select class=\"tgm-select\" [(ngModel)]=\"form.reportType\" name=\"reportType\">\n <option *ngFor=\"let t of reportTypes\" [value]=\"t\">{{ t }}</option>\n </select>\n </div>\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ reportFormatLabel }}</label>\n <select class=\"tgm-select\" [(ngModel)]=\"form.reportFormat\" name=\"reportFormat\">\n <option *ngFor=\"let f of reportFormats\" [value]=\"f\">{{ f }}</option>\n </select>\n </div>\n </div>\n\n <!-- Schedule & Delivery Method (side by side) -->\n <div class=\"tgm-form-row\">\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ scheduleLabel }}</label>\n <select class=\"tgm-select\" [(ngModel)]=\"form.schedule\" name=\"schedule\">\n <option *ngFor=\"let s of schedules\" [value]=\"s\">{{ s }}</option>\n </select>\n </div>\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ deliveryMethodLabel }}</label>\n <div class=\"tgm-radio-group\">\n <label class=\"tgm-radio\" *ngFor=\"let dm of deliveryMethods\">\n <input type=\"radio\" [value]=\"dm\" [(ngModel)]=\"form.deliveryMethod\" name=\"deliveryMethod\" />\n <span class=\"tgm-radio__label\">{{ dm }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Email Recipients (conditional) -->\n <div class=\"tgm-form-group\" *ngIf=\"showEmailRecipients\">\n <label class=\"tgm-form-label\">{{ emailRecipientsLabel }}</label>\n <input class=\"tgm-input\" type=\"text\" [(ngModel)]=\"form.emailRecipients\" [placeholder]=\"emailRecipientsPlaceholder\" name=\"emailRecipients\" />\n </div>\n\n <!-- Filters JSON -->\n <div class=\"tgm-form-group\">\n <label class=\"tgm-form-label\">{{ filtersLabel }}</label>\n <textarea class=\"tgm-input tgm-textarea tgm-textarea--code\" [(ngModel)]=\"form.filtersJson\" [placeholder]=\"filtersPlaceholder\" name=\"filtersJson\" rows=\"3\"></textarea>\n </div>\n\n <!-- Enabled -->\n <div class=\"tgm-form-group tgm-form-group--inline\">\n <label class=\"tgm-form-label\">{{ enabledLabel }}</label>\n <button class=\"tgm-toggle\" [class.tgm-toggle--active]=\"form.enabled\" (click)=\"form.enabled = !form.enabled\" type=\"button\">\n <span class=\"tgm-toggle__track\">\n <span class=\"tgm-toggle__thumb\"></span>\n </span>\n </button>\n </div>\n </div>\n </ng-template>\n\n <!-- Footer -->\n <ng-container *ngIf=\"footerTemplate; else defaultFooter\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {\n isEdit: isEdit,\n saving: saving,\n onSave: onSave.bind(this),\n onCancel: onCancel.bind(this)\n }\"></ng-container>\n </ng-container>\n <ng-template #defaultFooter>\n <div class=\"tgm-def-form__footer\">\n <button class=\"tgm-btn tgm-btn--secondary\" (click)=\"onCancel()\" type=\"button\" [disabled]=\"saving\">\n {{ cancelButtonLabel }}\n </button>\n <button class=\"tgm-btn tgm-btn--primary\" (click)=\"onSave()\" type=\"button\" [disabled]=\"saving || !form.name\">\n <span class=\"tgm-spinner tgm-spinner--sm\" *ngIf=\"saving\"></span>\n {{ saveLabel }}\n </button>\n </div>\n </ng-template>\n</div>\n", styles: [":host{--tgm-report-bg: rgba(30, 30, 46, 1);--tgm-report-bg-hover: rgba(255, 255, 255, .08);--tgm-report-border: rgba(255, 255, 255, .1);--tgm-report-text: #e5e7eb;--tgm-report-text-secondary: #9ca3af;--tgm-report-text-muted: #6b7280;--tgm-report-primary: #3b82f6;--tgm-report-primary-hover: #2563eb;--tgm-report-success: #22c55e;--tgm-report-radius: 8px;--tgm-report-radius-sm: 4px;--tgm-report-font-family: inherit;--tgm-report-font-size: 14px;--tgm-report-spacing: 16px;--tgm-report-spacing-sm: 8px;--tgm-report-input-bg: rgba(255, 255, 255, .05);display:block;font-family:var(--tgm-report-font-family);font-size:var(--tgm-report-font-size);color:var(--tgm-report-text)}.tgm-def-form__title{margin:0 0 var(--tgm-report-spacing);font-size:18px;font-weight:600}.tgm-def-form__footer{display:flex;justify-content:flex-end;gap:var(--tgm-report-spacing-sm);padding-top:var(--tgm-report-spacing);margin-top:var(--tgm-report-spacing);border-top:1px solid var(--tgm-report-border)}.tgm-form-group{margin-bottom:var(--tgm-report-spacing)}.tgm-form-group:last-child{margin-bottom:0}.tgm-form-group--flex{flex:1}.tgm-form-group--inline{display:flex;align-items:center;gap:var(--tgm-report-spacing-sm)}.tgm-form-row{display:flex;gap:var(--tgm-report-spacing)}@media (max-width: 480px){.tgm-form-row{flex-direction:column;gap:0}}.tgm-form-label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:var(--tgm-report-text-secondary)}.tgm-input{width:100%;padding:8px 12px;font-size:13px;font-family:var(--tgm-report-font-family);color:var(--tgm-report-text);background:var(--tgm-report-input-bg);border:1px solid var(--tgm-report-border);border-radius:var(--tgm-report-radius-sm);outline:none;transition:border-color .15s;box-sizing:border-box}.tgm-input::placeholder{color:var(--tgm-report-text-muted)}.tgm-input:focus{border-color:var(--tgm-report-primary)}.tgm-textarea{resize:vertical;min-height:60px}.tgm-textarea--code{font-family:monospace;font-size:12px}.tgm-select{width:100%;padding:8px 12px;font-size:13px;font-family:var(--tgm-report-font-family);color:var(--tgm-report-text);background:var(--tgm-report-input-bg);border:1px solid var(--tgm-report-border);border-radius:var(--tgm-report-radius-sm);outline:none;cursor:pointer;box-sizing:border-box}.tgm-select:focus{border-color:var(--tgm-report-primary)}.tgm-select option{background:#1e1e2e;color:var(--tgm-report-text)}.tgm-radio-group{display:flex;gap:var(--tgm-report-spacing);flex-wrap:wrap}.tgm-radio{display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:13px}.tgm-radio input[type=radio]{accent-color:var(--tgm-report-primary)}.tgm-radio__label{color:var(--tgm-report-text)}.tgm-toggle{background:none;border:none;cursor:pointer;padding:0}.tgm-toggle__track{display:flex;align-items:center;width:36px;height:20px;background:var(--tgm-report-text-muted);border-radius:10px;padding:2px;transition:background .2s}.tgm-toggle__thumb{display:block;width:16px;height:16px;background:#fff;border-radius:50%;transition:transform .2s}.tgm-toggle--active .tgm-toggle__track{background:var(--tgm-report-success)}.tgm-toggle--active .tgm-toggle__thumb{transform:translate(16px)}.tgm-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 20px;font-size:13px;font-weight:500;border:none;border-radius:var(--tgm-report-radius-sm);cursor:pointer;transition:background .15s,opacity .15s;font-family:var(--tgm-report-font-family)}.tgm-btn--primary{background:var(--tgm-report-primary);color:#fff}.tgm-btn--primary:hover:not(:disabled){background:var(--tgm-report-primary-hover)}.tgm-btn--secondary{background:transparent;color:var(--tgm-report-text-secondary);border:1px solid var(--tgm-report-border)}.tgm-btn--secondary:hover:not(:disabled){background:var(--tgm-report-bg-hover);color:var(--tgm-report-text)}.tgm-btn:disabled{opacity:.5;cursor:not-allowed}.tgm-spinner{width:32px;height:32px;border:3px solid var(--tgm-report-border);border-top-color:var(--tgm-report-primary);border-radius:50%;animation:tgm-spin .8s linear infinite}.tgm-spinner--sm{width:14px;height:14px;border-width:2px}@keyframes tgm-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
143
+ }
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportDefinitionFormComponent, decorators: [{
145
+ type: Component,
146
+ args: [{ selector: 'tgm-report-definition-form', standalone: true, imports: [CommonModule, FormsModule], template: "<div class=\"tgm-def-form\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: { isEdit: isEdit }\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <h3 class=\"tgm-def-form__title\">{{ formTitle }}</h3>\n </ng-template>\n\n <!-- Custom fields template -->\n <ng-container *ngIf=\"fieldsTemplate; else defaultFields\">\n <ng-container *ngTemplateOutlet=\"fieldsTemplate; context: { form: form, isEdit: isEdit }\"></ng-container>\n </ng-container>\n\n <!-- Default fields -->\n <ng-template #defaultFields>\n <div class=\"tgm-form\" [ngClass]=\"formClass\">\n <!-- Name -->\n <div class=\"tgm-form-group\">\n <label class=\"tgm-form-label\">{{ nameLabel }}</label>\n <input class=\"tgm-input\" type=\"text\" [(ngModel)]=\"form.name\" [placeholder]=\"namePlaceholder\" name=\"name\" />\n </div>\n\n <!-- Description -->\n <div class=\"tgm-form-group\">\n <label class=\"tgm-form-label\">{{ descriptionLabel }}</label>\n <textarea class=\"tgm-input tgm-textarea\" [(ngModel)]=\"form.description\" [placeholder]=\"descriptionPlaceholder\" name=\"description\" rows=\"2\"></textarea>\n </div>\n\n <!-- Report Type & Format (side by side) -->\n <div class=\"tgm-form-row\">\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ reportTypeLabel }}</label>\n <select class=\"tgm-select\" [(ngModel)]=\"form.reportType\" name=\"reportType\">\n <option *ngFor=\"let t of reportTypes\" [value]=\"t\">{{ t }}</option>\n </select>\n </div>\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ reportFormatLabel }}</label>\n <select class=\"tgm-select\" [(ngModel)]=\"form.reportFormat\" name=\"reportFormat\">\n <option *ngFor=\"let f of reportFormats\" [value]=\"f\">{{ f }}</option>\n </select>\n </div>\n </div>\n\n <!-- Schedule & Delivery Method (side by side) -->\n <div class=\"tgm-form-row\">\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ scheduleLabel }}</label>\n <select class=\"tgm-select\" [(ngModel)]=\"form.schedule\" name=\"schedule\">\n <option *ngFor=\"let s of schedules\" [value]=\"s\">{{ s }}</option>\n </select>\n </div>\n <div class=\"tgm-form-group tgm-form-group--flex\">\n <label class=\"tgm-form-label\">{{ deliveryMethodLabel }}</label>\n <div class=\"tgm-radio-group\">\n <label class=\"tgm-radio\" *ngFor=\"let dm of deliveryMethods\">\n <input type=\"radio\" [value]=\"dm\" [(ngModel)]=\"form.deliveryMethod\" name=\"deliveryMethod\" />\n <span class=\"tgm-radio__label\">{{ dm }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Email Recipients (conditional) -->\n <div class=\"tgm-form-group\" *ngIf=\"showEmailRecipients\">\n <label class=\"tgm-form-label\">{{ emailRecipientsLabel }}</label>\n <input class=\"tgm-input\" type=\"text\" [(ngModel)]=\"form.emailRecipients\" [placeholder]=\"emailRecipientsPlaceholder\" name=\"emailRecipients\" />\n </div>\n\n <!-- Filters JSON -->\n <div class=\"tgm-form-group\">\n <label class=\"tgm-form-label\">{{ filtersLabel }}</label>\n <textarea class=\"tgm-input tgm-textarea tgm-textarea--code\" [(ngModel)]=\"form.filtersJson\" [placeholder]=\"filtersPlaceholder\" name=\"filtersJson\" rows=\"3\"></textarea>\n </div>\n\n <!-- Enabled -->\n <div class=\"tgm-form-group tgm-form-group--inline\">\n <label class=\"tgm-form-label\">{{ enabledLabel }}</label>\n <button class=\"tgm-toggle\" [class.tgm-toggle--active]=\"form.enabled\" (click)=\"form.enabled = !form.enabled\" type=\"button\">\n <span class=\"tgm-toggle__track\">\n <span class=\"tgm-toggle__thumb\"></span>\n </span>\n </button>\n </div>\n </div>\n </ng-template>\n\n <!-- Footer -->\n <ng-container *ngIf=\"footerTemplate; else defaultFooter\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {\n isEdit: isEdit,\n saving: saving,\n onSave: onSave.bind(this),\n onCancel: onCancel.bind(this)\n }\"></ng-container>\n </ng-container>\n <ng-template #defaultFooter>\n <div class=\"tgm-def-form__footer\">\n <button class=\"tgm-btn tgm-btn--secondary\" (click)=\"onCancel()\" type=\"button\" [disabled]=\"saving\">\n {{ cancelButtonLabel }}\n </button>\n <button class=\"tgm-btn tgm-btn--primary\" (click)=\"onSave()\" type=\"button\" [disabled]=\"saving || !form.name\">\n <span class=\"tgm-spinner tgm-spinner--sm\" *ngIf=\"saving\"></span>\n {{ saveLabel }}\n </button>\n </div>\n </ng-template>\n</div>\n", styles: [":host{--tgm-report-bg: rgba(30, 30, 46, 1);--tgm-report-bg-hover: rgba(255, 255, 255, .08);--tgm-report-border: rgba(255, 255, 255, .1);--tgm-report-text: #e5e7eb;--tgm-report-text-secondary: #9ca3af;--tgm-report-text-muted: #6b7280;--tgm-report-primary: #3b82f6;--tgm-report-primary-hover: #2563eb;--tgm-report-success: #22c55e;--tgm-report-radius: 8px;--tgm-report-radius-sm: 4px;--tgm-report-font-family: inherit;--tgm-report-font-size: 14px;--tgm-report-spacing: 16px;--tgm-report-spacing-sm: 8px;--tgm-report-input-bg: rgba(255, 255, 255, .05);display:block;font-family:var(--tgm-report-font-family);font-size:var(--tgm-report-font-size);color:var(--tgm-report-text)}.tgm-def-form__title{margin:0 0 var(--tgm-report-spacing);font-size:18px;font-weight:600}.tgm-def-form__footer{display:flex;justify-content:flex-end;gap:var(--tgm-report-spacing-sm);padding-top:var(--tgm-report-spacing);margin-top:var(--tgm-report-spacing);border-top:1px solid var(--tgm-report-border)}.tgm-form-group{margin-bottom:var(--tgm-report-spacing)}.tgm-form-group:last-child{margin-bottom:0}.tgm-form-group--flex{flex:1}.tgm-form-group--inline{display:flex;align-items:center;gap:var(--tgm-report-spacing-sm)}.tgm-form-row{display:flex;gap:var(--tgm-report-spacing)}@media (max-width: 480px){.tgm-form-row{flex-direction:column;gap:0}}.tgm-form-label{display:block;margin-bottom:6px;font-size:13px;font-weight:500;color:var(--tgm-report-text-secondary)}.tgm-input{width:100%;padding:8px 12px;font-size:13px;font-family:var(--tgm-report-font-family);color:var(--tgm-report-text);background:var(--tgm-report-input-bg);border:1px solid var(--tgm-report-border);border-radius:var(--tgm-report-radius-sm);outline:none;transition:border-color .15s;box-sizing:border-box}.tgm-input::placeholder{color:var(--tgm-report-text-muted)}.tgm-input:focus{border-color:var(--tgm-report-primary)}.tgm-textarea{resize:vertical;min-height:60px}.tgm-textarea--code{font-family:monospace;font-size:12px}.tgm-select{width:100%;padding:8px 12px;font-size:13px;font-family:var(--tgm-report-font-family);color:var(--tgm-report-text);background:var(--tgm-report-input-bg);border:1px solid var(--tgm-report-border);border-radius:var(--tgm-report-radius-sm);outline:none;cursor:pointer;box-sizing:border-box}.tgm-select:focus{border-color:var(--tgm-report-primary)}.tgm-select option{background:#1e1e2e;color:var(--tgm-report-text)}.tgm-radio-group{display:flex;gap:var(--tgm-report-spacing);flex-wrap:wrap}.tgm-radio{display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:13px}.tgm-radio input[type=radio]{accent-color:var(--tgm-report-primary)}.tgm-radio__label{color:var(--tgm-report-text)}.tgm-toggle{background:none;border:none;cursor:pointer;padding:0}.tgm-toggle__track{display:flex;align-items:center;width:36px;height:20px;background:var(--tgm-report-text-muted);border-radius:10px;padding:2px;transition:background .2s}.tgm-toggle__thumb{display:block;width:16px;height:16px;background:#fff;border-radius:50%;transition:transform .2s}.tgm-toggle--active .tgm-toggle__track{background:var(--tgm-report-success)}.tgm-toggle--active .tgm-toggle__thumb{transform:translate(16px)}.tgm-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 20px;font-size:13px;font-weight:500;border:none;border-radius:var(--tgm-report-radius-sm);cursor:pointer;transition:background .15s,opacity .15s;font-family:var(--tgm-report-font-family)}.tgm-btn--primary{background:var(--tgm-report-primary);color:#fff}.tgm-btn--primary:hover:not(:disabled){background:var(--tgm-report-primary-hover)}.tgm-btn--secondary{background:transparent;color:var(--tgm-report-text-secondary);border:1px solid var(--tgm-report-border)}.tgm-btn--secondary:hover:not(:disabled){background:var(--tgm-report-bg-hover);color:var(--tgm-report-text)}.tgm-btn:disabled{opacity:.5;cursor:not-allowed}.tgm-spinner{width:32px;height:32px;border:3px solid var(--tgm-report-border);border-top-color:var(--tgm-report-primary);border-radius:50%;animation:tgm-spin .8s linear infinite}.tgm-spinner--sm{width:14px;height:14px;border-width:2px}@keyframes tgm-spin{to{transform:rotate(360deg)}}\n"] }]
147
+ }], propDecorators: { definition: [{
148
+ type: Input
149
+ }], saving: [{
150
+ type: Input
151
+ }], reportTypes: [{
152
+ type: Input
153
+ }], reportFormats: [{
154
+ type: Input
155
+ }], schedules: [{
156
+ type: Input
157
+ }], deliveryMethods: [{
158
+ type: Input
159
+ }], title: [{
160
+ type: Input
161
+ }], nameLabel: [{
162
+ type: Input
163
+ }], namePlaceholder: [{
164
+ type: Input
165
+ }], descriptionLabel: [{
166
+ type: Input
167
+ }], descriptionPlaceholder: [{
168
+ type: Input
169
+ }], reportTypeLabel: [{
170
+ type: Input
171
+ }], reportFormatLabel: [{
172
+ type: Input
173
+ }], scheduleLabel: [{
174
+ type: Input
175
+ }], deliveryMethodLabel: [{
176
+ type: Input
177
+ }], emailRecipientsLabel: [{
178
+ type: Input
179
+ }], emailRecipientsPlaceholder: [{
180
+ type: Input
181
+ }], filtersLabel: [{
182
+ type: Input
183
+ }], filtersPlaceholder: [{
184
+ type: Input
185
+ }], enabledLabel: [{
186
+ type: Input
187
+ }], saveButtonLabel: [{
188
+ type: Input
189
+ }], cancelButtonLabel: [{
190
+ type: Input
191
+ }], containerClass: [{
192
+ type: Input
193
+ }], formClass: [{
194
+ type: Input
195
+ }], headerTemplate: [{
196
+ type: Input
197
+ }], footerTemplate: [{
198
+ type: Input
199
+ }], fieldsTemplate: [{
200
+ type: Input
201
+ }], save: [{
202
+ type: Output
203
+ }], cancel: [{
204
+ type: Output
205
+ }] } });
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRlZmluaXRpb24tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcmVwb3J0aW5nL3JlcG9ydC1kZWZpbml0aW9uLWZvcm0vcmVwb3J0LWRlZmluaXRpb24tZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcmVwb3J0aW5nL3JlcG9ydC1kZWZpbml0aW9uLWZvcm0vcmVwb3J0LWRlZmluaXRpb24tZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFrQjdDLE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsYUFBYTtJQUNKLFVBQVUsQ0FBb0I7SUFDOUIsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUV4QixvQ0FBb0M7SUFDM0IsV0FBVyxHQUFpQjtRQUNuQyxxQkFBcUI7UUFDckIsdUJBQXVCO1FBQ3ZCLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsZUFBZTtRQUNmLHVCQUF1QjtRQUN2QixnQkFBZ0I7S0FDakIsQ0FBQztJQUNPLGFBQWEsR0FBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hELFNBQVMsR0FBcUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRSxlQUFlLEdBQXFCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lB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Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFNSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlUmVwb3J0RGVmaW5pdGlvblJlcXVlc3QsXG4gIERlbGl2ZXJ5TWV0aG9kLFxuICBSZXBvcnREZWZpbml0aW9uLFxuICBSZXBvcnRGb3JtYXQsXG4gIFJlcG9ydFNjaGVkdWxlLFxuICBSZXBvcnRUeXBlLFxuICBVcGRhdGVSZXBvcnREZWZpbml0aW9uUmVxdWVzdCxcbn0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2FwaS9yZXBvcnRpbmcubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGdtLXJlcG9ydC1kZWZpbml0aW9uLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBvcnQtZGVmaW5pdGlvbi1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVwb3J0LWRlZmluaXRpb24tZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnREZWZpbml0aW9uRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8vIOKUgOKUgCBEYXRhIOKUgOKUgFxuICBASW5wdXQoKSBkZWZpbml0aW9uPzogUmVwb3J0RGVmaW5pdGlvbjtcbiAgQElucHV0KCkgc2F2aW5nID0gZmFsc2U7XG5cbiAgLy8g4pSA4pSAIE9wdGlvbnMgKG92ZXJyaWRlIGRlZmF1bHRzKSDilIDilIBcbiAgQElucHV0KCkgcmVwb3J0VHlwZXM6IFJlcG9ydFR5cGVbXSA9IFtcbiAgICAnTUFJTlRFTkFOQ0VfU1VNTUFSWScsXG4gICAgJ0lOU1BFQ1RJT05fQ09NUExJQU5DRScsXG4gICAgJ0VRVUlQTUVOVF9IRUFMVEgnLFxuICAgICdGQUlMVVJFX0FOQUxZU0lTJyxcbiAgICAnVEVDSE5JQ0lBTl9QRVJGT1JNQU5DRScsXG4gICAgJ0NPU1RfQU5BTFlTSVMnLFxuICAgICdSRVNFUlZPSVJfT1BFUkFUSU9OUycsXG4gICAgJ1dBVEVSX1FVQUxJVFknLFxuICAgICdSRUdVTEFUT1JZX0NPTVBMSUFOQ0UnLFxuICAgICdBTEVSVF9BTkFMWVNJUycsXG4gIF07XG4gIEBJbnB1dCgpIHJlcG9ydEZvcm1hdHM6IFJlcG9ydEZvcm1hdFtdID0gWydQREYnLCAnRVhDRUwnLCAnQ1NWJ107XG4gIEBJbnB1dCgpIHNjaGVkdWxlczogUmVwb3J0U2NoZWR1bGVbXSA9IFsnTk9ORScsICdEQUlMWScsICdXRUVLTFknLCAnTU9OVEhMWSddO1xuICBASW5wdXQoKSBkZWxpdmVyeU1ldGhvZHM6IERlbGl2ZXJ5TWV0aG9kW10gPSBbJ0RPV05MT0FEJywgJ0VNQUlMJ107XG5cbiAgLy8g4pSA4pSAIExhYmVscyDilIDilIBcbiAgQElucHV0KCkgdGl0bGUgPSAnJztcbiAgQElucHV0KCkgbmFtZUxhYmVsID0gJ05hbWUnO1xuICBASW5wdXQoKSBuYW1lUGxhY2Vob2xkZXIgPSAnUmVwb3J0IGRlZmluaXRpb24gbmFtZSc7XG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uTGFiZWwgPSAnRGVzY3JpcHRpb24nO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvblBsYWNlaG9sZGVyID0gJ09wdGlvbmFsIGRlc2NyaXB0aW9uJztcbiAgQElucHV0KCkgcmVwb3J0VHlwZUxhYmVsID0gJ1JlcG9ydCBUeXBlJztcbiAgQElucHV0KCkgcmVwb3J0Rm9ybWF0TGFiZWwgPSAnRm9ybWF0JztcbiAgQElucHV0KCkgc2NoZWR1bGVMYWJlbCA9ICdTY2hlZHVsZSc7XG4gIEBJbnB1dCgpIGRlbGl2ZXJ5TWV0aG9kTGFiZWwgPSAnRGVsaXZlcnkgTWV0aG9kJztcbiAgQElucHV0KCkgZW1haWxSZWNpcGllbnRzTGFiZWwgPSAnRW1haWwgUmVjaXBpZW50cyc7XG4gIEBJbnB1dCgpIGVtYWlsUmVjaXBpZW50c1BsYWNlaG9sZGVyID0gJ2NvbW1hLXNlcGFyYXRlZCBlbWFpbHMnO1xuICBASW5wdXQoKSBmaWx0ZXJzTGFiZWwgPSAnRmlsdGVycyAoSlNPTiknO1xuICBASW5wdXQoKSBmaWx0ZXJzUGxhY2Vob2xkZXIgPSAne1wia2V5XCI6IFwidmFsdWVcIn0nO1xuICBASW5wdXQoKSBlbmFibGVkTGFiZWwgPSAnRW5hYmxlZCc7XG4gIEBJbnB1dCgpIHNhdmVCdXR0b25MYWJlbCA9ICcnO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25MYWJlbCA9ICdDYW5jZWwnO1xuXG4gIC8vIOKUgOKUgCBDU1Mgb3ZlcnJpZGVzIOKUgOKUgFxuICBASW5wdXQoKSBjb250YWluZXJDbGFzcyA9ICcnO1xuICBASW5wdXQoKSBmb3JtQ2xhc3MgPSAnJztcblxuICAvLyDilIDilIAgQ3VzdG9tIHRlbXBsYXRlcyDilIDilIBcbiAgQElucHV0KCkgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IGlzRWRpdDogYm9vbGVhbiB9PjtcbiAgQElucHV0KCkgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7XG4gICAgaXNFZGl0OiBib29sZWFuO1xuICAgIHNhdmluZzogYm9vbGVhbjtcbiAgICBvblNhdmU6ICgpID0+IHZvaWQ7XG4gICAgb25DYW5jZWw6ICgpID0+IHZvaWQ7XG4gIH0+O1xuICBASW5wdXQoKSBmaWVsZHNUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICBmb3JtOiBhbnk7XG4gICAgaXNFZGl0OiBib29sZWFuO1xuICB9PjtcblxuICAvLyDilIDilIAgRXZlbnRzIOKUgOKUgFxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q3JlYXRlUmVwb3J0RGVmaW5pdGlvblJlcXVlc3QgfCBVcGRhdGVSZXBvcnREZWZpbml0aW9uUmVxdWVzdD4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvLyBGb3JtIG1vZGVsXG4gIGZvcm0gPSB7XG4gICAgbmFtZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIHJlcG9ydFR5cGU6ICdNQUlOVEVOQU5DRV9TVU1NQVJZJyBhcyBSZXBvcnRUeXBlLFxuICAgIHJlcG9ydEZvcm1hdDogJ1BERicgYXMgUmVwb3J0Rm9ybWF0LFxuICAgIHNjaGVkdWxlOiAnTk9ORScgYXMgUmVwb3J0U2NoZWR1bGUsXG4gICAgZGVsaXZlcnlNZXRob2Q6ICdET1dOTE9BRCcgYXMgRGVsaXZlcnlNZXRob2QsXG4gICAgZW1haWxSZWNpcGllbnRzOiAnJyxcbiAgICBmaWx0ZXJzSnNvbjogJycsXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgfTtcblxuICBnZXQgaXNFZGl0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldCBmb3JtVGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50aXRsZSkgcmV0dXJuIHRoaXMudGl0bGU7XG4gICAgcmV0dXJuIHRoaXMuaXNFZGl0ID8gJ0VkaXQgUmVwb3J0IERlZmluaXRpb24nIDogJ0NyZWF0ZSBSZXBvcnQgRGVmaW5pdGlvbic7XG4gIH1cblxuICBnZXQgc2F2ZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2F2ZUJ1dHRvbkxhYmVsKSByZXR1cm4gdGhpcy5zYXZlQnV0dG9uTGFiZWw7XG4gICAgcmV0dXJuIHRoaXMuaXNFZGl0ID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJztcbiAgfVxuXG4gIGdldCBzaG93RW1haWxSZWNpcGllbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZGVsaXZlcnlNZXRob2QgPT09ICdFTUFJTCc7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2RlZmluaXRpb24nXSkge1xuICAgICAgdGhpcy5wb3B1bGF0ZUZvcm0oKTtcbiAgICB9XG4gIH1cblxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuZm9ybS5maWx0ZXJzSnNvbi50cmltKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnMgPSBKU09OLnBhcnNlKHRoaXMuZm9ybS5maWx0ZXJzSnNvbik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgZmlsdGVycyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0OiBDcmVhdGVSZXBvcnREZWZpbml0aW9uUmVxdWVzdCA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZm9ybS5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZm9ybS5kZXNjcmlwdGlvbiB8fCB1bmRlZmluZWQsXG4gICAgICByZXBvcnRUeXBlOiB0aGlzLmZvcm0ucmVwb3J0VHlwZSxcbiAgICAgIHJlcG9ydEZvcm1hdDogdGhpcy5mb3JtLnJlcG9ydEZvcm1hdCxcbiAgICAgIHNjaGVkdWxlOiB0aGlzLmZvcm0uc2NoZWR1bGUsXG4gICAgICBkZWxpdmVyeU1ldGhvZDogdGhpcy5mb3JtLmRlbGl2ZXJ5TWV0aG9kLFxuICAgICAgZW1haWxSZWNpcGllbnRzOiB0aGlzLmZvcm0uZW1haWxSZWNpcGllbnRzIHx8IHVuZGVmaW5lZCxcbiAgICAgIGZpbHRlcnMsXG4gICAgICBlbmFibGVkOiB0aGlzLmZvcm0uZW5hYmxlZCxcbiAgICB9O1xuXG4gICAgdGhpcy5zYXZlLmVtaXQocmVxdWVzdCk7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlRm9ybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZpbml0aW9uKSB7XG4gICAgICB0aGlzLmZvcm0gPSB7XG4gICAgICAgIG5hbWU6IHRoaXMuZGVmaW5pdGlvbi5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZWZpbml0aW9uLmRlc2NyaXB0aW9uID8/ICcnLFxuICAgICAgICByZXBvcnRUeXBlOiB0aGlzLmRlZmluaXRpb24ucmVwb3J0VHlwZSxcbiAgICAgICAgcmVwb3J0Rm9ybWF0OiB0aGlzLmRlZmluaXRpb24ucmVwb3J0Rm9ybWF0LFxuICAgICAgICBzY2hlZHVsZTogdGhpcy5kZWZpbml0aW9uLnNjaGVkdWxlLFxuICAgICAgICBkZWxpdmVyeU1ldGhvZDogdGhpcy5kZWZpbml0aW9uLmRlbGl2ZXJ5TWV0aG9kLFxuICAgICAgICBlbWFpbFJlY2lwaWVudHM6IHRoaXMuZGVmaW5pdGlvbi5lbWFpbFJlY2lwaWVudHMgPz8gJycsXG4gICAgICAgIGZpbHRlcnNKc29uOiB0aGlzLmRlZmluaXRpb24uZmlsdGVycyA/IEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmaW5pdGlvbi5maWx0ZXJzLCBudWxsLCAyKSA6ICcnLFxuICAgICAgICBlbmFibGVkOiB0aGlzLmRlZmluaXRpb24uZW5hYmxlZCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybSA9IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgcmVwb3J0VHlwZTogdGhpcy5yZXBvcnRUeXBlc1swXSA/PyAnTUFJTlRFTkFOQ0VfU1VNTUFSWScsXG4gICAgICAgIHJlcG9ydEZvcm1hdDogdGhpcy5yZXBvcnRGb3JtYXRzWzBdID8/ICdQREYnLFxuICAgICAgICBzY2hlZHVsZTogJ05PTkUnLFxuICAgICAgICBkZWxpdmVyeU1ldGhvZDogJ0RPV05MT0FEJyxcbiAgICAgICAgZW1haWxSZWNpcGllbnRzOiAnJyxcbiAgICAgICAgZmlsdGVyc0pzb246ICcnLFxuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0Z20tZGVmLWZvcm1cIiBbbmdDbGFzc109XCJjb250YWluZXJDbGFzc1wiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlOyBlbHNlIGRlZmF1bHRIZWFkZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgaXNFZGl0OiBpc0VkaXQgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyPlxuICAgIDxoMyBjbGFzcz1cInRnbS1kZWYtZm9ybV9fdGl0bGVcIj57eyBmb3JtVGl0bGUgfX08L2gzPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDwhLS0gQ3VzdG9tIGZpZWxkcyB0ZW1wbGF0ZSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpZWxkc1RlbXBsYXRlOyBlbHNlIGRlZmF1bHRGaWVsZHNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRzVGVtcGxhdGU7IGNvbnRleHQ6IHsgZm9ybTogZm9ybSwgaXNFZGl0OiBpc0VkaXQgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIERlZmF1bHQgZmllbGRzIC0tPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz1cInRnbS1mb3JtXCIgW25nQ2xhc3NdPVwiZm9ybUNsYXNzXCI+XG4gICAgICA8IS0tIE5hbWUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGdtLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGdtLWZvcm0tbGFiZWxcIj57eyBuYW1lTGFiZWwgfX08L2xhYmVsPlxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0Z20taW5wdXRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiZm9ybS5uYW1lXCIgW3BsYWNlaG9sZGVyXT1cIm5hbWVQbGFjZWhvbGRlclwiIG5hbWU9XCJuYW1lXCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIERlc2NyaXB0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRnbS1mb3JtLWxhYmVsXCI+e3sgZGVzY3JpcHRpb25MYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInRnbS1pbnB1dCB0Z20tdGV4dGFyZWFcIiBbKG5nTW9kZWwpXT1cImZvcm0uZGVzY3JpcHRpb25cIiBbcGxhY2Vob2xkZXJdPVwiZGVzY3JpcHRpb25QbGFjZWhvbGRlclwiIG5hbWU9XCJkZXNjcmlwdGlvblwiIHJvd3M9XCIyXCI+PC90ZXh0YXJlYT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFJlcG9ydCBUeXBlICYgRm9ybWF0IChzaWRlIGJ5IHNpZGUpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS1mb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGdtLWZvcm0tZ3JvdXAgdGdtLWZvcm0tZ3JvdXAtLWZsZXhcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0Z20tZm9ybS1sYWJlbFwiPnt7IHJlcG9ydFR5cGVMYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgPHNlbGVjdCBjbGFzcz1cInRnbS1zZWxlY3RcIiBbKG5nTW9kZWwpXT1cImZvcm0ucmVwb3J0VHlwZVwiIG5hbWU9XCJyZXBvcnRUeXBlXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIHJlcG9ydFR5cGVzXCIgW3ZhbHVlXT1cInRcIj57eyB0IH19PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGdtLWZvcm0tZ3JvdXAgdGdtLWZvcm0tZ3JvdXAtLWZsZXhcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0Z20tZm9ybS1sYWJlbFwiPnt7IHJlcG9ydEZvcm1hdExhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwidGdtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZm9ybS5yZXBvcnRGb3JtYXRcIiBuYW1lPVwicmVwb3J0Rm9ybWF0XCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBmIG9mIHJlcG9ydEZvcm1hdHNcIiBbdmFsdWVdPVwiZlwiPnt7IGYgfX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTY2hlZHVsZSAmIERlbGl2ZXJ5IE1ldGhvZCAoc2lkZSBieSBzaWRlKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1mb3JtLWdyb3VwIHRnbS1mb3JtLWdyb3VwLS1mbGV4XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGdtLWZvcm0tbGFiZWxcIj57eyBzY2hlZHVsZUxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwidGdtLXNlbGVjdFwiIFsobmdNb2RlbCldPVwiZm9ybS5zY2hlZHVsZVwiIG5hbWU9XCJzY2hlZHVsZVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcyBvZiBzY2hlZHVsZXNcIiBbdmFsdWVdPVwic1wiPnt7IHMgfX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZm9ybS1ncm91cCB0Z20tZm9ybS1ncm91cC0tZmxleFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRnbS1mb3JtLWxhYmVsXCI+e3sgZGVsaXZlcnlNZXRob2RMYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1yYWRpby1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGdtLXJhZGlvXCIgKm5nRm9yPVwibGV0IGRtIG9mIGRlbGl2ZXJ5TWV0aG9kc1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW3ZhbHVlXT1cImRtXCIgWyhuZ01vZGVsKV09XCJmb3JtLmRlbGl2ZXJ5TWV0aG9kXCIgbmFtZT1cImRlbGl2ZXJ5TWV0aG9kXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tcmFkaW9fX2xhYmVsXCI+e3sgZG0gfX08L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEVtYWlsIFJlY2lwaWVudHMgKGNvbmRpdGlvbmFsKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZm9ybS1ncm91cFwiICpuZ0lmPVwic2hvd0VtYWlsUmVjaXBpZW50c1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0Z20tZm9ybS1sYWJlbFwiPnt7IGVtYWlsUmVjaXBpZW50c0xhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwidGdtLWlucHV0XCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImZvcm0uZW1haWxSZWNpcGllbnRzXCIgW3BsYWNlaG9sZGVyXT1cImVtYWlsUmVjaXBpZW50c1BsYWNlaG9sZGVyXCIgbmFtZT1cImVtYWlsUmVjaXBpZW50c1wiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGaWx0ZXJzIEpTT04gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGdtLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGdtLWZvcm0tbGFiZWxcIj57eyBmaWx0ZXJzTGFiZWwgfX08L2xhYmVsPlxuICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ0Z20taW5wdXQgdGdtLXRleHRhcmVhIHRnbS10ZXh0YXJlYS0tY29kZVwiIFsobmdNb2RlbCldPVwiZm9ybS5maWx0ZXJzSnNvblwiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXJzUGxhY2Vob2xkZXJcIiBuYW1lPVwiZmlsdGVyc0pzb25cIiByb3dzPVwiM1wiPjwvdGV4dGFyZWE+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBFbmFibGVkIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS1mb3JtLWdyb3VwIHRnbS1mb3JtLWdyb3VwLS1pbmxpbmVcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGdtLWZvcm0tbGFiZWxcIj57eyBlbmFibGVkTGFiZWwgfX08L2xhYmVsPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGdtLXRvZ2dsZVwiIFtjbGFzcy50Z20tdG9nZ2xlLS1hY3RpdmVdPVwiZm9ybS5lbmFibGVkXCIgKGNsaWNrKT1cImZvcm0uZW5hYmxlZCA9ICFmb3JtLmVuYWJsZWRcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tdG9nZ2xlX190cmFja1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tdG9nZ2xlX190aHVtYlwiPjwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPCEtLSBGb290ZXIgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb290ZXJUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0Rm9vdGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7XG4gICAgICBpc0VkaXQ6IGlzRWRpdCxcbiAgICAgIHNhdmluZzogc2F2aW5nLFxuICAgICAgb25TYXZlOiBvblNhdmUuYmluZCh0aGlzKSxcbiAgICAgIG9uQ2FuY2VsOiBvbkNhbmNlbC5iaW5kKHRoaXMpXG4gICAgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Rm9vdGVyPlxuICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGVmLWZvcm1fX2Zvb3RlclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInRnbS1idG4gdGdtLWJ0bi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cInNhdmluZ1wiPlxuICAgICAgICB7eyBjYW5jZWxCdXR0b25MYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwidGdtLWJ0biB0Z20tYnRuLS1wcmltYXJ5XCIgKGNsaWNrKT1cIm9uU2F2ZSgpXCIgdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJzYXZpbmcgfHwgIWZvcm0ubmFtZVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRnbS1zcGlubmVyIHRnbS1zcGlubmVyLS1zbVwiICpuZ0lmPVwic2F2aW5nXCI+PC9zcGFuPlxuICAgICAgICB7eyBzYXZlTGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=