@experteam-mx/ngx-services 18.9.21 → 20.0.0-beta

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 (180) hide show
  1. package/README.md +80 -24
  2. package/fesm2022/experteam-mx-ngx-services.mjs +576 -433
  3. package/fesm2022/experteam-mx-ngx-services.mjs.map +1 -1
  4. package/index.d.ts +7667 -3
  5. package/package.json +6 -8
  6. package/esm2022/experteam-mx-ngx-services.mjs +0 -5
  7. package/esm2022/lib/apis/api-billing-do.service.mjs +0 -41
  8. package/esm2022/lib/apis/api-billing-gt.service.mjs +0 -61
  9. package/esm2022/lib/apis/api-billing-mx.service.mjs +0 -62
  10. package/esm2022/lib/apis/api-billing-pa.service.mjs +0 -105
  11. package/esm2022/lib/apis/api-billing-sv.service.mjs +0 -83
  12. package/esm2022/lib/apis/api-cash-operations.service.mjs +0 -93
  13. package/esm2022/lib/apis/api-catalogs.service.mjs +0 -616
  14. package/esm2022/lib/apis/api-companies.service.mjs +0 -1031
  15. package/esm2022/lib/apis/api-composition.service.mjs +0 -55
  16. package/esm2022/lib/apis/api-customs.service.mjs +0 -157
  17. package/esm2022/lib/apis/api-discounts.service.mjs +0 -242
  18. package/esm2022/lib/apis/api-e-tools-auto-billing.service.mjs +0 -75
  19. package/esm2022/lib/apis/api-events.service.mjs +0 -53
  20. package/esm2022/lib/apis/api-external-ops.service.mjs +0 -87
  21. package/esm2022/lib/apis/api-inventories.service.mjs +0 -208
  22. package/esm2022/lib/apis/api-invoices.service.mjs +0 -453
  23. package/esm2022/lib/apis/api-notifications.service.mjs +0 -104
  24. package/esm2022/lib/apis/api-open-items.service.mjs +0 -62
  25. package/esm2022/lib/apis/api-quote.service.mjs +0 -87
  26. package/esm2022/lib/apis/api-reports.service.mjs +0 -172
  27. package/esm2022/lib/apis/api-security.service.mjs +0 -245
  28. package/esm2022/lib/apis/api-services.service.mjs +0 -103
  29. package/esm2022/lib/apis/api-shipments.service.mjs +0 -116
  30. package/esm2022/lib/apis/api-supplies.service.mjs +0 -133
  31. package/esm2022/lib/apis/models/api-billing-do.interfaces.mjs +0 -2
  32. package/esm2022/lib/apis/models/api-billing-do.types.mjs +0 -2
  33. package/esm2022/lib/apis/models/api-billing-mx.interfaces.mjs +0 -2
  34. package/esm2022/lib/apis/models/api-billing-mx.types.mjs +0 -2
  35. package/esm2022/lib/apis/models/api-billing-pa.interfaces.mjs +0 -2
  36. package/esm2022/lib/apis/models/api-billing-pa.types.mjs +0 -2
  37. package/esm2022/lib/apis/models/api-billing-sv.interfaces.mjs +0 -2
  38. package/esm2022/lib/apis/models/api-billing-sv.types.mjs +0 -2
  39. package/esm2022/lib/apis/models/api-billing.models.mjs +0 -2
  40. package/esm2022/lib/apis/models/api-cash-operations.interfaces.mjs +0 -2
  41. package/esm2022/lib/apis/models/api-cash-operations.types.mjs +0 -2
  42. package/esm2022/lib/apis/models/api-catalog.enum.mjs +0 -9
  43. package/esm2022/lib/apis/models/api-catalog.interfaces.mjs +0 -2
  44. package/esm2022/lib/apis/models/api-catalog.types.mjs +0 -2
  45. package/esm2022/lib/apis/models/api-companies.interfaces.mjs +0 -2
  46. package/esm2022/lib/apis/models/api-companies.types.mjs +0 -2
  47. package/esm2022/lib/apis/models/api-composition.interfaces.mjs +0 -2
  48. package/esm2022/lib/apis/models/api-composition.types.mjs +0 -2
  49. package/esm2022/lib/apis/models/api-customs.interfaces.mjs +0 -2
  50. package/esm2022/lib/apis/models/api-customs.types.mjs +0 -2
  51. package/esm2022/lib/apis/models/api-discounts.interfaces.mjs +0 -2
  52. package/esm2022/lib/apis/models/api-discounts.types.mjs +0 -2
  53. package/esm2022/lib/apis/models/api-e-tools-auto-billing.interfaces.mjs +0 -2
  54. package/esm2022/lib/apis/models/api-e-tools-auto-billing.types.mjs +0 -2
  55. package/esm2022/lib/apis/models/api-events.enum.mjs +0 -7
  56. package/esm2022/lib/apis/models/api-events.interfaces.mjs +0 -2
  57. package/esm2022/lib/apis/models/api-events.types.mjs +0 -2
  58. package/esm2022/lib/apis/models/api-external-ops.interfaces.mjs +0 -2
  59. package/esm2022/lib/apis/models/api-external-ops.types.mjs +0 -2
  60. package/esm2022/lib/apis/models/api-inventories.enum.mjs +0 -22
  61. package/esm2022/lib/apis/models/api-inventories.interfaces.mjs +0 -2
  62. package/esm2022/lib/apis/models/api-inventories.types.mjs +0 -2
  63. package/esm2022/lib/apis/models/api-invoices.interfaces.mjs +0 -2
  64. package/esm2022/lib/apis/models/api-invoices.types.mjs +0 -2
  65. package/esm2022/lib/apis/models/api-notifications.interfaces.mjs +0 -2
  66. package/esm2022/lib/apis/models/api-notifications.types.mjs +0 -2
  67. package/esm2022/lib/apis/models/api-open-items.interfaces.mjs +0 -2
  68. package/esm2022/lib/apis/models/api-open-items.types.mjs +0 -2
  69. package/esm2022/lib/apis/models/api-quote.interfaces.mjs +0 -2
  70. package/esm2022/lib/apis/models/api-quote.types.mjs +0 -2
  71. package/esm2022/lib/apis/models/api-reports.interfaces.mjs +0 -2
  72. package/esm2022/lib/apis/models/api-reports.types.mjs +0 -2
  73. package/esm2022/lib/apis/models/api-security.interfaces.mjs +0 -2
  74. package/esm2022/lib/apis/models/api-security.types.mjs +0 -2
  75. package/esm2022/lib/apis/models/api-services.interfaces.mjs +0 -2
  76. package/esm2022/lib/apis/models/api-services.types.mjs +0 -2
  77. package/esm2022/lib/apis/models/api-shipments.enums.mjs +0 -8
  78. package/esm2022/lib/apis/models/api-shipments.interfaces.mjs +0 -2
  79. package/esm2022/lib/apis/models/api-shipments.types.mjs +0 -2
  80. package/esm2022/lib/apis/models/api-supplies.interfaces.mjs +0 -2
  81. package/esm2022/lib/apis/models/api-supplies.types.mjs +0 -2
  82. package/esm2022/lib/apis/models/api.models.mjs +0 -2
  83. package/esm2022/lib/cypher/crypto.service.mjs +0 -93
  84. package/esm2022/lib/helpers/files.mjs +0 -9
  85. package/esm2022/lib/helpers/http.mjs +0 -66
  86. package/esm2022/lib/interceptors/api-headers.interceptor.mjs +0 -24
  87. package/esm2022/lib/interceptors/api-key.interceptor.mjs +0 -48
  88. package/esm2022/lib/interceptors/api-token.interceptor.mjs +0 -28
  89. package/esm2022/lib/interceptors/http-caching.interceptor.mjs +0 -37
  90. package/esm2022/lib/ngx-services.models.mjs +0 -11
  91. package/esm2022/lib/ngx-services.module.mjs +0 -33
  92. package/esm2022/lib/websockets/web-sockets.service.mjs +0 -115
  93. package/esm2022/public-api.mjs +0 -94
  94. package/lib/apis/api-billing-do.service.d.ts +0 -24
  95. package/lib/apis/api-billing-gt.service.d.ts +0 -38
  96. package/lib/apis/api-billing-mx.service.d.ts +0 -39
  97. package/lib/apis/api-billing-pa.service.d.ts +0 -68
  98. package/lib/apis/api-billing-sv.service.d.ts +0 -55
  99. package/lib/apis/api-cash-operations.service.d.ts +0 -62
  100. package/lib/apis/api-catalogs.service.d.ts +0 -451
  101. package/lib/apis/api-companies.service.d.ts +0 -714
  102. package/lib/apis/api-composition.service.d.ts +0 -35
  103. package/lib/apis/api-customs.service.d.ts +0 -110
  104. package/lib/apis/api-discounts.service.d.ts +0 -166
  105. package/lib/apis/api-e-tools-auto-billing.service.d.ts +0 -49
  106. package/lib/apis/api-events.service.d.ts +0 -33
  107. package/lib/apis/api-external-ops.service.d.ts +0 -54
  108. package/lib/apis/api-inventories.service.d.ts +0 -145
  109. package/lib/apis/api-invoices.service.d.ts +0 -317
  110. package/lib/apis/api-notifications.service.d.ts +0 -70
  111. package/lib/apis/api-open-items.service.d.ts +0 -41
  112. package/lib/apis/api-quote.service.d.ts +0 -65
  113. package/lib/apis/api-reports.service.d.ts +0 -120
  114. package/lib/apis/api-security.service.d.ts +0 -162
  115. package/lib/apis/api-services.service.d.ts +0 -67
  116. package/lib/apis/api-shipments.service.d.ts +0 -77
  117. package/lib/apis/api-supplies.service.d.ts +0 -93
  118. package/lib/apis/models/api-billing-do.interfaces.d.ts +0 -6
  119. package/lib/apis/models/api-billing-do.types.d.ts +0 -5
  120. package/lib/apis/models/api-billing-mx.interfaces.d.ts +0 -21
  121. package/lib/apis/models/api-billing-mx.types.d.ts +0 -13
  122. package/lib/apis/models/api-billing-pa.interfaces.d.ts +0 -26
  123. package/lib/apis/models/api-billing-pa.types.d.ts +0 -16
  124. package/lib/apis/models/api-billing-sv.interfaces.d.ts +0 -22
  125. package/lib/apis/models/api-billing-sv.types.d.ts +0 -21
  126. package/lib/apis/models/api-billing.models.d.ts +0 -27
  127. package/lib/apis/models/api-cash-operations.interfaces.d.ts +0 -40
  128. package/lib/apis/models/api-cash-operations.types.d.ts +0 -30
  129. package/lib/apis/models/api-catalog.enum.d.ts +0 -7
  130. package/lib/apis/models/api-catalog.interfaces.d.ts +0 -211
  131. package/lib/apis/models/api-catalog.types.d.ts +0 -213
  132. package/lib/apis/models/api-companies.interfaces.d.ts +0 -346
  133. package/lib/apis/models/api-companies.types.d.ts +0 -461
  134. package/lib/apis/models/api-composition.interfaces.d.ts +0 -272
  135. package/lib/apis/models/api-composition.types.d.ts +0 -9
  136. package/lib/apis/models/api-customs.interfaces.d.ts +0 -125
  137. package/lib/apis/models/api-customs.types.d.ts +0 -90
  138. package/lib/apis/models/api-discounts.interfaces.d.ts +0 -78
  139. package/lib/apis/models/api-discounts.types.d.ts +0 -89
  140. package/lib/apis/models/api-e-tools-auto-billing.interfaces.d.ts +0 -45
  141. package/lib/apis/models/api-e-tools-auto-billing.types.d.ts +0 -30
  142. package/lib/apis/models/api-events.enum.d.ts +0 -5
  143. package/lib/apis/models/api-events.interfaces.d.ts +0 -21
  144. package/lib/apis/models/api-events.types.d.ts +0 -14
  145. package/lib/apis/models/api-external-ops.interfaces.d.ts +0 -21
  146. package/lib/apis/models/api-external-ops.types.d.ts +0 -35
  147. package/lib/apis/models/api-inventories.enum.d.ts +0 -18
  148. package/lib/apis/models/api-inventories.interfaces.d.ts +0 -40
  149. package/lib/apis/models/api-inventories.types.d.ts +0 -62
  150. package/lib/apis/models/api-invoices.interfaces.d.ts +0 -277
  151. package/lib/apis/models/api-invoices.types.d.ts +0 -236
  152. package/lib/apis/models/api-notifications.interfaces.d.ts +0 -36
  153. package/lib/apis/models/api-notifications.types.d.ts +0 -34
  154. package/lib/apis/models/api-open-items.interfaces.d.ts +0 -32
  155. package/lib/apis/models/api-open-items.types.d.ts +0 -58
  156. package/lib/apis/models/api-quote.interfaces.d.ts +0 -13
  157. package/lib/apis/models/api-quote.types.d.ts +0 -17
  158. package/lib/apis/models/api-reports.interfaces.d.ts +0 -353
  159. package/lib/apis/models/api-reports.types.d.ts +0 -59
  160. package/lib/apis/models/api-security.interfaces.d.ts +0 -68
  161. package/lib/apis/models/api-security.types.d.ts +0 -72
  162. package/lib/apis/models/api-services.interfaces.d.ts +0 -49
  163. package/lib/apis/models/api-services.types.d.ts +0 -67
  164. package/lib/apis/models/api-shipments.enums.d.ts +0 -6
  165. package/lib/apis/models/api-shipments.interfaces.d.ts +0 -41
  166. package/lib/apis/models/api-shipments.types.d.ts +0 -121
  167. package/lib/apis/models/api-supplies.interfaces.d.ts +0 -40
  168. package/lib/apis/models/api-supplies.types.d.ts +0 -50
  169. package/lib/apis/models/api.models.d.ts +0 -36
  170. package/lib/cypher/crypto.service.d.ts +0 -15
  171. package/lib/helpers/files.d.ts +0 -2
  172. package/lib/helpers/http.d.ts +0 -38
  173. package/lib/interceptors/api-headers.interceptor.d.ts +0 -12
  174. package/lib/interceptors/api-key.interceptor.d.ts +0 -35
  175. package/lib/interceptors/api-token.interceptor.d.ts +0 -11
  176. package/lib/interceptors/http-caching.interceptor.d.ts +0 -12
  177. package/lib/ngx-services.models.d.ts +0 -63
  178. package/lib/ngx-services.module.d.ts +0 -16
  179. package/lib/websockets/web-sockets.service.d.ts +0 -49
  180. package/public-api.d.ts +0 -84
@@ -1,453 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { map } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common/http";
5
- export class ApiInvoicesService {
6
- environments;
7
- http;
8
- constructor(environments, http) {
9
- this.environments = environments;
10
- this.http = http;
11
- }
12
- /**
13
- * Retrieves the API URL for invoices from the environments configuration.
14
- *
15
- * @return {string} The API URL for invoices.
16
- */
17
- get url() {
18
- return this.environments.apiInvoicesUrl ?? '';
19
- }
20
- /**
21
- * Sends an operation document to the server and processes the response.
22
- *
23
- * @param {OperationDocumentIn} body - The input data for the operation document.
24
- * @return {Observable<OperationDocumentOut>} An observable containing the processed operation document output.
25
- */
26
- postOperationDocument(body) {
27
- return this.http.post(`${this.url}/operation/document`, body)
28
- .pipe(map(({ data }) => data));
29
- }
30
- /**
31
- * Fetches and returns the collection receipt data for a given collection ID.
32
- *
33
- * @param {number} id - The unique identifier of the collection for which the receipt needs to be retrieved.
34
- * @return {Observable<PrintCollectionReceiptOut>} An observable containing the collection receipt data.
35
- */
36
- getPrintCollectionReceipt(id) {
37
- return this.http.get(`${this.url}/operation/print/collection-receipt/${id}`)
38
- .pipe(map(({ data }) => data));
39
- }
40
- /**
41
- * Handles the account payment operation by sending a POST request to the specified endpoint.
42
- * Processes the response and returns the operation data.
43
- *
44
- * @param {OperationAccountPaymentIn} body The payload containing information for the account payment operation.
45
- * @return {Observable<OperationAccountPaymentOut>} An observable emitting the processed account payment operation data.
46
- */
47
- postOperationAccountPayment(body) {
48
- return this.http.post(`${this.url}/operation/account-payment`, body)
49
- .pipe(map(({ data }) => data));
50
- }
51
- /**
52
- * Cancels a payment receipt based on the provided input.
53
- * This method sends a POST request to cancel a document.
54
- *
55
- * @param body The data required to cancel the payment receipt, encapsulated in a CancelPaymentReceiptIn object.
56
- * @return An Observable representing the result of the cancellation. Emits an empty object on success.
57
- */
58
- postOperationCancelDocument(body) {
59
- return this.http.post(`${this.url}/operation/cancel-document`, body)
60
- .pipe(map(({ data }) => data));
61
- }
62
- /**
63
- * Sends a POST request to cancel billing for a specific operation.
64
- *
65
- * @param {Object} params - The parameters for the cancellation request.
66
- * @param {string} params.invoiceId - The ID of the invoice to be canceled.
67
- * @param {Object} params.body - Additional data to be sent in the request body.
68
- * @return {Observable<OperationCancelBillingOut>} An observable emitting the result of the cancellation operation.
69
- */
70
- postOperationCancelBilling({ invoiceId, ...body }) {
71
- return this.http.post(`${this.url}/operation/cancel-billing/${invoiceId}`, body)
72
- .pipe(map(({ data }) => data));
73
- }
74
- /**
75
- * Fetches a list of customer types from the server.
76
- *
77
- * @param {QueryParams} params - Query parameters to filter or customize the request.
78
- * @return {Observable<CustomerTypesOut>} An observable emitting the customer types fetched from the server.
79
- */
80
- getCustomerTypes(params) {
81
- return this.http.get(`${this.url}/customer-types`, { params })
82
- .pipe(map(({ data }) => data));
83
- }
84
- /**
85
- * Retrieves document types specific to a given country.
86
- *
87
- * @param {QueryParams} params - The query parameters containing country-specific information.
88
- * @return {Observable<CustomerDocumentTypesOut>} An observable emitting the document types available for the specified country.
89
- */
90
- getCustomerDocumentTypes(params) {
91
- return this.http.get(`${this.url}/customer-country-document-types`, { params })
92
- .pipe(map(({ data }) => data));
93
- }
94
- /**
95
- * Fetches customer invoice details filtered by a custom invoice type.
96
- *
97
- * @param {InvoiceTypeCustomParamsIn} params - An object containing the filter parameters for the custom invoice type.
98
- * @return {Observable<CustomersOut>} An observable containing customer invoice details of the specified type.
99
- */
100
- getCustomers(params) {
101
- return this.http.get(`${this.url}/customers`, { params })
102
- .pipe(map(({ data }) => data));
103
- }
104
- /**
105
- * Sends a POST request to create or update an external shipment operation.
106
- *
107
- * @param {OperationShipmentExternalIn} params - The input parameters for the external shipment operation.
108
- * @return {Observable<OperationShipmentExternalOut>} An observable that emits the result of the external shipment operation.
109
- */
110
- postOperationShipmentExternal(params) {
111
- return this.http.post(`${this.url}/operation/shipment/external`, params)
112
- .pipe(map(({ data }) => data));
113
- }
114
- /**
115
- * Processes an external payment operation for a shipment.
116
- *
117
- * @param {OperationShipmentExternalIn} params - The input parameters required for the external payment operation.
118
- * @return {Observable<OperationShipmentExternalOut>} An observable that emits the result of the external payment operation for a shipment.
119
- */
120
- postOperationShipmentExternalPayment(params) {
121
- return this.http.post(`${this.url}/operation/shipment/external/payment`, params)
122
- .pipe(map(({ data }) => data));
123
- }
124
- /**
125
- * Retrieves and returns billing operation print details for a given document ID.
126
- *
127
- * @param {number} documentId - The ID of the document for which to fetch the print billing operation details.
128
- * @return {Observable<OperationPrintDocumentOut>} An observable emitting the print billing operation details for the specified document.
129
- */
130
- getOperationPrintDocument(documentId) {
131
- return this.http.get(`${this.url}/operation/print/document/${documentId}`)
132
- .pipe(map(({ data }) => data));
133
- }
134
- /**
135
- * Fetches all country payment types.
136
- *
137
- * @param {QueryParams} params - Query parameters to filter or customize the request.
138
- * @return {Observable<CountryPaymentTypesOut>} An observable emitting the country payment types fetched from the server.
139
- */
140
- getCountryPaymentTypes(params) {
141
- return this.http.get(`${this.url}/country-payment-types`, { params })
142
- .pipe(map(({ data }) => data));
143
- }
144
- /**
145
- * Updates an existing country payment type.
146
- *
147
- * @param {number} id - The ID of the country payment type to update.
148
- * @param {CountryPaymentTypeIn} body - The updated data for the country payment type.
149
- * @returns {Observable<CountryPaymentTypeOut>} An observable that emits the result of the update operation.
150
- */
151
- putCountryPaymentType(id, body) {
152
- return this.http.put(`${this.url}/country-payment-types/${id}`, body)
153
- .pipe(map(({ data }) => data));
154
- }
155
- /**
156
- * Delete an existing country payment type.
157
- *
158
- * @param {number} id - The unique identifier of the country payment type to be deleted.
159
- * @returns {Observable<CountryPaymentTypeOut>} An observable that emits the result of the delete operation.
160
- */
161
- deleteCountryPaymentType(id) {
162
- return this.http.delete(`${this.url}/country-payment-types/${id}`)
163
- .pipe(map(({ data }) => data));
164
- }
165
- /**
166
- * Create a new country payment type resource.
167
- *
168
- * @param {CountryPaymentTypeIn} body - The input parameters required for create a new country payment type.
169
- * @return {Observable<CountryPaymentTypeOut>} An observable that emits the result of create operation.
170
- */
171
- postCountryPaymentType(body) {
172
- return this.http.post(`${this.url}/country-payment-types`, body)
173
- .pipe(map(({ data }) => data));
174
- }
175
- /**
176
- * Retrieves and returns a country payment type for a given ID.
177
- *
178
- * @param {number} id - The ID of the country payment type.
179
- * @return {Observable<CountryPaymentTypeOut>} An observable that emits the result of show operation.
180
- */
181
- getCountryPaymentType(id) {
182
- return this.http.get(`${this.url}/country-payment-types/${id}`)
183
- .pipe(map(({ data }) => data));
184
- }
185
- /**
186
- * Fetches all country payment type fields.
187
- *
188
- * @param {QueryParams} params - Query parameters to filter or customize the request.
189
- * @return {Observable<CountryPaymentTypeFieldsOut>} An observable emitting the country payment type fields fetched from the server.
190
- */
191
- getCountryPaymentTypeFields(params) {
192
- return this.http.get(`${this.url}/country-payment-type-fields`, { params })
193
- .pipe(map(({ data }) => data));
194
- }
195
- /**
196
- * Create a new country payment type field resource.
197
- *
198
- * @param {CountryPaymentTypeFieldIn} body - The input parameters required for create a new country payment type field.
199
- * @return {Observable<CountryPaymentTypeFieldOut>} An observable that emits the result of create operation.
200
- */
201
- postCountryPaymentTypeField(body) {
202
- return this.http.post(`${this.url}/country-payment-type-fields`, body)
203
- .pipe(map(({ data }) => data));
204
- }
205
- /**
206
- * Updates an existing country payment type field.
207
- *
208
- * @param {number} id - The ID of the country payment type field to update.
209
- * @param {CountryPaymentTypeFieldIn} body - The updated data for the country payment type field.
210
- * @returns {Observable<CountryPaymentTypeFieldOut>} An observable that emits the result of the update operation.
211
- */
212
- putCountryPaymentTypeField(id, body) {
213
- return this.http.put(`${this.url}/country-payment-type-fields/${id}`, body)
214
- .pipe(map(({ data }) => data));
215
- }
216
- /**
217
- * Fetches all payment types.
218
- *
219
- * @param {QueryParams} params - Query parameters to filter or customize the request.
220
- * @return {Observable<PaymentTypesOut>} An observable emitting the payment types fetched from the server.
221
- */
222
- getPaymentTypes(params) {
223
- return this.http.get(`${this.url}/payment-types`, { params })
224
- .pipe(map(({ data }) => data));
225
- }
226
- /**
227
- * Fetches all payment type fields card.
228
- *
229
- * @param {QueryParams} params - Query parameters to filter or customize the request.
230
- * @return {Observable<PaymentTypeFieldCardTypesOut>} An observable emitting the payment type fields card fetched from the server.
231
- */
232
- getPaymentTypeFieldCardTypes(params) {
233
- return this.http.get(`${this.url}/payment-type-field-card-types`, { params })
234
- .pipe(map(({ data }) => data));
235
- }
236
- /**
237
- * Create a new payment type field card resource.
238
- *
239
- * @param {PaymentTypeFieldCardTypeIn} body - The input parameters required for create a new payment type field card.
240
- * @return {Observable<PaymentTypeFieldCardTypeOut>} An observable that emits the result of create operation.
241
- */
242
- postCountryPaymentTypeFieldCardType(body) {
243
- return this.http.post(`${this.url}/payment-type-field-card-types`, body)
244
- .pipe(map(({ data }) => data));
245
- }
246
- /**
247
- * Updates an existing payment type field card.
248
- *
249
- * @param {number} id - The ID of the payment type field card to update.
250
- * @param {PaymentTypeFieldCardTypeIn} body - The updated data for the payment type field card.
251
- * @returns {Observable<PaymentTypeFieldCardTypeOut>} An observable that emits the result of the update operation.
252
- */
253
- putCountryPaymentTypeFieldCardType(id, body) {
254
- return this.http.put(`${this.url}/payment-type-field-card-types/${id}`, body)
255
- .pipe(map(({ data }) => data));
256
- }
257
- /**
258
- * Fetches all payment type fields accounts.
259
- *
260
- * @param {QueryParams} params - Query parameters to filter or customize the request.
261
- * @return {Observable<PaymentTypeFieldAccountsOut>} An observable emitting the payment type fields accounts fetched from the server.
262
- */
263
- getPaymentTypeFieldAccounts(params) {
264
- return this.http.get(`${this.url}/payment-type-field-accounts`, { params })
265
- .pipe(map(({ data }) => data));
266
- }
267
- /**
268
- * Create a new payment type field account resource.
269
- *
270
- * @param {PaymentTypeFieldAccountIn} body - The input parameters required for create a new payment type field account.
271
- * @return {Observable<PaymentTypeFieldAccountOut>} An observable that emits the result of create operation.
272
- */
273
- postCountryPaymentTypeFieldAccount(body) {
274
- return this.http.post(`${this.url}/payment-type-field-accounts`, body)
275
- .pipe(map(({ data }) => data));
276
- }
277
- /**
278
- * Updates an existing payment type field account.
279
- *
280
- * @param {number} id - The ID of the payment type field account to update.
281
- * @param {PaymentTypeFieldAccountIn} body - The updated data for the payment type field account.
282
- * @returns {Observable<PaymentTypeFieldAccountOut>} An observable that emits the result of the update operation.
283
- */
284
- putCountryPaymentTypeFieldAccount(id, body) {
285
- return this.http.put(`${this.url}/payment-type-field-accounts/${id}`, body)
286
- .pipe(map(({ data }) => data));
287
- }
288
- /**
289
- * Fetches tolerance data from the server based on the provided query parameters.
290
- *
291
- * @param {QueryParams} params - The parameters to use for querying tolerances.
292
- * @return {Observable<TolerancesOut>} An observable emitting the tolerance data.
293
- */
294
- getTolerances(params) {
295
- return this.http.get(`${this.url}/tolerances`, { params })
296
- .pipe(map(({ data }) => data));
297
- }
298
- /**
299
- * Retrieves the tolerance detail for a given identifier.
300
- *
301
- * @param {number} id - The unique identifier for the tolerance to retrieve.
302
- * @return {Observable<ToleranceOut>} An observable containing the tolerance data.
303
- */
304
- getTolerance(id) {
305
- return this.http.get(`${this.url}/tolerances/${id}`)
306
- .pipe(map(({ data }) => data));
307
- }
308
- /**
309
- * Sends a request to update or create a tolerance record using the provided data.
310
- *
311
- * @param {ToleranceIn} body - The tolerance input object containing the data to be sent in the request.
312
- * @return {Observable<ToleranceOut>} An observable that emits the updated or created tolerance output object.
313
- */
314
- postTolerance(body) {
315
- return this.http.post(`${this.url}/tolerances`, body)
316
- .pipe(map(({ data }) => data));
317
- }
318
- /**
319
- * Updates the tolerance with the specified ID using the provided data.
320
- *
321
- * @param {number} id - The unique identifier of the tolerance to update.
322
- * @param {ToleranceIn} body - The data to update the tolerance with.
323
- * @return {Observable<ToleranceOut>} An observable containing the updated tolerance information.
324
- */
325
- putTolerance(id, body) {
326
- return this.http.put(`${this.url}/tolerances/${id}`, body)
327
- .pipe(map(({ data }) => data));
328
- }
329
- /**
330
- * Deletes the tolerance entry corresponding to the given ID.
331
- *
332
- * @param {number} id - The unique identifier of the tolerance to be deleted.
333
- * @return {Observable<{}>} An Observable that emits the result of the delete operation.
334
- */
335
- deleteTolerance(id) {
336
- return this.http.delete(`${this.url}/tolerances/${id}`)
337
- .pipe(map(({ data }) => data));
338
- }
339
- /**
340
- * Retrieves the document requests associated with a document ID.
341
- *
342
- * @param id - The unique identifier for the document.
343
- * @returns An observable that emits the document requests data.
344
- */
345
- getOperationDocumentRequests(id) {
346
- return this.http.get(`${this.url}/operation/document/requests/${id}`)
347
- .pipe(map(({ data }) => data));
348
- }
349
- /**
350
- * Retrieves a list of documents based on the provided query parameters.
351
- *
352
- * @param params - The query parameters to filter and paginate the documents
353
- * @returns An Observable that emits the documents data when the HTTP request completes
354
- */
355
- getDocuments(params) {
356
- return this.http.get(`${this.url}/documents`, { params })
357
- .pipe(map(({ data }) => data));
358
- }
359
- /**
360
- * Fetches document status values from the API.
361
- *
362
- * Sends an HTTP GET request to the service's `/document-status` endpoint using the supplied query parameters
363
- * and returns the decoded `data` payload from the API success envelope.
364
- *
365
- * @param params - Query parameters to apply to the request (e.g. filtering, pagination, search).
366
- * @returns An Observable that emits a DocumentStatusesOut object containing the document status data.
367
- */
368
- getDocumentStatuses(params) {
369
- return this.http.get(`${this.url}/document-status`, { params })
370
- .pipe(map(({ data }) => data));
371
- }
372
- /**
373
- * Retrieves the XML print representation for a given operation (invoice).
374
- *
375
- * Sends an HTTP GET request to the backend endpoint `/operation/print/xml/{documentId}` and
376
- * unwraps the `data` field from the API success response before emitting it.
377
- *
378
- * @param documentId - The numeric identifier of the document to fetch.
379
- * @returns An Observable that emits the OperationPrintXmlOut payload on success and completes.
380
- * The Observable will error if the HTTP request fails or the response does not contain the expected data.
381
- */
382
- getOperationPrintXml(documentId) {
383
- return this.http.get(`${this.url}/operation/print/xml/${documentId}`)
384
- .pipe(map(({ data }) => data));
385
- }
386
- /**
387
- * Retrieves a list of providers based on the provided query parameters.
388
- * @param params - Query parameters to filter or paginate the providers list
389
- * @returns An Observable that emits the providers data
390
- */
391
- getProviders(params) {
392
- return this.http.get(`${this.url}/providers`, { params })
393
- .pipe(map(({ data }) => data));
394
- }
395
- /**
396
- * Retrieves the document type ranges based on the provided query parameters.
397
- * @param params - The query parameters to filter document type ranges
398
- * @returns An Observable that emits the document type ranges data
399
- */
400
- getDocumentsTypesRanges(params) {
401
- return this.http.get(`${this.url}/document-type-ranges`, { params })
402
- .pipe(map(({ data }) => data));
403
- }
404
- /**
405
- * Creates a new document type range.
406
- * @param body - The document type range data to create
407
- * @returns An observable that emits the created document type range
408
- */
409
- postDocumentTypeRange(body) {
410
- return this.http.post(`${this.url}/document-type-ranges`, body)
411
- .pipe(map(({ data }) => data));
412
- }
413
- /**
414
- * Deletes a document type range by its identifier.
415
- * @param id - The unique identifier of the document type range to delete
416
- * @returns An Observable that emits the deleted DocumentTypeRangeOut object
417
- */
418
- deleteDocumentsTypesRange(id) {
419
- return this.http.delete(`${this.url}/document-type-ranges/${id}`)
420
- .pipe(map(({ data }) => data));
421
- }
422
- /**
423
- * Updates a document type range for a given ID.
424
- * @param id - The unique identifier of the document type range to update
425
- * @param data - The document type range data to update
426
- * @returns An Observable that emits the updated DocumentTypeRangeOut object
427
- */
428
- putDocumentsTypeRange(id, data) {
429
- return this.http.put(`${this.url}/document-type-ranges/${id}`, data)
430
- .pipe(map(({ data }) => data));
431
- }
432
- /**
433
- * Retrieves the list of document types available for a specific country.
434
- * @param params - Query parameters to filter or customize the country document types request
435
- * @returns Observable containing the country document types data
436
- */
437
- getCountryDocumentsTypes(params) {
438
- return this.http.get(`${this.url}/country-document-types`, { params })
439
- .pipe(map(({ data }) => data));
440
- }
441
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, deps: [{ token: 'env' }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
442
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, providedIn: 'root' });
443
- }
444
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, decorators: [{
445
- type: Injectable,
446
- args: [{
447
- providedIn: 'root'
448
- }]
449
- }], ctorParameters: () => [{ type: undefined, decorators: [{
450
- type: Inject,
451
- args: ['env']
452
- }] }, { type: i1.HttpClient }] });
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWludm9pY2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcnRlYW0tbXgvbmd4LXNlcnZpY2VzL3NyYy9saWIvYXBpcy9hcGktaW52b2ljZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFBOzs7QUFnRHRDLE1BQU0sT0FBTyxrQkFBa0I7SUFFSjtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUE7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUUsSUFBeUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBbUMsR0FBRyxJQUFJLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxJQUFJLENBQUM7YUFDNUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQXlCLENBQUUsRUFBVTtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QyxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxFQUFFLEVBQUUsQ0FBQzthQUNoSCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFD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QUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxxQkFBcUIsQ0FBRSxFQUFVLEVBQUUsSUFBeUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBbUMsR0FBRyxJQUFJLENBQUMsR0FBRyx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO2FBQ25HLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQUUsTUFBbUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBc0MsR0FBRyxJQUFJLENBQUMsR0FBRyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQ3hHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7d0dBM2RVLGtCQUFrQixrQkFFbkIsS0FBSzs0R0FGSixrQkFBa0IsY0FGakIsTUFBTTs7NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBR0ksTUFBTTsyQkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL25neC1zZXJ2aWNlcy5tb2RlbHMnXHJcbmltcG9ydCB7XHJcbiAgQ2FuY2VsUGF5bWVudFJlY2VpcHRJbixcclxuICBDb3VudHJ5RG9jdW1lbnRUeXBlc091dCxcclxuICBDb3VudHJ5UGF5bWVudFR5cGVGaWVsZEluLFxyXG4gIENvdW50cnlQYXltZW50VHlwZUZpZWxkT3V0LFxyXG4gIENvdW50cnlQYXltZW50VHlwZUZpZWxkc091dCxcclxuICBDb3VudHJ5UGF5bWVudFR5cGVJbixcclxuICBDb3VudHJ5UGF5bWVudFR5cGVPdXQsXHJcbiAgQ291bnRyeVBheW1lbnRUeXBlc091dCxcclxuICBDdXN0b21lckRvY3VtZW50VHlwZXNPdXQsXHJcbiAgQ3VzdG9tZXJzT3V0LFxyXG4gIEN1c3RvbWVyVHlwZXNPdXQsXHJcbiAgRG9jdW1lbnRTdGF0dXNlc091dCxcclxuICBEb2N1bWVudFR5cGVSYW5nZUluLFxyXG4gIERvY3VtZW50VHlwZVJhbmdlT3V0LFxyXG4gIERvY3VtZW50VHlwZVJhbmdlc091dCxcclxuICBHZXREb2N1bWVudHNPdXQsXHJcbiAgT3BlcmF0aW9uQWNjb3VudFBheW1lbnRJbixcclxuICBPcGVyYXRpb25BY2NvdW50UGF5bWVudE91dCxcclxuICBPcGVyYXRpb25DYW5jZWxCaWxsaW5nSW4sXHJcbiAgT3BlcmF0aW9uQ2FuY2VsQmlsbGluZ091dCxcclxuICBPcGVyYXRpb25Eb2N1bWVudEluLFxyXG4gIE9wZXJhdGlvbkRvY3VtZW50T3V0LFxyXG4gIE9wZXJhdGlvbkRvY3VtZW50UmVxdWVzdHNPdXQsXHJcbiAgT3BlcmF0aW9uUHJpbnREb2N1bWVudE91dCxcclxuICBPcGVyYXRpb25QcmludFhtbE91dCxcclxuICBPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsSW4sXHJcbiAgT3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dCxcclxuICBQYXltZW50VHlwZUZpZWxkQWNjb3VudEluLFxyXG4gIFBheW1lbnRUeXBlRmllbGRBY2NvdW50T3V0LFxyXG4gIFBheW1lbnRUeXBlRmllbGRBY2NvdW50c091dCxcclxuICBQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVJbixcclxuICBQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVPdXQsXHJcbiAgUGF5bWVudFR5cGVGaWVsZENhcmRUeXBlc091dCxcclxuICBQYXltZW50VHlwZXNPdXQsXHJcbiAgUHJpbnRDb2xsZWN0aW9uUmVjZWlwdE91dCxcclxuICBQcm92aWRlcnNPdXQsXHJcbiAgVG9sZXJhbmNlSW4sXHJcbiAgVG9sZXJhbmNlT3V0LFxyXG4gIFRvbGVyYW5jZXNPdXQsXHJcbn0gZnJvbSAnLi9tb2RlbHMvYXBpLWludm9pY2VzLnR5cGVzJ1xyXG5pbXBvcnQgeyBBcGlTdWNjZXNzLCBRdWVyeVBhcmFtcyB9IGZyb20gJy4vbW9kZWxzL2FwaS5tb2RlbHMnXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcGlJbnZvaWNlc1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yIChcclxuICAgIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52aXJvbm1lbnRzOiBFbnZpcm9ubWVudCxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgQVBJIFVSTCBmb3IgaW52b2ljZXMgZnJvbSB0aGUgZW52aXJvbm1lbnRzIGNvbmZpZ3VyYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBBUEkgVVJMIGZvciBpbnZvaWNlcy5cclxuICAgKi9cclxuICBnZXQgdXJsICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnRzLmFwaUludm9pY2VzVXJsID8/ICcnXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhbiBvcGVyYXRpb24gZG9jdW1lbnQgdG8gdGhlIHNlcnZlciBhbmQgcHJvY2Vzc2VzIHRoZSByZXNwb25zZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uRG9jdW1lbnRJbn0gYm9keSAtIFRoZSBpbnB1dCBkYXRhIGZvciB0aGUgb3BlcmF0aW9uIGRvY3VtZW50LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3BlcmF0aW9uRG9jdW1lbnRPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NlZCBvcGVyYXRpb24gZG9jdW1lbnQgb3V0cHV0LlxyXG4gICAqL1xyXG4gIHBvc3RPcGVyYXRpb25Eb2N1bWVudCAoYm9keTogT3BlcmF0aW9uRG9jdW1lbnRJbik6IE9ic2VydmFibGU8T3BlcmF0aW9uRG9jdW1lbnRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPE9wZXJhdGlvbkRvY3VtZW50T3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9kb2N1bWVudGAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiByZWNlaXB0IGRhdGEgZm9yIGEgZ2l2ZW4gY29sbGVjdGlvbiBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29sbGVjdGlvbiBmb3Igd2hpY2ggdGhlIHJlY2VpcHQgbmVlZHMgdG8gYmUgcmV0cmlldmVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UHJpbnRDb2xsZWN0aW9uUmVjZWlwdE91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgY29sbGVjdGlvbiByZWNlaXB0IGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0UHJpbnRDb2xsZWN0aW9uUmVjZWlwdCAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8UHJpbnRDb2xsZWN0aW9uUmVjZWlwdE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQcmludENvbGxlY3Rpb25SZWNlaXB0T3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9wcmludC9jb2xsZWN0aW9uLXJlY2VpcHQvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGFjY291bnQgcGF5bWVudCBvcGVyYXRpb24gYnkgc2VuZGluZyBhIFBPU1QgcmVxdWVzdCB0byB0aGUgc3BlY2lmaWVkIGVuZHBvaW50LlxyXG4gICAqIFByb2Nlc3NlcyB0aGUgcmVzcG9uc2UgYW5kIHJldHVybnMgdGhlIG9wZXJhdGlvbiBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPcGVyYXRpb25BY2NvdW50UGF5bWVudElufSBib2R5IFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBhY2NvdW50IHBheW1lbnQgb3BlcmF0aW9uLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3BlcmF0aW9uQWNjb3VudFBheW1lbnRPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBwcm9jZXNzZWQgYWNjb3VudCBwYXltZW50IG9wZXJhdGlvbiBkYXRhLlxyXG4gICAqL1xyXG4gIHBvc3RPcGVyYXRpb25BY2NvdW50UGF5bWVudCAoYm9keTogT3BlcmF0aW9uQWNjb3VudFBheW1lbnRJbik6IE9ic2VydmFibGU8T3BlcmF0aW9uQWNjb3VudFBheW1lbnRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPE9wZXJhdGlvbkFjY291bnRQYXltZW50T3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9hY2NvdW50LXBheW1lbnRgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgYSBwYXltZW50IHJlY2VpcHQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0LlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNhbmNlbCBhIGRvY3VtZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJvZHkgVGhlIGRhdGEgcmVxdWlyZWQgdG8gY2FuY2VsIHRoZSBwYXltZW50IHJlY2VpcHQsIGVuY2Fwc3VsYXRlZCBpbiBhIENhbmNlbFBheW1lbnRSZWNlaXB0SW4gb2JqZWN0LlxyXG4gICAqIEByZXR1cm4gQW4gT2JzZXJ2YWJsZSByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FuY2VsbGF0aW9uLiBFbWl0cyBhbiBlbXB0eSBvYmplY3Qgb24gc3VjY2Vzcy5cclxuICAgKi9cclxuICBwb3N0T3BlcmF0aW9uQ2FuY2VsRG9jdW1lbnQgKGJvZHk6IENhbmNlbFBheW1lbnRSZWNlaXB0SW4pOiBPYnNlcnZhYmxlPHt9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vY2FuY2VsLWRvY3VtZW50YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjYW5jZWwgYmlsbGluZyBmb3IgYSBzcGVjaWZpYyBvcGVyYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjYW5jZWxsYXRpb24gcmVxdWVzdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmludm9pY2VJZCAtIFRoZSBJRCBvZiB0aGUgaW52b2ljZSB0byBiZSBjYW5jZWxlZC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zLmJvZHkgLSBBZGRpdGlvbmFsIGRhdGEgdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdCBib2R5LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3BlcmF0aW9uQ2FuY2VsQmlsbGluZ091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FuY2VsbGF0aW9uIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwb3N0T3BlcmF0aW9uQ2FuY2VsQmlsbGluZyAoeyBpbnZvaWNlSWQsIC4uLmJvZHkgfTogT3BlcmF0aW9uQ2FuY2VsQmlsbGluZ0luKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25DYW5jZWxCaWxsaW5nT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxPcGVyYXRpb25DYW5jZWxCaWxsaW5nT3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9jYW5jZWwtYmlsbGluZy8ke2ludm9pY2VJZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYSBsaXN0IG9mIGN1c3RvbWVyIHR5cGVzIGZyb20gdGhlIHNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIGN1c3RvbWl6ZSB0aGUgcmVxdWVzdC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEN1c3RvbWVyVHlwZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBjdXN0b21lciB0eXBlcyBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRDdXN0b21lclR5cGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDdXN0b21lclR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEN1c3RvbWVyVHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vY3VzdG9tZXItdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBkb2N1bWVudCB0eXBlcyBzcGVjaWZpYyB0byBhIGdpdmVuIGNvdW50cnkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyBjb250YWluaW5nIGNvdW50cnktc3BlY2lmaWMgaW5mb3JtYXRpb24uXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDdXN0b21lckRvY3VtZW50VHlwZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBkb2N1bWVudCB0eXBlcyBhdmFpbGFibGUgZm9yIHRoZSBzcGVjaWZpZWQgY291bnRyeS5cclxuICAgKi9cclxuICBnZXRDdXN0b21lckRvY3VtZW50VHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEN1c3RvbWVyRG9jdW1lbnRUeXBlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDdXN0b21lckRvY3VtZW50VHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vY3VzdG9tZXItY291bnRyeS1kb2N1bWVudC10eXBlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBjdXN0b21lciBpbnZvaWNlIGRldGFpbHMgZmlsdGVyZWQgYnkgYSBjdXN0b20gaW52b2ljZSB0eXBlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtJbnZvaWNlVHlwZUN1c3RvbVBhcmFtc0lufSBwYXJhbXMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRoZSBjdXN0b20gaW52b2ljZSB0eXBlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3VzdG9tZXJzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIGN1c3RvbWVyIGludm9pY2UgZGV0YWlscyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXHJcbiAgICovXHJcbiAgZ2V0Q3VzdG9tZXJzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDdXN0b21lcnNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q3VzdG9tZXJzT3V0Pj4oYCR7dGhpcy51cmx9L2N1c3RvbWVyc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhbiBleHRlcm5hbCBzaGlwbWVudCBvcGVyYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxJbn0gcGFyYW1zIC0gVGhlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSBleHRlcm5hbCBzaGlwbWVudCBvcGVyYXRpb24uXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgdGhlIGV4dGVybmFsIHNoaXBtZW50IG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwb3N0T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbCAocGFyYW1zOiBPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsSW4pOiBPYnNlcnZhYmxlPE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxPdXQ+PihgJHt0aGlzLnVybH0vb3BlcmF0aW9uL3NoaXBtZW50L2V4dGVybmFsYCwgcGFyYW1zKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3NlcyBhbiBleHRlcm5hbCBwYXltZW50IG9wZXJhdGlvbiBmb3IgYSBzaGlwbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbElufSBwYXJhbXMgLSBUaGUgaW5wdXQgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgdGhlIGV4dGVybmFsIHBheW1lbnQgb3BlcmF0aW9uLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBleHRlcm5hbCBwYXltZW50IG9wZXJhdGlvbiBmb3IgYSBzaGlwbWVudC5cclxuICAgKi9cclxuICBwb3N0T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbFBheW1lbnQgKHBhcmFtczogT3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbEluKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9zaGlwbWVudC9leHRlcm5hbC9wYXltZW50YCwgcGFyYW1zKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhbmQgcmV0dXJucyBiaWxsaW5nIG9wZXJhdGlvbiBwcmludCBkZXRhaWxzIGZvciBhIGdpdmVuIGRvY3VtZW50IElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRvY3VtZW50SWQgLSBUaGUgSUQgb2YgdGhlIGRvY3VtZW50IGZvciB3aGljaCB0byBmZXRjaCB0aGUgcHJpbnQgYmlsbGluZyBvcGVyYXRpb24gZGV0YWlscy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9wZXJhdGlvblByaW50RG9jdW1lbnRPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBwcmludCBiaWxsaW5nIG9wZXJhdGlvbiBkZXRhaWxzIGZvciB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LlxyXG4gICAqL1xyXG4gIGdldE9wZXJhdGlvblByaW50RG9jdW1lbnQgKGRvY3VtZW50SWQ6IG51bWJlcik6IE9ic2VydmFibGU8T3BlcmF0aW9uUHJpbnREb2N1bWVudE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxPcGVyYXRpb25QcmludERvY3VtZW50T3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9wcmludC9kb2N1bWVudC8ke2RvY3VtZW50SWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFsbCBjb3VudHJ5IHBheW1lbnQgdHlwZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBjdXN0b21pemUgdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY291bnRyeSBwYXltZW50IHR5cGVzIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAqL1xyXG4gIGdldENvdW50cnlQYXltZW50VHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeVBheW1lbnRUeXBlc091dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXBheW1lbnQtdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgY291bnRyeSBwYXltZW50IHR5cGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIGNvdW50cnkgcGF5bWVudCB0eXBlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge0NvdW50cnlQYXltZW50VHlwZUlufSBib2R5IC0gVGhlIHVwZGF0ZWQgZGF0YSBmb3IgdGhlIGNvdW50cnkgcGF5bWVudCB0eXBlLlxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSB1cGRhdGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHB1dENvdW50cnlQYXltZW50VHlwZSAoaWQ6IG51bWJlciwgYm9keTogQ291bnRyeVBheW1lbnRUeXBlSW4pOiBPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1wYXltZW50LXR5cGVzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYW4gZXhpc3RpbmcgY291bnRyeSBwYXltZW50IHR5cGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgcGF5bWVudCB0eXBlIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgdGhlIGRlbGV0ZSBvcGVyYXRpb24uXHJcbiAgICovXHJcbiAgZGVsZXRlQ291bnRyeVBheW1lbnRUeXBlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8Q291bnRyeVBheW1lbnRUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcGF5bWVudC10eXBlcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IGNvdW50cnkgcGF5bWVudCB0eXBlIHJlc291cmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDb3VudHJ5UGF5bWVudFR5cGVJbn0gYm9keSAtIFRoZSBpbnB1dCBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBjcmVhdGUgYSBuZXcgY291bnRyeSBwYXltZW50IHR5cGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiBjcmVhdGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHBvc3RDb3VudHJ5UGF5bWVudFR5cGUgKGJvZHk6IENvdW50cnlQYXltZW50VHlwZUluKTogT2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvdW50cnlQYXltZW50VHlwZU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXBheW1lbnQtdHlwZXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhbmQgcmV0dXJucyBhIGNvdW50cnkgcGF5bWVudCB0eXBlIGZvciBhIGdpdmVuIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSBjb3VudHJ5IHBheW1lbnQgdHlwZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHNob3cgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIGdldENvdW50cnlQYXltZW50VHlwZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvdW50cnlQYXltZW50VHlwZU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXBheW1lbnQtdHlwZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYWxsIGNvdW50cnkgcGF5bWVudCB0eXBlIGZpZWxkcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIGN1c3RvbWl6ZSB0aGUgcmVxdWVzdC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZUZpZWxkc091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGNvdW50cnkgcGF5bWVudCB0eXBlIGZpZWxkcyBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5UGF5bWVudFR5cGVGaWVsZHMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZUZpZWxkc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJ5UGF5bWVudFR5cGVGaWVsZHNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1wYXltZW50LXR5cGUtZmllbGRzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgY291bnRyeSBwYXltZW50IHR5cGUgZmllbGQgcmVzb3VyY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NvdW50cnlQYXltZW50VHlwZUZpZWxkSW59IGJvZHkgLSBUaGUgaW5wdXQgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgY3JlYXRlIGEgbmV3IGNvdW50cnkgcGF5bWVudCB0eXBlIGZpZWxkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlRmllbGRPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiBjcmVhdGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHBvc3RDb3VudHJ5UGF5bWVudFR5cGVGaWVsZCAoYm9keTogQ291bnRyeVBheW1lbnRUeXBlRmllbGRJbik6IE9ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlRmllbGRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvdW50cnlQYXltZW50VHlwZUZpZWxkT3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcGF5bWVudC10eXBlLWZpZWxkc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBjb3VudHJ5IHBheW1lbnQgdHlwZSBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgY291bnRyeSBwYXltZW50IHR5cGUgZmllbGQgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeVBheW1lbnRUeXBlRmllbGRJbn0gYm9keSAtIFRoZSB1cGRhdGVkIGRhdGEgZm9yIHRoZSBjb3VudHJ5IHBheW1lbnQgdHlwZSBmaWVsZC5cclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVGaWVsZE91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSB1cGRhdGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHB1dENvdW50cnlQYXltZW50VHlwZUZpZWxkIChpZDogbnVtYmVyLCBib2R5OiBDb3VudHJ5UGF5bWVudFR5cGVGaWVsZEluKTogT2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVGaWVsZE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxDb3VudHJ5UGF5bWVudFR5cGVGaWVsZE91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXBheW1lbnQtdHlwZS1maWVsZHMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYWxsIHBheW1lbnQgdHlwZXMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBjdXN0b21pemUgdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXltZW50VHlwZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBwYXltZW50IHR5cGVzIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAqL1xyXG4gIGdldFBheW1lbnRUeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UGF5bWVudFR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFBheW1lbnRUeXBlc091dD4+KGAke3RoaXMudXJsfS9wYXltZW50LXR5cGVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFsbCBwYXltZW50IHR5cGUgZmllbGRzIGNhcmQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBjdXN0b21pemUgdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcGF5bWVudCB0eXBlIGZpZWxkcyBjYXJkIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAqL1xyXG4gIGdldFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlc091dD4+KGAke3RoaXMudXJsfS9wYXltZW50LXR5cGUtZmllbGQtY2FyZC10eXBlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IHBheW1lbnQgdHlwZSBmaWVsZCBjYXJkIHJlc291cmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVJbn0gYm9keSAtIFRoZSBpbnB1dCBwYXJhbWV0ZXJzIHJlcXVpcmVkIGZvciBjcmVhdGUgYSBuZXcgcGF5bWVudCB0eXBlIGZpZWxkIGNhcmQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiBjcmVhdGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHBvc3RDb3VudHJ5UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlIChib2R5OiBQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVJbik6IE9ic2VydmFibGU8UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVPdXQ+PihgJHt0aGlzLnVybH0vcGF5bWVudC10eXBlLWZpZWxkLWNhcmQtdHlwZXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgcGF5bWVudCB0eXBlIGZpZWxkIGNhcmQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHBheW1lbnQgdHlwZSBmaWVsZCBjYXJkIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge1BheW1lbnRUeXBlRmllbGRDYXJkVHlwZUlufSBib2R5IC0gVGhlIHVwZGF0ZWQgZGF0YSBmb3IgdGhlIHBheW1lbnQgdHlwZSBmaWVsZCBjYXJkLlxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSB1cGRhdGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHB1dENvdW50cnlQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGUgKGlkOiBudW1iZXIsIGJvZHk6IFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZUluKTogT2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L3BheW1lbnQtdHlwZS1maWVsZC1jYXJkLXR5cGVzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFsbCBwYXltZW50IHR5cGUgZmllbGRzIGFjY291bnRzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gUXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgb3IgY3VzdG9taXplIHRoZSByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGF5bWVudFR5cGVGaWVsZEFjY291bnRzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcGF5bWVudCB0eXBlIGZpZWxkcyBhY2NvdW50cyBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRQYXltZW50VHlwZUZpZWxkQWNjb3VudHMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRBY2NvdW50c091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQYXltZW50VHlwZUZpZWxkQWNjb3VudHNPdXQ+PihgJHt0aGlzLnVybH0vcGF5bWVudC10eXBlLWZpZWxkLWFjY291bnRzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBuZXcgcGF5bWVudCB0eXBlIGZpZWxkIGFjY291bnQgcmVzb3VyY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1BheW1lbnRUeXBlRmllbGRBY2NvdW50SW59IGJvZHkgLSBUaGUgaW5wdXQgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgY3JlYXRlIGEgbmV3IHBheW1lbnQgdHlwZSBmaWVsZCBhY2NvdW50LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGF5bWVudFR5cGVGaWVsZEFjY291bnRPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiBjcmVhdGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHBvc3RDb3VudHJ5UGF5bWVudFR5cGVGaWVsZEFjY291bnQgKGJvZHk6IFBheW1lbnRUeXBlRmllbGRBY2NvdW50SW4pOiBPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRBY2NvdW50T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxQYXltZW50VHlwZUZpZWxkQWNjb3VudE91dD4+KGAke3RoaXMudXJsfS9wYXltZW50LXR5cGUtZmllbGQtYWNjb3VudHNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgcGF5bWVudCB0eXBlIGZpZWxkIGFjY291bnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHBheW1lbnQgdHlwZSBmaWVsZCBhY2NvdW50IHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge1BheW1lbnRUeXBlRmllbGRBY2NvdW50SW59IGJvZHkgLSBUaGUgdXBkYXRlZCBkYXRhIGZvciB0aGUgcGF5bWVudCB0eXBlIGZpZWxkIGFjY291bnQuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8UGF5bWVudFR5cGVGaWVsZEFjY291bnRPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwdXRDb3VudHJ5UGF5bWVudFR5cGVGaWVsZEFjY291bnQgKGlkOiBudW1iZXIsIGJvZHk6IFBheW1lbnRUeXBlRmllbGRBY2NvdW50SW4pOiBPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRBY2NvdW50T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFBheW1lbnRUeXBlRmllbGRBY2NvdW50T3V0Pj4oYCR7dGhpcy51cmx9L3BheW1lbnQtdHlwZS1maWVsZC1hY2NvdW50cy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0b2xlcmFuY2UgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHF1ZXJ5aW5nIHRvbGVyYW5jZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxUb2xlcmFuY2VzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgdG9sZXJhbmNlIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0VG9sZXJhbmNlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8VG9sZXJhbmNlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxUb2xlcmFuY2VzT3V0Pj4oYCR7dGhpcy51cmx9L3RvbGVyYW5jZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgdG9sZXJhbmNlIGRldGFpbCBmb3IgYSBnaXZlbiBpZGVudGlmaWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdG9sZXJhbmNlIHRvIHJldHJpZXZlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VG9sZXJhbmNlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB0b2xlcmFuY2UgZGF0YS5cclxuICAgKi9cclxuICBnZXRUb2xlcmFuY2UgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFRvbGVyYW5jZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxUb2xlcmFuY2VPdXQ+PihgJHt0aGlzLnVybH0vdG9sZXJhbmNlcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSByZXF1ZXN0IHRvIHVwZGF0ZSBvciBjcmVhdGUgYSB0b2xlcmFuY2UgcmVjb3JkIHVzaW5nIHRoZSBwcm92aWRlZCBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtUb2xlcmFuY2VJbn0gYm9keSAtIFRoZSB0b2xlcmFuY2UgaW5wdXQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRvbGVyYW5jZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBvciBjcmVhdGVkIHRvbGVyYW5jZSBvdXRwdXQgb2JqZWN0LlxyXG4gICAqL1xyXG4gIHBvc3RUb2xlcmFuY2UgKGJvZHk6IFRvbGVyYW5jZUluKTogT2JzZXJ2YWJsZTxUb2xlcmFuY2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFRvbGVyYW5jZU91dD4+KGAke3RoaXMudXJsfS90b2xlcmFuY2VzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSB0b2xlcmFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIElEIHVzaW5nIHRoZSBwcm92aWRlZCBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSB0b2xlcmFuY2UgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7VG9sZXJhbmNlSW59IGJvZHkgLSBUaGUgZGF0YSB0byB1cGRhdGUgdGhlIHRvbGVyYW5jZSB3aXRoLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VG9sZXJhbmNlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB1cGRhdGVkIHRvbGVyYW5jZSBpbmZvcm1hdGlvbi5cclxuICAgKi9cclxuICBwdXRUb2xlcmFuY2UgKGlkOiBudW1iZXIsIGJvZHk6IFRvbGVyYW5jZUluKTogT2JzZXJ2YWJsZTxUb2xlcmFuY2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8VG9sZXJhbmNlT3V0Pj4oYCR7dGhpcy51cmx9L3RvbGVyYW5jZXMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgdGhlIHRvbGVyYW5jZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgdG9sZXJhbmNlIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTx7fT59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkZWxldGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVRvbGVyYW5jZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vdG9sZXJhbmNlcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBkb2N1bWVudCByZXF1ZXN0cyBhc3NvY2lhdGVkIHdpdGggYSBkb2N1bWVudCBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGRvY3VtZW50LlxyXG4gICAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZG9jdW1lbnQgcmVxdWVzdHMgZGF0YS5cclxuICAgKi9cclxuICBnZXRPcGVyYXRpb25Eb2N1bWVudFJlcXVlc3RzIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25Eb2N1bWVudFJlcXVlc3RzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPE9wZXJhdGlvbkRvY3VtZW50UmVxdWVzdHNPdXQ+PihgJHt0aGlzLnVybH0vb3BlcmF0aW9uL2RvY3VtZW50L3JlcXVlc3RzLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGRvY3VtZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgYW5kIHBhZ2luYXRlIHRoZSBkb2N1bWVudHNcclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGRvY3VtZW50cyBkYXRhIHdoZW4gdGhlIEhUVFAgcmVxdWVzdCBjb21wbGV0ZXNcclxuICAgKi9cclxuICBnZXREb2N1bWVudHMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEdldERvY3VtZW50c091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxHZXREb2N1bWVudHNPdXQ+PihgJHt0aGlzLnVybH0vZG9jdW1lbnRzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGRvY3VtZW50IHN0YXR1cyB2YWx1ZXMgZnJvbSB0aGUgQVBJLlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBHRVQgcmVxdWVzdCB0byB0aGUgc2VydmljZSdzIGAvZG9jdW1lbnQtc3RhdHVzYCBlbmRwb2ludCB1c2luZyB0aGUgc3VwcGxpZWQgcXVlcnkgcGFyYW1ldGVyc1xyXG4gICAqIGFuZCByZXR1cm5zIHRoZSBkZWNvZGVkIGBkYXRhYCBwYXlsb2FkIGZyb20gdGhlIEFQSSBzdWNjZXNzIGVudmVsb3BlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QgKGUuZy4gZmlsdGVyaW5nLCBwYWdpbmF0aW9uLCBzZWFyY2gpLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhIERvY3VtZW50U3RhdHVzZXNPdXQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRvY3VtZW50IHN0YXR1cyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldERvY3VtZW50U3RhdHVzZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPERvY3VtZW50U3RhdHVzZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8RG9jdW1lbnRTdGF0dXNlc091dD4+KGAke3RoaXMudXJsfS9kb2N1bWVudC1zdGF0dXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgWE1MIHByaW50IHJlcHJlc2VudGF0aW9uIGZvciBhIGdpdmVuIG9wZXJhdGlvbiAoaW52b2ljZSkuXHJcbiAgICpcclxuICAgKiBTZW5kcyBhbiBIVFRQIEdFVCByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kIGVuZHBvaW50IGAvb3BlcmF0aW9uL3ByaW50L3htbC97ZG9jdW1lbnRJZH1gIGFuZFxyXG4gICAqIHVud3JhcHMgdGhlIGBkYXRhYCBmaWVsZCBmcm9tIHRoZSBBUEkgc3VjY2VzcyByZXNwb25zZSBiZWZvcmUgZW1pdHRpbmcgaXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCAtIFRoZSBudW1lcmljIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50IHRvIGZldGNoLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgT3BlcmF0aW9uUHJpbnRYbWxPdXQgcGF5bG9hZCBvbiBzdWNjZXNzIGFuZCBjb21wbGV0ZXMuXHJcbiAgICogICAgICAgICAgVGhlIE9ic2VydmFibGUgd2lsbCBlcnJvciBpZiB0aGUgSFRUUCByZXF1ZXN0IGZhaWxzIG9yIHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIHRoZSBleHBlY3RlZCBkYXRhLlxyXG4gICAqL1xyXG4gIGdldE9wZXJhdGlvblByaW50WG1sIChkb2N1bWVudElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblByaW50WG1sT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPE9wZXJhdGlvblByaW50WG1sT3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9wcmludC94bWwvJHtkb2N1bWVudElkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBwcm92aWRlcnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIHBhZ2luYXRlIHRoZSBwcm92aWRlcnMgbGlzdFxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcHJvdmlkZXJzIGRhdGFcclxuICAgKi9cclxuICBnZXRQcm92aWRlcnMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFByb3ZpZGVyc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQcm92aWRlcnNPdXQ+PihgJHt0aGlzLnVybH0vcHJvdmlkZXJzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGRvY3VtZW50IHR5cGUgcmFuZ2VzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgZG9jdW1lbnQgdHlwZSByYW5nZXNcclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGRvY3VtZW50IHR5cGUgcmFuZ2VzIGRhdGFcclxuICAgKi9cclxuICBnZXREb2N1bWVudHNUeXBlc1JhbmdlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RG9jdW1lbnRUeXBlUmFuZ2VzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPERvY3VtZW50VHlwZVJhbmdlc091dD4+KGAke3RoaXMudXJsfS9kb2N1bWVudC10eXBlLXJhbmdlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIG5ldyBkb2N1bWVudCB0eXBlIHJhbmdlLlxyXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGRvY3VtZW50IHR5cGUgcmFuZ2UgZGF0YSB0byBjcmVhdGVcclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgdHlwZSByYW5nZVxyXG4gICAqL1xyXG4gIHBvc3REb2N1bWVudFR5cGVSYW5nZSAoYm9keTogRG9jdW1lbnRUeXBlUmFuZ2VJbik6IE9ic2VydmFibGU8RG9jdW1lbnRUeXBlUmFuZ2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPERvY3VtZW50VHlwZVJhbmdlT3V0Pj4oYCR7dGhpcy51cmx9L2RvY3VtZW50LXR5cGUtcmFuZ2VzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgZG9jdW1lbnQgdHlwZSByYW5nZSBieSBpdHMgaWRlbnRpZmllci5cclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50IHR5cGUgcmFuZ2UgdG8gZGVsZXRlXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBkZWxldGVkIERvY3VtZW50VHlwZVJhbmdlT3V0IG9iamVjdFxyXG4gICAqL1xyXG4gIGRlbGV0ZURvY3VtZW50c1R5cGVzUmFuZ2UgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHt9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPHt9Pj4oYCR7dGhpcy51cmx9L2RvY3VtZW50LXR5cGUtcmFuZ2VzLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGEgZG9jdW1lbnQgdHlwZSByYW5nZSBmb3IgYSBnaXZlbiBJRC5cclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGRvY3VtZW50IHR5cGUgcmFuZ2UgdG8gdXBkYXRlXHJcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgZG9jdW1lbnQgdHlwZSByYW5nZSBkYXRhIHRvIHVwZGF0ZVxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBEb2N1bWVudFR5cGVSYW5nZU91dCBvYmplY3RcclxuICAgKi9cclxuICBwdXREb2N1bWVudHNUeXBlUmFuZ2UgKGlkOiBudW1iZXIsIGRhdGE6IERvY3VtZW50VHlwZVJhbmdlSW4pOiBPYnNlcnZhYmxlPERvY3VtZW50VHlwZVJhbmdlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPERvY3VtZW50VHlwZVJhbmdlT3V0Pj4oYCR7dGhpcy51cmx9L2RvY3VtZW50LXR5cGUtcmFuZ2VzLyR7aWR9YCwgZGF0YSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgZG9jdW1lbnQgdHlwZXMgYXZhaWxhYmxlIGZvciBhIHNwZWNpZmljIGNvdW50cnkuXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIGN1c3RvbWl6ZSB0aGUgY291bnRyeSBkb2N1bWVudCB0eXBlcyByZXF1ZXN0XHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBjb3VudHJ5IGRvY3VtZW50IHR5cGVzIGRhdGFcclxuICAgKi9cclxuICBnZXRDb3VudHJ5RG9jdW1lbnRzVHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvdW50cnlEb2N1bWVudFR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvdW50cnlEb2N1bWVudFR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktZG9jdW1lbnQtdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcbn1cclxuIl19