angular-odata 0.127.0 → 0.128.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/esm2022/lib/annotations.mjs +140 -0
  2. package/esm2022/lib/api.mjs +209 -164
  3. package/esm2022/lib/cache/cache.mjs +1 -1
  4. package/esm2022/lib/cache/memory.mjs +1 -1
  5. package/esm2022/lib/client.mjs +4 -44
  6. package/esm2022/lib/constants.mjs +4 -1
  7. package/esm2022/lib/index.mjs +3 -1
  8. package/esm2022/lib/loaders.mjs +23 -17
  9. package/esm2022/lib/metadata/csdl/csdl-annotation.mjs +95 -0
  10. package/esm2022/lib/metadata/csdl/csdl-entity-container.mjs +27 -0
  11. package/esm2022/lib/metadata/csdl/csdl-entity-set.mjs +24 -0
  12. package/esm2022/lib/metadata/csdl/csdl-enum-type.mjs +37 -0
  13. package/esm2022/lib/metadata/csdl/csdl-function-action.mjs +94 -0
  14. package/esm2022/lib/metadata/csdl/csdl-navigation-property-binding.mjs +7 -0
  15. package/esm2022/lib/metadata/csdl/csdl-reference.mjs +23 -0
  16. package/esm2022/lib/metadata/csdl/csdl-schema.mjs +39 -0
  17. package/esm2022/lib/metadata/csdl/csdl-singleton.mjs +15 -0
  18. package/esm2022/lib/metadata/csdl/csdl-structural-property.mjs +70 -0
  19. package/esm2022/lib/metadata/csdl/csdl-structured-type.mjs +92 -0
  20. package/esm2022/lib/metadata/csdl/csdl-type-definition.mjs +15 -0
  21. package/esm2022/lib/metadata/index.mjs +3 -0
  22. package/esm2022/lib/metadata/metadata.mjs +14 -0
  23. package/esm2022/lib/metadata/parser.mjs +563 -0
  24. package/esm2022/lib/models/collection.mjs +98 -140
  25. package/esm2022/lib/models/model.mjs +38 -45
  26. package/esm2022/lib/models/options.mjs +127 -117
  27. package/esm2022/lib/module.mjs +3 -3
  28. package/esm2022/lib/resources/index.mjs +2 -2
  29. package/esm2022/lib/resources/options.mjs +56 -0
  30. package/esm2022/lib/resources/path/handlers.mjs +14 -4
  31. package/esm2022/lib/resources/path/segments.mjs +6 -4
  32. package/esm2022/lib/resources/query/builder.mjs +5 -5
  33. package/esm2022/lib/resources/query/expressions/apply.mjs +81 -14
  34. package/esm2022/lib/resources/query/expressions/base.mjs +1 -1
  35. package/esm2022/lib/resources/query/expressions/compute.mjs +1 -1
  36. package/esm2022/lib/resources/query/expressions/count.mjs +1 -1
  37. package/esm2022/lib/resources/query/expressions/expand.mjs +1 -1
  38. package/esm2022/lib/resources/query/expressions/filter.mjs +1 -1
  39. package/esm2022/lib/resources/query/expressions/orderby.mjs +2 -2
  40. package/esm2022/lib/resources/query/expressions/search.mjs +1 -1
  41. package/esm2022/lib/resources/query/expressions/select.mjs +5 -1
  42. package/esm2022/lib/resources/query/expressions/syntax.mjs +18 -7
  43. package/esm2022/lib/resources/query/handlers.mjs +1 -1
  44. package/esm2022/lib/resources/query/options.mjs +1 -1
  45. package/esm2022/lib/resources/request.mjs +5 -5
  46. package/esm2022/lib/resources/resource.mjs +107 -82
  47. package/esm2022/lib/resources/response.mjs +174 -0
  48. package/esm2022/lib/resources/types/action.mjs +29 -26
  49. package/esm2022/lib/resources/types/batch.mjs +1 -1
  50. package/esm2022/lib/resources/types/count.mjs +7 -7
  51. package/esm2022/lib/resources/types/entity-set.mjs +37 -24
  52. package/esm2022/lib/resources/types/entity.mjs +14 -11
  53. package/esm2022/lib/resources/types/function.mjs +25 -28
  54. package/esm2022/lib/resources/types/metadata.mjs +9 -5
  55. package/esm2022/lib/resources/types/navigation-property.mjs +36 -30
  56. package/esm2022/lib/resources/types/property.mjs +31 -49
  57. package/esm2022/lib/resources/types/reference.mjs +3 -4
  58. package/esm2022/lib/resources/types/singleton.mjs +11 -7
  59. package/esm2022/lib/resources/types/value.mjs +16 -12
  60. package/esm2022/lib/schema/callable.mjs +10 -10
  61. package/esm2022/lib/schema/element.mjs +15 -9
  62. package/esm2022/lib/schema/entity-container.mjs +4 -2
  63. package/esm2022/lib/schema/enum-type.mjs +6 -7
  64. package/esm2022/lib/schema/index.mjs +2 -1
  65. package/esm2022/lib/schema/parsers/callable.mjs +10 -7
  66. package/esm2022/lib/schema/parsers/edm.mjs +6 -4
  67. package/esm2022/lib/schema/parsers/enum-type.mjs +10 -10
  68. package/esm2022/lib/schema/parsers/structured-type.mjs +19 -19
  69. package/esm2022/lib/schema/schema.mjs +18 -34
  70. package/esm2022/lib/schema/singleton.mjs +9 -0
  71. package/esm2022/lib/schema/structured-type.mjs +18 -23
  72. package/esm2022/lib/services/base.mjs +1 -1
  73. package/esm2022/lib/services/entity-set.mjs +12 -2
  74. package/esm2022/lib/services/entity.mjs +2 -2
  75. package/esm2022/lib/services/factory.mjs +18 -7
  76. package/esm2022/lib/services/singleton.mjs +8 -2
  77. package/esm2022/lib/settings.mjs +7 -99
  78. package/esm2022/lib/types.mjs +1 -1
  79. package/esm2022/lib/utils/http.mjs +1 -1
  80. package/fesm2022/angular-odata.mjs +2286 -1951
  81. package/fesm2022/angular-odata.mjs.map +1 -1
  82. package/lib/{resources/responses/annotations.d.ts → annotations.d.ts} +2 -2
  83. package/lib/api.d.ts +29 -26
  84. package/lib/cache/memory.d.ts +1 -1
  85. package/lib/client.d.ts +0 -20
  86. package/lib/constants.d.ts +3 -0
  87. package/lib/index.d.ts +1 -0
  88. package/lib/loaders.d.ts +7 -1
  89. package/lib/metadata/csdl/csdl-annotation.d.ts +123 -0
  90. package/lib/metadata/csdl/csdl-entity-container.d.ts +26 -0
  91. package/lib/metadata/csdl/csdl-entity-set.d.ts +20 -0
  92. package/lib/metadata/csdl/csdl-enum-type.d.ts +29 -0
  93. package/lib/metadata/csdl/csdl-function-action.d.ts +105 -0
  94. package/lib/metadata/csdl/csdl-navigation-property-binding.d.ts +8 -0
  95. package/lib/metadata/csdl/csdl-reference.d.ts +30 -0
  96. package/lib/metadata/csdl/csdl-schema.d.ts +34 -0
  97. package/lib/metadata/csdl/csdl-singleton.d.ts +16 -0
  98. package/lib/metadata/csdl/csdl-structural-property.d.ts +70 -0
  99. package/lib/metadata/csdl/csdl-structured-type.d.ts +73 -0
  100. package/lib/metadata/csdl/csdl-type-definition.d.ts +22 -0
  101. package/lib/metadata/index.d.ts +2 -0
  102. package/lib/metadata/metadata.d.ts +10 -0
  103. package/lib/{resources/responses/metadata.d.ts → metadata/parser.d.ts} +19 -7
  104. package/lib/models/collection.d.ts +4 -3
  105. package/lib/models/model.d.ts +15 -23
  106. package/lib/models/options.d.ts +37 -23
  107. package/lib/resources/index.d.ts +1 -1
  108. package/lib/resources/{responses/options.d.ts → options.d.ts} +2 -2
  109. package/lib/resources/path/handlers.d.ts +4 -2
  110. package/lib/resources/path/segments.d.ts +3 -1
  111. package/lib/resources/query/expressions/apply.d.ts +37 -15
  112. package/lib/resources/query/expressions/base.d.ts +1 -1
  113. package/lib/resources/query/expressions/compute.d.ts +2 -2
  114. package/lib/resources/query/expressions/count.d.ts +1 -1
  115. package/lib/resources/query/expressions/expand.d.ts +1 -1
  116. package/lib/resources/query/expressions/filter.d.ts +1 -1
  117. package/lib/resources/query/expressions/orderby.d.ts +5 -4
  118. package/lib/resources/query/expressions/search.d.ts +1 -1
  119. package/lib/resources/query/expressions/select.d.ts +2 -1
  120. package/lib/resources/query/expressions/syntax.d.ts +6 -3
  121. package/lib/resources/resource.d.ts +27 -15
  122. package/lib/resources/{responses/response.d.ts → response.d.ts} +17 -5
  123. package/lib/resources/types/action.d.ts +12 -10
  124. package/lib/resources/types/batch.d.ts +3 -2
  125. package/lib/resources/types/count.d.ts +1 -5
  126. package/lib/resources/types/entity-set.d.ts +13 -6
  127. package/lib/resources/types/entity.d.ts +3 -4
  128. package/lib/resources/types/function.d.ts +11 -11
  129. package/lib/resources/types/metadata.d.ts +1 -1
  130. package/lib/resources/types/navigation-property.d.ts +13 -7
  131. package/lib/resources/types/property.d.ts +15 -8
  132. package/lib/resources/types/reference.d.ts +2 -4
  133. package/lib/resources/types/singleton.d.ts +4 -6
  134. package/lib/resources/types/value.d.ts +2 -6
  135. package/lib/schema/callable.d.ts +5 -7
  136. package/lib/schema/element.d.ts +11 -4
  137. package/lib/schema/entity-container.d.ts +2 -0
  138. package/lib/schema/enum-type.d.ts +4 -7
  139. package/lib/schema/index.d.ts +1 -0
  140. package/lib/schema/parsers/callable.d.ts +7 -8
  141. package/lib/schema/parsers/enum-type.d.ts +2 -4
  142. package/lib/schema/parsers/structured-type.d.ts +6 -8
  143. package/lib/schema/schema.d.ts +6 -9
  144. package/lib/schema/singleton.d.ts +10 -0
  145. package/lib/schema/structured-type.d.ts +5 -8
  146. package/lib/services/entity-set.d.ts +7 -3
  147. package/lib/services/factory.d.ts +14 -2
  148. package/lib/services/singleton.d.ts +4 -2
  149. package/lib/settings.d.ts +0 -10
  150. package/lib/types.d.ts +12 -3
  151. package/package.json +5 -1
  152. package/schematics/apigen/angular/api-config.d.ts +15 -0
  153. package/schematics/apigen/angular/api-config.js +34 -0
  154. package/schematics/apigen/angular/api-config.js.map +1 -0
  155. package/schematics/apigen/angular/base.d.ts +51 -0
  156. package/schematics/apigen/angular/base.js +200 -0
  157. package/schematics/apigen/angular/base.js.map +1 -0
  158. package/schematics/apigen/angular/entity.d.ts +24 -0
  159. package/schematics/apigen/angular/entity.js +71 -0
  160. package/schematics/apigen/angular/entity.js.map +1 -0
  161. package/schematics/apigen/angular/enum.d.ts +25 -0
  162. package/schematics/apigen/angular/enum.js +56 -0
  163. package/schematics/apigen/angular/enum.js.map +1 -0
  164. package/schematics/apigen/angular/import.d.ts +6 -0
  165. package/schematics/apigen/angular/import.js +18 -0
  166. package/schematics/apigen/angular/import.js.map +1 -0
  167. package/schematics/apigen/angular/module.d.ts +18 -0
  168. package/schematics/apigen/angular/module.js +41 -0
  169. package/schematics/apigen/angular/module.js.map +1 -0
  170. package/schematics/apigen/angular/service.d.ts +20 -0
  171. package/schematics/apigen/angular/service.js +76 -0
  172. package/schematics/apigen/angular/service.js.map +1 -0
  173. package/schematics/apigen/files/api-config/__fileName__.ts +9 -0
  174. package/schematics/apigen/files/entity/__fileName__.ts +7 -0
  175. package/schematics/apigen/files/entitycontainer-service/__fileName__.ts +18 -0
  176. package/schematics/apigen/files/entityset-service/__fileName__.ts +27 -0
  177. package/schematics/apigen/files/enum/__fileName__.ts +4 -0
  178. package/schematics/apigen/files/index/__fileName__.ts +2 -0
  179. package/schematics/apigen/files/module/__fileName__.ts +9 -0
  180. package/schematics/apigen/files/singleton-service/__fileName__.ts +18 -0
  181. package/schematics/apigen/index.d.ts +3 -0
  182. package/schematics/apigen/index.js +106 -0
  183. package/schematics/apigen/index.js.map +1 -0
  184. package/schematics/apigen/metadata/csdl/csdl-annotation.d.ts +120 -0
  185. package/schematics/apigen/metadata/csdl/csdl-annotation.js +98 -0
  186. package/schematics/apigen/metadata/csdl/csdl-annotation.js.map +1 -0
  187. package/schematics/apigen/metadata/csdl/csdl-entity-container.d.ts +26 -0
  188. package/schematics/apigen/metadata/csdl/csdl-entity-container.js +30 -0
  189. package/schematics/apigen/metadata/csdl/csdl-entity-container.js.map +1 -0
  190. package/schematics/apigen/metadata/csdl/csdl-entity-set.d.ts +20 -0
  191. package/schematics/apigen/metadata/csdl/csdl-entity-set.js +26 -0
  192. package/schematics/apigen/metadata/csdl/csdl-entity-set.js.map +1 -0
  193. package/schematics/apigen/metadata/csdl/csdl-enum-type.d.ts +28 -0
  194. package/schematics/apigen/metadata/csdl/csdl-enum-type.js +33 -0
  195. package/schematics/apigen/metadata/csdl/csdl-enum-type.js.map +1 -0
  196. package/schematics/apigen/metadata/csdl/csdl-function-action.d.ts +103 -0
  197. package/schematics/apigen/metadata/csdl/csdl-function-action.js +84 -0
  198. package/schematics/apigen/metadata/csdl/csdl-function-action.js.map +1 -0
  199. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.d.ts +8 -0
  200. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js +11 -0
  201. package/schematics/apigen/metadata/csdl/csdl-navigation-property-binding.js.map +1 -0
  202. package/schematics/apigen/metadata/csdl/csdl-reference.d.ts +30 -0
  203. package/schematics/apigen/metadata/csdl/csdl-reference.js +29 -0
  204. package/schematics/apigen/metadata/csdl/csdl-reference.js.map +1 -0
  205. package/schematics/apigen/metadata/csdl/csdl-schema.d.ts +32 -0
  206. package/schematics/apigen/metadata/csdl/csdl-schema.js +26 -0
  207. package/schematics/apigen/metadata/csdl/csdl-schema.js.map +1 -0
  208. package/schematics/apigen/metadata/csdl/csdl-singleton.d.ts +18 -0
  209. package/schematics/apigen/metadata/csdl/csdl-singleton.js +25 -0
  210. package/schematics/apigen/metadata/csdl/csdl-singleton.js.map +1 -0
  211. package/schematics/apigen/metadata/csdl/csdl-structural-property.d.ts +63 -0
  212. package/schematics/apigen/metadata/csdl/csdl-structural-property.js +50 -0
  213. package/schematics/apigen/metadata/csdl/csdl-structural-property.js.map +1 -0
  214. package/schematics/apigen/metadata/csdl/csdl-structured-type.d.ts +64 -0
  215. package/schematics/apigen/metadata/csdl/csdl-structured-type.js +71 -0
  216. package/schematics/apigen/metadata/csdl/csdl-structured-type.js.map +1 -0
  217. package/schematics/apigen/metadata/csdl/csdl-type-definition.d.ts +22 -0
  218. package/schematics/apigen/metadata/csdl/csdl-type-definition.js +19 -0
  219. package/schematics/apigen/metadata/csdl/csdl-type-definition.js.map +1 -0
  220. package/schematics/apigen/metadata/index.d.ts +1 -0
  221. package/schematics/apigen/metadata/index.js +18 -0
  222. package/schematics/apigen/metadata/index.js.map +1 -0
  223. package/schematics/apigen/metadata/metadata.d.ts +11 -0
  224. package/schematics/apigen/metadata/metadata.js +30 -0
  225. package/schematics/apigen/metadata/metadata.js.map +1 -0
  226. package/schematics/apigen/metadata/parser.d.ts +110 -0
  227. package/schematics/apigen/metadata/parser.js +568 -0
  228. package/schematics/apigen/metadata/parser.js.map +1 -0
  229. package/schematics/apigen/schema.d.ts +8 -0
  230. package/schematics/apigen/schema.js +3 -0
  231. package/schematics/apigen/schema.js.map +1 -0
  232. package/schematics/apigen/schema.json +36 -0
  233. package/schematics/apigen/utils.d.ts +1 -0
  234. package/schematics/apigen/utils.js +75 -0
  235. package/schematics/apigen/utils.js.map +1 -0
  236. package/schematics/collection.json +14 -0
  237. package/schematics/ng-add/index.d.ts +2 -0
  238. package/schematics/ng-add/index.js +13 -0
  239. package/schematics/ng-add/index.js.map +1 -0
  240. package/schematics/random.d.ts +1 -0
  241. package/schematics/random.js +604 -0
  242. package/schematics/random.js.map +1 -0
  243. package/esm2022/lib/resources/responses/annotations.mjs +0 -140
  244. package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
  245. package/esm2022/lib/resources/responses/csdl/csdl-entity-container.mjs +0 -11
  246. package/esm2022/lib/resources/responses/csdl/csdl-entity-set.mjs +0 -9
  247. package/esm2022/lib/resources/responses/csdl/csdl-enum-type.mjs +0 -15
  248. package/esm2022/lib/resources/responses/csdl/csdl-function-action.mjs +0 -56
  249. package/esm2022/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +0 -7
  250. package/esm2022/lib/resources/responses/csdl/csdl-reference.mjs +0 -23
  251. package/esm2022/lib/resources/responses/csdl/csdl-schema.mjs +0 -18
  252. package/esm2022/lib/resources/responses/csdl/csdl-singleton.mjs +0 -8
  253. package/esm2022/lib/resources/responses/csdl/csdl-structural-property.mjs +0 -39
  254. package/esm2022/lib/resources/responses/csdl/csdl-structured-type.mjs +0 -34
  255. package/esm2022/lib/resources/responses/csdl/csdl-type-definition.mjs +0 -14
  256. package/esm2022/lib/resources/responses/index.mjs +0 -5
  257. package/esm2022/lib/resources/responses/metadata.mjs +0 -547
  258. package/esm2022/lib/resources/responses/options.mjs +0 -56
  259. package/esm2022/lib/resources/responses/response.mjs +0 -174
  260. package/esm2022/lib/resources/responses/types.mjs +0 -2
  261. package/lib/resources/responses/csdl/csdl-annotation.d.ts +0 -27
  262. package/lib/resources/responses/csdl/csdl-entity-container.d.ts +0 -12
  263. package/lib/resources/responses/csdl/csdl-entity-set.d.ts +0 -8
  264. package/lib/resources/responses/csdl/csdl-enum-type.d.ts +0 -12
  265. package/lib/resources/responses/csdl/csdl-function-action.d.ts +0 -49
  266. package/lib/resources/responses/csdl/csdl-navigation-property-binding.d.ts +0 -5
  267. package/lib/resources/responses/csdl/csdl-reference.d.ts +0 -18
  268. package/lib/resources/responses/csdl/csdl-schema.d.ts +0 -20
  269. package/lib/resources/responses/csdl/csdl-singleton.d.ts +0 -7
  270. package/lib/resources/responses/csdl/csdl-structural-property.d.ts +0 -31
  271. package/lib/resources/responses/csdl/csdl-structured-type.d.ts +0 -27
  272. package/lib/resources/responses/csdl/csdl-type-definition.d.ts +0 -11
  273. package/lib/resources/responses/index.d.ts +0 -4
  274. package/lib/resources/responses/types.d.ts +0 -13
@@ -1,6 +1,6 @@
1
1
  import { EMPTY, throwError } from 'rxjs';
2
2
  import { expand, map, reduce } from 'rxjs/operators';
3
- import { PathSegment, QueryOption } from '../../types';
3
+ import { PathSegment, } from '../../types';
4
4
  import { ODataResource } from '../resource';
5
5
  import { ODataCountResource } from './count';
6
6
  import { ODataMediaResource } from './media';
@@ -13,31 +13,25 @@ import { ODataReferenceResource } from './reference';
13
13
  */
14
14
  export class ODataNavigationPropertyResource extends ODataResource {
15
15
  //#region Factory
16
- static factory(api, { path, type, schema, segments, query, }) {
16
+ static factory(api, { path, type, segments, }) {
17
17
  const segment = segments.add(PathSegment.navigationProperty, path);
18
- if (schema !== undefined)
19
- segment.type(schema.type());
20
- else if (type !== undefined)
21
- segment.type(type);
22
- query?.keep(QueryOption.format);
18
+ if (type !== undefined) {
19
+ segment.outgoingType(type);
20
+ segment.incomingType(type);
21
+ }
23
22
  return new ODataNavigationPropertyResource(api, {
24
23
  segments,
25
- query,
26
- schema,
27
24
  });
28
25
  }
29
26
  static fromResource(resource, path) {
30
- const baseType = resource.type();
31
- let baseSchema = resource.schema;
27
+ const baseType = resource.outgoingType();
28
+ let baseSchema = baseType !== undefined
29
+ ? resource.api.structuredType(baseType)
30
+ : undefined;
32
31
  let fieldType;
33
- let fieldSchema;
34
32
  if (baseSchema !== undefined) {
35
33
  const field = baseSchema.field(path);
36
34
  fieldType = field?.type;
37
- fieldSchema =
38
- fieldType !== undefined
39
- ? resource.api.findStructuredTypeForType(fieldType)
40
- : undefined;
41
35
  baseSchema =
42
36
  field !== undefined
43
37
  ? baseSchema.findParentSchemaForField(field)
@@ -46,13 +40,11 @@ export class ODataNavigationPropertyResource extends ODataResource {
46
40
  const navigation = ODataNavigationPropertyResource.factory(resource.api, {
47
41
  path,
48
42
  type: fieldType,
49
- schema: fieldSchema,
50
43
  segments: resource.cloneSegments(),
51
- query: resource.cloneQuery(),
52
44
  });
53
45
  // Switch entitySet to binding type if available
54
46
  if (baseSchema !== undefined && baseSchema.type() !== baseType) {
55
- let entitySet = resource.api.findEntitySetForType(baseSchema.type());
47
+ let entitySet = resource.api.findEntitySet(baseSchema.type());
56
48
  if (entitySet !== undefined) {
57
49
  navigation.segment((s) => s.entitySet().path(entitySet.name));
58
50
  }
@@ -62,6 +54,12 @@ export class ODataNavigationPropertyResource extends ODataResource {
62
54
  clone() {
63
55
  return super.clone();
64
56
  }
57
+ transform(opts, { type, fields, } = {}) {
58
+ return super.transform(opts, {
59
+ type,
60
+ fields,
61
+ });
62
+ }
65
63
  //#endregion
66
64
  key(value) {
67
65
  const navigation = this.clone();
@@ -73,7 +71,7 @@ export class ODataNavigationPropertyResource extends ODataResource {
73
71
  keys(values) {
74
72
  const navigation = this.clone();
75
73
  const types = this.pathSegments.types({ key: true });
76
- const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredTypeForType(types[index])));
74
+ const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredType(types[index])));
77
75
  navigation.segment((s) => s.keys(keys));
78
76
  return navigation;
79
77
  }
@@ -96,23 +94,22 @@ export class ODataNavigationPropertyResource extends ODataResource {
96
94
  }
97
95
  count() {
98
96
  return ODataCountResource.factory(this.api, {
99
- schema: this.schema,
100
97
  segments: this.cloneSegments(),
101
98
  query: this.cloneQuery(),
102
99
  });
103
100
  }
104
101
  cast(type) {
105
- const baseSchema = this.schema;
106
- const castSchema = this.api.findStructuredTypeForType(type);
102
+ const thisType = this.incomingType();
103
+ const baseSchema = thisType !== undefined ? this.api.structuredType(thisType) : undefined;
104
+ const castSchema = this.api.findStructuredType(type);
107
105
  if (castSchema !== undefined &&
108
106
  baseSchema !== undefined &&
109
107
  !castSchema.isSubtypeOf(baseSchema))
110
108
  throw new Error(`Cannot cast to ${type}`);
111
109
  const segments = this.cloneSegments();
112
- segments.add(PathSegment.type, type).type(type);
110
+ segments.add(PathSegment.type, type).incomingType(type);
113
111
  return new ODataNavigationPropertyResource(this.api, {
114
112
  segments,
115
- schema: castSchema,
116
113
  query: this.cloneQuery(),
117
114
  });
118
115
  }
@@ -188,7 +185,9 @@ export class ODataNavigationPropertyResource extends ODataResource {
188
185
  * @returns The model
189
186
  */
190
187
  fetchModel(options = {}) {
191
- return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots }) : null));
188
+ return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity, annots }) => entity
189
+ ? this.asModel(entity, { annots, ModelType: options?.ModelType })
190
+ : null));
192
191
  }
193
192
  /**
194
193
  * Fetch entities
@@ -204,7 +203,12 @@ export class ODataNavigationPropertyResource extends ODataResource {
204
203
  * @returns The collection
205
204
  */
206
205
  fetchCollection(options = {}) {
207
- return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => entities ? this.asCollection(entities, { annots }) : null));
206
+ return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => entities
207
+ ? this.asCollection(entities, {
208
+ annots,
209
+ CollectionType: options?.CollectionType,
210
+ })
211
+ : null));
208
212
  }
209
213
  /**
210
214
  * Fetch all entities
@@ -241,10 +245,12 @@ export class ODataNavigationPropertyResource extends ODataResource {
241
245
  })));
242
246
  }
243
247
  fetchOne(options) {
244
- return this.fetchMany(1, options).pipe(map(({ entities, annots }) => ({
245
- entity: entities.length === 1 ? entities[0] : null,
248
+ const res = this.clone();
249
+ res.query((q) => q.top(1));
250
+ return res.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => ({
251
+ entity: entities !== null && entities.length === 1 ? entities[0] : null,
246
252
  annots,
247
253
  })));
248
254
  }
249
255
  }
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1wcm9wZXJ0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvdHlwZXMvbmF2aWdhdGlvbi1wcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBTTVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFNN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLCtCQUFtQyxTQUFRLGFBQWdCO0lBQ3RFLGlCQUFpQjtJQUNqQixNQUFNLENBQUMsT0FBTyxDQUNaLEdBQWEsRUFDYixFQUNFLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEdBT047UUFFRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxJQUFJLE1BQU0sS0FBSyxTQUFTO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNqRCxJQUFJLElBQUksS0FBSyxTQUFTO1lB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LEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUNyRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1NBQ2pDLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUNOLE9BR0M7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDcEMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEQsTUFBTTtTQUNQLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZXhwYW5kLCBtYXAsIHJlZHVjZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7IE9EYXRhQ29sbGVjdGlvbiwgT0RhdGFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBPRGF0YVN0cnVjdHVyZWRUeXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hJztcbmltcG9ydCB7IFBhdGhTZWdtZW50LCBRdWVyeU9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0aWVzLFxuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5LFxufSBmcm9tICcuLi9yZXNwb25zZXMnO1xuaW1wb3J0IHsgT0RhdGFDb3VudFJlc291cmNlIH0gZnJvbSAnLi9jb3VudCc7XG5pbXBvcnQgeyBPRGF0YU1lZGlhUmVzb3VyY2UgfSBmcm9tICcuL21lZGlhJztcbmltcG9ydCB7XG4gIE9EYXRhRW50aXRpZXNPcHRpb25zLFxuICBPRGF0YUVudGl0eU9wdGlvbnMsXG4gIE9EYXRhT3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IE9EYXRhUHJvcGVydHlSZXNvdXJjZSB9IGZyb20gJy4vcHJvcGVydHknO1xuaW1wb3J0IHsgT0RhdGFSZWZlcmVuY2VSZXNvdXJjZSB9IGZyb20gJy4vcmVmZXJlbmNlJztcblxuLyoqXG4gKiBPRGF0YSBOYXZpZ2F0aW9uIFByb3BlcnR5IFJlc291cmNlXG4gKiBodHRwczovL3d3dy5vZGF0YS5vcmcvZ2V0dGluZy1zdGFydGVkL2FkdmFuY2VkLXR1dG9yaWFsLyNjb250YWlubWVudFxuICogaHR0cHM6Ly93d3cub2RhdGEub3JnL2dldHRpbmctc3RhcnRlZC9hZHZhbmNlZC10dXRvcmlhbC8jZGVyaXZlZFxuICovXG5leHBvcnQgY2xhc3MgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPiBleHRlbmRzIE9EYXRhUmVzb3VyY2U8VD4ge1xuICAvLyNyZWdpb24gRmFjdG9yeVxuICBzdGF0aWMgZmFjdG9yeTxOPihcbiAgICBhcGk6IE9EYXRhQXBpLFxuICAgIHtcbiAgICAgIHBhdGgsXG4gICAgICB0eXBlLFxuICAgICAgc2NoZW1hLFxuICAgICAgc2VnbWVudHMsXG4gICAgICBxdWVyeSxcbiAgICB9OiB7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICB0eXBlPzogc3RyaW5nO1xuICAgICAgc2NoZW1hPzogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxOPjtcbiAgICAgIHNlZ21lbnRzOiBPRGF0YVBhdGhTZWdtZW50cztcbiAgICAgIHF1ZXJ5PzogT0RhdGFRdWVyeU9wdGlvbnM8Tj47XG4gICAgfVxuICApIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHMuYWRkKFBhdGhTZWdtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0eSwgcGF0aCk7XG4gICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUoc2NoZW1hLnR5cGUoKSk7XG4gICAgZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUodHlwZSk7XG4gICAgcXVlcnk/LmtlZXAoUXVlcnlPcHRpb24uZm9ybWF0KTtcbiAgICByZXR1cm4gbmV3IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Tj4oYXBpLCB7XG4gICAgICBzZWdtZW50cyxcbiAgICAgIHF1ZXJ5LFxuICAgICAgc2NoZW1hLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21SZXNvdXJjZTxOPihyZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxhbnk+LCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBiYXNlVHlwZSA9IHJlc291cmNlLnR5cGUoKTtcbiAgICBsZXQgYmFzZVNjaGVtYSA9IHJlc291cmNlLnNjaGVtYSBhcyBPRGF0YVN0cnVjdHVyZWRUeXBlPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpZWxkVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBmaWVsZFNjaGVtYTogT0RhdGFTdHJ1Y3R1cmVkVHlwZTxOPiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoYmFzZVNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGJhc2VTY2hlbWEuZmllbGQ8Tj4ocGF0aCk7XG4gICAgICBmaWVsZFR5cGUgPSBmaWVsZD8udHlwZTtcbiAgICAgIGZpZWxkU2NoZW1hID1cbiAgICAgICAgZmllbGRUeXBlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHJlc291cmNlLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlKGZpZWxkVHlwZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGJhc2VTY2hlbWEgPVxuICAgICAgICBmaWVsZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyBiYXNlU2NoZW1hLmZpbmRQYXJlbnRTY2hlbWFGb3JGaWVsZDxOPihmaWVsZClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZS5mYWN0b3J5PE4+KFxuICAgICAgcmVzb3VyY2UuYXBpLFxuICAgICAge1xuICAgICAgICBwYXRoLFxuICAgICAgICB0eXBlOiBmaWVsZFR5cGUsXG4gICAgICAgIHNjaGVtYTogZmllbGRTY2hlbWEsXG4gICAgICAgIHNlZ21lbnRzOiByZXNvdXJjZS5jbG9uZVNlZ21lbnRzKCksXG4gICAgICAgIHF1ZXJ5OiByZXNvdXJjZS5jbG9uZVF1ZXJ5PE4+KCksXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIFN3aXRjaCBlbnRpdHlTZXQgdG8gYmluZGluZyB0eXBlIGlmIGF2YWlsYWJsZVxuICAgIGlmIChiYXNlU2NoZW1hICE9PSB1bmRlZmluZWQgJiYgYmFzZVNjaGVtYS50eXBlKCkgIT09IGJhc2VUeXBlKSB7XG4gICAgICBsZXQgZW50aXR5U2V0ID0gcmVzb3VyY2UuYXBpLmZpbmRFbnRpdHlTZXRGb3JUeXBlKGJhc2VTY2hlbWEudHlwZSgpKTtcbiAgICAgIGlmIChlbnRpdHlTZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuYXZpZ2F0aW9uLnNlZ21lbnQoKHMpID0+IHMuZW50aXR5U2V0KCkucGF0aChlbnRpdHlTZXQhLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmF2aWdhdGlvbjtcbiAgfVxuICBvdmVycmlkZSBjbG9uZSgpOiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuY2xvbmUoKSBhcyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGtleSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIga2V5ID0gdGhpcy5yZXNvbHZlS2V5KHZhbHVlKTtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpXG4gICAgICBuYXZpZ2F0aW9uLnNlZ21lbnQoKHMpID0+IHMubmF2aWdhdGlvblByb3BlcnR5KCkua2V5KGtleSkpO1xuICAgIHJldHVybiBuYXZpZ2F0aW9uO1xuICB9XG5cbiAga2V5cyh2YWx1ZXM6IGFueVtdKSB7XG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IHRoaXMuY2xvbmUoKTtcbiAgICBjb25zdCB0eXBlcyA9IHRoaXMucGF0aFNlZ21lbnRzLnR5cGVzKHsga2V5OiB0cnVlIH0pO1xuICAgIGNvbnN0IGtleXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+XG4gICAgICBPRGF0YVJlc291cmNlLnJlc29sdmVLZXkoXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlPFQ+KHR5cGVzW2luZGV4XSlcbiAgICAgIClcbiAgICApO1xuICAgIG5hdmlnYXRpb24uc2VnbWVudCgocykgPT4gcy5rZXlzKGtleXMpKTtcbiAgICByZXR1cm4gbmF2aWdhdGlvbjtcbiAgfVxuXG4gIG1lZGlhKCkge1xuICAgIHJldHVybiBPRGF0YU1lZGlhUmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLmFwaSwge1xuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgcXVlcnk6IHRoaXMuY2xvbmVRdWVyeTxUPigpLFxuICAgIH0pO1xuICB9XG5cbiAgcmVmZXJlbmNlKCkge1xuICAgIHJldHVybiBPRGF0YVJlZmVyZW5jZVJlc291cmNlLmZhY3Rvcnk8VD4odGhpcy5hcGksIHtcbiAgICAgIHNlZ21lbnRzOiB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICB9KTtcbiAgfVxuXG4gIG5hdmlnYXRpb25Qcm9wZXJ0eTxOPihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZS5mcm9tUmVzb3VyY2U8Tj4odGhpcywgcGF0aCk7XG4gIH1cblxuICBwcm9wZXJ0eTxQPihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT0RhdGFQcm9wZXJ0eVJlc291cmNlLmZyb21SZXNvdXJjZTxQPih0aGlzLCBwYXRoKTtcbiAgfVxuXG4gIGNvdW50KCkge1xuICAgIHJldHVybiBPRGF0YUNvdW50UmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLmFwaSwge1xuICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSBhcyBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+LFxuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgcXVlcnk6IHRoaXMuY2xvbmVRdWVyeTxUPigpLFxuICAgIH0pO1xuICB9XG5cbiAgY2FzdDxDPih0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBiYXNlU2NoZW1hID0gdGhpcy5zY2hlbWEgYXMgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPjtcbiAgICBjb25zdCBjYXN0U2NoZW1hID0gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxDPih0eXBlKTtcbiAgICBpZiAoXG4gICAgICBjYXN0U2NoZW1hICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGJhc2VTY2hlbWEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIWNhc3RTY2hlbWEuaXNTdWJ0eXBlT2YoYmFzZVNjaGVtYSlcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjYXN0IHRvICR7dHlwZX1gKTtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuY2xvbmVTZWdtZW50cygpO1xuICAgIHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudC50eXBlLCB0eXBlKS50eXBlKHR5cGUpO1xuICAgIHJldHVybiBuZXcgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxDPih0aGlzLmFwaSwge1xuICAgICAgc2VnbWVudHMsXG4gICAgICBzY2hlbWE6IGNhc3RTY2hlbWEsXG4gICAgICBxdWVyeTogdGhpcy5jbG9uZVF1ZXJ5PEM+KCksXG4gICAgfSk7XG4gIH1cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBvc3QoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiBzdXBlci5wb3N0KGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHV0KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGF0Y2goXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zID0ge31cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiBzdXBlci5wYXRjaChhdHRycywgeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGRlbGV0ZShvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZSh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0KFxuICAgIG9wdGlvbnM6IE9EYXRhRW50aXR5T3B0aW9ucyAmXG4gICAgICBPRGF0YUVudGl0aWVzT3B0aW9ucyAmIHtcbiAgICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KG9wdGlvbnMpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFNob3J0Y3V0c1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVudGl0eVxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVudGl0eSB3aXRoIHRoZSBhbm5vdGF0aW9uc1xuICAgKi9cbiAgY3JlYXRlKFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnBvc3QoYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhbiBleGlzdGluZyBlbnRpdHlcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBlbnRpdHkgYXR0cmlidXRlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnNcbiAgICovXG4gIHVwZGF0ZShcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5wdXQoYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmeSBhbiBleGlzdGluZyBlbnRpdHlcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBlbnRpdHkgYXR0cmlidXRlc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgZW50aXR5IHdpdGggdGhlIGFubm90YXRpb25zXG4gICAqL1xuICBtb2RpZnkoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucGF0Y2goYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBleGlzdGluZyBlbnRpdHlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSBvZiB0aGUgZGVzdHJveVxuICAgKi9cbiAgZGVzdHJveShvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGUob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZW50aXR5IC8gZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybiBBbiBvYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHkgb3IgZW50aXRpZXMgd2l0aCBhbm5vdGF0aW9uc1xuICAgKi9cbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXR5T3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj47XG4gIGZldGNoKFxuICAgIG9wdGlvbnM/OiBPRGF0YUVudGl0aWVzT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPFQ+PjtcbiAgZmV0Y2goXG4gICAgb3B0aW9uczogT0RhdGFFbnRpdHlPcHRpb25zICZcbiAgICAgIE9EYXRhRW50aXRpZXNPcHRpb25zICYge1xuICAgICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5oYXNFbnRpdHlLZXkoKSlcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PiBuZXcgRXJyb3IoJ2ZldGNoOiBOYXZpZ2F0aW9uIHJlc291cmNlIHdpdGhvdXQgZW50aXR5IGtleScpXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgZW50aXR5XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBlbnRpdHlcbiAgICovXG4gIGZldGNoRW50aXR5KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHkgYW5kIHJldHVybiBhcyBtb2RlbFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWxcbiAgICovXG4gIGZldGNoTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPE0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXR5ID8gdGhpcy5hc01vZGVsPE0+KGVudGl0eSwgeyBhbm5vdHMgfSkgOiBudWxsXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXRpZXNcbiAgICovXG4gIGZldGNoRW50aXRpZXMoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8VFtdIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXRpZXMgfSkgPT4gZW50aXRpZXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBlbnRpdGllcyBhbmQgcmV0dXJuIGFzIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGNvbGxlY3Rpb25cbiAgICovXG4gIGZldGNoQ29sbGVjdGlvbjxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPiwgQyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxULCBNPj4oXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPEMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcywgYW5ub3RzIH0pID0+XG4gICAgICAgIGVudGl0aWVzID8gdGhpcy5hc0NvbGxlY3Rpb248TSwgQz4oZW50aXRpZXMsIHsgYW5ub3RzIH0pIDogbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYWxsIGVudGl0aWVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIEFsbCBlbnRpdGllc1xuICAgKi9cbiAgZmV0Y2hBbGwoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPHsgZW50aXRpZXM6IFRbXTsgYW5ub3RzOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8VD4gfT4ge1xuICAgIGxldCByZXMgPSB0aGlzLmNsb25lKCk7XG4gICAgLy8gQ2xlYW4gUGFnaW5nXG4gICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnJlbW92ZVBhZ2luZygpKTtcbiAgICBsZXQgZmV0Y2ggPSAob3B0cz86IHtcbiAgICAgIHNraXA/OiBudW1iZXI7XG4gICAgICBza2lwdG9rZW4/OiBzdHJpbmc7XG4gICAgICB0b3A/OiBudW1iZXI7XG4gICAgfSk6IE9ic2VydmFibGU8T0RhdGFFbnRpdGllczxUPj4gPT4ge1xuICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnBhZ2luZyhvcHRzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGZldGNoKCkucGlwZShcbiAgICAgIGV4cGFuZCgoeyBhbm5vdHMgfSkgPT5cbiAgICAgICAgYW5ub3RzLnNraXAgfHwgYW5ub3RzLnNraXB0b2tlbiA/IGZldGNoKGFubm90cykgOiBFTVBUWVxuICAgICAgKSxcbiAgICAgIG1hcCgoeyBlbnRpdGllcywgYW5ub3RzIH0pID0+ICh7IGVudGl0aWVzOiBlbnRpdGllcyB8fCBbXSwgYW5ub3RzIH0pKSxcbiAgICAgIHJlZHVjZSgoYWNjLCB7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4gKHtcbiAgICAgICAgZW50aXRpZXM6IFsuLi4oYWNjLmVudGl0aWVzIHx8IFtdKSwgLi4uKGVudGl0aWVzIHx8IFtdKV0sXG4gICAgICAgIGFubm90czogYWNjLmFubm90cy51bmlvbihhbm5vdHMpLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBmZXRjaE1hbnkoXG4gICAgdG9wOiBudW1iZXIsXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9XG4gICk6IE9ic2VydmFibGU8eyBlbnRpdGllczogVFtdOyBhbm5vdHM6IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczxUPiB9PiB7XG4gICAgbGV0IHJlcyA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgZmV0Y2ggPSAob3B0cz86IHtcbiAgICAgIHNraXA/OiBudW1iZXI7XG4gICAgICBza2lwdG9rZW4/OiBzdHJpbmc7XG4gICAgICB0b3A/OiBudW1iZXI7XG4gICAgfSk6IE9ic2VydmFibGU8T0RhdGFFbnRpdGllczxUPj4gPT4ge1xuICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnBhZ2luZyhvcHRzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGZldGNoKHsgdG9wIH0pLnBpcGUoXG4gICAgICBleHBhbmQoKHsgYW5ub3RzIH0pID0+XG4gICAgICAgIGFubm90cy5za2lwIHx8IGFubm90cy5za2lwdG9rZW4gPyBmZXRjaChhbm5vdHMpIDogRU1QVFlcbiAgICAgICksXG4gICAgICBtYXAoKHsgZW50aXRpZXMsIGFubm90cyB9KSA9PiAoeyBlbnRpdGllczogZW50aXRpZXMgfHwgW10sIGFubm90cyB9KSksXG4gICAgICByZWR1Y2UoKGFjYywgeyBlbnRpdGllcywgYW5ub3RzIH0pID0+ICh7XG4gICAgICAgIGVudGl0aWVzOiBbLi4uKGFjYy5lbnRpdGllcyB8fCBbXSksIC4uLihlbnRpdGllcyB8fCBbXSldLFxuICAgICAgICBhbm5vdHM6IGFjYy5hbm5vdHMudW5pb24oYW5ub3RzKSxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cblxuICBmZXRjaE9uZShcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYge1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH1cbiAgKTogT2JzZXJ2YWJsZTx7IGVudGl0eTogVCB8IG51bGw7IGFubm90czogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+IH0+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaE1hbnkoMSwgb3B0aW9ucykucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcywgYW5ub3RzIH0pID0+ICh7XG4gICAgICAgIGVudGl0eTogZW50aXRpZXMubGVuZ3RoID09PSAxID8gZW50aXRpZXNbMF0gOiBudWxsLFxuICAgICAgICBhbm5vdHMsXG4gICAgICB9KSlcbiAgICApO1xuICB9XG59XG4iXX0=
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1wcm9wZXJ0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9yZXNvdXJjZXMvdHlwZXMvbmF2aWdhdGlvbi1wcm9wZXJ0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyRCxPQUFPLEVBQ0wsV0FBVyxHQUdaLE1BQU0sYUFBYSxDQUFDO0FBT3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU03QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3JEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sK0JBQW1DLFNBQVEsYUFBZ0I7SUFDdEUsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLEVBQ0UsSUFBSSxFQUNKLElBQUksRUFDSixRQUFRLEdBS1Q7UUFFRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxJQUFJLCtCQUEr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QUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQ3JFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDakMsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQ04sT0FHQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM3RCxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QixNQUFNLEVBQUUsUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3ZFLE1BQU07U0FDUCxDQUFDLENBQUMsQ0FDSixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGV4cGFuZCwgbWFwLCByZWR1Y2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyBPRGF0YUNvbGxlY3Rpb24sIE9EYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgUGF0aFNlZ21lbnQsXG4gIFF1ZXJ5T3B0aW9uLFxuICBTdHJ1Y3R1cmVkVHlwZUZpZWxkQ29uZmlnLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBPRGF0YVBhdGhTZWdtZW50cyB9IGZyb20gJy4uL3BhdGgnO1xuaW1wb3J0IHtcbiAgQXBwbHlFeHByZXNzaW9uLFxuICBBcHBseUV4cHJlc3Npb25CdWlsZGVyLFxuICBPRGF0YVF1ZXJ5T3B0aW9ucyxcbn0gZnJvbSAnLi4vcXVlcnknO1xuaW1wb3J0IHsgT0RhdGFSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlJztcbmltcG9ydCB7IE9EYXRhRW50aXRpZXMsIE9EYXRhRW50aXR5IH0gZnJvbSAnLi4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgT0RhdGFDb3VudFJlc291cmNlIH0gZnJvbSAnLi9jb3VudCc7XG5pbXBvcnQgeyBPRGF0YU1lZGlhUmVzb3VyY2UgfSBmcm9tICcuL21lZGlhJztcbmltcG9ydCB7XG4gIE9EYXRhRW50aXRpZXNPcHRpb25zLFxuICBPRGF0YUVudGl0eU9wdGlvbnMsXG4gIE9EYXRhT3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IE9EYXRhUHJvcGVydHlSZXNvdXJjZSB9IGZyb20gJy4vcHJvcGVydHknO1xuaW1wb3J0IHsgT0RhdGFSZWZlcmVuY2VSZXNvdXJjZSB9IGZyb20gJy4vcmVmZXJlbmNlJztcbmltcG9ydCB7IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyB9IGZyb20gJy4uLy4uL2Fubm90YXRpb25zJztcblxuLyoqXG4gKiBPRGF0YSBOYXZpZ2F0aW9uIFByb3BlcnR5IFJlc291cmNlXG4gKiBodHRwczovL3d3dy5vZGF0YS5vcmcvZ2V0dGluZy1zdGFydGVkL2FkdmFuY2VkLXR1dG9yaWFsLyNjb250YWlubWVudFxuICogaHR0cHM6Ly93d3cub2RhdGEub3JnL2dldHRpbmctc3RhcnRlZC9hZHZhbmNlZC10dXRvcmlhbC8jZGVyaXZlZFxuICovXG5leHBvcnQgY2xhc3MgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPiBleHRlbmRzIE9EYXRhUmVzb3VyY2U8VD4ge1xuICAvLyNyZWdpb24gRmFjdG9yeVxuICBzdGF0aWMgZmFjdG9yeTxOPihcbiAgICBhcGk6IE9EYXRhQXBpLFxuICAgIHtcbiAgICAgIHBhdGgsXG4gICAgICB0eXBlLFxuICAgICAgc2VnbWVudHMsXG4gICAgfToge1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgdHlwZT86IHN0cmluZztcbiAgICAgIHNlZ21lbnRzOiBPRGF0YVBhdGhTZWdtZW50cztcbiAgICB9LFxuICApIHtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHMuYWRkKFBhdGhTZWdtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0eSwgcGF0aCk7XG4gICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VnbWVudC5vdXRnb2luZ1R5cGUodHlwZSk7XG4gICAgICBzZWdtZW50LmluY29taW5nVHlwZSh0eXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPE4+KGFwaSwge1xuICAgICAgc2VnbWVudHMsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlc291cmNlPE4+KHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4sIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gcmVzb3VyY2Uub3V0Z29pbmdUeXBlKCk7XG4gICAgbGV0IGJhc2VTY2hlbWEgPVxuICAgICAgYmFzZVR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHJlc291cmNlLmFwaS5zdHJ1Y3R1cmVkVHlwZTxhbnk+KGJhc2VUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGJhc2VTY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmllbGQgPSBiYXNlU2NoZW1hLmZpZWxkPE4+KHBhdGgpO1xuICAgICAgZmllbGRUeXBlID0gZmllbGQ/LnR5cGU7XG4gICAgICBiYXNlU2NoZW1hID1cbiAgICAgICAgZmllbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gYmFzZVNjaGVtYS5maW5kUGFyZW50U2NoZW1hRm9yRmllbGQ8Tj4oZmllbGQpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbmF2aWdhdGlvbiA9IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UuZmFjdG9yeTxOPihcbiAgICAgIHJlc291cmNlLmFwaSxcbiAgICAgIHtcbiAgICAgICAgcGF0aCxcbiAgICAgICAgdHlwZTogZmllbGRUeXBlLFxuICAgICAgICBzZWdtZW50czogcmVzb3VyY2UuY2xvbmVTZWdtZW50cygpLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gU3dpdGNoIGVudGl0eVNldCB0byBiaW5kaW5nIHR5cGUgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGJhc2VTY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBiYXNlU2NoZW1hLnR5cGUoKSAhPT0gYmFzZVR5cGUpIHtcbiAgICAgIGxldCBlbnRpdHlTZXQgPSByZXNvdXJjZS5hcGkuZmluZEVudGl0eVNldChiYXNlU2NoZW1hLnR5cGUoKSk7XG4gICAgICBpZiAoZW50aXR5U2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmF2aWdhdGlvbi5zZWdtZW50KChzKSA9PiBzLmVudGl0eVNldCgpLnBhdGgoZW50aXR5U2V0IS5uYW1lKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdmlnYXRpb247XG4gIH1cblxuICBvdmVycmlkZSBjbG9uZSgpOiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuY2xvbmUoKSBhcyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+O1xuICB9XG5cbiAgb3ZlcnJpZGUgdHJhbnNmb3JtPFI+KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IEFwcGx5RXhwcmVzc2lvbkJ1aWxkZXI8VD4sXG4gICAgICBjdXJyZW50PzogQXBwbHlFeHByZXNzaW9uPFQ+LFxuICAgICkgPT4gQXBwbHlFeHByZXNzaW9uPFQ+LFxuICAgIHtcbiAgICAgIHR5cGUsXG4gICAgICBmaWVsZHMsXG4gICAgfToge1xuICAgICAgdHlwZT86IHN0cmluZztcbiAgICAgIGZpZWxkcz86IHsgW1AgaW4ga2V5b2YgUl0/OiBTdHJ1Y3R1cmVkVHlwZUZpZWxkQ29uZmlnIH07XG4gICAgfSA9IHt9LFxuICApOiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFI+IHtcbiAgICByZXR1cm4gc3VwZXIudHJhbnNmb3JtPFI+KG9wdHMsIHtcbiAgICAgIHR5cGUsXG4gICAgICBmaWVsZHMsXG4gICAgfSkgYXMgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxSPjtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBrZXkodmFsdWU6IGFueSkge1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGtleSA9IHRoaXMucmVzb2x2ZUtleSh2YWx1ZSk7XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKVxuICAgICAgbmF2aWdhdGlvbi5zZWdtZW50KChzKSA9PiBzLm5hdmlnYXRpb25Qcm9wZXJ0eSgpLmtleShrZXkpKTtcbiAgICByZXR1cm4gbmF2aWdhdGlvbjtcbiAgfVxuXG4gIGtleXModmFsdWVzOiBhbnlbXSkge1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLmNsb25lKCk7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLnBhdGhTZWdtZW50cy50eXBlcyh7IGtleTogdHJ1ZSB9KTtcbiAgICBjb25zdCBrZXlzID0gdmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PlxuICAgICAgT0RhdGFSZXNvdXJjZS5yZXNvbHZlS2V5KFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlPFQ+KHR5cGVzW2luZGV4XSksXG4gICAgICApLFxuICAgICk7XG4gICAgbmF2aWdhdGlvbi5zZWdtZW50KChzKSA9PiBzLmtleXMoa2V5cykpO1xuICAgIHJldHVybiBuYXZpZ2F0aW9uO1xuICB9XG5cbiAgbWVkaWEoKSB7XG4gICAgcmV0dXJuIE9EYXRhTWVkaWFSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMuYXBpLCB7XG4gICAgICBzZWdtZW50czogdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICBxdWVyeTogdGhpcy5jbG9uZVF1ZXJ5PFQ+KCksXG4gICAgfSk7XG4gIH1cblxuICByZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIE9EYXRhUmVmZXJlbmNlUmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLmFwaSwge1xuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgIH0pO1xuICB9XG5cbiAgbmF2aWdhdGlvblByb3BlcnR5PE4+KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLmZyb21SZXNvdXJjZTxOPih0aGlzLCBwYXRoKTtcbiAgfVxuXG4gIHByb3BlcnR5PFA+KHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBPRGF0YVByb3BlcnR5UmVzb3VyY2UuZnJvbVJlc291cmNlPFA+KHRoaXMsIHBhdGgpO1xuICB9XG5cbiAgY291bnQoKSB7XG4gICAgcmV0dXJuIE9EYXRhQ291bnRSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMuYXBpLCB7XG4gICAgICBzZWdtZW50czogdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICBxdWVyeTogdGhpcy5jbG9uZVF1ZXJ5PFQ+KCksXG4gICAgfSk7XG4gIH1cblxuICBjYXN0PEM+KHR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IHRoaXNUeXBlID0gdGhpcy5pbmNvbWluZ1R5cGUoKTtcbiAgICBjb25zdCBiYXNlU2NoZW1hID1cbiAgICAgIHRoaXNUeXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmFwaS5zdHJ1Y3R1cmVkVHlwZSh0aGlzVHlwZSkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY2FzdFNjaGVtYSA9IHRoaXMuYXBpLmZpbmRTdHJ1Y3R1cmVkVHlwZTxDPih0eXBlKTtcbiAgICBpZiAoXG4gICAgICBjYXN0U2NoZW1hICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGJhc2VTY2hlbWEgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIWNhc3RTY2hlbWEuaXNTdWJ0eXBlT2YoYmFzZVNjaGVtYSlcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjYXN0IHRvICR7dHlwZX1gKTtcbiAgICBjb25zdCBzZWdtZW50cyA9IHRoaXMuY2xvbmVTZWdtZW50cygpO1xuICAgIHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudC50eXBlLCB0eXBlKS5pbmNvbWluZ1R5cGUodHlwZSk7XG4gICAgcmV0dXJuIG5ldyBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPEM+KHRoaXMuYXBpLCB7XG4gICAgICBzZWdtZW50cyxcbiAgICAgIHF1ZXJ5OiB0aGlzLmNsb25lUXVlcnk8Qz4oKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcG9zdChcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiBzdXBlci5wb3N0KGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHV0KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHN1cGVyLnB1dChhdHRycywgeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBhdGNoKFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHN1cGVyLnBhdGNoKGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGVsZXRlKG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQoXG4gICAgb3B0aW9uczogT0RhdGFFbnRpdHlPcHRpb25zICZcbiAgICAgIE9EYXRhRW50aXRpZXNPcHRpb25zICYge1xuICAgICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KG9wdGlvbnMpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFNob3J0Y3V0c1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGVudGl0eVxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGVudGl0eSB3aXRoIHRoZSBhbm5vdGF0aW9uc1xuICAgKi9cbiAgY3JlYXRlKFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KGF0dHJzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYW4gZXhpc3RpbmcgZW50aXR5XG4gICAqIEBwYXJhbSBhdHRycyBUaGUgZW50aXR5IGF0dHJpYnV0ZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgZW50aXR5IHdpdGggdGhlIGFubm90YXRpb25zXG4gICAqL1xuICB1cGRhdGUoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnB1dChhdHRycywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZ5IGFuIGV4aXN0aW5nIGVudGl0eVxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnNcbiAgICovXG4gIG1vZGlmeShcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucGF0Y2goYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBleGlzdGluZyBlbnRpdHlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSBvZiB0aGUgZGVzdHJveVxuICAgKi9cbiAgZGVzdHJveShvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGUob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZW50aXR5IC8gZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybiBBbiBvYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHkgb3IgZW50aXRpZXMgd2l0aCBhbm5vdGF0aW9uc1xuICAgKi9cbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXR5T3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdGllc09wdGlvbnMgJiB7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zOiBPRGF0YUVudGl0eU9wdGlvbnMgJlxuICAgICAgT0RhdGFFbnRpdGllc09wdGlvbnMgJiB7XG4gICAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5oYXNFbnRpdHlLZXkoKSlcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PiBuZXcgRXJyb3IoJ2ZldGNoOiBOYXZpZ2F0aW9uIHJlc291cmNlIHdpdGhvdXQgZW50aXR5IGtleScpLFxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5nZXQob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXR5XG4gICAqL1xuICBmZXRjaEVudGl0eShcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHkgfSkgPT4gZW50aXR5KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHkgYW5kIHJldHVybiBhcyBtb2RlbFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWxcbiAgICovXG4gIGZldGNoTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgICAgTW9kZWxUeXBlPzogdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPE0gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5LCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXR5XG4gICAgICAgICAgPyB0aGlzLmFzTW9kZWw8TT4oZW50aXR5LCB7IGFubm90cywgTW9kZWxUeXBlOiBvcHRpb25zPy5Nb2RlbFR5cGUgfSlcbiAgICAgICAgICA6IG51bGwsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGVudGl0aWVzXG4gICAqL1xuICBmZXRjaEVudGl0aWVzKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUW10gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcyB9KSA9PiBlbnRpdGllcyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBlbnRpdGllcyBhbmQgcmV0dXJuIGFzIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGNvbGxlY3Rpb25cbiAgICovXG4gIGZldGNoQ29sbGVjdGlvbjxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPiwgQyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxULCBNPj4oXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgICAgQ29sbGVjdGlvblR5cGU/OiB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uO1xuICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxDIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXRpZXMsIGFubm90cyB9KSA9PlxuICAgICAgICBlbnRpdGllc1xuICAgICAgICAgID8gdGhpcy5hc0NvbGxlY3Rpb248TSwgQz4oZW50aXRpZXMsIHtcbiAgICAgICAgICAgICAgYW5ub3RzLFxuICAgICAgICAgICAgICBDb2xsZWN0aW9uVHlwZTogb3B0aW9ucz8uQ29sbGVjdGlvblR5cGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbGwgZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgQWxsIGVudGl0aWVzXG4gICAqL1xuICBmZXRjaEFsbChcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPHsgZW50aXRpZXM6IFRbXTsgYW5ub3RzOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8VD4gfT4ge1xuICAgIGxldCByZXMgPSB0aGlzLmNsb25lKCk7XG4gICAgLy8gQ2xlYW4gUGFnaW5nXG4gICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnJlbW92ZVBhZ2luZygpKTtcbiAgICBsZXQgZmV0Y2ggPSAob3B0cz86IHtcbiAgICAgIHNraXA/OiBudW1iZXI7XG4gICAgICBza2lwdG9rZW4/OiBzdHJpbmc7XG4gICAgICB0b3A/OiBudW1iZXI7XG4gICAgfSk6IE9ic2VydmFibGU8T0RhdGFFbnRpdGllczxUPj4gPT4ge1xuICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnBhZ2luZyhvcHRzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGZldGNoKCkucGlwZShcbiAgICAgIGV4cGFuZCgoeyBhbm5vdHMgfSkgPT5cbiAgICAgICAgYW5ub3RzLnNraXAgfHwgYW5ub3RzLnNraXB0b2tlbiA/IGZldGNoKGFubm90cykgOiBFTVBUWSxcbiAgICAgICksXG4gICAgICBtYXAoKHsgZW50aXRpZXMsIGFubm90cyB9KSA9PiAoeyBlbnRpdGllczogZW50aXRpZXMgfHwgW10sIGFubm90cyB9KSksXG4gICAgICByZWR1Y2UoKGFjYywgeyBlbnRpdGllcywgYW5ub3RzIH0pID0+ICh7XG4gICAgICAgIGVudGl0aWVzOiBbLi4uKGFjYy5lbnRpdGllcyB8fCBbXSksIC4uLihlbnRpdGllcyB8fCBbXSldLFxuICAgICAgICBhbm5vdHM6IGFjYy5hbm5vdHMudW5pb24oYW5ub3RzKSxcbiAgICAgIH0pKSxcbiAgICApO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGZldGNoTWFueShcbiAgICB0b3A6IG51bWJlcixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYge1xuICAgICAgd2l0aENvdW50PzogYm9vbGVhbjtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8eyBlbnRpdGllczogVFtdOyBhbm5vdHM6IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczxUPiB9PiB7XG4gICAgbGV0IHJlcyA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgZmV0Y2ggPSAob3B0cz86IHtcbiAgICAgIHNraXA/OiBudW1iZXI7XG4gICAgICBza2lwdG9rZW4/OiBzdHJpbmc7XG4gICAgICB0b3A/OiBudW1iZXI7XG4gICAgfSk6IE9ic2VydmFibGU8T0RhdGFFbnRpdGllczxUPj4gPT4ge1xuICAgICAgaWYgKG9wdHMpIHtcbiAgICAgICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnBhZ2luZyhvcHRzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLCAuLi5vcHRpb25zIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIGZldGNoKHsgdG9wIH0pLnBpcGUoXG4gICAgICBleHBhbmQoKHsgYW5ub3RzIH0pID0+XG4gICAgICAgIGFubm90cy5za2lwIHx8IGFubm90cy5za2lwdG9rZW4gPyBmZXRjaChhbm5vdHMpIDogRU1QVFksXG4gICAgICApLFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4gKHsgZW50aXRpZXM6IGVudGl0aWVzIHx8IFtdLCBhbm5vdHMgfSkpLFxuICAgICAgcmVkdWNlKChhY2MsIHsgZW50aXRpZXMsIGFubm90cyB9KSA9PiAoe1xuICAgICAgICBlbnRpdGllczogWy4uLihhY2MuZW50aXRpZXMgfHwgW10pLCAuLi4oZW50aXRpZXMgfHwgW10pXSxcbiAgICAgICAgYW5ub3RzOiBhY2MuYW5ub3RzLnVuaW9uKGFubm90cyksXG4gICAgICB9KSksXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoT25lKFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTx7IGVudGl0eTogVCB8IG51bGw7IGFubm90czogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+IH0+IHtcbiAgICBjb25zdCByZXMgPSB0aGlzLmNsb25lKCk7XG4gICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnRvcCgxKSk7XG4gICAgcmV0dXJuIHJlcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4gKHtcbiAgICAgICAgZW50aXR5OiBlbnRpdGllcyAhPT0gbnVsbCAmJiBlbnRpdGllcy5sZW5ndGggPT09IDEgPyBlbnRpdGllc1swXSA6IG51bGwsXG4gICAgICAgIGFubm90cyxcbiAgICAgIH0pKSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -1,37 +1,30 @@
1
1
  import { EMPTY } from 'rxjs';
2
2
  import { expand, map, reduce } from 'rxjs/operators';
3
- import { ODataStructuredType } from '../../schema';
4
- import { PathSegment } from '../../types';
3
+ import { PathSegment, } from '../../types';
5
4
  import { ODataResource } from '../resource';
6
5
  import { ODataValueResource } from './value';
7
6
  import { ODataCountResource } from './count';
8
7
  export class ODataPropertyResource extends ODataResource {
9
8
  //#region Factory
10
- static factory(api, { path, type, schema, segments, query, }) {
9
+ static factory(api, { path, type, segments, }) {
11
10
  const segment = segments.add(PathSegment.property, path);
12
- if (schema !== undefined)
13
- segment.type(schema.type());
14
- else if (type !== undefined)
15
- segment.type(type);
16
- query?.clear();
11
+ if (type !== undefined) {
12
+ segment.outgoingType(type);
13
+ segment.incomingType(type);
14
+ }
17
15
  return new ODataPropertyResource(api, {
18
16
  segments,
19
- query,
20
- schema,
21
17
  });
22
18
  }
23
19
  static fromResource(resource, path) {
24
- const baseType = resource.type();
25
- let baseSchema = resource.schema;
20
+ const baseType = resource.outgoingType();
21
+ let baseSchema = baseType !== undefined
22
+ ? resource.api.structuredType(baseType)
23
+ : undefined;
26
24
  let fieldType;
27
- let fieldSchema;
28
25
  if (baseSchema !== undefined) {
29
26
  const field = baseSchema.field(path);
30
27
  fieldType = field?.type;
31
- fieldSchema =
32
- fieldType !== undefined
33
- ? resource.api.findStructuredTypeForType(fieldType)
34
- : undefined;
35
28
  baseSchema =
36
29
  field !== undefined
37
30
  ? baseSchema.findParentSchemaForField(field)
@@ -40,13 +33,11 @@ export class ODataPropertyResource extends ODataResource {
40
33
  const property = ODataPropertyResource.factory(resource.api, {
41
34
  path,
42
35
  type: fieldType,
43
- schema: fieldSchema,
44
36
  segments: resource.cloneSegments(),
45
- query: resource.cloneQuery(),
46
37
  });
47
38
  // Switch entitySet to binding type if available
48
39
  if (baseSchema !== undefined && baseSchema.type() !== baseType) {
49
- let entitySet = resource.api.findEntitySetForType(baseSchema.type());
40
+ let entitySet = resource.api.findEntitySet(baseSchema.type());
50
41
  if (entitySet !== undefined) {
51
42
  property.segment((s) => s.entitySet().path(entitySet.name));
52
43
  }
@@ -56,6 +47,12 @@ export class ODataPropertyResource extends ODataResource {
56
47
  clone() {
57
48
  return super.clone();
58
49
  }
50
+ transform(opts, { type, fields, } = {}) {
51
+ return super.transform(opts, {
52
+ type,
53
+ fields,
54
+ });
55
+ }
59
56
  //#endregion
60
57
  key(value) {
61
58
  const property = this.clone();
@@ -67,21 +64,15 @@ export class ODataPropertyResource extends ODataResource {
67
64
  keys(values) {
68
65
  const property = this.clone();
69
66
  const types = this.pathSegments.types({ key: true });
70
- const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredTypeForType(types[index])));
67
+ const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredType(types[index])));
71
68
  property.segment((s) => s.keys(keys));
72
69
  return property;
73
70
  }
74
71
  value() {
75
- return ODataValueResource.factory(this.api, {
76
- type: this.returnType(),
77
- schema: this.schema,
78
- segments: this.cloneSegments(),
79
- query: this.cloneQuery(),
80
- });
72
+ return ODataValueResource.fromResource(this);
81
73
  }
82
74
  count() {
83
75
  return ODataCountResource.factory(this.api, {
84
- schema: this.schema,
85
76
  segments: this.cloneSegments(),
86
77
  query: this.cloneQuery(),
87
78
  });
@@ -105,23 +96,7 @@ export class ODataPropertyResource extends ODataResource {
105
96
  }
106
97
  */
107
98
  property(path) {
108
- let type;
109
- let schema;
110
- if (this.schema instanceof ODataStructuredType) {
111
- const field = this.schema.field(path);
112
- type = field?.type;
113
- schema =
114
- field !== undefined
115
- ? this.schema.findParentSchemaForField(field)
116
- : undefined;
117
- }
118
- return ODataPropertyResource.factory(this.api, {
119
- path,
120
- type,
121
- schema,
122
- segments: this.cloneSegments(),
123
- query: this.cloneQuery(),
124
- });
99
+ return ODataPropertyResource.fromResource(this, path);
125
100
  }
126
101
  //#region Requests
127
102
  get(options) {
@@ -152,7 +127,9 @@ export class ODataPropertyResource extends ODataResource {
152
127
  * @returns The model
153
128
  */
154
129
  fetchModel(options = {}) {
155
- return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity, annots }) => entity ? this.asModel(entity, { annots }) : null));
130
+ return this.fetch({ responseType: 'entity', ...options }).pipe(map(({ entity, annots }) => entity
131
+ ? this.asModel(entity, { annots, ModelType: options?.ModelType })
132
+ : null));
156
133
  }
157
134
  /**
158
135
  * Fetch the entities
@@ -168,13 +145,18 @@ export class ODataPropertyResource extends ODataResource {
168
145
  * @returns The collection
169
146
  */
170
147
  fetchCollection(options = {}) {
171
- return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => entities ? this.asCollection(entities, { annots }) : null));
148
+ return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => entities
149
+ ? this.asCollection(entities, {
150
+ annots,
151
+ CollectionType: options?.CollectionType,
152
+ })
153
+ : null));
172
154
  }
173
155
  fetchOne(options) {
174
156
  let res = this.clone();
175
157
  res.query((q) => q.top(1));
176
158
  return res.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities, annots }) => ({
177
- entity: entities !== null ? entities[0] || null : null,
159
+ entity: entities !== null && entities.length === 1 ? entities[0] : null,
178
160
  annots,
179
161
  })));
180
162
  }
@@ -212,4 +194,4 @@ export class ODataPropertyResource extends ODataResource {
212
194
  })));
213
195
  }
214
196
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL3Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFhLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFHekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFHdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWE1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTdDLE1BQU0sT0FBTyxxQkFBeUIsU0FBUSxhQUFnQjtJQUM1RCxpQkFBaUI7SUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FDWixHQUFhLEVBQ2IsRUFDRSxJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxHQU9OO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELElBQUksTUFBTSxLQUFLLFNBQVM7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ2pELElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxxQkFBcUIsQ0FBSSxHQUFH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Q0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFDckUsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNqQyxDQUFDLENBQUMsQ0FDSixDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZXhwYW5kLCBtYXAsIHJlZHVjZSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9EYXRhQXBpIH0gZnJvbSAnLi4vLi4vYXBpJztcbmltcG9ydCB7IE9EYXRhQ29sbGVjdGlvbiwgT0RhdGFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBPRGF0YVN0cnVjdHVyZWRUeXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hJztcbmltcG9ydCB7IFBhdGhTZWdtZW50LCBRdWVyeU9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQge1xuICBPRGF0YUVudGl0aWVzLFxuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5LFxuICBPRGF0YVByb3BlcnR5LFxufSBmcm9tICcuLi9yZXNwb25zZXMnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllc09wdGlvbnMsXG4gIE9EYXRhRW50aXR5T3B0aW9ucyxcbiAgT0RhdGFPcHRpb25zLFxuICBPRGF0YVByb3BlcnR5T3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IE9EYXRhVmFsdWVSZXNvdXJjZSB9IGZyb20gJy4vdmFsdWUnO1xuaW1wb3J0IHsgT0RhdGFDb3VudFJlc291cmNlIH0gZnJvbSAnLi9jb3VudCc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD4gZXh0ZW5kcyBPRGF0YVJlc291cmNlPFQ+IHtcbiAgLy8jcmVnaW9uIEZhY3RvcnlcbiAgc3RhdGljIGZhY3Rvcnk8UD4oXG4gICAgYXBpOiBPRGF0YUFwaSxcbiAgICB7XG4gICAgICBwYXRoLFxuICAgICAgdHlwZSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfToge1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgdHlwZT86IHN0cmluZztcbiAgICAgIHNjaGVtYT86IE9EYXRhU3RydWN0dXJlZFR5cGU8UD47XG4gICAgICBzZWdtZW50czogT0RhdGFQYXRoU2VnbWVudHM7XG4gICAgICBxdWVyeT86IE9EYXRhUXVlcnlPcHRpb25zPFA+O1xuICAgIH1cbiAgKSB7XG4gICAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudC5wcm9wZXJ0eSwgcGF0aCk7XG4gICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUoc2NoZW1hLnR5cGUoKSk7XG4gICAgZWxzZSBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSBzZWdtZW50LnR5cGUodHlwZSk7XG5cbiAgICBxdWVyeT8uY2xlYXIoKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxQPihhcGksIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgICBzY2hlbWEsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlc291cmNlPE4+KHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4sIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gcmVzb3VyY2UudHlwZSgpO1xuICAgIGxldCBiYXNlU2NoZW1hID0gcmVzb3VyY2Uuc2NoZW1hIGFzIE9EYXRhU3RydWN0dXJlZFR5cGU8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpZWxkU2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPE4+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChiYXNlU2NoZW1hICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gYmFzZVNjaGVtYS5maWVsZDxOPihwYXRoKTtcbiAgICAgIGZpZWxkVHlwZSA9IGZpZWxkPy50eXBlO1xuICAgICAgZmllbGRTY2hlbWEgPVxuICAgICAgICBmaWVsZFR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gcmVzb3VyY2UuYXBpLmZpbmRTdHJ1Y3R1cmVkVHlwZUZvclR5cGUoZmllbGRUeXBlKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgYmFzZVNjaGVtYSA9XG4gICAgICAgIGZpZWxkICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGJhc2VTY2hlbWEuZmluZFBhcmVudFNjaGVtYUZvckZpZWxkPE4+KGZpZWxkKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnR5ID0gT0RhdGFQcm9wZXJ0eVJlc291cmNlLmZhY3Rvcnk8Tj4ocmVzb3VyY2UuYXBpLCB7XG4gICAgICBwYXRoLFxuICAgICAgdHlwZTogZmllbGRUeXBlLFxuICAgICAgc2NoZW1hOiBmaWVsZFNjaGVtYSxcbiAgICAgIHNlZ21lbnRzOiByZXNvdXJjZS5jbG9uZVNlZ21lbnRzKCksXG4gICAgICBxdWVyeTogcmVzb3VyY2UuY2xvbmVRdWVyeTxOPigpLFxuICAgIH0pO1xuXG4gICAgLy8gU3dpdGNoIGVudGl0eVNldCB0byBiaW5kaW5nIHR5cGUgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGJhc2VTY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBiYXNlU2NoZW1hLnR5cGUoKSAhPT0gYmFzZVR5cGUpIHtcbiAgICAgIGxldCBlbnRpdHlTZXQgPSByZXNvdXJjZS5hcGkuZmluZEVudGl0eVNldEZvclR5cGUoYmFzZVNjaGVtYS50eXBlKCkpO1xuICAgICAgaWYgKGVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BlcnR5LnNlZ21lbnQoKHMpID0+IHMuZW50aXR5U2V0KCkucGF0aChlbnRpdHlTZXQhLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cbiAgb3ZlcnJpZGUgY2xvbmUoKTogT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuY2xvbmUoKSBhcyBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD47XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAga2V5KHZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIga2V5ID0gdGhpcy5yZXNvbHZlS2V5KHZhbHVlKTtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHByb3BlcnR5LnNlZ21lbnQoKHMpID0+IHMucHJvcGVydHkoKS5rZXkoa2V5KSk7XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAga2V5cyh2YWx1ZXM6IGFueVtdKSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmNsb25lKCk7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLnBhdGhTZWdtZW50cy50eXBlcyh7IGtleTogdHJ1ZSB9KTtcbiAgICBjb25zdCBrZXlzID0gdmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PlxuICAgICAgT0RhdGFSZXNvdXJjZS5yZXNvbHZlS2V5KFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxUPih0eXBlc1tpbmRleF0pXG4gICAgICApXG4gICAgKTtcbiAgICBwcm9wZXJ0eS5zZWdtZW50KChzKSA9PiBzLmtleXMoa2V5cykpO1xuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIHZhbHVlKCkge1xuICAgIHJldHVybiBPRGF0YVZhbHVlUmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLmFwaSwge1xuICAgICAgdHlwZTogdGhpcy5yZXR1cm5UeXBlKCksXG4gICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hIGFzIE9EYXRhU3RydWN0dXJlZFR5cGU8VD4sXG4gICAgICBzZWdtZW50czogdGhpcy5jbG9uZVNlZ21lbnRzKCksXG4gICAgICBxdWVyeTogdGhpcy5jbG9uZVF1ZXJ5PFQ+KCksXG4gICAgfSk7XG4gIH1cblxuICBjb3VudCgpIHtcbiAgICByZXR1cm4gT0RhdGFDb3VudFJlc291cmNlLmZhY3Rvcnk8VD4odGhpcy5hcGksIHtcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEgYXMgT0RhdGFTdHJ1Y3R1cmVkVHlwZTxUPixcbiAgICAgIHNlZ21lbnRzOiB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmNsb25lUXVlcnk8VD4oKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gIG5hdmlnYXRpb25Qcm9wZXJ0eTxOPihwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPE4+IHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnNjaGVtYSBpbnN0YW5jZW9mIE9EYXRhU3RydWN0dXJlZFR5cGUpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5zY2hlbWEuZmllbGQ8YW55PihwYXRoIGFzIGtleW9mIFQpO1xuICAgICAgc2NoZW1hID1cbiAgICAgICAgZmllbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5zY2hlbWEuZmluZFNjaGVtYUZvckZpZWxkPE4+KGZpZWxkKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZS5mYWN0b3J5PE4+KHRoaXMuYXBpLCB7XG4gICAgICBwYXRoLFxuICAgICAgc2NoZW1hLFxuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgcXVlcnk6IHRoaXMuY2xvbmVRdWVyeTxOPigpLFxuICAgIH0pO1xuICB9XG4gICovXG5cbiAgcHJvcGVydHk8UD4ocGF0aDogc3RyaW5nKSB7XG4gICAgbGV0IHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFA+IHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnNjaGVtYSBpbnN0YW5jZW9mIE9EYXRhU3RydWN0dXJlZFR5cGUpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5zY2hlbWEuZmllbGQ8YW55PihwYXRoIGFzIGtleW9mIFQpO1xuICAgICAgdHlwZSA9IGZpZWxkPy50eXBlO1xuICAgICAgc2NoZW1hID1cbiAgICAgICAgZmllbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5zY2hlbWEuZmluZFBhcmVudFNjaGVtYUZvckZpZWxkPFA+KGZpZWxkKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gT0RhdGFQcm9wZXJ0eVJlc291cmNlLmZhY3Rvcnk8UD4odGhpcy5hcGksIHtcbiAgICAgIHBhdGgsXG4gICAgICB0eXBlLFxuICAgICAgc2NoZW1hLFxuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgcXVlcnk6IHRoaXMuY2xvbmVRdWVyeTxQPigpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFJlcXVlc3RzXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQoXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXR5T3B0aW9ucyAmIE9EYXRhRW50aXRpZXNPcHRpb25zICYgT0RhdGFQcm9wZXJ0eU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgLyoqXG4gICAqIEZldGNoIHRoZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJuIFRoZSBlbnRpdHkgLyBlbnRpdGllcyAvIHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBmZXRjaChvcHRpb25zPzogT0RhdGFFbnRpdHlPcHRpb25zKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj47XG4gIGZldGNoKG9wdGlvbnM/OiBPRGF0YUVudGl0aWVzT3B0aW9ucyk6IE9ic2VydmFibGU8T0RhdGFFbnRpdGllczxUPj47XG4gIGZldGNoKG9wdGlvbnM/OiBPRGF0YVByb3BlcnR5T3B0aW9ucyk6IE9ic2VydmFibGU8T0RhdGFQcm9wZXJ0eTxUPj47XG4gIGZldGNoKFxuICAgIG9wdGlvbnM6IE9EYXRhRW50aXR5T3B0aW9ucyAmXG4gICAgICBPRGF0YUVudGl0aWVzT3B0aW9ucyAmXG4gICAgICBPRGF0YVByb3BlcnR5T3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgdmFsdWVcbiAgICovXG4gIGZldGNoUHJvcGVydHkob3B0aW9uczogT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBwcm9wZXJ0eSB9KSA9PiBwcm9wZXJ0eSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGVudGl0eVxuICAgKi9cbiAgZmV0Y2hFbnRpdHkob3B0aW9uczogT0RhdGFPcHRpb25zID0ge30pOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgZW50aXR5IH0pID0+IGVudGl0eSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHkgYW5kIHJldHVybiBhcyBtb2RlbFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWxcbiAgICovXG4gIGZldGNoTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9XG4gICk6IE9ic2VydmFibGU8TSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHksIGFubm90cyB9KSA9PlxuICAgICAgICBlbnRpdHkgPyB0aGlzLmFzTW9kZWw8TT4oZW50aXR5LCB7IGFubm90cyB9KSA6IG51bGxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXRpZXNcbiAgICovXG4gIGZldGNoRW50aXRpZXMoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyB3aXRoQ291bnQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFRbXSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzIH0pID0+IGVudGl0aWVzKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVudGl0aWVzIGFuZCByZXR1cm4gYXMgY29sbGVjdGlvblxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgY29sbGVjdGlvblxuICAgKi9cbiAgZmV0Y2hDb2xsZWN0aW9uPE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+LCBDIGV4dGVuZHMgT0RhdGFDb2xsZWN0aW9uPFQsIE0+PihcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgJiB7IHdpdGhDb3VudD86IGJvb2xlYW4gfSA9IHt9XG4gICk6IE9ic2VydmFibGU8QyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT5cbiAgICAgICAgZW50aXRpZXMgPyB0aGlzLmFzQ29sbGVjdGlvbjxNLCBDPihlbnRpdGllcywgeyBhbm5vdHMgfSkgOiBudWxsXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoT25lKFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPHsgZW50aXR5OiBUIHwgbnVsbDsgYW5ub3RzOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8VD4gfT4ge1xuICAgIGxldCByZXMgPSB0aGlzLmNsb25lKCk7XG4gICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnRvcCgxKSk7XG4gICAgcmV0dXJuIHJlcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4gKHtcbiAgICAgICAgZW50aXR5OiBlbnRpdGllcyAhPT0gbnVsbCA/IGVudGl0aWVzWzBdIHx8IG51bGwgOiBudWxsLFxuICAgICAgICBhbm5vdHMsXG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hNYW55KFxuICAgIHRvcDogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPHsgZW50aXRpZXM6IFRbXTsgYW5ub3RzOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8VD4gfT4ge1xuICAgIGxldCByZXMgPSB0aGlzLmNsb25lKCk7XG4gICAgbGV0IGZldGNoID0gKG9wdHM/OiB7XG4gICAgICBza2lwPzogbnVtYmVyO1xuICAgICAgc2tpcHRva2VuPzogc3RyaW5nO1xuICAgICAgdG9wPzogbnVtYmVyO1xuICAgIH0pOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+ID0+IHtcbiAgICAgIGlmIChvcHRzKSB7XG4gICAgICAgIHJlcy5xdWVyeSgocSkgPT4gcS5wYWdpbmcob3B0cykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KTtcbiAgICB9O1xuICAgIHJldHVybiBmZXRjaCh7IHRvcCB9KS5waXBlKFxuICAgICAgZXhwYW5kKCh7IGFubm90cyB9KSA9PlxuICAgICAgICBhbm5vdHMuc2tpcCB8fCBhbm5vdHMuc2tpcHRva2VuID8gZmV0Y2goYW5ub3RzKSA6IEVNUFRZXG4gICAgICApLFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4gKHsgZW50aXRpZXM6IGVudGl0aWVzIHx8IFtdLCBhbm5vdHMgfSkpLFxuICAgICAgcmVkdWNlKChhY2MsIHsgZW50aXRpZXMsIGFubm90cyB9KSA9PiAoe1xuICAgICAgICBlbnRpdGllczogWy4uLihhY2MuZW50aXRpZXMgfHwgW10pLCAuLi4oZW50aXRpZXMgfHwgW10pXSxcbiAgICAgICAgYW5ub3RzOiBhY2MuYW5ub3RzLnVuaW9uKGFubm90cyksXG4gICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBBbGwgZW50aXRpZXNcbiAgICovXG4gIGZldGNoQWxsKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTx7IGVudGl0aWVzOiBUW107IGFubm90czogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+IH0+IHtcbiAgICBsZXQgcmVzID0gdGhpcy5jbG9uZSgpO1xuICAgIC8vIENsZWFuIFBhZ2luZ1xuICAgIHJlcy5xdWVyeSgocSkgPT4gcS5yZW1vdmVQYWdpbmcoKSk7XG4gICAgbGV0IGZldGNoID0gKG9wdHM/OiB7XG4gICAgICBza2lwPzogbnVtYmVyO1xuICAgICAgc2tpcHRva2VuPzogc3RyaW5nO1xuICAgICAgdG9wPzogbnVtYmVyO1xuICAgIH0pOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+ID0+IHtcbiAgICAgIGlmIChvcHRzKSB7XG4gICAgICAgIHJlcy5xdWVyeSgocSkgPT4gcS5wYWdpbmcob3B0cykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KTtcbiAgICB9O1xuICAgIHJldHVybiBmZXRjaCgpLnBpcGUoXG4gICAgICBleHBhbmQoKHsgYW5ub3RzIH0pID0+XG4gICAgICAgIGFubm90cy5za2lwIHx8IGFubm90cy5za2lwdG9rZW4gPyBmZXRjaChhbm5vdHMpIDogRU1QVFlcbiAgICAgICksXG4gICAgICBtYXAoKHsgZW50aXRpZXMsIGFubm90cyB9KSA9PiAoeyBlbnRpdGllczogZW50aXRpZXMgfHwgW10sIGFubm90cyB9KSksXG4gICAgICByZWR1Y2UoKGFjYywgeyBlbnRpdGllcywgYW5ub3RzIH0pID0+ICh7XG4gICAgICAgIGVudGl0aWVzOiBbLi4uKGFjYy5lbnRpdGllcyB8fCBbXSksIC4uLihlbnRpdGllcyB8fCBbXSldLFxuICAgICAgICBhbm5vdHM6IGFjYy5hbm5vdHMudW5pb24oYW5ub3RzKSxcbiAgICAgIH0pKVxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3R5cGVzL3Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckQsT0FBTyxFQUNMLFdBQVcsR0FHWixNQUFNLGFBQWEsQ0FBQztBQUdyQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBUTVDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHN0MsTUFBTSxPQUFPLHFCQUF5QixTQUFRLGFBQWdCO0lBQzVELGlCQUFpQjtJQUNqQixNQUFNLENBQUMsT0FBTyxDQUNaLEdBQWEsRUFDYixFQUNFLElBQUksRUFDSixJQUFJLEVBQ0osUUFBUSxHQUtUO1FBRUQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7UUFDRCxPQUFPLElBQUkscUJBQXFCLENBQUksR0FBRyxFQUFFO1lBQ3ZDLFFBQVE7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBSSxRQUE0QixFQUFFLElBQVk7UUFDL0QsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFlBQVksRUFB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VUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUM7UUFDRixPQUFPLEtBQUssRUFBRSxDQUFDLElBQUksQ0FDakIsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3BCLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ3hELEVBQ0QsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQ3JFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7U0FDakMsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNKLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleHBhbmQsIG1hcCwgcmVkdWNlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgT0RhdGFDb2xsZWN0aW9uLCBPRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIFBhdGhTZWdtZW50LFxuICBRdWVyeU9wdGlvbixcbiAgU3RydWN0dXJlZFR5cGVGaWVsZENvbmZpZyxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0RhdGFQYXRoU2VnbWVudHMgfSBmcm9tICcuLi9wYXRoJztcbmltcG9ydCB7IEFwcGx5RXhwcmVzc2lvbiwgQXBwbHlFeHByZXNzaW9uQnVpbGRlciB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0aWVzLCBPRGF0YUVudGl0eSwgT0RhdGFQcm9wZXJ0eSB9IGZyb20gJy4uL3Jlc3BvbnNlJztcbmltcG9ydCB7XG4gIE9EYXRhRW50aXRpZXNPcHRpb25zLFxuICBPRGF0YUVudGl0eU9wdGlvbnMsXG4gIE9EYXRhT3B0aW9ucyxcbiAgT0RhdGFQcm9wZXJ0eU9wdGlvbnMsXG59IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBPRGF0YVZhbHVlUmVzb3VyY2UgfSBmcm9tICcuL3ZhbHVlJztcbmltcG9ydCB7IE9EYXRhQ291bnRSZXNvdXJjZSB9IGZyb20gJy4vY291bnQnO1xuaW1wb3J0IHsgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+IGV4dGVuZHMgT0RhdGFSZXNvdXJjZTxUPiB7XG4gIC8vI3JlZ2lvbiBGYWN0b3J5XG4gIHN0YXRpYyBmYWN0b3J5PFA+KFxuICAgIGFwaTogT0RhdGFBcGksXG4gICAge1xuICAgICAgcGF0aCxcbiAgICAgIHR5cGUsXG4gICAgICBzZWdtZW50cyxcbiAgICB9OiB7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICB0eXBlPzogc3RyaW5nO1xuICAgICAgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzO1xuICAgIH0sXG4gICkge1xuICAgIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnQucHJvcGVydHksIHBhdGgpO1xuICAgIGlmICh0eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlZ21lbnQub3V0Z29pbmdUeXBlKHR5cGUpO1xuICAgICAgc2VnbWVudC5pbmNvbWluZ1R5cGUodHlwZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFA+KGFwaSwge1xuICAgICAgc2VnbWVudHMsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJlc291cmNlPE4+KHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4sIHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGJhc2VUeXBlID0gcmVzb3VyY2Uub3V0Z29pbmdUeXBlKCk7XG4gICAgbGV0IGJhc2VTY2hlbWEgPVxuICAgICAgYmFzZVR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHJlc291cmNlLmFwaS5zdHJ1Y3R1cmVkVHlwZTxhbnk+KGJhc2VUeXBlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICBsZXQgZmllbGRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGJhc2VTY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZmllbGQgPSBiYXNlU2NoZW1hLmZpZWxkPE4+KHBhdGgpO1xuICAgICAgZmllbGRUeXBlID0gZmllbGQ/LnR5cGU7XG4gICAgICBiYXNlU2NoZW1hID1cbiAgICAgICAgZmllbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gYmFzZVNjaGVtYS5maW5kUGFyZW50U2NoZW1hRm9yRmllbGQ8Tj4oZmllbGQpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydHkgPSBPRGF0YVByb3BlcnR5UmVzb3VyY2UuZmFjdG9yeTxOPihyZXNvdXJjZS5hcGksIHtcbiAgICAgIHBhdGgsXG4gICAgICB0eXBlOiBmaWVsZFR5cGUsXG4gICAgICBzZWdtZW50czogcmVzb3VyY2UuY2xvbmVTZWdtZW50cygpLFxuICAgIH0pO1xuXG4gICAgLy8gU3dpdGNoIGVudGl0eVNldCB0byBiaW5kaW5nIHR5cGUgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGJhc2VTY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBiYXNlU2NoZW1hLnR5cGUoKSAhPT0gYmFzZVR5cGUpIHtcbiAgICAgIGxldCBlbnRpdHlTZXQgPSByZXNvdXJjZS5hcGkuZmluZEVudGl0eVNldChiYXNlU2NoZW1hLnR5cGUoKSk7XG4gICAgICBpZiAoZW50aXR5U2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcGVydHkuc2VnbWVudCgocykgPT4gcy5lbnRpdHlTZXQoKS5wYXRoKGVudGl0eVNldCEubmFtZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuICBvdmVycmlkZSBjbG9uZSgpOiBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD4ge1xuICAgIHJldHVybiBzdXBlci5jbG9uZSgpIGFzIE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPjtcbiAgfVxuXG4gIG92ZXJyaWRlIHRyYW5zZm9ybTxSPihcbiAgICBvcHRzOiAoXG4gICAgICBidWlsZGVyOiBBcHBseUV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IEFwcGx5RXhwcmVzc2lvbjxUPixcbiAgICApID0+IEFwcGx5RXhwcmVzc2lvbjxUPixcbiAgICB7XG4gICAgICB0eXBlLFxuICAgICAgZmllbGRzLFxuICAgIH06IHtcbiAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgICBmaWVsZHM/OiB7IFtQIGluIGtleW9mIFJdPzogU3RydWN0dXJlZFR5cGVGaWVsZENvbmZpZyB9O1xuICAgIH0gPSB7fSxcbiAgKTogT0RhdGFQcm9wZXJ0eVJlc291cmNlPFI+IHtcbiAgICByZXR1cm4gc3VwZXIudHJhbnNmb3JtPFI+KG9wdHMsIHtcbiAgICAgIHR5cGUsXG4gICAgICBmaWVsZHMsXG4gICAgfSkgYXMgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFI+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGtleSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIGtleSA9IHRoaXMucmVzb2x2ZUtleSh2YWx1ZSk7XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSBwcm9wZXJ0eS5zZWdtZW50KChzKSA9PiBzLnByb3BlcnR5KCkua2V5KGtleSkpO1xuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIGtleXModmFsdWVzOiBhbnlbXSkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5jbG9uZSgpO1xuICAgIGNvbnN0IHR5cGVzID0gdGhpcy5wYXRoU2VnbWVudHMudHlwZXMoeyBrZXk6IHRydWUgfSk7XG4gICAgY29uc3Qga2V5cyA9IHZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT5cbiAgICAgIE9EYXRhUmVzb3VyY2UucmVzb2x2ZUtleShcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHRoaXMuYXBpLmZpbmRTdHJ1Y3R1cmVkVHlwZTxUPih0eXBlc1tpbmRleF0pLFxuICAgICAgKSxcbiAgICApO1xuICAgIHByb3BlcnR5LnNlZ21lbnQoKHMpID0+IHMua2V5cyhrZXlzKSk7XG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9XG5cbiAgdmFsdWUoKSB7XG4gICAgcmV0dXJuIE9EYXRhVmFsdWVSZXNvdXJjZS5mcm9tUmVzb3VyY2U8VD4odGhpcyk7XG4gIH1cblxuICBjb3VudCgpIHtcbiAgICByZXR1cm4gT0RhdGFDb3VudFJlc291cmNlLmZhY3Rvcnk8VD4odGhpcy5hcGksIHtcbiAgICAgIHNlZ21lbnRzOiB0aGlzLmNsb25lU2VnbWVudHMoKSxcbiAgICAgIHF1ZXJ5OiB0aGlzLmNsb25lUXVlcnk8VD4oKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qXG4gIG5hdmlnYXRpb25Qcm9wZXJ0eTxOPihwYXRoOiBzdHJpbmcpIHtcbiAgICBsZXQgc2NoZW1hOiBPRGF0YVN0cnVjdHVyZWRUeXBlPE4+IHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnNjaGVtYSBpbnN0YW5jZW9mIE9EYXRhU3RydWN0dXJlZFR5cGUpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5zY2hlbWEuZmllbGQ8YW55PihwYXRoIGFzIGtleW9mIFQpO1xuICAgICAgc2NoZW1hID1cbiAgICAgICAgZmllbGQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5zY2hlbWEuZmluZFNjaGVtYUZvckZpZWxkPE4+KGZpZWxkKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZS5mYWN0b3J5PE4+KHRoaXMuYXBpLCB7XG4gICAgICBwYXRoLFxuICAgICAgc2NoZW1hLFxuICAgICAgc2VnbWVudHM6IHRoaXMuY2xvbmVTZWdtZW50cygpLFxuICAgICAgcXVlcnk6IHRoaXMuY2xvbmVRdWVyeTxOPigpLFxuICAgIH0pO1xuICB9XG4gICovXG5cbiAgcHJvcGVydHk8UD4ocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIE9EYXRhUHJvcGVydHlSZXNvdXJjZS5mcm9tUmVzb3VyY2U8UD4odGhpcywgcGF0aCk7XG4gIH1cblxuICAvLyNyZWdpb24gUmVxdWVzdHNcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldChcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdHlPcHRpb25zICYgT0RhdGFFbnRpdGllc09wdGlvbnMgJiBPRGF0YVByb3BlcnR5T3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0KG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgLyoqXG4gICAqIEZldGNoIHRoZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJuIFRoZSBlbnRpdHkgLyBlbnRpdGllcyAvIHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBmZXRjaChvcHRpb25zPzogT0RhdGFFbnRpdHlPcHRpb25zKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj47XG4gIGZldGNoKG9wdGlvbnM/OiBPRGF0YUVudGl0aWVzT3B0aW9ucyk6IE9ic2VydmFibGU8T0RhdGFFbnRpdGllczxUPj47XG4gIGZldGNoKG9wdGlvbnM/OiBPRGF0YVByb3BlcnR5T3B0aW9ucyk6IE9ic2VydmFibGU8T0RhdGFQcm9wZXJ0eTxUPj47XG4gIGZldGNoKFxuICAgIG9wdGlvbnM6IE9EYXRhRW50aXR5T3B0aW9ucyAmXG4gICAgICBPRGF0YUVudGl0aWVzT3B0aW9ucyAmXG4gICAgICBPRGF0YVByb3BlcnR5T3B0aW9ucyA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgcHJvcGVydHkgdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBmZXRjaFByb3BlcnR5KG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAncHJvcGVydHknLCAuLi5vcHRpb25zIH0pLnBpcGUoXG4gICAgICBtYXAoKHsgcHJvcGVydHkgfSkgPT4gcHJvcGVydHkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGVudGl0eVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXR5XG4gICAqL1xuICBmZXRjaEVudGl0eShvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHkgfSkgPT4gZW50aXR5KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHkgYW5kIHJldHVybiBhcyBtb2RlbFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWxcbiAgICovXG4gIGZldGNoTW9kZWw8TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIE1vZGVsVHlwZT86IHR5cGVvZiBPRGF0YU1vZGVsO1xuICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxNIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0eSwgYW5ub3RzIH0pID0+XG4gICAgICAgIGVudGl0eVxuICAgICAgICAgID8gdGhpcy5hc01vZGVsPE0+KGVudGl0eSwgeyBhbm5vdHMsIE1vZGVsVHlwZTogb3B0aW9ucz8uTW9kZWxUeXBlIH0pXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBUaGUgZW50aXRpZXNcbiAgICovXG4gIGZldGNoRW50aXRpZXMoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYgeyB3aXRoQ291bnQ/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUW10gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcyB9KSA9PiBlbnRpdGllcyksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgZW50aXRpZXMgYW5kIHJldHVybiBhcyBjb2xsZWN0aW9uXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICBmZXRjaENvbGxlY3Rpb248TSBleHRlbmRzIE9EYXRhTW9kZWw8VD4sIEMgZXh0ZW5kcyBPRGF0YUNvbGxlY3Rpb248VCwgTT4+KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgICBDb2xsZWN0aW9uVHlwZT86IHR5cGVvZiBPRGF0YUNvbGxlY3Rpb247XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPEMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcywgYW5ub3RzIH0pID0+XG4gICAgICAgIGVudGl0aWVzXG4gICAgICAgICAgPyB0aGlzLmFzQ29sbGVjdGlvbjxNLCBDPihlbnRpdGllcywge1xuICAgICAgICAgICAgICBhbm5vdHMsXG4gICAgICAgICAgICAgIENvbGxlY3Rpb25UeXBlOiBvcHRpb25zPy5Db2xsZWN0aW9uVHlwZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hPbmUoXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPHsgZW50aXR5OiBUIHwgbnVsbDsgYW5ub3RzOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM8VD4gfT4ge1xuICAgIGxldCByZXMgPSB0aGlzLmNsb25lKCk7XG4gICAgcmVzLnF1ZXJ5KChxKSA9PiBxLnRvcCgxKSk7XG4gICAgcmV0dXJuIHJlcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4gKHtcbiAgICAgICAgZW50aXR5OiBlbnRpdGllcyAhPT0gbnVsbCAmJiBlbnRpdGllcy5sZW5ndGggPT09IDEgPyBlbnRpdGllc1swXSA6IG51bGwsXG4gICAgICAgIGFubm90cyxcbiAgICAgIH0pKSxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hNYW55KFxuICAgIHRvcDogbnVtYmVyLFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTx7IGVudGl0aWVzOiBUW107IGFubm90czogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zPFQ+IH0+IHtcbiAgICBsZXQgcmVzID0gdGhpcy5jbG9uZSgpO1xuICAgIGxldCBmZXRjaCA9IChvcHRzPzoge1xuICAgICAgc2tpcD86IG51bWJlcjtcbiAgICAgIHNraXB0b2tlbj86IHN0cmluZztcbiAgICAgIHRvcD86IG51bWJlcjtcbiAgICB9KTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPFQ+PiA9PiB7XG4gICAgICBpZiAob3B0cykge1xuICAgICAgICByZXMucXVlcnkoKHEpID0+IHEucGFnaW5nKG9wdHMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gZmV0Y2goeyB0b3AgfSkucGlwZShcbiAgICAgIGV4cGFuZCgoeyBhbm5vdHMgfSkgPT5cbiAgICAgICAgYW5ub3RzLnNraXAgfHwgYW5ub3RzLnNraXB0b2tlbiA/IGZldGNoKGFubm90cykgOiBFTVBUWSxcbiAgICAgICksXG4gICAgICBtYXAoKHsgZW50aXRpZXMsIGFubm90cyB9KSA9PiAoeyBlbnRpdGllczogZW50aXRpZXMgfHwgW10sIGFubm90cyB9KSksXG4gICAgICByZWR1Y2UoKGFjYywgeyBlbnRpdGllcywgYW5ub3RzIH0pID0+ICh7XG4gICAgICAgIGVudGl0aWVzOiBbLi4uKGFjYy5lbnRpdGllcyB8fCBbXSksIC4uLihlbnRpdGllcyB8fCBbXSldLFxuICAgICAgICBhbm5vdHM6IGFjYy5hbm5vdHMudW5pb24oYW5ub3RzKSxcbiAgICAgIH0pKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBBbGwgZW50aXRpZXNcbiAgICovXG4gIGZldGNoQWxsKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIHdpdGhDb3VudD86IGJvb2xlYW47XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9ID0ge30sXG4gICk6IE9ic2VydmFibGU8eyBlbnRpdGllczogVFtdOyBhbm5vdHM6IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9uczxUPiB9PiB7XG4gICAgbGV0IHJlcyA9IHRoaXMuY2xvbmUoKTtcbiAgICAvLyBDbGVhbiBQYWdpbmdcbiAgICByZXMucXVlcnkoKHEpID0+IHEucmVtb3ZlUGFnaW5nKCkpO1xuICAgIGxldCBmZXRjaCA9IChvcHRzPzoge1xuICAgICAgc2tpcD86IG51bWJlcjtcbiAgICAgIHNraXB0b2tlbj86IHN0cmluZztcbiAgICAgIHRvcD86IG51bWJlcjtcbiAgICB9KTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPFQ+PiA9PiB7XG4gICAgICBpZiAob3B0cykge1xuICAgICAgICByZXMucXVlcnkoKHEpID0+IHEucGFnaW5nKG9wdHMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gZmV0Y2goKS5waXBlKFxuICAgICAgZXhwYW5kKCh7IGFubm90cyB9KSA9PlxuICAgICAgICBhbm5vdHMuc2tpcCB8fCBhbm5vdHMuc2tpcHRva2VuID8gZmV0Y2goYW5ub3RzKSA6IEVNUFRZLFxuICAgICAgKSxcbiAgICAgIG1hcCgoeyBlbnRpdGllcywgYW5ub3RzIH0pID0+ICh7IGVudGl0aWVzOiBlbnRpdGllcyB8fCBbXSwgYW5ub3RzIH0pKSxcbiAgICAgIHJlZHVjZSgoYWNjLCB7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4gKHtcbiAgICAgICAgZW50aXRpZXM6IFsuLi4oYWNjLmVudGl0aWVzIHx8IFtdKSwgLi4uKGVudGl0aWVzIHx8IFtdKV0sXG4gICAgICAgIGFubm90czogYWNjLmFubm90cy51bmlvbihhbm5vdHMpLFxuICAgICAgfSkpLFxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -4,10 +4,9 @@ import { PathSegment } from '../../types';
4
4
  import { ODataResource } from '../resource';
5
5
  export class ODataReferenceResource extends ODataResource {
6
6
  //#region Factory
7
- static factory(api, { segments, query, }) {
7
+ static factory(api, { segments }) {
8
8
  segments.add(PathSegment.reference, $REF);
9
- query?.clear();
10
- return new ODataReferenceResource(api, { segments, query });
9
+ return new ODataReferenceResource(api, { segments });
11
10
  }
12
11
  clone() {
13
12
  return super.clone();
@@ -85,4 +84,4 @@ export class ODataReferenceResource extends ODataResource {
85
84
  return this.fetch({ responseType: 'entities', ...options }).pipe(map(({ entities }) => entities));
86
85
  }
87
86
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFHdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVM1QyxNQUFNLE9BQU8sc0JBQTBCLFNBQVEsYUFBZ0I7SUFDN0QsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLEVBQ0UsUUFBUSxFQUNSLEtBQUssR0FDeUQ7UUFFaEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sSUFBSSxzQkFBc0IsQ0FBSSxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ1EsS0FBSztRQUNaLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBK0IsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsWUFBWTtJQUVaLGtCQUFrQjtJQUNDLElBQUksQ0FDckIsTUFBZ0MsRUFDaEMsT0FBc0I7UUFFdEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUNmLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFDckQsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRWtCLEdBQUcsQ0FDcEIsTUFBZ0MsRUFDaEMsT0FBc0I7UUFFdEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUNkLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFDckQsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRWtCLE1BQU0sQ0FBQyxFQUN4QixJQUFJLEVBQ0osTUFBTSxFQUNOLEdBQUcsT0FBTyxLQUlPLEVBQUU7UUFDbkIsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUNuRTtRQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNELFlBQVk7SUFFWixtQ0FBbUM7SUFDbkM7Ozs7O09BS0c7SUFDSCxHQUFHLENBQ0QsTUFBZ0MsRUFDaEMsT0FBc0I7UUFFdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQ0osTUFBaUMsRUFDakMsT0FBc0I7UUFFdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsU0FBUztJQUVULDhCQUE4QjtJQUM5Qjs7Ozs7T0FLRztJQUNILEdBQUcsQ0FDRCxNQUFnQyxFQUNoQyxPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLE9BQXNCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBbUJELEtBQUssQ0FDSCxVQUdNLEVBQUU7UUFFUixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQ1QsVUFFSSxFQUFFO1FBRU4sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM1RCxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUNYLFVBRUksRUFBRTtRQUVOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDOUQsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQ2hDLENBQUM7SUFDSixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPRGF0YUFwaSB9IGZyb20gJy4uLy4uL2FwaSc7XG5pbXBvcnQgeyAkSUQsICRSRUYsIE9EQVRBX0lEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBhdGhTZWdtZW50LCBRdWVyeU9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IE9EYXRhUGF0aFNlZ21lbnRzIH0gZnJvbSAnLi4vcGF0aCc7XG5pbXBvcnQgeyBPRGF0YVF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4uL3F1ZXJ5JztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0aWVzLCBPRGF0YUVudGl0eSB9IGZyb20gJy4uL3Jlc3BvbnNlcy90eXBlcyc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eVJlc291cmNlIH0gZnJvbSAnLi9lbnRpdHknO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdGllc09wdGlvbnMsXG4gIE9EYXRhRW50aXR5T3B0aW9ucyxcbiAgT0RhdGFPcHRpb25zLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFSZWZlcmVuY2VSZXNvdXJjZTxUPiBleHRlbmRzIE9EYXRhUmVzb3VyY2U8VD4ge1xuICAvLyNyZWdpb24gRmFjdG9yeVxuICBzdGF0aWMgZmFjdG9yeTxQPihcbiAgICBhcGk6IE9EYXRhQXBpLFxuICAgIHtcbiAgICAgIHNlZ21lbnRzLFxuICAgICAgcXVlcnksXG4gICAgfTogeyBzZWdtZW50czogT0RhdGFQYXRoU2VnbWVudHM7IHF1ZXJ5PzogT0RhdGFRdWVyeU9wdGlvbnM8UD4gfVxuICApIHtcbiAgICBzZWdtZW50cy5hZGQoUGF0aFNlZ21lbnQucmVmZXJlbmNlLCAkUkVGKTtcbiAgICBxdWVyeT8uY2xlYXIoKTtcbiAgICByZXR1cm4gbmV3IE9EYXRhUmVmZXJlbmNlUmVzb3VyY2U8UD4oYXBpLCB7IHNlZ21lbnRzLCBxdWVyeSB9KTtcbiAgfVxuICBvdmVycmlkZSBjbG9uZSgpOiBPRGF0YVJlZmVyZW5jZVJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuY2xvbmUoKSBhcyBPRGF0YVJlZmVyZW5jZVJlc291cmNlPFQ+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcG9zdChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLnBvc3QoXG4gICAgICB7IFtPREFUQV9JRF06IHRhcmdldC5lbmRwb2ludFVybCh7IHBhcmFtczogZmFsc2UgfSkgfSxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHB1dChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLnB1dChcbiAgICAgIHsgW09EQVRBX0lEXTogdGFyZ2V0LmVuZHBvaW50VXJsKHsgcGFyYW1zOiBmYWxzZSB9KSB9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGVsZXRlKHtcbiAgICBldGFnLFxuICAgIHRhcmdldCxcbiAgICAuLi5vcHRpb25zXG4gIH06IHtcbiAgICBldGFnPzogc3RyaW5nO1xuICAgIHRhcmdldD86IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PjtcbiAgfSAmIE9EYXRhT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBvcHRpb25zLnBhcmFtcyA9IHsgWyRJRF06IHRhcmdldC5lbmRwb2ludFVybCh7IHBhcmFtczogZmFsc2UgfSkgfTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZSh7IGV0YWcsIC4uLm9wdGlvbnMgfSk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIFNob3J0Y3V0cyBmb3IgY29sbGVjdGlvbnNcbiAgLyoqXG4gICAqIEFkZCB0aGUgZ2l2ZW4gdGFyZ2V0IHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgcmVzb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgcmVzcG9uc2VcbiAgICovXG4gIGFkZChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucG9zdCh0YXJnZXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgZ2l2ZW4gdGFyZ2V0IGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldCByZXNvdXJjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgcmVtb3ZlKFxuICAgIHRhcmdldD86IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlKHsgdGFyZ2V0LCAuLi5vcHRpb25zIH0pO1xuICB9XG4gIC8vI3JlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHMgZm9yIHNpbmdsZVxuICAvKipcbiAgICogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIHRhcmdldC5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHJlc291cmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICBzZXQoXG4gICAgdGFyZ2V0OiBPRGF0YUVudGl0eVJlc291cmNlPGFueT4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnB1dCh0YXJnZXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuc2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIHRhcmdldC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICB1bnNldChvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGUob3B0aW9ucyk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIEZldGNoXG4gIC8qKlxuICAgKiBGZXRjaCBlbnRpdHkgLyBlbnRpdGllc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgcmVxdWVzdFxuICAgKiBAcmV0dXJuIEFuIG9ic2VydmFibGUgb2YgdGhlIGVudGl0eSBvciBlbnRpdGllcyB3aXRoIGFubm90YXRpb25zXG4gICAqL1xuICBmZXRjaChcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdHlPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXR5PFQ+PjtcbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXRpZXNPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfVxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zOiBPRGF0YUVudGl0eU9wdGlvbnMgJlxuICAgICAgT0RhdGFFbnRpdGllc09wdGlvbnMgJiB7XG4gICAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBlbnRpdHlcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGVudGl0eVxuICAgKi9cbiAgZmV0Y2hFbnRpdHkoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSA9IHt9XG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHkgfSkgPT4gZW50aXR5KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGVudGl0aWVzXG4gICAqL1xuICBmZXRjaEVudGl0aWVzKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPFRbXSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh7IHJlc3BvbnNlVHlwZTogJ2VudGl0aWVzJywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzIH0pID0+IGVudGl0aWVzKVxuICAgICk7XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9yZWZlcmVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFFdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVM1QyxNQUFNLE9BQU8sc0JBQTBCLFNBQVEsYUFBZ0I7SUFDN0QsaUJBQWlCO0lBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQ1osR0FBYSxFQUNiLEVBQUUsUUFBUSxFQUFtQztRQUU3QyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLHNCQUFzQixDQUFJLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVRLEtBQUs7UUFDWixPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQStCLENBQUM7SUFDcEQsQ0FBQztJQUNELFlBQVk7SUFFWixrQkFBa0I7SUFDQyxJQUFJLENBQ3JCLE1BQWdDLEVBQ2hDLE9BQXNCO1FBRXRCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FDZixFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQ3JELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVrQixHQUFHLENBQ3BCLE1BQWdDLEVBQ2hDLE9BQXNCO1FBRXRCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FDZCxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQ3JELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVrQixNQUFNLENBQUMsRUFDeEIsSUFBSSxFQUNKLE1BQU0sRUFDTixHQUFHLE9BQU8sS0FJTyxFQUFFO1FBQ25CLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDbkU7UUFDRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxZQUFZO0lBRVosbUNBQW1DO0lBQ25DOzs7OztPQUtHO0lBQ0gsR0FBRyxDQUNELE1BQWdDLEVBQ2hDLE9BQXNCO1FBRXRCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUNKLE1BQWlDLEVBQ2pDLE9BQXNCO1FBRXRCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELFNBQVM7SUFFVCw4QkFBOEI7SUFDOUI7Ozs7O09BS0c7SUFDSCxHQUFHLENBQ0QsTUFBZ0MsRUFDaEMsT0FBc0I7UUFFdEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxPQUFzQjtRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQW1CRCxLQUFLLENBQ0gsVUFHTSxFQUFFO1FBRVIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUNULFVBRUksRUFBRTtRQUVOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUQsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FDWCxVQUVJLEVBQUU7UUFFTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzlELEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUNoQyxDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgJElELCAkUkVGLCBPREFUQV9JRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQYXRoU2VnbWVudCwgUXVlcnlPcHRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBPRGF0YVBhdGhTZWdtZW50cyB9IGZyb20gJy4uL3BhdGgnO1xuaW1wb3J0IHsgT0RhdGFSZXNvdXJjZSB9IGZyb20gJy4uL3Jlc291cmNlJztcbmltcG9ydCB7IE9EYXRhRW50aXRpZXMsIE9EYXRhRW50aXR5IH0gZnJvbSAnLi4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgT0RhdGFFbnRpdHlSZXNvdXJjZSB9IGZyb20gJy4vZW50aXR5JztcbmltcG9ydCB7XG4gIE9EYXRhRW50aXRpZXNPcHRpb25zLFxuICBPRGF0YUVudGl0eU9wdGlvbnMsXG4gIE9EYXRhT3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zJztcblxuZXhwb3J0IGNsYXNzIE9EYXRhUmVmZXJlbmNlUmVzb3VyY2U8VD4gZXh0ZW5kcyBPRGF0YVJlc291cmNlPFQ+IHtcbiAgLy8jcmVnaW9uIEZhY3RvcnlcbiAgc3RhdGljIGZhY3Rvcnk8UD4oXG4gICAgYXBpOiBPRGF0YUFwaSxcbiAgICB7IHNlZ21lbnRzIH06IHsgc2VnbWVudHM6IE9EYXRhUGF0aFNlZ21lbnRzIH0sXG4gICkge1xuICAgIHNlZ21lbnRzLmFkZChQYXRoU2VnbWVudC5yZWZlcmVuY2UsICRSRUYpO1xuICAgIHJldHVybiBuZXcgT0RhdGFSZWZlcmVuY2VSZXNvdXJjZTxQPihhcGksIHsgc2VnbWVudHMgfSk7XG4gIH1cblxuICBvdmVycmlkZSBjbG9uZSgpOiBPRGF0YVJlZmVyZW5jZVJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuY2xvbmUoKSBhcyBPRGF0YVJlZmVyZW5jZVJlc291cmNlPFQ+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcG9zdChcbiAgICB0YXJnZXQ6IE9EYXRhRW50aXR5UmVzb3VyY2U8YW55PixcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zLFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBzdXBlci5wb3N0KFxuICAgICAgeyBbT0RBVEFfSURdOiB0YXJnZXQuZW5kcG9pbnRVcmwoeyBwYXJhbXM6IGZhbHNlIH0pIH0sXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHV0KFxuICAgIHRhcmdldDogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLnB1dChcbiAgICAgIHsgW09EQVRBX0lEXTogdGFyZ2V0LmVuZHBvaW50VXJsKHsgcGFyYW1zOiBmYWxzZSB9KSB9LFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGRlbGV0ZSh7XG4gICAgZXRhZyxcbiAgICB0YXJnZXQsXG4gICAgLi4ub3B0aW9uc1xuICB9OiB7XG4gICAgZXRhZz86IHN0cmluZztcbiAgICB0YXJnZXQ/OiBPRGF0YUVudGl0eVJlc291cmNlPGFueT47XG4gIH0gJiBPRGF0YU9wdGlvbnMgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgb3B0aW9ucy5wYXJhbXMgPSB7IFskSURdOiB0YXJnZXQuZW5kcG9pbnRVcmwoeyBwYXJhbXM6IGZhbHNlIH0pIH07XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5kZWxldGUoeyBldGFnLCAuLi5vcHRpb25zIH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHMgZm9yIGNvbGxlY3Rpb25zXG4gIC8qKlxuICAgKiBBZGQgdGhlIGdpdmVuIHRhcmdldCB0byB0aGUgY29sbGVjdGlvbi5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHJlc291cmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICBhZGQoXG4gICAgdGFyZ2V0OiBPRGF0YUVudGl0eVJlc291cmNlPGFueT4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wb3N0KHRhcmdldCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBnaXZlbiB0YXJnZXQgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHJlc291cmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICByZW1vdmUoXG4gICAgdGFyZ2V0PzogT0RhdGFFbnRpdHlSZXNvdXJjZTxhbnk+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlKHsgdGFyZ2V0LCAuLi5vcHRpb25zIH0pO1xuICB9XG4gIC8vI3JlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHMgZm9yIHNpbmdsZVxuICAvKipcbiAgICogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGdpdmVuIHRhcmdldC5cbiAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHJlc291cmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqL1xuICBzZXQoXG4gICAgdGFyZ2V0OiBPRGF0YUVudGl0eVJlc291cmNlPGFueT4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wdXQodGFyZ2V0LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBnaXZlbiB0YXJnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgdW5zZXQob3B0aW9ucz86IE9EYXRhT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlKG9wdGlvbnMpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBGZXRjaFxuICAvKipcbiAgICogRmV0Y2ggZW50aXR5IC8gZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybiBBbiBvYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHkgb3IgZW50aXRpZXMgd2l0aCBhbm5vdGF0aW9uc1xuICAgKi9cbiAgZmV0Y2goXG4gICAgb3B0aW9ucz86IE9EYXRhRW50aXR5T3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zPzogT0RhdGFFbnRpdGllc09wdGlvbnMgJiB7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPE9EYXRhRW50aXRpZXM8VD4+O1xuICBmZXRjaChcbiAgICBvcHRpb25zOiBPRGF0YUVudGl0eU9wdGlvbnMgJlxuICAgICAgT0RhdGFFbnRpdGllc09wdGlvbnMgJiB7XG4gICAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCB0aGUgZW50aXR5XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0XG4gICAqIEByZXR1cm5zIFRoZSBlbnRpdHlcbiAgICovXG4gIGZldGNoRW50aXR5KFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZldGNoKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KS5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0eSB9KSA9PiBlbnRpdHkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZW50aXRpZXNcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcbiAgICogQHJldHVybnMgVGhlIGVudGl0aWVzXG4gICAqL1xuICBmZXRjaEVudGl0aWVzKFxuICAgIG9wdGlvbnM6IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxUW10gfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goeyByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsIC4uLm9wdGlvbnMgfSkucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcyB9KSA9PiBlbnRpdGllcyksXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==