gunsmith-common 2.3.19 → 2.3.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 (312) hide show
  1. package/esm2020/gunsmith-common.mjs +4 -4
  2. package/esm2020/notification/fade-out.animation.mjs +10 -10
  3. package/esm2020/notification/index.mjs +4 -4
  4. package/esm2020/notification/notification-bar/notification-bar.component.mjs +43 -43
  5. package/esm2020/notification/notification-message.mjs +3 -3
  6. package/esm2020/notification/notification-type.enum.mjs +6 -6
  7. package/esm2020/notification/notification.module.mjs +26 -26
  8. package/esm2020/notification/notification.service.mjs +21 -21
  9. package/esm2020/public_api.mjs +14 -14
  10. package/esm2020/shared/controls/form-error-message/form-error-message.component.mjs +17 -17
  11. package/esm2020/shared/controls/modal-header/modal-header.component.mjs +25 -25
  12. package/esm2020/shared/directives/disable-control.directive.mjs +24 -24
  13. package/esm2020/shared/directives/index.mjs +3 -3
  14. package/esm2020/shared/directives/refinish-details-validators.mjs +45 -45
  15. package/esm2020/shared/pipes/enum.pipe.mjs +16 -16
  16. package/esm2020/shared/pipes/file-name.pipe.mjs +16 -16
  17. package/esm2020/shared/pipes/frame-material.pipe.mjs +24 -24
  18. package/esm2020/shared/pipes/index.mjs +6 -6
  19. package/esm2020/shared/pipes/new-line.pipe.mjs +16 -16
  20. package/esm2020/shared/pipes/phone.pipe.mjs +19 -19
  21. package/esm2020/shared/services/base.service.mjs +50 -50
  22. package/esm2020/shared/services/coating-value.service.mjs +25 -25
  23. package/esm2020/shared/services/coating.service.mjs +25 -25
  24. package/esm2020/shared/services/configuration.service.mjs +32 -32
  25. package/esm2020/shared/services/customer.service.mjs +47 -47
  26. package/esm2020/shared/services/dealer.service.mjs +31 -31
  27. package/esm2020/shared/services/file-upload.service.mjs +34 -34
  28. package/esm2020/shared/services/finish-date-helper.service.mjs +69 -69
  29. package/esm2020/shared/services/firearm-milling-type.service.mjs +25 -25
  30. package/esm2020/shared/services/firearm-optic.service.mjs +31 -31
  31. package/esm2020/shared/services/firearm-sight.service.mjs +25 -25
  32. package/esm2020/shared/services/firearm.service.mjs +31 -31
  33. package/esm2020/shared/services/gun-part.service.mjs +46 -46
  34. package/esm2020/shared/services/index.mjs +44 -44
  35. package/esm2020/shared/services/inventory.service.mjs +25 -25
  36. package/esm2020/shared/services/material.service.mjs +30 -30
  37. package/esm2020/shared/services/milling-type-addon.service.mjs +25 -25
  38. package/esm2020/shared/services/milling-type.service.mjs +25 -25
  39. package/esm2020/shared/services/mount-type.service.mjs +25 -25
  40. package/esm2020/shared/services/optic.service.mjs +28 -28
  41. package/esm2020/shared/services/package-optional-item.service.mjs +25 -25
  42. package/esm2020/shared/services/package-variation.service.mjs +25 -25
  43. package/esm2020/shared/services/package.service.mjs +49 -49
  44. package/esm2020/shared/services/product.service.mjs +29 -29
  45. package/esm2020/shared/services/purchase-order.service.mjs +87 -87
  46. package/esm2020/shared/services/quickbooks.service.mjs +30 -30
  47. package/esm2020/shared/services/refinish-code.service.mjs +35 -35
  48. package/esm2020/shared/services/sight-material.service.mjs +25 -25
  49. package/esm2020/shared/services/sight-type.service.mjs +25 -25
  50. package/esm2020/shared/services/sight.service.mjs +28 -28
  51. package/esm2020/shared/services/slide-addon.service.mjs +25 -25
  52. package/esm2020/shared/services/state.service.mjs +26 -26
  53. package/esm2020/shared/services/status-history.service.mjs +40 -40
  54. package/esm2020/shared/services/totals.service.mjs +50 -50
  55. package/esm2020/shared/services/user.service.mjs +26 -26
  56. package/esm2020/shared/services/vendor.service.mjs +42 -42
  57. package/esm2020/shared/services/waitlist-customer.service.mjs +41 -41
  58. package/esm2020/shared/services/waitlist-project.service.mjs +38 -38
  59. package/esm2020/shared/services/waitlist.service.mjs +100 -100
  60. package/esm2020/shared/services/work-holiday.service.mjs +32 -32
  61. package/esm2020/shared/services/work-order-discount.service.mjs +25 -25
  62. package/esm2020/shared/services/work-order-non-inventory-item.service.mjs +25 -25
  63. package/esm2020/shared/services/work-order-shipping-item.service.mjs +25 -25
  64. package/esm2020/shared/services/work-order.service.mjs +214 -214
  65. package/esm2020/shared/shared.module.mjs +59 -59
  66. package/esm2020/shared/types/address.mjs +3 -3
  67. package/esm2020/shared/types/billing-info.mjs +3 -3
  68. package/esm2020/shared/types/bundle-item.mjs +6 -6
  69. package/esm2020/shared/types/change-order-package-detail.mjs +7 -7
  70. package/esm2020/shared/types/change-order-status.mjs +9 -9
  71. package/esm2020/shared/types/coating-value.mjs +6 -6
  72. package/esm2020/shared/types/coating.mjs +8 -8
  73. package/esm2020/shared/types/configuration.mjs +3 -3
  74. package/esm2020/shared/types/customer.mjs +6 -6
  75. package/esm2020/shared/types/dealer-contact.mjs +3 -3
  76. package/esm2020/shared/types/dealer-coupon.mjs +3 -3
  77. package/esm2020/shared/types/dealer.mjs +8 -8
  78. package/esm2020/shared/types/filter-options.mjs +9 -9
  79. package/esm2020/shared/types/firearm-optic.mjs +11 -11
  80. package/esm2020/shared/types/firearm.mjs +6 -6
  81. package/esm2020/shared/types/frame-material.mjs +8 -8
  82. package/esm2020/shared/types/gun-caliber.mjs +7 -7
  83. package/esm2020/shared/types/gun-part-option.mjs +3 -3
  84. package/esm2020/shared/types/gun-part.mjs +11 -11
  85. package/esm2020/shared/types/index.mjs +85 -85
  86. package/esm2020/shared/types/inventory-item.mjs +12 -12
  87. package/esm2020/shared/types/j-file.mjs +3 -3
  88. package/esm2020/shared/types/material.mjs +6 -6
  89. package/esm2020/shared/types/milling-detail.mjs +10 -10
  90. package/esm2020/shared/types/milling-item.mjs +6 -6
  91. package/esm2020/shared/types/milling-type-addon-option.mjs +4 -4
  92. package/esm2020/shared/types/milling-type-addon.mjs +7 -7
  93. package/esm2020/shared/types/milling-type.mjs +11 -11
  94. package/esm2020/shared/types/mount-type.mjs +6 -6
  95. package/esm2020/shared/types/optic-report-item.mjs +2 -2
  96. package/esm2020/shared/types/optic-sight.mjs +4 -4
  97. package/esm2020/shared/types/optic-status.mjs +7 -7
  98. package/esm2020/shared/types/optic.mjs +7 -7
  99. package/esm2020/shared/types/package-item.mjs +3 -3
  100. package/esm2020/shared/types/package-optional-item.mjs +7 -7
  101. package/esm2020/shared/types/package-total.mjs +3 -3
  102. package/esm2020/shared/types/package-variation-option.mjs +6 -6
  103. package/esm2020/shared/types/package-variation.mjs +8 -8
  104. package/esm2020/shared/types/package.mjs +13 -13
  105. package/esm2020/shared/types/product.mjs +3 -3
  106. package/esm2020/shared/types/project-type.mjs +7 -7
  107. package/esm2020/shared/types/purchase-order-refinish-item.mjs +3 -3
  108. package/esm2020/shared/types/purchase-order-status.mjs +8 -8
  109. package/esm2020/shared/types/purchase-order.mjs +9 -9
  110. package/esm2020/shared/types/rear-sight-position.mjs +6 -6
  111. package/esm2020/shared/types/refinish-code.mjs +3 -3
  112. package/esm2020/shared/types/refinish-detail.mjs +3 -3
  113. package/esm2020/shared/types/report-milling-item.mjs +3 -3
  114. package/esm2020/shared/types/report-refinish-item.mjs +3 -3
  115. package/esm2020/shared/types/shield-rms-options.mjs +6 -6
  116. package/esm2020/shared/types/sight-material-type.mjs +6 -6
  117. package/esm2020/shared/types/sight-report-item.mjs +2 -2
  118. package/esm2020/shared/types/sight-type-enum.mjs +7 -7
  119. package/esm2020/shared/types/sight-type.mjs +6 -6
  120. package/esm2020/shared/types/sight.mjs +6 -6
  121. package/esm2020/shared/types/simple-type.mjs +2 -2
  122. package/esm2020/shared/types/slide-addon.mjs +7 -7
  123. package/esm2020/shared/types/state.mjs +3 -3
  124. package/esm2020/shared/types/total-item.mjs +3 -3
  125. package/esm2020/shared/types/total.mjs +3 -3
  126. package/esm2020/shared/types/vendor-contact.mjs +3 -3
  127. package/esm2020/shared/types/vendor.mjs +7 -7
  128. package/esm2020/shared/types/waitlist-action.mjs +9 -9
  129. package/esm2020/shared/types/waitlist-gun-package-detail.mjs +7 -7
  130. package/esm2020/shared/types/waitlist-gun.mjs +15 -15
  131. package/esm2020/shared/types/waitlist-history.mjs +3 -3
  132. package/esm2020/shared/types/waitlist-item.mjs +13 -13
  133. package/esm2020/shared/types/waitlist-status.mjs +18 -18
  134. package/esm2020/shared/types/work-change-order.mjs +3 -3
  135. package/esm2020/shared/types/work-holiday.mjs +3 -3
  136. package/esm2020/shared/types/work-order-action.mjs +7 -7
  137. package/esm2020/shared/types/work-order-billing-transaction.mjs +3 -3
  138. package/esm2020/shared/types/work-order-discount.mjs +4 -4
  139. package/esm2020/shared/types/work-order-history.mjs +3 -3
  140. package/esm2020/shared/types/work-order-inventory-item.mjs +3 -3
  141. package/esm2020/shared/types/work-order-list-item.mjs +3 -3
  142. package/esm2020/shared/types/work-order-non-inventory-item.mjs +3 -3
  143. package/esm2020/shared/types/work-order-package-detail.mjs +7 -7
  144. package/esm2020/shared/types/work-order-refinish-item.mjs +3 -3
  145. package/esm2020/shared/types/work-order-shipping-item.mjs +3 -3
  146. package/esm2020/shared/types/work-order-status.mjs +18 -18
  147. package/esm2020/shared/types/work-order-total.mjs +3 -3
  148. package/esm2020/shared/types/work-order-type.mjs +8 -8
  149. package/esm2020/shared/types/work-order.mjs +20 -20
  150. package/esm2020/shared/utils/coating-helpers.mjs +22 -22
  151. package/esm2020/shared/utils/enum-object.mjs +10 -10
  152. package/esm2020/shared/utils/index.mjs +4 -4
  153. package/esm2020/shared/utils/invalid-form-control-toucher.mjs +7 -7
  154. package/fesm2015/gunsmith-common.mjs +2183 -2183
  155. package/fesm2015/gunsmith-common.mjs.map +1 -1
  156. package/fesm2020/gunsmith-common.mjs +2101 -2101
  157. package/fesm2020/gunsmith-common.mjs.map +1 -1
  158. package/gunsmith-common-2.3.21.tgz +0 -0
  159. package/gunsmith-common.d.ts +5 -5
  160. package/notification/fade-out.animation.d.ts +2 -2
  161. package/notification/index.d.ts +3 -3
  162. package/notification/notification-bar/notification-bar.component.d.ts +18 -18
  163. package/notification/notification-message.d.ts +6 -6
  164. package/notification/notification-type.enum.d.ts +4 -4
  165. package/notification/notification.module.d.ts +8 -8
  166. package/notification/notification.service.d.ts +12 -12
  167. package/package.json +1 -1
  168. package/public_api.d.ts +10 -10
  169. package/shared/controls/form-error-message/form-error-message.component.d.ts +8 -8
  170. package/shared/controls/modal-header/modal-header.component.d.ts +11 -11
  171. package/shared/directives/disable-control.directive.d.ts +9 -9
  172. package/shared/directives/index.d.ts +2 -2
  173. package/shared/directives/refinish-details-validators.d.ts +4 -4
  174. package/shared/pipes/enum.pipe.d.ts +7 -7
  175. package/shared/pipes/file-name.pipe.d.ts +7 -7
  176. package/shared/pipes/frame-material.pipe.d.ts +11 -11
  177. package/shared/pipes/index.d.ts +5 -5
  178. package/shared/pipes/new-line.pipe.d.ts +7 -7
  179. package/shared/pipes/phone.pipe.d.ts +7 -7
  180. package/shared/services/base.service.d.ts +17 -17
  181. package/shared/services/coating-value.service.d.ts +11 -11
  182. package/shared/services/coating.service.d.ts +11 -11
  183. package/shared/services/configuration.service.d.ts +15 -15
  184. package/shared/services/customer.service.d.ts +17 -17
  185. package/shared/services/dealer.service.d.ts +15 -15
  186. package/shared/services/file-upload.service.d.ts +13 -13
  187. package/shared/services/finish-date-helper.service.d.ts +17 -17
  188. package/shared/services/firearm-milling-type.service.d.ts +11 -11
  189. package/shared/services/firearm-optic.service.d.ts +13 -13
  190. package/shared/services/firearm-sight.service.d.ts +11 -11
  191. package/shared/services/firearm.service.d.ts +15 -15
  192. package/shared/services/gun-part.service.d.ts +16 -16
  193. package/shared/services/index.d.ts +43 -43
  194. package/shared/services/inventory.service.d.ts +11 -11
  195. package/shared/services/material.service.d.ts +13 -13
  196. package/shared/services/milling-type-addon.service.d.ts +11 -11
  197. package/shared/services/milling-type.service.d.ts +11 -11
  198. package/shared/services/mount-type.service.d.ts +11 -11
  199. package/shared/services/optic.service.d.ts +13 -13
  200. package/shared/services/package-optional-item.service.d.ts +11 -11
  201. package/shared/services/package-variation.service.d.ts +11 -11
  202. package/shared/services/package.service.d.ts +16 -16
  203. package/shared/services/product.service.d.ts +15 -15
  204. package/shared/services/purchase-order.service.d.ts +27 -27
  205. package/shared/services/quickbooks.service.d.ts +12 -12
  206. package/shared/services/refinish-code.service.d.ts +16 -16
  207. package/shared/services/sight-material.service.d.ts +11 -11
  208. package/shared/services/sight-type.service.d.ts +11 -11
  209. package/shared/services/sight.service.d.ts +13 -13
  210. package/shared/services/slide-addon.service.d.ts +11 -11
  211. package/shared/services/state.service.d.ts +13 -13
  212. package/shared/services/status-history.service.d.ts +14 -14
  213. package/shared/services/totals.service.d.ts +15 -15
  214. package/shared/services/user.service.d.ts +12 -12
  215. package/shared/services/vendor.service.d.ts +17 -17
  216. package/shared/services/waitlist-customer.service.d.ts +16 -16
  217. package/shared/services/waitlist-project.service.d.ts +17 -17
  218. package/shared/services/waitlist.service.d.ts +28 -28
  219. package/shared/services/work-holiday.service.d.ts +15 -15
  220. package/shared/services/work-order-discount.service.d.ts +11 -11
  221. package/shared/services/work-order-non-inventory-item.service.d.ts +11 -11
  222. package/shared/services/work-order-shipping-item.service.d.ts +11 -11
  223. package/shared/services/work-order.service.d.ts +59 -59
  224. package/shared/shared.module.d.ts +17 -17
  225. package/shared/types/address.d.ts +11 -11
  226. package/shared/types/billing-info.d.ts +6 -6
  227. package/shared/types/bundle-item.d.ts +11 -11
  228. package/shared/types/change-order-package-detail.d.ts +10 -10
  229. package/shared/types/change-order-status.d.ts +7 -7
  230. package/shared/types/coating-value.d.ts +7 -7
  231. package/shared/types/coating.d.ts +14 -14
  232. package/shared/types/configuration.d.ts +17 -17
  233. package/shared/types/customer.d.ts +14 -14
  234. package/shared/types/dealer-contact.d.ts +9 -9
  235. package/shared/types/dealer-coupon.d.ts +5 -5
  236. package/shared/types/dealer.d.ts +25 -25
  237. package/shared/types/filter-options.d.ts +6 -6
  238. package/shared/types/firearm-optic.d.ts +22 -21
  239. package/shared/types/firearm.d.ts +10 -10
  240. package/shared/types/frame-material.d.ts +6 -6
  241. package/shared/types/gun-caliber.d.ts +5 -5
  242. package/shared/types/gun-part-option.d.ts +9 -9
  243. package/shared/types/gun-part.d.ts +14 -14
  244. package/shared/types/index.d.ts +84 -84
  245. package/shared/types/inventory-item.d.ts +14 -14
  246. package/shared/types/j-file.d.ts +5 -5
  247. package/shared/types/material.d.ts +6 -6
  248. package/shared/types/milling-detail.d.ts +26 -26
  249. package/shared/types/milling-item.d.ts +23 -23
  250. package/shared/types/milling-type-addon-option.d.ts +5 -5
  251. package/shared/types/milling-type-addon.d.ts +8 -8
  252. package/shared/types/milling-type.d.ts +16 -16
  253. package/shared/types/mount-type.d.ts +9 -9
  254. package/shared/types/optic-report-item.d.ts +13 -13
  255. package/shared/types/optic-sight.d.ts +8 -8
  256. package/shared/types/optic-status.d.ts +5 -5
  257. package/shared/types/optic.d.ts +11 -11
  258. package/shared/types/package-item.d.ts +9 -9
  259. package/shared/types/package-optional-item.d.ts +20 -20
  260. package/shared/types/package-total.d.ts +5 -5
  261. package/shared/types/package-variation-option.d.ts +16 -16
  262. package/shared/types/package-variation.d.ts +10 -10
  263. package/shared/types/package.d.ts +18 -18
  264. package/shared/types/product.d.ts +7 -7
  265. package/shared/types/project-type.d.ts +5 -5
  266. package/shared/types/purchase-order-refinish-item.d.ts +18 -18
  267. package/shared/types/purchase-order-status.d.ts +6 -6
  268. package/shared/types/purchase-order.d.ts +11 -11
  269. package/shared/types/rear-sight-position.d.ts +4 -4
  270. package/shared/types/refinish-code.d.ts +9 -9
  271. package/shared/types/refinish-detail.d.ts +13 -13
  272. package/shared/types/report-milling-item.d.ts +18 -16
  273. package/shared/types/report-refinish-item.d.ts +20 -20
  274. package/shared/types/shield-rms-options.d.ts +4 -4
  275. package/shared/types/sight-material-type.d.ts +6 -6
  276. package/shared/types/sight-report-item.d.ts +10 -10
  277. package/shared/types/sight-type-enum.d.ts +5 -5
  278. package/shared/types/sight-type.d.ts +8 -8
  279. package/shared/types/sight.d.ts +15 -15
  280. package/shared/types/simple-type.d.ts +6 -6
  281. package/shared/types/slide-addon.d.ts +20 -20
  282. package/shared/types/state.d.ts +4 -4
  283. package/shared/types/total-item.d.ts +4 -4
  284. package/shared/types/total.d.ts +5 -5
  285. package/shared/types/vendor-contact.d.ts +9 -9
  286. package/shared/types/vendor.d.ts +20 -20
  287. package/shared/types/waitlist-action.d.ts +7 -7
  288. package/shared/types/waitlist-gun-package-detail.d.ts +10 -10
  289. package/shared/types/waitlist-gun.d.ts +29 -29
  290. package/shared/types/waitlist-history.d.ts +8 -8
  291. package/shared/types/waitlist-item.d.ts +28 -28
  292. package/shared/types/waitlist-status.d.ts +16 -16
  293. package/shared/types/work-change-order.d.ts +12 -12
  294. package/shared/types/work-holiday.d.ts +4 -4
  295. package/shared/types/work-order-action.d.ts +5 -5
  296. package/shared/types/work-order-billing-transaction.d.ts +15 -15
  297. package/shared/types/work-order-discount.d.ts +8 -8
  298. package/shared/types/work-order-history.d.ts +8 -8
  299. package/shared/types/work-order-inventory-item.d.ts +7 -7
  300. package/shared/types/work-order-list-item.d.ts +15 -15
  301. package/shared/types/work-order-non-inventory-item.d.ts +8 -8
  302. package/shared/types/work-order-package-detail.d.ts +10 -10
  303. package/shared/types/work-order-refinish-item.d.ts +18 -18
  304. package/shared/types/work-order-shipping-item.d.ts +7 -7
  305. package/shared/types/work-order-status.d.ts +16 -16
  306. package/shared/types/work-order-total.d.ts +6 -6
  307. package/shared/types/work-order-type.d.ts +6 -6
  308. package/shared/types/work-order.d.ts +40 -40
  309. package/shared/utils/coating-helpers.d.ts +5 -5
  310. package/shared/utils/enum-object.d.ts +5 -5
  311. package/shared/utils/index.d.ts +3 -3
  312. package/shared/utils/invalid-form-control-toucher.d.ts +2 -2
@@ -1,214 +1,214 @@
1
- import { Injectable, Inject } from '@angular/core';
2
- import { HttpClient } from '@angular/common/http';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common/http";
5
- export class WorkOrderService {
6
- constructor(http, env) {
7
- this.http = http;
8
- this.env = env;
9
- this.url = this.env.baseUrl + 'api/work-orders';
10
- }
11
- doWorkOrderAction(id, actionId) {
12
- return this.http.get(`${this.url}/${id}/actions/${actionId}`);
13
- }
14
- readWorkOrders(statuses = null, id = null, customerName = null, customerEmail = null, serialNumber = null, orderTypes = null, projectTypes = null, users = null, specialOrder = null) {
15
- return this.http.get(this.url, {
16
- params: this.createWorkOrderParams(statuses, id, customerName, customerEmail, serialNumber, orderTypes, projectTypes, users, specialOrder)
17
- });
18
- }
19
- readExportWorkOrders(statuses = null, id = null, customerName = null, customerEmail = null, serialNumber = null, orderTypes = null, projectTypes = null, users = null, specialOrder = null) {
20
- return this.http.get(`${this.url}/export`, {
21
- params: this.createWorkOrderParams(statuses, id, customerName, customerEmail, serialNumber, orderTypes, projectTypes, users, specialOrder)
22
- });
23
- }
24
- readWorkOrderTotal(id) {
25
- return this.http.get(`${this.url}/${id}/totals`);
26
- }
27
- createWorkOrderParams(statuses = null, id = null, customerName = null, customerEmail = null, serialNumber = null, orderTypes = null, projectTypes = null, users = null, specialOrder = null) {
28
- const params = {};
29
- if (statuses) {
30
- params['statuses'] = statuses.map(status => status.toString());
31
- }
32
- if (id) {
33
- params['id'] = id.toString();
34
- }
35
- if (customerName) {
36
- params['customerName'] = customerName;
37
- }
38
- if (customerEmail) {
39
- params['customerEmail'] = customerEmail;
40
- }
41
- if (serialNumber) {
42
- params['serialNumber'] = serialNumber;
43
- }
44
- if (orderTypes !== null) {
45
- params['orderTypes'] = orderTypes.map(type => type.toString());
46
- }
47
- if (projectTypes) {
48
- params['projectTypes'] = projectTypes.map(t => t.toString());
49
- }
50
- if (users) {
51
- params['users'] = users;
52
- }
53
- if (specialOrder) {
54
- params['specialOrder'] = specialOrder.toString();
55
- }
56
- return params;
57
- }
58
- readWorkOrder(workOrderId) {
59
- return this.http.get(`${this.url}/${workOrderId}`);
60
- }
61
- createWorkOrder(workOrder) {
62
- return this.http.post(this.url, workOrder);
63
- }
64
- updateWorkOrder(workOrderId, workOrder) {
65
- return this.http.put(`${this.url}/${workOrderId}`, workOrder);
66
- }
67
- deleteWorkOrder(workOrderId) {
68
- return this.http.delete(`${this.url}/${workOrderId}`);
69
- }
70
- recalcWorkDates() {
71
- return this.http.get(`${this.url}/recalc-dates`);
72
- }
73
- // Change Orders
74
- readChangeOrders(workOrderId) {
75
- return this.http.get(`${this.url}/${workOrderId}/change-orders`);
76
- }
77
- readChangeOrder(workOrderId, changeOrderId) {
78
- return this.http.get(`${this.url}/${workOrderId}/change-orders/${changeOrderId}`);
79
- }
80
- createChangeOrder(workOrderId, changeOrder) {
81
- return this.http.post(`${this.url}/${workOrderId}/change-orders`, changeOrder);
82
- }
83
- updateChangeOrder(workOrderId, changeOrderId, changeOrder) {
84
- return this.http.put(`${this.url}/${workOrderId}/change-orders/${changeOrderId}`, changeOrder);
85
- }
86
- deleteChangeOrder(workOrderId, changeOrderId) {
87
- return this.http.delete(`${this.url}/${workOrderId}/change-orders/${changeOrderId}`);
88
- }
89
- confirmChangeOrder(token) {
90
- return this.http.get(`${this.env.baseUrl}api/change-orders/customer`, {
91
- params: {
92
- token: token
93
- }
94
- });
95
- }
96
- cancelChangeOrder(token) {
97
- return this.http.delete(`${this.env.baseUrl}api/change-orders/customer`, {
98
- params: {
99
- token: token
100
- }
101
- });
102
- }
103
- // Checklist
104
- createChecklists(workOrderId, refinishItemIds) {
105
- return this.http.get(`${this.url}/${workOrderId}/refinish-items/` + refinishItemIds.join(',') + '/pdfs', { responseType: "blob" });
106
- }
107
- createShopChecklist(workOrderId) {
108
- return this.http.get(`${this.url}/${workOrderId}/pdf`, { responseType: "blob" });
109
- }
110
- // Refinish Items
111
- readRefinishItems(workOrderId) {
112
- return this.http.get(`${this.url}/${workOrderId}/refinish-items`);
113
- }
114
- readRefinishItemCollection(workOrderId, itemIds) {
115
- return this.http.get(`${this.url}/${workOrderId}/refinish-items/collection/${itemIds.join(',')}`);
116
- }
117
- readRefinishItem(workOrderId, refinishItemId) {
118
- return this.http.get(`${this.url}/${workOrderId}/refinish-items/${refinishItemId}`);
119
- }
120
- createRefinishItems(workOrderId, refinishItems) {
121
- return this.http.post(`${this.url}/${workOrderId}/refinish-items/collection`, refinishItems);
122
- }
123
- updateRefinishItem(workOrderId, refinishItemId, refinishItem) {
124
- return this.http.put(`${this.url}/${workOrderId}/refinish-items/${refinishItemId}`, refinishItem);
125
- }
126
- deleteRefinishItem(workOrderId, refinishItemId) {
127
- return this.http.delete(`${this.url}/${workOrderId}/refinish-items/${refinishItemId}`);
128
- }
129
- // Milling Items
130
- readMillingItems(workOrderId) {
131
- return this.http.get(`${this.url}/${workOrderId}/milling-items`);
132
- }
133
- readMillingItem(workOrderId, millingItemId) {
134
- return this.http.get(`${this.url}/${workOrderId}/milling-items/${millingItemId}`);
135
- }
136
- createMillingItem(workOrderId, millingItem) {
137
- return this.http.post(`${this.url}/${workOrderId}/milling-items`, millingItem);
138
- }
139
- updateMillingItem(workOrderId, millingItemId, millingItem) {
140
- return this.http.put(`${this.url}/${workOrderId}/milling-items/${millingItemId}`, millingItem);
141
- }
142
- updateMillingItemCollection(workOrderId, itemIds, millingItems) {
143
- return this.http.put(`${this.url}/${workOrderId}/milling-items/collection/${itemIds.join(',')}`, millingItems);
144
- }
145
- deleteMillingItem(workOrderId, millingItemId) {
146
- return this.http.delete(`${this.url}/${workOrderId}/milling-items/${millingItemId}`);
147
- }
148
- // Report Items
149
- readReportMillingItems() {
150
- return this.http.get(`${this.env.baseUrl}api/report-milling-items`);
151
- }
152
- readReportRefinishItems() {
153
- return this.http.get(`${this.env.baseUrl}api/report-refinish-items`);
154
- }
155
- readPackageDetailTotals(startDate, endDate, statuses) {
156
- return this.http.get(`${this.url}/package-details/totals`, {
157
- params: {
158
- startDate: startDate.toUTCString(),
159
- endDate: endDate.toUTCString(),
160
- statuses: statuses.map(status => status.toString())
161
- }
162
- });
163
- }
164
- // Inventory Items
165
- readInventoryItems(workOrderId) {
166
- return this.http.get(`${this.url}/${workOrderId}/inventory-items`);
167
- }
168
- readInventoryItem(workOrderId, inventoryItemId) {
169
- return this.http.get(`${this.url}/${workOrderId}/inventory-items/${inventoryItemId}`);
170
- }
171
- createInventoryItem(workOrderId, inventoryItem) {
172
- return this.http.post(`${this.url}/${workOrderId}/inventory-items`, inventoryItem);
173
- }
174
- updateInventoryItem(workOrderId, inventoryItemId, inventoryItem) {
175
- return this.http.put(`${this.url}/${workOrderId}/inventory-items/${inventoryItemId}`, inventoryItem);
176
- }
177
- deleteInventoryItem(workOrderId, inventoryItemId) {
178
- return this.http.delete(`${this.url}/${workOrderId}/inventory-items/${inventoryItemId}`);
179
- }
180
- readInventoryItemCollection(workOrderId, itemIds) {
181
- return this.http.get(`${this.url}/${workOrderId}/inventory-items/collection/${itemIds.join(',')}`);
182
- }
183
- createInventoryItems(workOrderId, inventoryItems) {
184
- return this.http.post(`${this.url}/${workOrderId}/inventory-items/collection`, inventoryItems);
185
- }
186
- // Billing
187
- processTransaction(workOrderId, billingInfo) {
188
- return this.http.post(`${this.url}/${workOrderId}/billing`, billingInfo);
189
- }
190
- getTransactions(workOrderId) {
191
- return this.http.get(`${this.url}/${workOrderId}/billing`);
192
- }
193
- refundTransaction(workOrderId, transactionId, refundAmount) {
194
- return this.http.post(`${this.url}/${workOrderId}/billing/${transactionId}/refund`, refundAmount);
195
- }
196
- createBillingTransaction(workOrderId, billingTransaction) {
197
- return this.http.post(`${this.url}/${workOrderId}/billing/transaction`, billingTransaction);
198
- }
199
- getBillingReceipt(workOrderId) {
200
- return this.http.get(`${this.url}/${workOrderId}/billing/receipt`, { responseType: "blob" });
201
- }
202
- }
203
- WorkOrderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkOrderService, deps: [{ token: i1.HttpClient }, { token: 'env' }], target: i0.ɵɵFactoryTarget.Injectable });
204
- WorkOrderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkOrderService, providedIn: 'root' });
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkOrderService, decorators: [{
206
- type: Injectable,
207
- args: [{
208
- providedIn: 'root'
209
- }]
210
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
211
- type: Inject,
212
- args: ['env']
213
- }] }]; } });
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1vcmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3Vuc21pdGgtY29tbW9uL3NyYy9zaGFyZWQvc2VydmljZXMvd29yay1vcmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBY2xELE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFDVSxJQUFnQixFQUNELEdBQVE7UUFEdkIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNELFFBQUcsR0FBSCxHQUFHLENBQUs7UUFFL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBVSxFQUFFLFFBQWdCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxjQUFjLENBQ1osV0FBOEIsSUFBSSxFQUNsQyxLQUFhLElBQUksRUFDakIsZUFBdUIsSUFBSSxFQUMzQixnQkFBd0IsSUFBSSxFQUM1QixlQUF1QixJQUFJLEVBQzNCLGFBQThCLElBQUksRUFDbEMsZUFBOEIsSUFBSSxFQUNsQyxRQUFrQixJQUFJLEVBQ3RCLGVBQXdCLElBQUk7UUFFNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBc0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNsRCxNQUFNLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZ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Q0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxlQUFlLENBQUMsV0FBbUI7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0MsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsVUFBVSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELGlCQUFpQixDQUFDLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxZQUFvQjtRQUNoRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxZQUFZLGFBQWEsU0FBUyxFQUM3RyxZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxXQUFtQixFQUFFLGtCQUErQztRQUMzRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxzQkFBc0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxXQUFtQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXLGtCQUFrQixFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLENBQUM7OzhHQXhTVSxnQkFBZ0IsNENBS2pCLEtBQUs7a0hBTEosZ0JBQWdCLGNBRmYsTUFBTTs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBXb3JrT3JkZXJTdGF0dXMgfSBmcm9tICcuLi90eXBlcy93b3JrLW9yZGVyLXN0YXR1cyc7XHJcbmltcG9ydCB7XHJcbiAgV29ya09yZGVyLCBXb3JrT3JkZXJUeXBlLCBXb3JrQ2hhbmdlT3JkZXIsIFJlcG9ydE1pbGxpbmdJdGVtLCBQcm9qZWN0VHlwZSwgUmVwb3J0UmVmaW5pc2hJdGVtLFxyXG4gIFdvcmtPcmRlclJlZmluaXNoSXRlbSwgTWlsbGluZ0l0ZW0sIFBhY2thZ2VUb3RhbCwgV29ya09yZGVySW52ZW50b3J5SXRlbSwgV29ya09yZGVyTGlzdEl0ZW0sXHJcbiAgQmlsbGluZ0luZm8sXHJcbiAgV29ya09yZGVyVG90YWwsXHJcbiAgV29ya09yZGVyQmlsbGluZ1RyYW5zYWN0aW9uXHJcbn0gZnJvbSAnLi4vdHlwZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV29ya09yZGVyU2VydmljZSB7XHJcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudjogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLnVybCA9IHRoaXMuZW52LmJhc2VVcmwgKyAnYXBpL3dvcmstb3JkZXJzJztcclxuICB9XHJcblxyXG4gIGRvV29ya09yZGVyQWN0aW9uKGlkOiBudW1iZXIsIGFjdGlvbklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyPihgJHt0aGlzLnVybH0vJHtpZH0vYWN0aW9ucy8ke2FjdGlvbklkfWApO1xyXG4gIH1cclxuXHJcbiAgcmVhZFdvcmtPcmRlcnMoXHJcbiAgICBzdGF0dXNlczogV29ya09yZGVyU3RhdHVzW10gPSBudWxsLFxyXG4gICAgaWQ6IG51bWJlciA9IG51bGwsXHJcbiAgICBjdXN0b21lck5hbWU6IHN0cmluZyA9IG51bGwsXHJcbiAgICBjdXN0b21lckVtYWlsOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgc2VyaWFsTnVtYmVyOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgb3JkZXJUeXBlczogV29ya09yZGVyVHlwZVtdID0gbnVsbCxcclxuICAgIHByb2plY3RUeXBlczogUHJvamVjdFR5cGVbXSA9IG51bGwsXHJcbiAgICB1c2Vyczogc3RyaW5nW10gPSBudWxsLFxyXG4gICAgc3BlY2lhbE9yZGVyOiBib29sZWFuID0gbnVsbCk6IE9ic2VydmFibGU8V29ya09yZGVyTGlzdEl0ZW1bXT4ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtPcmRlckxpc3RJdGVtW10+KHRoaXMudXJsLCB7XHJcbiAgICAgIHBhcmFtczogdGhpcy5jcmVhdGVXb3JrT3JkZXJQYXJhbXMoc3RhdHVzZXMsIGlkLCBjdXN0b21lck5hbWUsIGN1c3RvbWVyRW1haWwsIHNlcmlhbE51bWJlciwgb3JkZXJUeXBlcywgcHJvamVjdFR5cGVzLCB1c2Vycywgc3BlY2lhbE9yZGVyKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZWFkRXhwb3J0V29ya09yZGVycyhcclxuICAgIHN0YXR1c2VzOiBXb3JrT3JkZXJTdGF0dXNbXSA9IG51bGwsXHJcbiAgICBpZDogbnVtYmVyID0gbnVsbCxcclxuICAgIGN1c3RvbWVyTmFtZTogc3RyaW5nID0gbnVsbCxcclxuICAgIGN1c3RvbWVyRW1haWw6IHN0cmluZyA9IG51bGwsXHJcbiAgICBzZXJpYWxOdW1iZXI6IHN0cmluZyA9IG51bGwsXHJcbiAgICBvcmRlclR5cGVzOiBXb3JrT3JkZXJUeXBlW10gPSBudWxsLFxyXG4gICAgcHJvamVjdFR5cGVzOiBQcm9qZWN0VHlwZVtdID0gbnVsbCxcclxuICAgIHVzZXJzOiBzdHJpbmdbXSA9IG51bGwsXHJcbiAgICBzcGVjaWFsT3JkZXI6IGJvb2xlYW4gPSBudWxsKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJbXT4ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtPcmRlcltdPihgJHt0aGlzLnVybH0vZXhwb3J0YCwge1xyXG4gICAgICBwYXJhbXM6IHRoaXMuY3JlYXRlV29ya09yZGVyUGFyYW1zKHN0YXR1c2VzLCBpZCwgY3VzdG9tZXJOYW1lLCBjdXN0b21lckVtYWlsLCBzZXJpYWxOdW1iZXIsIG9yZGVyVHlwZXMsIHByb2plY3RUeXBlcywgdXNlcnMsIHNwZWNpYWxPcmRlcilcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVhZFdvcmtPcmRlclRvdGFsKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlclRvdGFsPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxXb3JrT3JkZXJUb3RhbD4oYCR7dGhpcy51cmx9LyR7aWR9L3RvdGFsc2ApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlV29ya09yZGVyUGFyYW1zKHN0YXR1c2VzOiBXb3JrT3JkZXJTdGF0dXNbXSA9IG51bGwsXHJcbiAgICBpZDogbnVtYmVyID0gbnVsbCxcclxuICAgIGN1c3RvbWVyTmFtZTogc3RyaW5nID0gbnVsbCxcclxuICAgIGN1c3RvbWVyRW1haWw6IHN0cmluZyA9IG51bGwsXHJcbiAgICBzZXJpYWxOdW1iZXI6IHN0cmluZyA9IG51bGwsXHJcbiAgICBvcmRlclR5cGVzOiBXb3JrT3JkZXJUeXBlW10gPSBudWxsLFxyXG4gICAgcHJvamVjdFR5cGVzOiBQcm9qZWN0VHlwZVtdID0gbnVsbCxcclxuICAgIHVzZXJzOiBzdHJpbmdbXSA9IG51bGwsXHJcbiAgICBzcGVjaWFsT3JkZXI6IGJvb2xlYW4gPSBudWxsKSB7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0ge307XHJcblxyXG4gICAgaWYgKHN0YXR1c2VzKSB7XHJcbiAgICAgIHBhcmFtc1snc3RhdHVzZXMnXSA9IHN0YXR1c2VzLm1hcChzdGF0dXMgPT4gc3RhdHVzLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpZCkge1xyXG4gICAgICBwYXJhbXNbJ2lkJ10gPSBpZC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjdXN0b21lck5hbWUpIHtcclxuICAgICAgcGFyYW1zWydjdXN0b21lck5hbWUnXSA9IGN1c3RvbWVyTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY3VzdG9tZXJFbWFpbCkge1xyXG4gICAgICBwYXJhbXNbJ2N1c3RvbWVyRW1haWwnXSA9IGN1c3RvbWVyRW1haWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlcmlhbE51bWJlcikge1xyXG4gICAgICBwYXJhbXNbJ3NlcmlhbE51bWJlciddID0gc2VyaWFsTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcmRlclR5cGVzICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtc1snb3JkZXJUeXBlcyddID0gb3JkZXJUeXBlcy5tYXAodHlwZSA9PiB0eXBlLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9qZWN0VHlwZXMpIHtcclxuICAgICAgcGFyYW1zWydwcm9qZWN0VHlwZXMnXSA9IHByb2plY3RUeXBlcy5tYXAodCA9PiB0LnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1c2Vycykge1xyXG4gICAgICBwYXJhbXNbJ3VzZXJzJ10gPSB1c2VycztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3BlY2lhbE9yZGVyKSB7XHJcbiAgICAgIHBhcmFtc1snc3BlY2lhbE9yZGVyJ10gPSBzcGVjaWFsT3JkZXIudG9TdHJpbmcoKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJhbXM7XHJcbiAgfVxyXG5cclxuICByZWFkV29ya09yZGVyKHdvcmtPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH1gKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVdvcmtPcmRlcih3b3JrT3JkZXI6IFdvcmtPcmRlcik6IE9ic2VydmFibGU8V29ya09yZGVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8V29ya09yZGVyPih0aGlzLnVybCwgd29ya09yZGVyKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVdvcmtPcmRlcih3b3JrT3JkZXJJZDogbnVtYmVyLCB3b3JrT3JkZXI6IFdvcmtPcmRlcik6IE9ic2VydmFibGU8V29ya09yZGVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxXb3JrT3JkZXI+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfWAsIHdvcmtPcmRlcik7XHJcbiAgfVxyXG5cclxuICBkZWxldGVXb3JrT3JkZXIod29ya09yZGVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH1gKTtcclxuICB9XHJcblxyXG4gIHJlY2FsY1dvcmtEYXRlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudXJsfS9yZWNhbGMtZGF0ZXNgKTtcclxuICB9XHJcblxyXG4gIC8vIENoYW5nZSBPcmRlcnNcclxuXHJcbiAgcmVhZENoYW5nZU9yZGVycyh3b3JrT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrQ2hhbmdlT3JkZXJbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya0NoYW5nZU9yZGVyW10+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9jaGFuZ2Utb3JkZXJzYCk7XHJcbiAgfVxyXG5cclxuICByZWFkQ2hhbmdlT3JkZXIod29ya09yZGVySWQ6IG51bWJlciwgY2hhbmdlT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrQ2hhbmdlT3JkZXI+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtDaGFuZ2VPcmRlcj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2NoYW5nZS1vcmRlcnMvJHtjaGFuZ2VPcmRlcklkfWApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ2hhbmdlT3JkZXIod29ya09yZGVySWQ6IG51bWJlciwgY2hhbmdlT3JkZXI6IFdvcmtDaGFuZ2VPcmRlcik6IE9ic2VydmFibGU8V29ya0NoYW5nZU9yZGVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8V29ya0NoYW5nZU9yZGVyPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vY2hhbmdlLW9yZGVyc2AsIGNoYW5nZU9yZGVyKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUNoYW5nZU9yZGVyKHdvcmtPcmRlcklkOiBudW1iZXIsIGNoYW5nZU9yZGVySWQ6IG51bWJlciwgY2hhbmdlT3JkZXI6IFdvcmtDaGFuZ2VPcmRlcik6IE9ic2VydmFibGU8V29ya0NoYW5nZU9yZGVyPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxXb3JrQ2hhbmdlT3JkZXI+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9jaGFuZ2Utb3JkZXJzLyR7Y2hhbmdlT3JkZXJJZH1gLCBjaGFuZ2VPcmRlcik7XHJcbiAgfVxyXG5cclxuICBkZWxldGVDaGFuZ2VPcmRlcih3b3JrT3JkZXJJZDogbnVtYmVyLCBjaGFuZ2VPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2NoYW5nZS1vcmRlcnMvJHtjaGFuZ2VPcmRlcklkfWApO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybUNoYW5nZU9yZGVyKHRva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHZvaWQ+KGAke3RoaXMuZW52LmJhc2VVcmx9YXBpL2NoYW5nZS1vcmRlcnMvY3VzdG9tZXJgLCB7XHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIHRva2VuOiB0b2tlblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbENoYW5nZU9yZGVyKHRva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5lbnYuYmFzZVVybH1hcGkvY2hhbmdlLW9yZGVycy9jdXN0b21lcmAsIHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgdG9rZW46IHRva2VuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hlY2tsaXN0XHJcblxyXG4gIGNyZWF0ZUNoZWNrbGlzdHMod29ya09yZGVySWQ6IG51bWJlciwgcmVmaW5pc2hJdGVtSWRzOiBudW1iZXJbXSk6IE9ic2VydmFibGU8QmxvYj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QmxvYj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L3JlZmluaXNoLWl0ZW1zL2AgKyByZWZpbmlzaEl0ZW1JZHMuam9pbignLCcpICsgJy9wZGZzJyxcclxuICAgICAgeyByZXNwb25zZVR5cGU6IFwiYmxvYlwiIGFzIFwianNvblwifSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTaG9wQ2hlY2tsaXN0KHdvcmtPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEJsb2I+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEJsb2I+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9wZGZgLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIgYXMgXCJqc29uXCIgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBSZWZpbmlzaCBJdGVtc1xyXG5cclxuICByZWFkUmVmaW5pc2hJdGVtcyh3b3JrT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJSZWZpbmlzaEl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyUmVmaW5pc2hJdGVtW10+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9yZWZpbmlzaC1pdGVtc2ApO1xyXG4gIH1cclxuXHJcbiAgcmVhZFJlZmluaXNoSXRlbUNvbGxlY3Rpb24od29ya09yZGVySWQ6IG51bWJlciwgaXRlbUlkczogbnVtYmVyW10pOiBPYnNlcnZhYmxlPFdvcmtPcmRlclJlZmluaXNoSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxXb3JrT3JkZXJSZWZpbmlzaEl0ZW1bXT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L3JlZmluaXNoLWl0ZW1zL2NvbGxlY3Rpb24vJHtpdGVtSWRzLmpvaW4oJywnKX1gKVxyXG4gIH1cclxuXHJcbiAgcmVhZFJlZmluaXNoSXRlbSh3b3JrT3JkZXJJZDogbnVtYmVyLCByZWZpbmlzaEl0ZW1JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJSZWZpbmlzaEl0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtPcmRlclJlZmluaXNoSXRlbT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L3JlZmluaXNoLWl0ZW1zLyR7cmVmaW5pc2hJdGVtSWR9YCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVSZWZpbmlzaEl0ZW1zKHdvcmtPcmRlcklkOiBudW1iZXIsIHJlZmluaXNoSXRlbXM6IFdvcmtPcmRlclJlZmluaXNoSXRlbVtdKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJSZWZpbmlzaEl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlclJlZmluaXNoSXRlbVtdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vcmVmaW5pc2gtaXRlbXMvY29sbGVjdGlvbmAsIHJlZmluaXNoSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUmVmaW5pc2hJdGVtKHdvcmtPcmRlcklkOiBudW1iZXIsIHJlZmluaXNoSXRlbUlkOiBudW1iZXIsIHJlZmluaXNoSXRlbTogV29ya09yZGVyUmVmaW5pc2hJdGVtKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJSZWZpbmlzaEl0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFdvcmtPcmRlclJlZmluaXNoSXRlbT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L3JlZmluaXNoLWl0ZW1zLyR7cmVmaW5pc2hJdGVtSWR9YCwgcmVmaW5pc2hJdGVtKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJlZmluaXNoSXRlbSh3b3JrT3JkZXJJZDogbnVtYmVyLCByZWZpbmlzaEl0ZW1JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9yZWZpbmlzaC1pdGVtcy8ke3JlZmluaXNoSXRlbUlkfWApO1xyXG4gIH1cclxuXHJcbiAgLy8gTWlsbGluZyBJdGVtc1xyXG5cclxuICByZWFkTWlsbGluZ0l0ZW1zKHdvcmtPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPE1pbGxpbmdJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE1pbGxpbmdJdGVtW10+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zYCk7XHJcbiAgfVxyXG5cclxuICByZWFkTWlsbGluZ0l0ZW0od29ya09yZGVySWQ6IG51bWJlciwgbWlsbGluZ0l0ZW1JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxNaWxsaW5nSXRlbT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TWlsbGluZ0l0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zLyR7bWlsbGluZ0l0ZW1JZH1gKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZU1pbGxpbmdJdGVtKHdvcmtPcmRlcklkOiBudW1iZXIsIG1pbGxpbmdJdGVtOiBNaWxsaW5nSXRlbSk6IE9ic2VydmFibGU8TWlsbGluZ0l0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNaWxsaW5nSXRlbT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L21pbGxpbmctaXRlbXNgLCBtaWxsaW5nSXRlbSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVNaWxsaW5nSXRlbSh3b3JrT3JkZXJJZDogbnVtYmVyLCBtaWxsaW5nSXRlbUlkOiBudW1iZXIsIG1pbGxpbmdJdGVtOiBNaWxsaW5nSXRlbSk6IE9ic2VydmFibGU8TWlsbGluZ0l0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PE1pbGxpbmdJdGVtPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vbWlsbGluZy1pdGVtcy8ke21pbGxpbmdJdGVtSWR9YCwgbWlsbGluZ0l0ZW0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTWlsbGluZ0l0ZW1Db2xsZWN0aW9uKHdvcmtPcmRlcklkOiBudW1iZXIsIGl0ZW1JZHM6IG51bWJlcltdLCBtaWxsaW5nSXRlbXM6IE1pbGxpbmdJdGVtW10pOiBPYnNlcnZhYmxlPE1pbGxpbmdJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PE1pbGxpbmdJdGVtW10+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zL2NvbGxlY3Rpb24vJHtpdGVtSWRzLmpvaW4oJywnKX1gLCBtaWxsaW5nSXRlbXMpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTWlsbGluZ0l0ZW0od29ya09yZGVySWQ6IG51bWJlciwgbWlsbGluZ0l0ZW1JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zLyR7bWlsbGluZ0l0ZW1JZH1gKTtcclxuICB9XHJcblxyXG4gIC8vIFJlcG9ydCBJdGVtc1xyXG5cclxuICByZWFkUmVwb3J0TWlsbGluZ0l0ZW1zKCk6IE9ic2VydmFibGU8UmVwb3J0TWlsbGluZ0l0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UmVwb3J0TWlsbGluZ0l0ZW1bXT4oYCR7dGhpcy5lbnYuYmFzZVVybH1hcGkvcmVwb3J0LW1pbGxpbmctaXRlbXNgKTtcclxuICB9XHJcblxyXG4gIHJlYWRSZXBvcnRSZWZpbmlzaEl0ZW1zKCk6IE9ic2VydmFibGU8UmVwb3J0UmVmaW5pc2hJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlcG9ydFJlZmluaXNoSXRlbVtdPihgJHt0aGlzLmVudi5iYXNlVXJsfWFwaS9yZXBvcnQtcmVmaW5pc2gtaXRlbXNgKTtcclxuICB9XHJcblxyXG4gIHJlYWRQYWNrYWdlRGV0YWlsVG90YWxzKHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgc3RhdHVzZXM6IFdvcmtPcmRlclN0YXR1c1tdKTogT2JzZXJ2YWJsZTxQYWNrYWdlVG90YWxbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFja2FnZVRvdGFsW10+KGAke3RoaXMudXJsfS9wYWNrYWdlLWRldGFpbHMvdG90YWxzYCxcclxuICAgICAge1xyXG4gICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgc3RhcnREYXRlOiBzdGFydERhdGUudG9VVENTdHJpbmcoKSxcclxuICAgICAgICAgIGVuZERhdGU6IGVuZERhdGUudG9VVENTdHJpbmcoKSxcclxuICAgICAgICAgIHN0YXR1c2VzOiBzdGF0dXNlcy5tYXAoc3RhdHVzID0+IHN0YXR1cy50b1N0cmluZygpKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBJbnZlbnRvcnkgSXRlbXNcclxuXHJcbiAgcmVhZEludmVudG9yeUl0ZW1zKHdvcmtPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlckludmVudG9yeUl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVySW52ZW50b3J5SXRlbVtdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vaW52ZW50b3J5LWl0ZW1zYCk7XHJcbiAgfVxyXG5cclxuICByZWFkSW52ZW50b3J5SXRlbSh3b3JrT3JkZXJJZDogbnVtYmVyLCBpbnZlbnRvcnlJdGVtSWQ6IG51bWJlcik6IE9ic2VydmFibGU8V29ya09yZGVySW52ZW50b3J5SXRlbT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVySW52ZW50b3J5SXRlbT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2ludmVudG9yeS1pdGVtcy8ke2ludmVudG9yeUl0ZW1JZH1gKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUludmVudG9yeUl0ZW0od29ya09yZGVySWQ6IG51bWJlciwgaW52ZW50b3J5SXRlbTogV29ya09yZGVySW52ZW50b3J5SXRlbSk6IE9ic2VydmFibGU8V29ya09yZGVySW52ZW50b3J5SXRlbT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlckludmVudG9yeUl0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9pbnZlbnRvcnktaXRlbXNgLCBpbnZlbnRvcnlJdGVtKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUludmVudG9yeUl0ZW0od29ya09yZGVySWQ6IG51bWJlciwgaW52ZW50b3J5SXRlbUlkOiBudW1iZXIsIGludmVudG9yeUl0ZW06IFdvcmtPcmRlckludmVudG9yeUl0ZW0pOiBPYnNlcnZhYmxlPFdvcmtPcmRlckludmVudG9yeUl0ZW0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFdvcmtPcmRlckludmVudG9yeUl0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9pbnZlbnRvcnktaXRlbXMvJHtpbnZlbnRvcnlJdGVtSWR9YCwgaW52ZW50b3J5SXRlbSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVJbnZlbnRvcnlJdGVtKHdvcmtPcmRlcklkOiBudW1iZXIsIGludmVudG9yeUl0ZW1JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9pbnZlbnRvcnktaXRlbXMvJHtpbnZlbnRvcnlJdGVtSWR9YCk7XHJcbiAgfVxyXG5cclxuICByZWFkSW52ZW50b3J5SXRlbUNvbGxlY3Rpb24od29ya09yZGVySWQ6IG51bWJlciwgaXRlbUlkczogbnVtYmVyW10pOiBPYnNlcnZhYmxlPFdvcmtPcmRlckludmVudG9yeUl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVySW52ZW50b3J5SXRlbVtdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vaW52ZW50b3J5LWl0ZW1zL2NvbGxlY3Rpb24vJHtpdGVtSWRzLmpvaW4oJywnKX1gKVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlSW52ZW50b3J5SXRlbXMod29ya09yZGVySWQ6IG51bWJlciwgaW52ZW50b3J5SXRlbXM6IFdvcmtPcmRlckludmVudG9yeUl0ZW1bXSk6IE9ic2VydmFibGU8V29ya09yZGVySW52ZW50b3J5SXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8V29ya09yZGVySW52ZW50b3J5SXRlbVtdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vaW52ZW50b3J5LWl0ZW1zL2NvbGxlY3Rpb25gLCBpbnZlbnRvcnlJdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvLyBCaWxsaW5nXHJcblxyXG4gIHByb2Nlc3NUcmFuc2FjdGlvbih3b3JrT3JkZXJJZDogbnVtYmVyLCBiaWxsaW5nSW5mbzogQmlsbGluZ0luZm8pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9iaWxsaW5nYCwgYmlsbGluZ0luZm8pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNhY3Rpb25zKHdvcmtPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxXb3JrT3JkZXJCaWxsaW5nVHJhbnNhY3Rpb25bXT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2JpbGxpbmdgKTtcclxuICB9XHJcblxyXG4gIHJlZnVuZFRyYW5zYWN0aW9uKHdvcmtPcmRlcklkOiBudW1iZXIsIHRyYW5zYWN0aW9uSWQ6IG51bWJlciwgcmVmdW5kQW1vdW50OiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2JpbGxpbmcvJHt0cmFuc2FjdGlvbklkfS9yZWZ1bmRgLFxyXG4gICAgICByZWZ1bmRBbW91bnRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVCaWxsaW5nVHJhbnNhY3Rpb24od29ya09yZGVySWQ6IG51bWJlciwgYmlsbGluZ1RyYW5zYWN0aW9uOiBXb3JrT3JkZXJCaWxsaW5nVHJhbnNhY3Rpb24pOiBPYnNlcnZhYmxlPFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2JpbGxpbmcvdHJhbnNhY3Rpb25gLCBiaWxsaW5nVHJhbnNhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmlsbGluZ1JlY2VpcHQod29ya09yZGVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8QmxvYj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QmxvYj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2JpbGxpbmcvcmVjZWlwdGAsIHsgcmVzcG9uc2VUeXBlOiBcImJsb2JcIiBhcyBcImpzb25cIiB9KTtcclxuICB9XHJcbn1cclxuIl19
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { HttpClient } from '@angular/common/http';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ export class WorkOrderService {
6
+ constructor(http, env) {
7
+ this.http = http;
8
+ this.env = env;
9
+ this.url = this.env.baseUrl + 'api/work-orders';
10
+ }
11
+ doWorkOrderAction(id, actionId) {
12
+ return this.http.get(`${this.url}/${id}/actions/${actionId}`);
13
+ }
14
+ readWorkOrders(statuses = null, id = null, customerName = null, customerEmail = null, serialNumber = null, orderTypes = null, projectTypes = null, users = null, specialOrder = null) {
15
+ return this.http.get(this.url, {
16
+ params: this.createWorkOrderParams(statuses, id, customerName, customerEmail, serialNumber, orderTypes, projectTypes, users, specialOrder)
17
+ });
18
+ }
19
+ readExportWorkOrders(statuses = null, id = null, customerName = null, customerEmail = null, serialNumber = null, orderTypes = null, projectTypes = null, users = null, specialOrder = null) {
20
+ return this.http.get(`${this.url}/export`, {
21
+ params: this.createWorkOrderParams(statuses, id, customerName, customerEmail, serialNumber, orderTypes, projectTypes, users, specialOrder)
22
+ });
23
+ }
24
+ readWorkOrderTotal(id) {
25
+ return this.http.get(`${this.url}/${id}/totals`);
26
+ }
27
+ createWorkOrderParams(statuses = null, id = null, customerName = null, customerEmail = null, serialNumber = null, orderTypes = null, projectTypes = null, users = null, specialOrder = null) {
28
+ const params = {};
29
+ if (statuses) {
30
+ params['statuses'] = statuses.map(status => status.toString());
31
+ }
32
+ if (id) {
33
+ params['id'] = id.toString();
34
+ }
35
+ if (customerName) {
36
+ params['customerName'] = customerName;
37
+ }
38
+ if (customerEmail) {
39
+ params['customerEmail'] = customerEmail;
40
+ }
41
+ if (serialNumber) {
42
+ params['serialNumber'] = serialNumber;
43
+ }
44
+ if (orderTypes !== null) {
45
+ params['orderTypes'] = orderTypes.map(type => type.toString());
46
+ }
47
+ if (projectTypes) {
48
+ params['projectTypes'] = projectTypes.map(t => t.toString());
49
+ }
50
+ if (users) {
51
+ params['users'] = users;
52
+ }
53
+ if (specialOrder) {
54
+ params['specialOrder'] = specialOrder.toString();
55
+ }
56
+ return params;
57
+ }
58
+ readWorkOrder(workOrderId) {
59
+ return this.http.get(`${this.url}/${workOrderId}`);
60
+ }
61
+ createWorkOrder(workOrder) {
62
+ return this.http.post(this.url, workOrder);
63
+ }
64
+ updateWorkOrder(workOrderId, workOrder) {
65
+ return this.http.put(`${this.url}/${workOrderId}`, workOrder);
66
+ }
67
+ deleteWorkOrder(workOrderId) {
68
+ return this.http.delete(`${this.url}/${workOrderId}`);
69
+ }
70
+ recalcWorkDates() {
71
+ return this.http.get(`${this.url}/recalc-dates`);
72
+ }
73
+ // Change Orders
74
+ readChangeOrders(workOrderId) {
75
+ return this.http.get(`${this.url}/${workOrderId}/change-orders`);
76
+ }
77
+ readChangeOrder(workOrderId, changeOrderId) {
78
+ return this.http.get(`${this.url}/${workOrderId}/change-orders/${changeOrderId}`);
79
+ }
80
+ createChangeOrder(workOrderId, changeOrder) {
81
+ return this.http.post(`${this.url}/${workOrderId}/change-orders`, changeOrder);
82
+ }
83
+ updateChangeOrder(workOrderId, changeOrderId, changeOrder) {
84
+ return this.http.put(`${this.url}/${workOrderId}/change-orders/${changeOrderId}`, changeOrder);
85
+ }
86
+ deleteChangeOrder(workOrderId, changeOrderId) {
87
+ return this.http.delete(`${this.url}/${workOrderId}/change-orders/${changeOrderId}`);
88
+ }
89
+ confirmChangeOrder(token) {
90
+ return this.http.get(`${this.env.baseUrl}api/change-orders/customer`, {
91
+ params: {
92
+ token: token
93
+ }
94
+ });
95
+ }
96
+ cancelChangeOrder(token) {
97
+ return this.http.delete(`${this.env.baseUrl}api/change-orders/customer`, {
98
+ params: {
99
+ token: token
100
+ }
101
+ });
102
+ }
103
+ // Checklist
104
+ createChecklists(workOrderId, refinishItemIds) {
105
+ return this.http.get(`${this.url}/${workOrderId}/refinish-items/` + refinishItemIds.join(',') + '/pdfs', { responseType: "blob" });
106
+ }
107
+ createShopChecklist(workOrderId) {
108
+ return this.http.get(`${this.url}/${workOrderId}/pdf`, { responseType: "blob" });
109
+ }
110
+ // Refinish Items
111
+ readRefinishItems(workOrderId) {
112
+ return this.http.get(`${this.url}/${workOrderId}/refinish-items`);
113
+ }
114
+ readRefinishItemCollection(workOrderId, itemIds) {
115
+ return this.http.get(`${this.url}/${workOrderId}/refinish-items/collection/${itemIds.join(',')}`);
116
+ }
117
+ readRefinishItem(workOrderId, refinishItemId) {
118
+ return this.http.get(`${this.url}/${workOrderId}/refinish-items/${refinishItemId}`);
119
+ }
120
+ createRefinishItems(workOrderId, refinishItems) {
121
+ return this.http.post(`${this.url}/${workOrderId}/refinish-items/collection`, refinishItems);
122
+ }
123
+ updateRefinishItem(workOrderId, refinishItemId, refinishItem) {
124
+ return this.http.put(`${this.url}/${workOrderId}/refinish-items/${refinishItemId}`, refinishItem);
125
+ }
126
+ deleteRefinishItem(workOrderId, refinishItemId) {
127
+ return this.http.delete(`${this.url}/${workOrderId}/refinish-items/${refinishItemId}`);
128
+ }
129
+ // Milling Items
130
+ readMillingItems(workOrderId) {
131
+ return this.http.get(`${this.url}/${workOrderId}/milling-items`);
132
+ }
133
+ readMillingItem(workOrderId, millingItemId) {
134
+ return this.http.get(`${this.url}/${workOrderId}/milling-items/${millingItemId}`);
135
+ }
136
+ createMillingItem(workOrderId, millingItem) {
137
+ return this.http.post(`${this.url}/${workOrderId}/milling-items`, millingItem);
138
+ }
139
+ updateMillingItem(workOrderId, millingItemId, millingItem) {
140
+ return this.http.put(`${this.url}/${workOrderId}/milling-items/${millingItemId}`, millingItem);
141
+ }
142
+ updateMillingItemCollection(workOrderId, itemIds, millingItems) {
143
+ return this.http.put(`${this.url}/${workOrderId}/milling-items/collection/${itemIds.join(',')}`, millingItems);
144
+ }
145
+ deleteMillingItem(workOrderId, millingItemId) {
146
+ return this.http.delete(`${this.url}/${workOrderId}/milling-items/${millingItemId}`);
147
+ }
148
+ // Report Items
149
+ readReportMillingItems() {
150
+ return this.http.get(`${this.env.baseUrl}api/report-milling-items`);
151
+ }
152
+ readReportRefinishItems() {
153
+ return this.http.get(`${this.env.baseUrl}api/report-refinish-items`);
154
+ }
155
+ readPackageDetailTotals(startDate, endDate, statuses) {
156
+ return this.http.get(`${this.url}/package-details/totals`, {
157
+ params: {
158
+ startDate: startDate.toUTCString(),
159
+ endDate: endDate.toUTCString(),
160
+ statuses: statuses.map(status => status.toString())
161
+ }
162
+ });
163
+ }
164
+ // Inventory Items
165
+ readInventoryItems(workOrderId) {
166
+ return this.http.get(`${this.url}/${workOrderId}/inventory-items`);
167
+ }
168
+ readInventoryItem(workOrderId, inventoryItemId) {
169
+ return this.http.get(`${this.url}/${workOrderId}/inventory-items/${inventoryItemId}`);
170
+ }
171
+ createInventoryItem(workOrderId, inventoryItem) {
172
+ return this.http.post(`${this.url}/${workOrderId}/inventory-items`, inventoryItem);
173
+ }
174
+ updateInventoryItem(workOrderId, inventoryItemId, inventoryItem) {
175
+ return this.http.put(`${this.url}/${workOrderId}/inventory-items/${inventoryItemId}`, inventoryItem);
176
+ }
177
+ deleteInventoryItem(workOrderId, inventoryItemId) {
178
+ return this.http.delete(`${this.url}/${workOrderId}/inventory-items/${inventoryItemId}`);
179
+ }
180
+ readInventoryItemCollection(workOrderId, itemIds) {
181
+ return this.http.get(`${this.url}/${workOrderId}/inventory-items/collection/${itemIds.join(',')}`);
182
+ }
183
+ createInventoryItems(workOrderId, inventoryItems) {
184
+ return this.http.post(`${this.url}/${workOrderId}/inventory-items/collection`, inventoryItems);
185
+ }
186
+ // Billing
187
+ processTransaction(workOrderId, billingInfo) {
188
+ return this.http.post(`${this.url}/${workOrderId}/billing`, billingInfo);
189
+ }
190
+ getTransactions(workOrderId) {
191
+ return this.http.get(`${this.url}/${workOrderId}/billing`);
192
+ }
193
+ refundTransaction(workOrderId, transactionId, refundAmount) {
194
+ return this.http.post(`${this.url}/${workOrderId}/billing/${transactionId}/refund`, refundAmount);
195
+ }
196
+ createBillingTransaction(workOrderId, billingTransaction) {
197
+ return this.http.post(`${this.url}/${workOrderId}/billing/transaction`, billingTransaction);
198
+ }
199
+ getBillingReceipt(workOrderId) {
200
+ return this.http.get(`${this.url}/${workOrderId}/billing/receipt`, { responseType: "blob" });
201
+ }
202
+ }
203
+ WorkOrderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkOrderService, deps: [{ token: i1.HttpClient }, { token: 'env' }], target: i0.ɵɵFactoryTarget.Injectable });
204
+ WorkOrderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkOrderService, providedIn: 'root' });
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkOrderService, decorators: [{
206
+ type: Injectable,
207
+ args: [{
208
+ providedIn: 'root'
209
+ }]
210
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
211
+ type: Inject,
212
+ args: ['env']
213
+ }] }]; } });
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1vcmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3Vuc21pdGgtY29tbW9uL3NyYy9zaGFyZWQvc2VydmljZXMvd29yay1vcmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBY2xELE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFDVSxJQUFnQixFQUNELEdBQVE7UUFEdkIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNELFFBQUcsR0FBSCxHQUFHLENBQUs7UUFFL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztJQUNsRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBVSxFQUFFLFFBQWdCO1FBQzVDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxjQUFjLENBQ1osV0FBOEIsSUFBSSxFQUNsQyxLQUFhLElBQUksRUFDakIsZUFBdUIsSUFBSSxFQUMzQixnQkFBd0IsSUFBSSxFQUM1QixlQUF1QixJQUFJLEVBQzNCLGFBQThCLElBQUksRUFDbEMsZUFBOEIsSUFBSSxFQUNsQyxRQUFrQixJQUFJLEVBQ3RCLGVBQXdCLElBQUk7UUFFNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBc0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNsRCxNQUFNLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZ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Q0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxlQUFlLENBQUMsV0FBbUI7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0MsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsVUFBVSxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELGlCQUFpQixDQUFDLFdBQW1CLEVBQUUsYUFBcUIsRUFBRSxZQUFvQjtRQUNoRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxZQUFZLGFBQWEsU0FBUyxFQUM3RyxZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxXQUFtQixFQUFFLGtCQUErQztRQUMzRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxzQkFBc0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxXQUFtQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXLGtCQUFrQixFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLENBQUM7OzhHQXhTVSxnQkFBZ0IsNENBS2pCLEtBQUs7a0hBTEosZ0JBQWdCLGNBRmYsTUFBTTs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBXb3JrT3JkZXJTdGF0dXMgfSBmcm9tICcuLi90eXBlcy93b3JrLW9yZGVyLXN0YXR1cyc7XG5pbXBvcnQge1xuICBXb3JrT3JkZXIsIFdvcmtPcmRlclR5cGUsIFdvcmtDaGFuZ2VPcmRlciwgUmVwb3J0TWlsbGluZ0l0ZW0sIFByb2plY3RUeXBlLCBSZXBvcnRSZWZpbmlzaEl0ZW0sXG4gIFdvcmtPcmRlclJlZmluaXNoSXRlbSwgTWlsbGluZ0l0ZW0sIFBhY2thZ2VUb3RhbCwgV29ya09yZGVySW52ZW50b3J5SXRlbSwgV29ya09yZGVyTGlzdEl0ZW0sXG4gIEJpbGxpbmdJbmZvLFxuICBXb3JrT3JkZXJUb3RhbCxcbiAgV29ya09yZGVyQmlsbGluZ1RyYW5zYWN0aW9uXG59IGZyb20gJy4uL3R5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV29ya09yZGVyU2VydmljZSB7XG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52OiBhbnlcbiAgKSB7XG4gICAgdGhpcy51cmwgPSB0aGlzLmVudi5iYXNlVXJsICsgJ2FwaS93b3JrLW9yZGVycyc7XG4gIH1cblxuICBkb1dvcmtPcmRlckFjdGlvbihpZDogbnVtYmVyLCBhY3Rpb25JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxXb3JrT3JkZXI+KGAke3RoaXMudXJsfS8ke2lkfS9hY3Rpb25zLyR7YWN0aW9uSWR9YCk7XG4gIH1cblxuICByZWFkV29ya09yZGVycyhcbiAgICBzdGF0dXNlczogV29ya09yZGVyU3RhdHVzW10gPSBudWxsLFxuICAgIGlkOiBudW1iZXIgPSBudWxsLFxuICAgIGN1c3RvbWVyTmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICBjdXN0b21lckVtYWlsOiBzdHJpbmcgPSBudWxsLFxuICAgIHNlcmlhbE51bWJlcjogc3RyaW5nID0gbnVsbCxcbiAgICBvcmRlclR5cGVzOiBXb3JrT3JkZXJUeXBlW10gPSBudWxsLFxuICAgIHByb2plY3RUeXBlczogUHJvamVjdFR5cGVbXSA9IG51bGwsXG4gICAgdXNlcnM6IHN0cmluZ1tdID0gbnVsbCxcbiAgICBzcGVjaWFsT3JkZXI6IGJvb2xlYW4gPSBudWxsKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJMaXN0SXRlbVtdPiB7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxXb3JrT3JkZXJMaXN0SXRlbVtdPih0aGlzLnVybCwge1xuICAgICAgcGFyYW1zOiB0aGlzLmNyZWF0ZVdvcmtPcmRlclBhcmFtcyhzdGF0dXNlcywgaWQsIGN1c3RvbWVyTmFtZSwgY3VzdG9tZXJFbWFpbCwgc2VyaWFsTnVtYmVyLCBvcmRlclR5cGVzLCBwcm9qZWN0VHlwZXMsIHVzZXJzLCBzcGVjaWFsT3JkZXIpXG4gICAgfSk7XG4gIH1cblxuICByZWFkRXhwb3J0V29ya09yZGVycyhcbiAgICBzdGF0dXNlczogV29ya09yZGVyU3RhdHVzW10gPSBudWxsLFxuICAgIGlkOiBudW1iZXIgPSBudWxsLFxuICAgIGN1c3RvbWVyTmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICBjdXN0b21lckVtYWlsOiBzdHJpbmcgPSBudWxsLFxuICAgIHNlcmlhbE51bWJlcjogc3RyaW5nID0gbnVsbCxcbiAgICBvcmRlclR5cGVzOiBXb3JrT3JkZXJUeXBlW10gPSBudWxsLFxuICAgIHByb2plY3RUeXBlczogUHJvamVjdFR5cGVbXSA9IG51bGwsXG4gICAgdXNlcnM6IHN0cmluZ1tdID0gbnVsbCxcbiAgICBzcGVjaWFsT3JkZXI6IGJvb2xlYW4gPSBudWxsKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJbXT4ge1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyW10+KGAke3RoaXMudXJsfS9leHBvcnRgLCB7XG4gICAgICBwYXJhbXM6IHRoaXMuY3JlYXRlV29ya09yZGVyUGFyYW1zKHN0YXR1c2VzLCBpZCwgY3VzdG9tZXJOYW1lLCBjdXN0b21lckVtYWlsLCBzZXJpYWxOdW1iZXIsIG9yZGVyVHlwZXMsIHByb2plY3RUeXBlcywgdXNlcnMsIHNwZWNpYWxPcmRlcilcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRXb3JrT3JkZXJUb3RhbChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJUb3RhbD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtPcmRlclRvdGFsPihgJHt0aGlzLnVybH0vJHtpZH0vdG90YWxzYCk7XG4gIH1cblxuICBjcmVhdGVXb3JrT3JkZXJQYXJhbXMoc3RhdHVzZXM6IFdvcmtPcmRlclN0YXR1c1tdID0gbnVsbCxcbiAgICBpZDogbnVtYmVyID0gbnVsbCxcbiAgICBjdXN0b21lck5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgY3VzdG9tZXJFbWFpbDogc3RyaW5nID0gbnVsbCxcbiAgICBzZXJpYWxOdW1iZXI6IHN0cmluZyA9IG51bGwsXG4gICAgb3JkZXJUeXBlczogV29ya09yZGVyVHlwZVtdID0gbnVsbCxcbiAgICBwcm9qZWN0VHlwZXM6IFByb2plY3RUeXBlW10gPSBudWxsLFxuICAgIHVzZXJzOiBzdHJpbmdbXSA9IG51bGwsXG4gICAgc3BlY2lhbE9yZGVyOiBib29sZWFuID0gbnVsbCkge1xuXG4gICAgY29uc3QgcGFyYW1zID0ge307XG5cbiAgICBpZiAoc3RhdHVzZXMpIHtcbiAgICAgIHBhcmFtc1snc3RhdHVzZXMnXSA9IHN0YXR1c2VzLm1hcChzdGF0dXMgPT4gc3RhdHVzLnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGlmIChpZCkge1xuICAgICAgcGFyYW1zWydpZCddID0gaWQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoY3VzdG9tZXJOYW1lKSB7XG4gICAgICBwYXJhbXNbJ2N1c3RvbWVyTmFtZSddID0gY3VzdG9tZXJOYW1lO1xuICAgIH1cblxuICAgIGlmIChjdXN0b21lckVtYWlsKSB7XG4gICAgICBwYXJhbXNbJ2N1c3RvbWVyRW1haWwnXSA9IGN1c3RvbWVyRW1haWw7XG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbE51bWJlcikge1xuICAgICAgcGFyYW1zWydzZXJpYWxOdW1iZXInXSA9IHNlcmlhbE51bWJlcjtcbiAgICB9XG5cbiAgICBpZiAob3JkZXJUeXBlcyAhPT0gbnVsbCkge1xuICAgICAgcGFyYW1zWydvcmRlclR5cGVzJ10gPSBvcmRlclR5cGVzLm1hcCh0eXBlID0+IHR5cGUudG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgaWYgKHByb2plY3RUeXBlcykge1xuICAgICAgcGFyYW1zWydwcm9qZWN0VHlwZXMnXSA9IHByb2plY3RUeXBlcy5tYXAodCA9PiB0LnRvU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGlmICh1c2Vycykge1xuICAgICAgcGFyYW1zWyd1c2VycyddID0gdXNlcnM7XG4gICAgfVxuXG4gICAgaWYgKHNwZWNpYWxPcmRlcikge1xuICAgICAgcGFyYW1zWydzcGVjaWFsT3JkZXInXSA9IHNwZWNpYWxPcmRlci50b1N0cmluZygpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHJlYWRXb3JrT3JkZXIod29ya09yZGVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8V29ya09yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH1gKTtcbiAgfVxuXG4gIGNyZWF0ZVdvcmtPcmRlcih3b3JrT3JkZXI6IFdvcmtPcmRlcik6IE9ic2VydmFibGU8V29ya09yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlcj4odGhpcy51cmwsIHdvcmtPcmRlcik7XG4gIH1cblxuICB1cGRhdGVXb3JrT3JkZXIod29ya09yZGVySWQ6IG51bWJlciwgd29ya09yZGVyOiBXb3JrT3JkZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFdvcmtPcmRlcj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9YCwgd29ya09yZGVyKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtPcmRlcih3b3JrT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH1gKTtcbiAgfVxuXG4gIHJlY2FsY1dvcmtEYXRlcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnVybH0vcmVjYWxjLWRhdGVzYCk7XG4gIH1cblxuICAvLyBDaGFuZ2UgT3JkZXJzXG5cbiAgcmVhZENoYW5nZU9yZGVycyh3b3JrT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrQ2hhbmdlT3JkZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtDaGFuZ2VPcmRlcltdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vY2hhbmdlLW9yZGVyc2ApO1xuICB9XG5cbiAgcmVhZENoYW5nZU9yZGVyKHdvcmtPcmRlcklkOiBudW1iZXIsIGNoYW5nZU9yZGVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8V29ya0NoYW5nZU9yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya0NoYW5nZU9yZGVyPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vY2hhbmdlLW9yZGVycy8ke2NoYW5nZU9yZGVySWR9YCk7XG4gIH1cblxuICBjcmVhdGVDaGFuZ2VPcmRlcih3b3JrT3JkZXJJZDogbnVtYmVyLCBjaGFuZ2VPcmRlcjogV29ya0NoYW5nZU9yZGVyKTogT2JzZXJ2YWJsZTxXb3JrQ2hhbmdlT3JkZXI+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8V29ya0NoYW5nZU9yZGVyPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vY2hhbmdlLW9yZGVyc2AsIGNoYW5nZU9yZGVyKTtcbiAgfVxuXG4gIHVwZGF0ZUNoYW5nZU9yZGVyKHdvcmtPcmRlcklkOiBudW1iZXIsIGNoYW5nZU9yZGVySWQ6IG51bWJlciwgY2hhbmdlT3JkZXI6IFdvcmtDaGFuZ2VPcmRlcik6IE9ic2VydmFibGU8V29ya0NoYW5nZU9yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8V29ya0NoYW5nZU9yZGVyPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vY2hhbmdlLW9yZGVycy8ke2NoYW5nZU9yZGVySWR9YCwgY2hhbmdlT3JkZXIpO1xuICB9XG5cbiAgZGVsZXRlQ2hhbmdlT3JkZXIod29ya09yZGVySWQ6IG51bWJlciwgY2hhbmdlT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vY2hhbmdlLW9yZGVycy8ke2NoYW5nZU9yZGVySWR9YCk7XG4gIH1cblxuICBjb25maXJtQ2hhbmdlT3JkZXIodG9rZW46IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHZvaWQ+KGAke3RoaXMuZW52LmJhc2VVcmx9YXBpL2NoYW5nZS1vcmRlcnMvY3VzdG9tZXJgLCB7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgdG9rZW46IHRva2VuXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxDaGFuZ2VPcmRlcih0b2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmVudi5iYXNlVXJsfWFwaS9jaGFuZ2Utb3JkZXJzL2N1c3RvbWVyYCwge1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIHRva2VuOiB0b2tlblxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2hlY2tsaXN0XG5cbiAgY3JlYXRlQ2hlY2tsaXN0cyh3b3JrT3JkZXJJZDogbnVtYmVyLCByZWZpbmlzaEl0ZW1JZHM6IG51bWJlcltdKTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QmxvYj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L3JlZmluaXNoLWl0ZW1zL2AgKyByZWZpbmlzaEl0ZW1JZHMuam9pbignLCcpICsgJy9wZGZzJyxcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiBcImJsb2JcIiBhcyBcImpzb25cIn0pO1xuICB9XG5cbiAgY3JlYXRlU2hvcENoZWNrbGlzdCh3b3JrT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QmxvYj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L3BkZmAsXG4gICAgICB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIgYXMgXCJqc29uXCIgfSk7XG4gIH1cblxuICAvLyBSZWZpbmlzaCBJdGVtc1xuXG4gIHJlYWRSZWZpbmlzaEl0ZW1zKHdvcmtPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlclJlZmluaXNoSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyUmVmaW5pc2hJdGVtW10+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9yZWZpbmlzaC1pdGVtc2ApO1xuICB9XG5cbiAgcmVhZFJlZmluaXNoSXRlbUNvbGxlY3Rpb24od29ya09yZGVySWQ6IG51bWJlciwgaXRlbUlkczogbnVtYmVyW10pOiBPYnNlcnZhYmxlPFdvcmtPcmRlclJlZmluaXNoSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyUmVmaW5pc2hJdGVtW10+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9yZWZpbmlzaC1pdGVtcy9jb2xsZWN0aW9uLyR7aXRlbUlkcy5qb2luKCcsJyl9YClcbiAgfVxuXG4gIHJlYWRSZWZpbmlzaEl0ZW0od29ya09yZGVySWQ6IG51bWJlciwgcmVmaW5pc2hJdGVtSWQ6IG51bWJlcik6IE9ic2VydmFibGU8V29ya09yZGVyUmVmaW5pc2hJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVyUmVmaW5pc2hJdGVtPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vcmVmaW5pc2gtaXRlbXMvJHtyZWZpbmlzaEl0ZW1JZH1gKTtcbiAgfVxuXG4gIGNyZWF0ZVJlZmluaXNoSXRlbXMod29ya09yZGVySWQ6IG51bWJlciwgcmVmaW5pc2hJdGVtczogV29ya09yZGVyUmVmaW5pc2hJdGVtW10pOiBPYnNlcnZhYmxlPFdvcmtPcmRlclJlZmluaXNoSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlclJlZmluaXNoSXRlbVtdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vcmVmaW5pc2gtaXRlbXMvY29sbGVjdGlvbmAsIHJlZmluaXNoSXRlbXMpO1xuICB9XG5cbiAgdXBkYXRlUmVmaW5pc2hJdGVtKHdvcmtPcmRlcklkOiBudW1iZXIsIHJlZmluaXNoSXRlbUlkOiBudW1iZXIsIHJlZmluaXNoSXRlbTogV29ya09yZGVyUmVmaW5pc2hJdGVtKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJSZWZpbmlzaEl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxXb3JrT3JkZXJSZWZpbmlzaEl0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9yZWZpbmlzaC1pdGVtcy8ke3JlZmluaXNoSXRlbUlkfWAsIHJlZmluaXNoSXRlbSk7XG4gIH1cblxuICBkZWxldGVSZWZpbmlzaEl0ZW0od29ya09yZGVySWQ6IG51bWJlciwgcmVmaW5pc2hJdGVtSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L3JlZmluaXNoLWl0ZW1zLyR7cmVmaW5pc2hJdGVtSWR9YCk7XG4gIH1cblxuICAvLyBNaWxsaW5nIEl0ZW1zXG5cbiAgcmVhZE1pbGxpbmdJdGVtcyh3b3JrT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxNaWxsaW5nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TWlsbGluZ0l0ZW1bXT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L21pbGxpbmctaXRlbXNgKTtcbiAgfVxuXG4gIHJlYWRNaWxsaW5nSXRlbSh3b3JrT3JkZXJJZDogbnVtYmVyLCBtaWxsaW5nSXRlbUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPE1pbGxpbmdJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TWlsbGluZ0l0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zLyR7bWlsbGluZ0l0ZW1JZH1gKTtcbiAgfVxuXG4gIGNyZWF0ZU1pbGxpbmdJdGVtKHdvcmtPcmRlcklkOiBudW1iZXIsIG1pbGxpbmdJdGVtOiBNaWxsaW5nSXRlbSk6IE9ic2VydmFibGU8TWlsbGluZ0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TWlsbGluZ0l0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zYCwgbWlsbGluZ0l0ZW0pO1xuICB9XG5cbiAgdXBkYXRlTWlsbGluZ0l0ZW0od29ya09yZGVySWQ6IG51bWJlciwgbWlsbGluZ0l0ZW1JZDogbnVtYmVyLCBtaWxsaW5nSXRlbTogTWlsbGluZ0l0ZW0pOiBPYnNlcnZhYmxlPE1pbGxpbmdJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8TWlsbGluZ0l0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zLyR7bWlsbGluZ0l0ZW1JZH1gLCBtaWxsaW5nSXRlbSk7XG4gIH1cblxuICB1cGRhdGVNaWxsaW5nSXRlbUNvbGxlY3Rpb24od29ya09yZGVySWQ6IG51bWJlciwgaXRlbUlkczogbnVtYmVyW10sIG1pbGxpbmdJdGVtczogTWlsbGluZ0l0ZW1bXSk6IE9ic2VydmFibGU8TWlsbGluZ0l0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PE1pbGxpbmdJdGVtW10+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9taWxsaW5nLWl0ZW1zL2NvbGxlY3Rpb24vJHtpdGVtSWRzLmpvaW4oJywnKX1gLCBtaWxsaW5nSXRlbXMpO1xuICB9XG5cbiAgZGVsZXRlTWlsbGluZ0l0ZW0od29ya09yZGVySWQ6IG51bWJlciwgbWlsbGluZ0l0ZW1JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vbWlsbGluZy1pdGVtcy8ke21pbGxpbmdJdGVtSWR9YCk7XG4gIH1cblxuICAvLyBSZXBvcnQgSXRlbXNcblxuICByZWFkUmVwb3J0TWlsbGluZ0l0ZW1zKCk6IE9ic2VydmFibGU8UmVwb3J0TWlsbGluZ0l0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJlcG9ydE1pbGxpbmdJdGVtW10+KGAke3RoaXMuZW52LmJhc2VVcmx9YXBpL3JlcG9ydC1taWxsaW5nLWl0ZW1zYCk7XG4gIH1cblxuICByZWFkUmVwb3J0UmVmaW5pc2hJdGVtcygpOiBPYnNlcnZhYmxlPFJlcG9ydFJlZmluaXNoSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UmVwb3J0UmVmaW5pc2hJdGVtW10+KGAke3RoaXMuZW52LmJhc2VVcmx9YXBpL3JlcG9ydC1yZWZpbmlzaC1pdGVtc2ApO1xuICB9XG5cbiAgcmVhZFBhY2thZ2VEZXRhaWxUb3RhbHMoc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlLCBzdGF0dXNlczogV29ya09yZGVyU3RhdHVzW10pOiBPYnNlcnZhYmxlPFBhY2thZ2VUb3RhbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFja2FnZVRvdGFsW10+KGAke3RoaXMudXJsfS9wYWNrYWdlLWRldGFpbHMvdG90YWxzYCxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgc3RhcnREYXRlOiBzdGFydERhdGUudG9VVENTdHJpbmcoKSxcbiAgICAgICAgICBlbmREYXRlOiBlbmREYXRlLnRvVVRDU3RyaW5nKCksXG4gICAgICAgICAgc3RhdHVzZXM6IHN0YXR1c2VzLm1hcChzdGF0dXMgPT4gc3RhdHVzLnRvU3RyaW5nKCkpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gSW52ZW50b3J5IEl0ZW1zXG5cbiAgcmVhZEludmVudG9yeUl0ZW1zKHdvcmtPcmRlcklkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlckludmVudG9yeUl0ZW1bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtPcmRlckludmVudG9yeUl0ZW1bXT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2ludmVudG9yeS1pdGVtc2ApO1xuICB9XG5cbiAgcmVhZEludmVudG9yeUl0ZW0od29ya09yZGVySWQ6IG51bWJlciwgaW52ZW50b3J5SXRlbUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtPcmRlckludmVudG9yeUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxXb3JrT3JkZXJJbnZlbnRvcnlJdGVtPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vaW52ZW50b3J5LWl0ZW1zLyR7aW52ZW50b3J5SXRlbUlkfWApO1xuICB9XG5cbiAgY3JlYXRlSW52ZW50b3J5SXRlbSh3b3JrT3JkZXJJZDogbnVtYmVyLCBpbnZlbnRvcnlJdGVtOiBXb3JrT3JkZXJJbnZlbnRvcnlJdGVtKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJJbnZlbnRvcnlJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlckludmVudG9yeUl0ZW0+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9pbnZlbnRvcnktaXRlbXNgLCBpbnZlbnRvcnlJdGVtKTtcbiAgfVxuXG4gIHVwZGF0ZUludmVudG9yeUl0ZW0od29ya09yZGVySWQ6IG51bWJlciwgaW52ZW50b3J5SXRlbUlkOiBudW1iZXIsIGludmVudG9yeUl0ZW06IFdvcmtPcmRlckludmVudG9yeUl0ZW0pOiBPYnNlcnZhYmxlPFdvcmtPcmRlckludmVudG9yeUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxXb3JrT3JkZXJJbnZlbnRvcnlJdGVtPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vaW52ZW50b3J5LWl0ZW1zLyR7aW52ZW50b3J5SXRlbUlkfWAsIGludmVudG9yeUl0ZW0pO1xuICB9XG5cbiAgZGVsZXRlSW52ZW50b3J5SXRlbSh3b3JrT3JkZXJJZDogbnVtYmVyLCBpbnZlbnRvcnlJdGVtSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2ludmVudG9yeS1pdGVtcy8ke2ludmVudG9yeUl0ZW1JZH1gKTtcbiAgfVxuXG4gIHJlYWRJbnZlbnRvcnlJdGVtQ29sbGVjdGlvbih3b3JrT3JkZXJJZDogbnVtYmVyLCBpdGVtSWRzOiBudW1iZXJbXSk6IE9ic2VydmFibGU8V29ya09yZGVySW52ZW50b3J5SXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8V29ya09yZGVySW52ZW50b3J5SXRlbVtdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vaW52ZW50b3J5LWl0ZW1zL2NvbGxlY3Rpb24vJHtpdGVtSWRzLmpvaW4oJywnKX1gKVxuICB9XG5cbiAgY3JlYXRlSW52ZW50b3J5SXRlbXMod29ya09yZGVySWQ6IG51bWJlciwgaW52ZW50b3J5SXRlbXM6IFdvcmtPcmRlckludmVudG9yeUl0ZW1bXSk6IE9ic2VydmFibGU8V29ya09yZGVySW52ZW50b3J5SXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlckludmVudG9yeUl0ZW1bXT4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2ludmVudG9yeS1pdGVtcy9jb2xsZWN0aW9uYCwgaW52ZW50b3J5SXRlbXMpO1xuICB9XG5cbiAgLy8gQmlsbGluZ1xuXG4gIHByb2Nlc3NUcmFuc2FjdGlvbih3b3JrT3JkZXJJZDogbnVtYmVyLCBiaWxsaW5nSW5mbzogQmlsbGluZ0luZm8pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vYmlsbGluZ2AsIGJpbGxpbmdJbmZvKTtcbiAgfVxuXG4gIGdldFRyYW5zYWN0aW9ucyh3b3JrT3JkZXJJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxXb3JrT3JkZXJCaWxsaW5nVHJhbnNhY3Rpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbltdPihgJHt0aGlzLnVybH0vJHt3b3JrT3JkZXJJZH0vYmlsbGluZ2ApO1xuICB9XG5cbiAgcmVmdW5kVHJhbnNhY3Rpb24od29ya09yZGVySWQ6IG51bWJlciwgdHJhbnNhY3Rpb25JZDogbnVtYmVyLCByZWZ1bmRBbW91bnQ6IG51bWJlcik6IE9ic2VydmFibGU8V29ya09yZGVyQmlsbGluZ1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2JpbGxpbmcvJHt0cmFuc2FjdGlvbklkfS9yZWZ1bmRgLFxuICAgICAgcmVmdW5kQW1vdW50XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJpbGxpbmdUcmFuc2FjdGlvbih3b3JrT3JkZXJJZDogbnVtYmVyLCBiaWxsaW5nVHJhbnNhY3Rpb246IFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbik6IE9ic2VydmFibGU8V29ya09yZGVyQmlsbGluZ1RyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFdvcmtPcmRlckJpbGxpbmdUcmFuc2FjdGlvbj4oYCR7dGhpcy51cmx9LyR7d29ya09yZGVySWR9L2JpbGxpbmcvdHJhbnNhY3Rpb25gLCBiaWxsaW5nVHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgZ2V0QmlsbGluZ1JlY2VpcHQod29ya09yZGVySWQ6IG51bWJlcik6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEJsb2I+KGAke3RoaXMudXJsfS8ke3dvcmtPcmRlcklkfS9iaWxsaW5nL3JlY2VpcHRgLCB7IHJlc3BvbnNlVHlwZTogXCJibG9iXCIgYXMgXCJqc29uXCIgfSk7XG4gIH1cbn1cbiJdfQ==