@decaf-ts/decorator-validation 1.6.5 → 1.7.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 (148) hide show
  1. package/dist/decorator-validation.cjs +1199 -386
  2. package/dist/decorator-validation.esm.cjs +1155 -341
  3. package/lib/constants/index.cjs +1 -1
  4. package/lib/esm/index.d.ts +5 -37
  5. package/lib/esm/index.js +6 -38
  6. package/lib/esm/model/Model.d.ts +107 -35
  7. package/lib/esm/model/Model.js +110 -45
  8. package/lib/esm/model/constants.d.ts +3 -3
  9. package/lib/esm/model/constants.js +4 -4
  10. package/lib/esm/model/construction.d.ts +3 -3
  11. package/lib/esm/model/construction.js +4 -4
  12. package/lib/esm/model/decorators.d.ts +3 -3
  13. package/lib/esm/model/decorators.js +2 -3
  14. package/lib/esm/model/index.d.ts +1 -0
  15. package/lib/esm/model/index.js +2 -1
  16. package/lib/esm/model/types.d.ts +30 -11
  17. package/lib/esm/model/types.js +1 -1
  18. package/lib/esm/model/utils.d.ts +3 -0
  19. package/lib/esm/model/utils.js +11 -0
  20. package/lib/esm/model/validation.d.ts +5 -5
  21. package/lib/esm/model/validation.js +8 -9
  22. package/lib/esm/utils/Decoration.d.ts +123 -0
  23. package/lib/esm/utils/Decoration.js +192 -0
  24. package/lib/esm/utils/constants.d.ts +27 -9
  25. package/lib/esm/utils/constants.js +28 -10
  26. package/lib/esm/utils/dates.d.ts +26 -16
  27. package/lib/esm/utils/dates.js +27 -17
  28. package/lib/esm/utils/decorators.d.ts +41 -0
  29. package/lib/esm/utils/decorators.js +42 -1
  30. package/lib/esm/utils/hashing.d.ts +50 -6
  31. package/lib/esm/utils/hashing.js +49 -5
  32. package/lib/esm/utils/index.d.ts +1 -0
  33. package/lib/esm/utils/index.js +2 -1
  34. package/lib/esm/utils/registry.d.ts +3 -3
  35. package/lib/esm/utils/registry.js +1 -1
  36. package/lib/esm/utils/serialization.d.ts +1 -1
  37. package/lib/esm/utils/serialization.js +4 -3
  38. package/lib/esm/utils/strings.d.ts +4 -4
  39. package/lib/esm/utils/strings.js +5 -5
  40. package/lib/esm/utils/types.d.ts +123 -16
  41. package/lib/esm/utils/types.js +1 -1
  42. package/lib/esm/validation/Validators/DateValidator.d.ts +40 -8
  43. package/lib/esm/validation/Validators/DateValidator.js +41 -9
  44. package/lib/esm/validation/Validators/EmailValidator.d.ts +39 -7
  45. package/lib/esm/validation/Validators/EmailValidator.js +40 -8
  46. package/lib/esm/validation/Validators/ListValidator.d.ts +44 -6
  47. package/lib/esm/validation/Validators/ListValidator.js +45 -7
  48. package/lib/esm/validation/Validators/MaxValidator.d.ts +52 -6
  49. package/lib/esm/validation/Validators/MaxValidator.js +53 -7
  50. package/lib/esm/validation/Validators/MinValidator.d.ts +52 -6
  51. package/lib/esm/validation/Validators/MinValidator.js +53 -7
  52. package/lib/esm/validation/Validators/PatternValidator.d.ts +75 -9
  53. package/lib/esm/validation/Validators/PatternValidator.js +76 -10
  54. package/lib/esm/validation/Validators/RequiredValidator.d.ts +52 -6
  55. package/lib/esm/validation/Validators/RequiredValidator.js +53 -7
  56. package/lib/esm/validation/Validators/TypeValidator.d.ts +60 -6
  57. package/lib/esm/validation/Validators/TypeValidator.js +69 -7
  58. package/lib/esm/validation/Validators/URLValidator.d.ts +41 -7
  59. package/lib/esm/validation/Validators/URLValidator.js +42 -8
  60. package/lib/esm/validation/Validators/Validator.d.ts +76 -16
  61. package/lib/esm/validation/Validators/Validator.js +68 -11
  62. package/lib/esm/validation/Validators/ValidatorRegistry.d.ts +1 -7
  63. package/lib/esm/validation/Validators/ValidatorRegistry.js +4 -11
  64. package/lib/esm/validation/decorators.d.ts +50 -40
  65. package/lib/esm/validation/decorators.js +102 -53
  66. package/lib/esm/validation/types.d.ts +146 -28
  67. package/lib/esm/validation/types.js +1 -1
  68. package/lib/index.cjs +7 -39
  69. package/lib/index.d.ts +5 -37
  70. package/lib/model/Model.cjs +114 -51
  71. package/lib/model/Model.d.ts +107 -35
  72. package/lib/model/constants.cjs +4 -4
  73. package/lib/model/constants.d.ts +3 -3
  74. package/lib/model/construction.cjs +4 -4
  75. package/lib/model/construction.d.ts +3 -3
  76. package/lib/model/decorators.cjs +3 -4
  77. package/lib/model/decorators.d.ts +3 -3
  78. package/lib/model/index.cjs +2 -1
  79. package/lib/model/index.d.ts +1 -0
  80. package/lib/model/types.cjs +1 -1
  81. package/lib/model/types.d.ts +30 -11
  82. package/lib/model/utils.cjs +15 -0
  83. package/lib/model/utils.d.ts +3 -0
  84. package/lib/model/validation.cjs +11 -12
  85. package/lib/model/validation.d.ts +5 -5
  86. package/lib/utils/Decoration.cjs +196 -0
  87. package/lib/utils/Decoration.d.ts +123 -0
  88. package/lib/utils/constants.cjs +29 -11
  89. package/lib/utils/constants.d.ts +27 -9
  90. package/lib/utils/dates.cjs +28 -18
  91. package/lib/utils/dates.d.ts +26 -16
  92. package/lib/utils/decorators.cjs +42 -1
  93. package/lib/utils/decorators.d.ts +41 -0
  94. package/lib/utils/hashing.cjs +49 -5
  95. package/lib/utils/hashing.d.ts +50 -6
  96. package/lib/utils/index.cjs +2 -1
  97. package/lib/utils/index.d.ts +1 -0
  98. package/lib/utils/registry.cjs +1 -1
  99. package/lib/utils/registry.d.ts +3 -3
  100. package/lib/utils/serialization.cjs +5 -4
  101. package/lib/utils/serialization.d.ts +1 -1
  102. package/lib/utils/strings.cjs +5 -5
  103. package/lib/utils/strings.d.ts +4 -4
  104. package/lib/utils/types.cjs +1 -1
  105. package/lib/utils/types.d.ts +123 -16
  106. package/lib/validation/Validation.cjs +1 -1
  107. package/lib/validation/Validators/DateValidator.cjs +41 -9
  108. package/lib/validation/Validators/DateValidator.d.ts +40 -8
  109. package/lib/validation/Validators/DiffValidator.cjs +1 -1
  110. package/lib/validation/Validators/EmailValidator.cjs +40 -8
  111. package/lib/validation/Validators/EmailValidator.d.ts +39 -7
  112. package/lib/validation/Validators/EqualsValidator.cjs +1 -1
  113. package/lib/validation/Validators/GreaterThanOrEqualValidator.cjs +1 -1
  114. package/lib/validation/Validators/GreaterThanValidator.cjs +1 -1
  115. package/lib/validation/Validators/LessThanOrEqualValidator.cjs +1 -1
  116. package/lib/validation/Validators/LessThanValidator.cjs +1 -1
  117. package/lib/validation/Validators/ListValidator.cjs +45 -7
  118. package/lib/validation/Validators/ListValidator.d.ts +44 -6
  119. package/lib/validation/Validators/MaxLengthValidator.cjs +1 -1
  120. package/lib/validation/Validators/MaxValidator.cjs +53 -7
  121. package/lib/validation/Validators/MaxValidator.d.ts +52 -6
  122. package/lib/validation/Validators/MinLengthValidator.cjs +1 -1
  123. package/lib/validation/Validators/MinValidator.cjs +53 -7
  124. package/lib/validation/Validators/MinValidator.d.ts +52 -6
  125. package/lib/validation/Validators/PasswordValidator.cjs +1 -1
  126. package/lib/validation/Validators/PatternValidator.cjs +76 -10
  127. package/lib/validation/Validators/PatternValidator.d.ts +75 -9
  128. package/lib/validation/Validators/RequiredValidator.cjs +53 -7
  129. package/lib/validation/Validators/RequiredValidator.d.ts +52 -6
  130. package/lib/validation/Validators/StepValidator.cjs +1 -1
  131. package/lib/validation/Validators/TypeValidator.cjs +71 -9
  132. package/lib/validation/Validators/TypeValidator.d.ts +60 -6
  133. package/lib/validation/Validators/URLValidator.cjs +42 -8
  134. package/lib/validation/Validators/URLValidator.d.ts +41 -7
  135. package/lib/validation/Validators/Validator.cjs +69 -12
  136. package/lib/validation/Validators/Validator.d.ts +76 -16
  137. package/lib/validation/Validators/ValidatorRegistry.cjs +4 -12
  138. package/lib/validation/Validators/ValidatorRegistry.d.ts +1 -7
  139. package/lib/validation/Validators/constants.cjs +2 -2
  140. package/lib/validation/Validators/decorators.cjs +2 -2
  141. package/lib/validation/Validators/index.cjs +1 -1
  142. package/lib/validation/Validators/utils.cjs +3 -3
  143. package/lib/validation/decorators.cjs +105 -56
  144. package/lib/validation/decorators.d.ts +50 -40
  145. package/lib/validation/index.cjs +1 -1
  146. package/lib/validation/types.cjs +1 -1
  147. package/lib/validation/types.d.ts +146 -28
  148. package/package.json +2 -1
@@ -4,53 +4,72 @@ import { validate } from "./validation";
4
4
  import { Hashing } from "../utils/hashing";
5
5
  import { ModelKeys } from "../utils/constants";
6
6
  import { ValidationKeys } from "../validation/Validators/constants";
7
- import { sf } from "../utils/strings";
8
7
  import { jsTypes, ReservedModels } from "./constants";
8
+ import { getModelKey, getMetadata } from "./utils";
9
9
  let modelBuilderFunction;
10
10
  let actingModelRegistry;
11
- export function isPropertyModel(target, attribute) {
12
- if (isModel(target[attribute]))
13
- return true;
14
- const metadata = Reflect.getMetadata(ModelKeys.TYPE, target, attribute);
15
- return Model.get(metadata.name) ? metadata.name : undefined;
16
- }
17
11
  /**
18
- * @summary For Serialization/deserialization purposes.
19
- * @description Reads the {@link ModelKeys.ANCHOR} property of a {@link Model} to discover the class to instantiate
12
+ * @description Registry manager for model constructors that enables serialization and rebuilding
13
+ * @summary The ModelRegistryManager implements the ModelRegistry interface and provides
14
+ * functionality for registering, retrieving, and building model instances. It maintains
15
+ * a cache of model constructors indexed by name, allowing for efficient lookup and instantiation.
16
+ * This class is essential for the serialization and deserialization of model objects.
20
17
  *
21
- * @function isModel
22
- * @memberOf module:decorator-validation.Validation
23
- * @category Validation
24
- */
25
- export function isModel(target) {
26
- try {
27
- return target instanceof Model || !!Model.getMetadata(target);
28
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
29
- }
30
- catch (e) {
31
- return false;
32
- }
33
- }
34
- /**
35
- * @summary Util class to enable serialization and correct rebuilding
36
- *
37
- * @param {string} anchorKey defaults to {@link ModelKeys.ANCHOR}. The property name where the registered class name is stored;
38
- * @param {function(Record<string, any>): boolean} [testFunction] method to test if the provided object is a Model Object. defaults to {@link isModel}
18
+ * @param {function(Record<string, any>): boolean} [testFunction] - Function to test if an object is a model, defaults to {@link Model#isModel}
39
19
  *
40
20
  * @class ModelRegistryManager
41
- * @implements ModelRegistry
42
- *
21
+ * @template M Type of model that can be registered, must extend Model
22
+ * @implements ModelRegistry<M>
43
23
  * @category Model
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * // Create a model registry
28
+ * const registry = new ModelRegistryManager();
29
+ *
30
+ * // Register a model class
31
+ * registry.register(User);
32
+ *
33
+ * // Retrieve a model constructor by name
34
+ * const UserClass = registry.get("User");
35
+ *
36
+ * // Build a model instance from a plain object
37
+ * const userData = { name: "John", age: 30 };
38
+ * const user = registry.build(userData, "User");
39
+ * ```
40
+ *
41
+ * @mermaid
42
+ * sequenceDiagram
43
+ * participant C as Client
44
+ * participant R as ModelRegistryManager
45
+ * participant M as Model Class
46
+ *
47
+ * C->>R: new ModelRegistryManager(testFunction)
48
+ * C->>R: register(ModelClass)
49
+ * R->>R: Store in cache
50
+ * C->>R: get("ModelName")
51
+ * R-->>C: ModelClass constructor
52
+ * C->>R: build(data, "ModelName")
53
+ * R->>R: Get constructor from cache
54
+ * R->>M: new ModelClass(data)
55
+ * M-->>R: Model instance
56
+ * R-->>C: Model instance
44
57
  */
45
58
  export class ModelRegistryManager {
46
- constructor(testFunction = isModel) {
59
+ constructor(testFunction = Model.isModel) {
47
60
  this.cache = {};
48
61
  this.testFunction = testFunction;
49
62
  }
50
63
  /**
51
- * @summary register new Models
52
- * @param {any} constructor
53
- * @param {string} [name] when not defined, the name of the constructor will be used
64
+ * @description Registers a model constructor with the registry
65
+ * @summary Adds a model constructor to the registry cache, making it available for
66
+ * later retrieval and instantiation. If no name is provided, the constructor's name
67
+ * property is used as the key in the registry.
68
+ *
69
+ * @param {ModelConstructor<M>} constructor - The model constructor to register
70
+ * @param {string} [name] - Optional name to register the constructor under, defaults to constructor.name
71
+ * @return {void}
72
+ * @throws {Error} If the constructor is not a function
54
73
  */
55
74
  register(constructor, name) {
56
75
  if (typeof constructor !== "function")
@@ -82,7 +101,7 @@ export class ModelRegistryManager {
82
101
  throw new Error("Provided obj is not a Model object");
83
102
  const name = clazz || Model.getMetadata(obj);
84
103
  if (!(name in this.cache))
85
- throw new Error(sf("Provided class {0} is not a registered Model object", name));
104
+ throw new Error(`Provided class ${name} is not a registered Model object`);
86
105
  return new this.cache[name](obj);
87
106
  }
88
107
  }
@@ -90,9 +109,10 @@ export class ModelRegistryManager {
90
109
  * @summary Bulk Registers Models
91
110
  * @description Useful when using bundlers that might not evaluate all the code at once
92
111
  *
93
- * @param {Array<Constructor<T>> | Array<{name: string, constructor: Constructor<T>}>} [models]
112
+ * @template M extends Model
113
+ * @param {Array<Constructor<M>> | Array<{name: string, constructor: Constructor<M>}>} [models]
94
114
  *
95
- * @memberOf module:decorator-validation.Model
115
+ * @memberOf module:decorator-validation
96
116
  * @category Model
97
117
  */
98
118
  export function bulkModelRegister(...models) {
@@ -109,9 +129,10 @@ export function bulkModelRegister(...models) {
109
129
  * - Have all their required properties marked with '!';
110
130
  * - Have all their optional properties marked as '?':
111
131
  *
112
- * @param {Model | {}} model base object from which to populate properties from
132
+ * @param {ModelArg<Model>} model base object from which to populate properties from
113
133
  *
114
134
  * @class Model
135
+ * @category Model
115
136
  * @abstract
116
137
  * @implements Validatable
117
138
  * @implements Serializable
@@ -210,7 +231,7 @@ export class Model {
210
231
  obj[prop] ?? undefined;
211
232
  if (typeof self[prop] !== "object")
212
233
  continue;
213
- const propM = isPropertyModel(self, prop);
234
+ const propM = Model.isPropertyModel(self, prop);
214
235
  if (propM) {
215
236
  try {
216
237
  self[prop] = Model.build(self[prop], typeof propM === "string" ? propM : undefined);
@@ -223,7 +244,7 @@ export class Model {
223
244
  const allDecorators = Reflection.getPropertyDecorators(ValidationKeys.REFLECT, self, prop).decorators;
224
245
  decorators = allDecorators.filter((d) => [ModelKeys.TYPE, ValidationKeys.TYPE].indexOf(d.key) !== -1);
225
246
  if (!decorators || !decorators.length)
226
- throw new Error(sf("failed to find decorators for property {0}", prop));
247
+ throw new Error(`failed to find decorators for property ${prop}`);
227
248
  dec = decorators.pop();
228
249
  const clazz = dec.props.name
229
250
  ? [dec.props.name]
@@ -339,10 +360,7 @@ export class Model {
339
360
  return Model.getRegistry().build(obj, clazz);
340
361
  }
341
362
  static getMetadata(model) {
342
- const metadata = Reflect.getMetadata(Model.key(ModelKeys.MODEL), model.constructor);
343
- if (!metadata)
344
- throw new Error("could not find metadata for provided " + model.constructor.name);
345
- return metadata;
363
+ return getMetadata(model);
346
364
  }
347
365
  static getAttributes(model) {
348
366
  const result = [];
@@ -382,7 +400,54 @@ export class Model {
382
400
  * @param {string} str
383
401
  */
384
402
  static key(str) {
385
- return ModelKeys.REFLECT + str;
403
+ return getModelKey(str);
404
+ }
405
+ /**
406
+ * @description Determines if an object is a model instance or has model metadata
407
+ * @summary Checks whether a given object is either an instance of the Model class or
408
+ * has model metadata attached to it. This function is essential for serialization and
409
+ * deserialization processes, as it helps identify model objects that need special handling.
410
+ * It safely handles potential errors during metadata retrieval.
411
+ *
412
+ * @param {Record<string, any>} target - The object to check
413
+ * @return {boolean} True if the object is a model instance or has model metadata, false otherwise
414
+ *
415
+ * @example
416
+ * ```typescript
417
+ * // Check if an object is a model
418
+ * const user = new User({ name: "John" });
419
+ * const isUserModel = isModel(user); // true
420
+ *
421
+ * // Check a plain object
422
+ * const plainObject = { name: "John" };
423
+ * const isPlainObjectModel = isModel(plainObject); // false
424
+ * ```
425
+ */
426
+ static isModel(target) {
427
+ try {
428
+ return target instanceof Model || !!Model.getMetadata(target);
429
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
430
+ }
431
+ catch (e) {
432
+ return false;
433
+ }
434
+ }
435
+ /**
436
+ * @description Checks if a property of a model is itself a model or has a model type
437
+ * @summary Determines whether a specific property of a model instance is either a model instance
438
+ * or has a type that is registered as a model. This function is used for model serialization
439
+ * and deserialization to properly handle nested models.
440
+ * @template M extends {@link Model}
441
+ * @param {M} target - The model instance to check
442
+ * @param {string} attribute - The property name to check
443
+ * @return {boolean | string | undefined} Returns true if the property is a model instance,
444
+ * the model name if the property has a model type, or undefined if not a model
445
+ */
446
+ static isPropertyModel(target, attribute) {
447
+ if (Model.isModel(target[attribute]))
448
+ return true;
449
+ const metadata = Reflect.getMetadata(ModelKeys.TYPE, target, attribute);
450
+ return Model.get(metadata.name) ? metadata.name : undefined;
386
451
  }
387
452
  }
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBYXZELE9BQU8sRUFBcUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELElBQUksb0JBQXNELENBQUM7QUFDM0QsSUFBSSxtQkFBeUMsQ0FBQztBQUU5QyxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFTLEVBQ1QsU0FBaUI7SUFFakIsSUFBSSxPQUFPLENBQUUsTUFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzlELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUEyQjtJQUNqRCxJQUFJLENBQUM7UUFDSCxP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QUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sU0FBUyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDakMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VyaWFsaXphdGlvbiB9IGZyb20gXCIuLi91dGlscy9zZXJpYWxpemF0aW9uXCI7XG5pbXBvcnQgeyBCdWlsZGVyUmVnaXN0cnkgfSBmcm9tIFwiLi4vdXRpbHMvcmVnaXN0cnlcIjtcbmltcG9ydCB7IE1vZGVsRXJyb3JEZWZpbml0aW9uIH0gZnJvbSBcIi4vTW9kZWxFcnJvckRlZmluaXRpb25cIjtcbmltcG9ydCB7XG4gIENvbXBhcmFibGUsXG4gIENvbnN0cnVjdG9yLFxuICBIYXNoYWJsZSxcbiAgTW9kZWxBcmcsXG4gIE1vZGVsQnVpbGRlckZ1bmN0aW9uLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICBTZXJpYWxpemFibGUsXG4gIFZhbGlkYXRhYmxlLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVjb3JhdG9yTWV0YWRhdGEsIGlzRXF1YWwsIFJlZmxlY3Rpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IHZhbGlkYXRlIH0gZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgSGFzaGluZyB9IGZyb20gXCIuLi91dGlscy9oYXNoaW5nXCI7XG5pbXBvcnQgeyBNb2RlbEtleXMgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuLi92YWxpZGF0aW9uL1ZhbGlkYXRvcnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBzZiB9IGZyb20gXCIuLi91dGlscy9zdHJpbmdzXCI7XG5pbXBvcnQgeyBqc1R5cGVzLCBSZXNlcnZlZE1vZGVscyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5sZXQgbW9kZWxCdWlsZGVyRnVuY3Rpb246IE1vZGVsQnVpbGRlckZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xubGV0IGFjdGluZ01vZGVsUmVnaXN0cnk6IEJ1aWxkZXJSZWdpc3RyeTxhbnk+O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eU1vZGVsPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIHRhcmdldDogTSxcbiAgYXR0cmlidXRlOiBzdHJpbmdcbik6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoaXNNb2RlbCgodGFyZ2V0IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2F0dHJpYnV0ZV0pKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKE1vZGVsS2V5cy5UWVBFLCB0YXJnZXQsIGF0dHJpYnV0ZSk7XG4gIHJldHVybiBNb2RlbC5nZXQobWV0YWRhdGEubmFtZSkgPyBtZXRhZGF0YS5uYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEZvciBTZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBwdXJwb3Nlcy5cbiAqIEBkZXNjcmlwdGlvbiBSZWFkcyB0aGUge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5IG9mIGEge0BsaW5rIE1vZGVsfSB0byBkaXNjb3ZlciB0aGUgY2xhc3MgdG8gaW5zdGFudGlhdGVcbiAqXG4gKiBAZnVuY3Rpb24gaXNNb2RlbFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5WYWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgVmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNNb2RlbCh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgTW9kZWwgfHwgISFNb2RlbC5nZXRNZXRhZGF0YSh0YXJnZXQgYXMgYW55KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IE1vZGVsUmVnaXN0cnkgSW50ZXJmYWNlXG4gKlxuICogQGludGVyZmFjZSBNb2RlbFJlZ2lzdHJ5XG4gKiBAZXh0ZW5kcyBCdWlsZGVyUmVnaXN0cnk8TW9kZWw+XG4gKlxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsUmVnaXN0cnk8VCBleHRlbmRzIE1vZGVsPiA9IEJ1aWxkZXJSZWdpc3RyeTxUPjtcblxuLyoqXG4gKiBAc3VtbWFyeSBVdGlsIGNsYXNzIHRvIGVuYWJsZSBzZXJpYWxpemF0aW9uIGFuZCBjb3JyZWN0IHJlYnVpbGRpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYW5jaG9yS2V5IGRlZmF1bHRzIHRvIHtAbGluayBNb2RlbEtleXMuQU5DSE9SfS4gVGhlIHByb3BlcnR5IG5hbWUgd2hlcmUgdGhlIHJlZ2lzdGVyZWQgY2xhc3MgbmFtZSBpcyBzdG9yZWQ7XG4gKiBAcGFyYW0ge2Z1bmN0aW9uKFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFufSBbdGVzdEZ1bmN0aW9uXSBtZXRob2QgdG8gdGVzdCBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IGlzIGEgTW9kZWwgT2JqZWN0LiBkZWZhdWx0cyB0byB7QGxpbmsgaXNNb2RlbH1cbiAqXG4gKiBAY2xhc3MgTW9kZWxSZWdpc3RyeU1hbmFnZXJcbiAqIEBpbXBsZW1lbnRzIE1vZGVsUmVnaXN0cnlcbiAqXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsUmVnaXN0cnlNYW5hZ2VyPFQgZXh0ZW5kcyBNb2RlbD4gaW1wbGVtZW50cyBNb2RlbFJlZ2lzdHJ5PFQ+IHtcbiAgcHJpdmF0ZSBjYWNoZTogUmVjb3JkPHN0cmluZywgTW9kZWxDb25zdHJ1Y3RvcjxUPj4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZXN0RnVuY3Rpb246IChvYmo6IG9iamVjdCkgPT4gYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih0ZXN0RnVuY3Rpb246IChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGJvb2xlYW4gPSBpc01vZGVsKSB7XG4gICAgdGhpcy50ZXN0RnVuY3Rpb24gPSB0ZXN0RnVuY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVnaXN0ZXIgbmV3IE1vZGVsc1xuICAgKiBAcGFyYW0ge2FueX0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWdpc3Rlcihjb25zdHJ1Y3RvcjogTW9kZWxDb25zdHJ1Y3RvcjxUPiwgbmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJNb2RlbCByZWdpc3RlcmluZyBmYWlsZWQuIE1pc3NpbmcgQ2xhc3MgbmFtZSBvciBjb25zdHJ1Y3RvclwiXG4gICAgICApO1xuICAgIG5hbWUgPSBuYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5jYWNoZVtuYW1lXSA9IGNvbnN0cnVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEdldHMgYSByZWdpc3RlcmVkIE1vZGVsIHtAbGluayBNb2RlbENvbnN0cnVjdG9yfVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IE1vZGVsQ29uc3RydWN0b3I8VD4gfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5jYWNoZVtuYW1lXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY2xhenpdIHdoZW4gcHJvdmlkZWQsIGl0IHdpbGwgYXR0ZW1wdCB0byBmaW5kIHRoZSBtYXRjaGluZyBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAdGhyb3dzIEVycm9yIElmIGNsYXp6IGlzIG5vdCBmb3VuZCwgb3Igb2JqIGlzIG5vdCBhIHtAbGluayBNb2RlbH0gbWVhbmluZyBpdCBoYXMgbm8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5XG4gICAqL1xuICBidWlsZChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSwgY2xheno/OiBzdHJpbmcpOiBUIHtcbiAgICBpZiAoIWNsYXp6ICYmICF0aGlzLnRlc3RGdW5jdGlvbihvYmopKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvdmlkZWQgb2JqIGlzIG5vdCBhIE1vZGVsIG9iamVjdFwiKTtcbiAgICBjb25zdCBuYW1lID0gY2xhenogfHwgTW9kZWwuZ2V0TWV0YWRhdGEob2JqIGFzIGFueSk7XG4gICAgaWYgKCEobmFtZSBpbiB0aGlzLmNhY2hlKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgc2YoXCJQcm92aWRlZCBjbGFzcyB7MH0gaXMgbm90IGEgcmVnaXN0ZXJlZCBNb2RlbCBvYmplY3RcIiwgbmFtZSlcbiAgICAgICk7XG4gICAgcmV0dXJuIG5ldyB0aGlzLmNhY2hlW25hbWVdKG9iaik7XG4gIH1cbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBCdWxrIFJlZ2lzdGVycyBNb2RlbHNcbiAqIEBkZXNjcmlwdGlvbiBVc2VmdWwgd2hlbiB1c2luZyBidW5kbGVycyB0aGF0IG1pZ2h0IG5vdCBldmFsdWF0ZSBhbGwgdGhlIGNvZGUgYXQgb25jZVxuICpcbiAqIEBwYXJhbSB7QXJyYXk8Q29uc3RydWN0b3I8VD4+IHwgQXJyYXk8e25hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFQ+fT59IFttb2RlbHNdXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Nb2RlbFxuICogQGNhdGVnb3J5IE1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWxrTW9kZWxSZWdpc3RlcjxUIGV4dGVuZHMgTW9kZWw+KFxuICAuLi5tb2RlbHM6IChDb25zdHJ1Y3RvcjxUPiB8IHsgbmFtZTogc3RyaW5nOyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4gfSlbXVxuKSB7XG4gIG1vZGVscy5mb3JFYWNoKFxuICAgIChtOiBDb25zdHJ1Y3RvcjxUPiB8IHsgbmFtZTogc3RyaW5nOyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4gfSkgPT4ge1xuICAgICAgY29uc3QgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFQ+ID0gKFxuICAgICAgICBtLmNvbnN0cnVjdG9yID8gbS5jb25zdHJ1Y3RvciA6IG1cbiAgICAgICkgYXMgQ29uc3RydWN0b3I8VD47XG4gICAgICBNb2RlbC5yZWdpc3Rlcihjb25zdHJ1Y3RvciwgKG0gYXMgQ29uc3RydWN0b3I8VD4pLm5hbWUpO1xuICAgIH1cbiAgKTtcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBBYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYSBWYWxpZGF0YWJsZSBNb2RlbCBvYmplY3RcbiAqIEBkZXNjcmlwdGlvbiBNZWFudCB0byBiZSB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3IgYWxsIE1vZGVsIGNsYXNzZXNcbiAqXG4gKiBNb2RlbCBvYmplY3RzIG11c3Q6XG4gKiAgLSBIYXZlIGFsbCB0aGVpciByZXF1aXJlZCBwcm9wZXJ0aWVzIG1hcmtlZCB3aXRoICchJztcbiAqICAtIEhhdmUgYWxsIHRoZWlyIG9wdGlvbmFsIHByb3BlcnRpZXMgbWFya2VkIGFzICc/JzpcbiAqXG4gKiBAcGFyYW0ge01vZGVsIHwge319IG1vZGVsIGJhc2Ugb2JqZWN0IGZyb20gd2hpY2ggdG8gcG9wdWxhdGUgcHJvcGVydGllcyBmcm9tXG4gKlxuICogQGNsYXNzIE1vZGVsXG4gKiBAYWJzdHJhY3RcbiAqIEBpbXBsZW1lbnRzIFZhbGlkYXRhYmxlXG4gKiBAaW1wbGVtZW50cyBTZXJpYWxpemFibGVcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgICBjbGFzcyBDbGFzc05hbWUge1xuICogICAgICAgICAgQHJlcXVpcmVkKClcbiAqICAgICAgICAgIHJlcXVpcmVkUHJvcGVydHlOYW1lITogUHJvcGVydHlUeXBlO1xuICpcbiAqICAgICAgICAgIG9wdGlvbmFsUHJvcGVydHlOYW1lPzogUHJvcGVydHlUeXBlO1xuICogICAgICB9XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RlbFxuICBpbXBsZW1lbnRzIFZhbGlkYXRhYmxlLCBTZXJpYWxpemFibGUsIEhhc2hhYmxlLCBDb21wYXJhYmxlPE1vZGVsPlxue1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihhcmc/OiBNb2RlbEFyZzxNb2RlbD4pIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGUgb2JqZWN0IGFjY29yZGluZyB0byBpdHMgZGVjb3JhdGVkIHByb3BlcnRpZXNcbiAgICpcbiAgICogQHBhcmFtIHthbnlbXX0gW2V4Y2VwdGlvbnNdIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCB0byBiZSBpZ25vcmVkIGZvciB0aGUgdmFsaWRhdGlvbi4gTWFya2VkIGFzICdhbnknIHRvIGFsbG93IGZvciBleHRlbnNpb24gYnV0IGV4cGVjdHMgc3RyaW5nc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyguLi5leGNlcHRpb25zOiBhbnlbXSk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgLi4uZXhjZXB0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgQ29tcGFyZSBvYmplY3QgZXF1YWxpdHkgcmVjdXJzaXZlbHlcbiAgICogQHBhcmFtIHthbnl9IG9iaiBvYmplY3QgdG8gY29tcGFyZSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4Y2VwdGlvbnNdIHByb3BlcnR5IG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb25cbiAgICovXG4gIHB1YmxpYyBlcXVhbHMob2JqOiBhbnksIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRXF1YWwodGhpcywgb2JqLCAuLi5leGNlcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIG1vZGVsIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IGRlZmluZWQge0BsaW5rIFNlcmlhbGl6ZXJ9XG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTW9kZWwuc2VyaWFsaXplKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IganMncyAndG9TdHJpbmcoKScgd2hpY2ggc3Vja3MuLi5cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkodGhpcywgdW5kZWZpbmVkLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3Igb2JqZWN0IGhhc2guIFJlbGllcyBvbiBhIHZlcnkgYmFzaWMgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gSmF2YSdzIHN0cmluZyBoYXNoO1xuICAgKi9cbiAgcHVibGljIGhhc2goKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTW9kZWwuaGFzaCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZXNlcmlhbGl6ZXMgYSBNb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciBpZiBpdCBmYWlscyB0byBidWlsZCB0aGUgbW9kZWxcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZShzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIE1vZGVsLmtleShNb2RlbEtleXMuU0VSSUFMSVpBVElPTiksXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZXJpYWxpemVyKVxuICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoXG4gICAgICAgIHN0cixcbiAgICAgICAgbWV0YWRhdGEuc2VyaWFsaXplcixcbiAgICAgICAgLi4uKG1ldGFkYXRhLmFyZ3MgfHwgW10pXG4gICAgICApO1xuICAgIHJldHVybiBTZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHN0cik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICAgKiBAZGVzY3JpcHRpb24gSXRlcmF0ZXMgYWxsIGNvbW1vbiBwcm9wZXJ0aWVzIG9mIG9iaiAoaWYgZXhpc3RpbmcpIGFuZCBzZWxmLCBhbmQgY29waWVzIHRoZW0gb250byBzZWxmXG4gICAqXG4gICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Q8VCBleHRlbmRzIE1vZGVsPihcbiAgICBzZWxmOiBULFxuICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFQge1xuICAgIGlmICghb2JqKSBvYmogPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgTW9kZWwuZ2V0QXR0cmlidXRlcyhzZWxmKSkge1xuICAgICAgKHNlbGYgYXMgYW55KVtwcm9wXSA9IChvYmogYXMgYW55KVtwcm9wXSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlcG9wdWxhdGVzIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBvbmVzIGZyb20gdGhlIG5ldyBNb2RlbCBPYmplY3RcbiAgICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAgICogSXMgYXdhcmUgb2YgbmVzdGVkIE1vZGVsIE9iamVjdHMgYW5kIHJlYnVpbGRzIHRoZW0gYWxzby5cbiAgICogV2hlbiBMaXN0IHByb3BlcnRpZXMgYXJlIGRlY29yYXRlZCB3aXRoIHtAbGluayBsaXN0fSwgdGhleSBsaXN0IGl0ZW1zIHdpbGwgYWxzbyBiZSByZWJ1aWx0XG4gICAqXG4gICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGZyb21Nb2RlbDxUIGV4dGVuZHMgTW9kZWw+KHNlbGY6IFQsIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVCB7XG4gICAgaWYgKCFvYmopIG9iaiA9IHt9O1xuXG4gICAgbGV0IGRlY29yYXRvcnM6IERlY29yYXRvck1ldGFkYXRhW10sIGRlYzogRGVjb3JhdG9yTWV0YWRhdGE7XG5cbiAgICBjb25zdCBwcm9wcyA9IE1vZGVsLmdldEF0dHJpYnV0ZXMoc2VsZik7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID1cbiAgICAgICAgKG9iaiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIChzZWxmIGFzIGFueSlbcHJvcF0gIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcHJvcE0gPSBpc1Byb3BlcnR5TW9kZWwoc2VsZiwgcHJvcCk7XG4gICAgICBpZiAocHJvcE0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IE1vZGVsLmJ1aWxkKFxuICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0sXG4gICAgICAgICAgICB0eXBlb2YgcHJvcE0gPT09IFwic3RyaW5nXCIgPyBwcm9wTSA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxEZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdID1cbiAgICAgICAgUmVmbGVjdGlvbi5nZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgICAgICBzZWxmLFxuICAgICAgICAgIHByb3BcbiAgICAgICAgKS5kZWNvcmF0b3JzO1xuICAgICAgZGVjb3JhdG9ycyA9IGFsbERlY29yYXRvcnMuZmlsdGVyKFxuICAgICAgICAoZDogRGVjb3JhdG9yTWV0YWRhdGEpID0+XG4gICAgICAgICAgW01vZGVsS2V5cy5UWVBFLCBWYWxpZGF0aW9uS2V5cy5UWVBFIGFzIHN0cmluZ10uaW5kZXhPZihkLmtleSkgIT09IC0xXG4gICAgICApO1xuICAgICAgaWYgKCFkZWNvcmF0b3JzIHx8ICFkZWNvcmF0b3JzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNmKFwiZmFpbGVkIHRvIGZpbmQgZGVjb3JhdG9ycyBmb3IgcHJvcGVydHkgezB9XCIsIHByb3ApKTtcbiAgICAgIGRlYyA9IGRlY29yYXRvcnMucG9wKCkgYXMgRGVjb3JhdG9yTWV0YWRhdGE7XG4gICAgICBjb25zdCBjbGF6eiA9IGRlYy5wcm9wcy5uYW1lXG4gICAgICAgID8gW2RlYy5wcm9wcy5uYW1lXVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZGVjLnByb3BzLmN1c3RvbVR5cGVzKVxuICAgICAgICAgID8gZGVjLnByb3BzLmN1c3RvbVR5cGVzXG4gICAgICAgICAgOiBbZGVjLnByb3BzLmN1c3RvbVR5cGVzXTtcbiAgICAgIGNvbnN0IHJlc2VydmVkID0gT2JqZWN0LnZhbHVlcyhSZXNlcnZlZE1vZGVscykubWFwKCh2KSA9PlxuICAgICAgICB2LnRvTG93ZXJDYXNlKClcbiAgICAgICkgYXMgc3RyaW5nW107XG5cbiAgICAgIGNsYXp6LmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgaWYgKHJlc2VydmVkLmluZGV4T2YoYy50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN3aXRjaCAoYykge1xuICAgICAgICAgICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlNldFwiOlxuICAgICAgICAgICAgICAgIGlmIChhbGxEZWNvcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdERlYyA9IGFsbERlY29yYXRvcnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGQpID0+IGQua2V5ID09PSBWYWxpZGF0aW9uS2V5cy5MSVNUXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgaWYgKGxpc3REZWMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhenpOYW1lID0gKGxpc3REZWMucHJvcHMuY2xhenogYXMgc3RyaW5nW10pLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgKHQ6IHN0cmluZykgPT4gIWpzVHlwZXMuaW5jbHVkZXModC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gXCJBcnJheVwiKVxuICAgICAgICAgICAgICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICAgICAgICAgICAgICAgICAgICAgKVtwcm9wXS5tYXAoKGVsOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXCJvYmplY3RcIiwgXCJmdW5jdGlvblwiXS5pbmNsdWRlcyh0eXBlb2YgZWwpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXp6TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IE1vZGVsLmJ1aWxkKGVsLCBjbGF6ek5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogZWw7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBcIlNldFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1wib2JqZWN0XCIsIFwiZnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZW9mIHYpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXp6TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWRkKE1vZGVsLmJ1aWxkKHYsIGNsYXp6TmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcy5hZGQodik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID0gcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0pXG4gICAgICAgICAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IE1vZGVsLmJ1aWxkKFxuICAgICAgICAgICAgICAgICAgICAoc2VsZiBhcyBhbnkpW3Byb3BdLFxuICAgICAgICAgICAgICAgICAgICBjXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nLiB3ZSBoYXZlIG5vIHJlZ2lzdHJ5IG9mIHRoaXMgY2xhc3NcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgU2V0cyB0aGUgR2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn1cbiAgICogQHBhcmFtIHtNb2RlbEJ1aWxkZXJGdW5jdGlvbn0gW2J1aWxkZXJdXG4gICAqL1xuICBzdGF0aWMgc2V0QnVpbGRlcihidWlsZGVyPzogTW9kZWxCdWlsZGVyRnVuY3Rpb24pIHtcbiAgICBtb2RlbEJ1aWxkZXJGdW5jdGlvbiA9IGJ1aWxkZXI7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBjdXJyZW50IGdsb2JhbCB7QGxpbmsgTW9kZWxCdWlsZGVyRnVuY3Rpb259XG4gICAqL1xuICBzdGF0aWMgZ2V0QnVpbGRlcigpOiBNb2RlbEJ1aWxkZXJGdW5jdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIG1vZGVsQnVpbGRlckZ1bmN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQge0BsaW5rIE1vZGVsUmVnaXN0cnlNYW5hZ2VyfVxuICAgKlxuICAgKiBAcmV0dXJuIE1vZGVsUmVnaXN0cnksIGRlZmF1bHRzIHRvIHtAbGluayBNb2RlbFJlZ2lzdHJ5TWFuYWdlcn1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldFJlZ2lzdHJ5KCkge1xuICAgIGlmICghYWN0aW5nTW9kZWxSZWdpc3RyeSkgYWN0aW5nTW9kZWxSZWdpc3RyeSA9IG5ldyBNb2RlbFJlZ2lzdHJ5TWFuYWdlcigpO1xuICAgIHJldHVybiBhY3RpbmdNb2RlbFJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aW5nTW9kZWxSZWdpc3RyeVxuICAgKlxuICAgKiBAcGFyYW0ge0J1aWxkZXJSZWdpc3RyeX0gbW9kZWxSZWdpc3RyeSB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIFJlZ2lzdHJ5XG4gICAqL1xuICBzdGF0aWMgc2V0UmVnaXN0cnkobW9kZWxSZWdpc3RyeTogQnVpbGRlclJlZ2lzdHJ5PGFueT4pIHtcbiAgICBhY3RpbmdNb2RlbFJlZ2lzdHJ5ID0gbW9kZWxSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSByZWdpc3RlciBuZXcgTW9kZWxzXG4gICAqIEBwYXJhbSB7YW55fSBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdIHdoZW4gbm90IGRlZmluZWQsIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIHVzZWRcbiAgICpcbiAgICogQHNlZSBNb2RlbFJlZ2lzdHJ5XG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIE1vZGVsPihcbiAgICBjb25zdHJ1Y3RvcjogTW9kZWxDb25zdHJ1Y3RvcjxUPixcbiAgICBuYW1lPzogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHJldHVybiBNb2RlbC5nZXRSZWdpc3RyeSgpLnJlZ2lzdGVyKGNvbnN0cnVjdG9yLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBHZXRzIGEgcmVnaXN0ZXJlZCBNb2RlbCB7QGxpbmsgTW9kZWxDb25zdHJ1Y3Rvcn1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICpcbiAgICogQHNlZSBNb2RlbFJlZ2lzdHJ5XG4gICAqL1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBNb2RlbD4obmFtZTogc3RyaW5nKTogTW9kZWxDb25zdHJ1Y3RvcjxUPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE1vZGVsLmdldFJlZ2lzdHJ5KCkuZ2V0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbY2xhenpdIHdoZW4gcHJvdmlkZWQsIGl0IHdpbGwgYXR0ZW1wdCB0byBmaW5kIHRoZSBtYXRjaGluZyBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAdGhyb3dzIEVycm9yIElmIGNsYXp6IGlzIG5vdCBmb3VuZCwgb3Igb2JqIGlzIG5vdCBhIHtAbGluayBNb2RlbH0gbWVhbmluZyBpdCBoYXMgbm8ge0BsaW5rIE1vZGVsS2V5cy5BTkNIT1J9IHByb3BlcnR5XG4gICAqXG4gICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgKi9cbiAgc3RhdGljIGJ1aWxkPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXG4gICAgY2xheno/OiBzdHJpbmdcbiAgKTogVCB7XG4gICAgcmV0dXJuIE1vZGVsLmdldFJlZ2lzdHJ5KCkuYnVpbGQob2JqLCBjbGF6eik7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWV0YWRhdGE8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVikge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIE1vZGVsLmtleShNb2RlbEtleXMuTU9ERUwpLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuICAgIGlmICghbWV0YWRhdGEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY291bGQgbm90IGZpbmQgbWV0YWRhdGEgZm9yIHByb3ZpZGVkIFwiICsgbW9kZWwuY29uc3RydWN0b3IubmFtZVxuICAgICAgKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICBzdGF0aWMgZ2V0QXR0cmlidXRlczxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBDb25zdHJ1Y3RvcjxWPiB8IFYpIHtcbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IHByb3RvdHlwZSA9XG4gICAgICBtb2RlbCBpbnN0YW5jZW9mIE1vZGVsXG4gICAgICAgID8gT2JqZWN0LmdldFByb3RvdHlwZU9mKG1vZGVsKVxuICAgICAgICA6IChtb2RlbCBhcyBhbnkpLnByb3RvdHlwZTtcbiAgICB3aGlsZSAocHJvdG90eXBlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb3BzOiBzdHJpbmdbXSA9IHByb3RvdHlwZVtNb2RlbEtleXMuQVRUUklCVVRFXTtcbiAgICAgIGlmIChwcm9wcykge1xuICAgICAgICByZXN1bHQucHVzaCguLi5wcm9wcyk7XG4gICAgICB9XG4gICAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHM8ViBleHRlbmRzIE1vZGVsPihvYmoxOiBWLCBvYmoyOiBWLCAuLi5leGNlcHRpb25zOiBhbnlbXSkge1xuICAgIHJldHVybiBpc0VxdWFsKG9iajEsIG9iajIsIC4uLmV4Y2VwdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGhhc0Vycm9yczxWIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBWLCAuLi5wcm9wc1RvSWdub3JlOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB2YWxpZGF0ZShtb2RlbCwgLi4ucHJvcHNUb0lnbm9yZSk7XG4gIH1cblxuICBzdGF0aWMgc2VyaWFsaXplPFYgZXh0ZW5kcyBNb2RlbD4obW9kZWw6IFYpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICBNb2RlbC5rZXkoTW9kZWxLZXlzLlNFUklBTElaQVRJT04pLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuXG4gICAgaWYgKG1ldGFkYXRhICYmIG1ldGFkYXRhLnNlcmlhbGl6ZXIpXG4gICAgICByZXR1cm4gU2VyaWFsaXphdGlvbi5zZXJpYWxpemUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG1ldGFkYXRhLnNlcmlhbGl6ZXIsXG4gICAgICAgIC4uLihtZXRhZGF0YS5hcmdzIHx8IFtdKVxuICAgICAgKTtcbiAgICByZXR1cm4gU2VyaWFsaXphdGlvbi5zZXJpYWxpemUobW9kZWwpO1xuICB9XG5cbiAgc3RhdGljIGhhc2g8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogVikge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIE1vZGVsLmtleShNb2RlbEtleXMuSEFTSElORyksXG4gICAgICBtb2RlbC5jb25zdHJ1Y3RvclxuICAgICk7XG5cbiAgICBpZiAobWV0YWRhdGEgJiYgbWV0YWRhdGEuYWxnb3JpdGhtKVxuICAgICAgcmV0dXJuIEhhc2hpbmcuaGFzaChtb2RlbCwgbWV0YWRhdGEuYWxnb3JpdGhtLCAuLi4obWV0YWRhdGEuYXJncyB8fCBbXSkpO1xuICAgIHJldHVybiBIYXNoaW5nLmhhc2gobW9kZWwpO1xuICB9XG4gIC8qKlxuICAgKiBAc3VtbWFyeSBCdWlsZHMgdGhlIGtleSB0byBzdG9yZSBhcyBNZXRhZGF0YSB1bmRlciBSZWZsZWN0aW9uc1xuICAgKiBAZGVzY3JpcHRpb24gY29uY2F0ZW5hdGVzIHtAbGluayBNb2RlbEtleXMjUkVGTEVDVH0gd2l0aCB0aGUgcHJvdmlkZWQga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBrZXkoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gTW9kZWxLZXlzLlJFRkxFQ1QgKyBzdHI7XG4gIH1cbn1cbiJdfQ==
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvTW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBYXZELE9BQU8sRUFBcUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFbkQsSUFBSSxvQkFBc0QsQ0FBQztBQUMzRCxJQUFJLG1CQUF5QyxDQUFDO0FBZ0I5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFJL0IsWUFDRSxlQUFzRCxLQUFLLENBQUMsT0FBTztRQUo3RCxVQUFLLEdBQXdDLEVBQUUsQ0FBQztRQU10RCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFFBQVEsQ0FBQyxXQUFnQyxFQUFFLElBQWE7UUFDdEQsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELENBQzlELENBQUM7UUFDSixJQUFJLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtB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TyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcmlhbGl6YXRpb24gfSBmcm9tIFwiLi4vdXRpbHMvc2VyaWFsaXphdGlvblwiO1xuaW1wb3J0IHsgQnVpbGRlclJlZ2lzdHJ5IH0gZnJvbSBcIi4uL3V0aWxzL3JlZ2lzdHJ5XCI7XG5pbXBvcnQgeyBNb2RlbEVycm9yRGVmaW5pdGlvbiB9IGZyb20gXCIuL01vZGVsRXJyb3JEZWZpbml0aW9uXCI7XG5pbXBvcnQge1xuICBDb21wYXJhYmxlLFxuICBDb25zdHJ1Y3RvcixcbiAgSGFzaGFibGUsXG4gIE1vZGVsQXJnLFxuICBNb2RlbEJ1aWxkZXJGdW5jdGlvbixcbiAgTW9kZWxDb25zdHJ1Y3RvcixcbiAgU2VyaWFsaXphYmxlLFxuICBWYWxpZGF0YWJsZSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IERlY29yYXRvck1ldGFkYXRhLCBpc0VxdWFsLCBSZWZsZWN0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZSB9IGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEhhc2hpbmcgfSBmcm9tIFwiLi4vdXRpbHMvaGFzaGluZ1wiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbktleXMgfSBmcm9tIFwiLi4vdmFsaWRhdGlvbi9WYWxpZGF0b3JzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsganNUeXBlcywgUmVzZXJ2ZWRNb2RlbHMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldE1vZGVsS2V5LCBnZXRNZXRhZGF0YSB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBtb2RlbEJ1aWxkZXJGdW5jdGlvbjogTW9kZWxCdWlsZGVyRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG5sZXQgYWN0aW5nTW9kZWxSZWdpc3RyeTogQnVpbGRlclJlZ2lzdHJ5PGFueT47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJ5IHR5cGUgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgbW9kZWwgY29uc3RydWN0b3JzXG4gKiBAc3VtbWFyeSBUaGUgTW9kZWxSZWdpc3RyeSB0eXBlIGRlZmluZXMgYSByZWdpc3RyeSBmb3IgbW9kZWwgY29uc3RydWN0b3JzIHRoYXQgZXh0ZW5kc1xuICogdGhlIEJ1aWxkZXJSZWdpc3RyeSBpbnRlcmZhY2UuIEl0IHByb3ZpZGVzIGEgc3RhbmRhcmRpemVkIHdheSB0byByZWdpc3RlciwgcmV0cmlldmUsXG4gKiBhbmQgYnVpbGQgbW9kZWwgaW5zdGFuY2VzLCBlbmFibGluZyB0aGUgbW9kZWwgc3lzdGVtIHRvIHdvcmsgd2l0aCBkaWZmZXJlbnQgdHlwZXMgb2YgbW9kZWxzLlxuICpcbiAqIEBpbnRlcmZhY2UgTW9kZWxSZWdpc3RyeVxuICogQHRlbXBsYXRlIFQgVHlwZSBvZiBtb2RlbCB0aGF0IGNhbiBiZSByZWdpc3RlcmVkLCBtdXN0IGV4dGVuZCBNb2RlbFxuICogQGV4dGVuZHMgQnVpbGRlclJlZ2lzdHJ5PFQ+XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxSZWdpc3RyeTxUIGV4dGVuZHMgTW9kZWw+ID0gQnVpbGRlclJlZ2lzdHJ5PFQ+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyeSBtYW5hZ2VyIGZvciBtb2RlbCBjb25zdHJ1Y3RvcnMgdGhhdCBlbmFibGVzIHNlcmlhbGl6YXRpb24gYW5kIHJlYnVpbGRpbmdcbiAqIEBzdW1tYXJ5IFRoZSBNb2RlbFJlZ2lzdHJ5TWFuYWdlciBpbXBsZW1lbnRzIHRoZSBNb2RlbFJlZ2lzdHJ5IGludGVyZmFjZSBhbmQgcHJvdmlkZXNcbiAqIGZ1bmN0aW9uYWxpdHkgZm9yIHJlZ2lzdGVyaW5nLCByZXRyaWV2aW5nLCBhbmQgYnVpbGRpbmcgbW9kZWwgaW5zdGFuY2VzLiBJdCBtYWludGFpbnNcbiAqIGEgY2FjaGUgb2YgbW9kZWwgY29uc3RydWN0b3JzIGluZGV4ZWQgYnkgbmFtZSwgYWxsb3dpbmcgZm9yIGVmZmljaWVudCBsb29rdXAgYW5kIGluc3RhbnRpYXRpb24uXG4gKiBUaGlzIGNsYXNzIGlzIGVzc2VudGlhbCBmb3IgdGhlIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbiBvZiBtb2RlbCBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb24oUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW59IFt0ZXN0RnVuY3Rpb25dIC0gRnVuY3Rpb24gdG8gdGVzdCBpZiBhbiBvYmplY3QgaXMgYSBtb2RlbCwgZGVmYXVsdHMgdG8ge0BsaW5rIE1vZGVsI2lzTW9kZWx9XG4gKlxuICogQGNsYXNzIE1vZGVsUmVnaXN0cnlNYW5hZ2VyXG4gKiBAdGVtcGxhdGUgTSBUeXBlIG9mIG1vZGVsIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQsIG11c3QgZXh0ZW5kIE1vZGVsXG4gKiBAaW1wbGVtZW50cyBNb2RlbFJlZ2lzdHJ5PE0+XG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbW9kZWwgcmVnaXN0cnlcbiAqIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IE1vZGVsUmVnaXN0cnlNYW5hZ2VyKCk7XG4gKlxuICogLy8gUmVnaXN0ZXIgYSBtb2RlbCBjbGFzc1xuICogcmVnaXN0cnkucmVnaXN0ZXIoVXNlcik7XG4gKlxuICogLy8gUmV0cmlldmUgYSBtb2RlbCBjb25zdHJ1Y3RvciBieSBuYW1lXG4gKiBjb25zdCBVc2VyQ2xhc3MgPSByZWdpc3RyeS5nZXQoXCJVc2VyXCIpO1xuICpcbiAqIC8vIEJ1aWxkIGEgbW9kZWwgaW5zdGFuY2UgZnJvbSBhIHBsYWluIG9iamVjdFxuICogY29uc3QgdXNlckRhdGEgPSB7IG5hbWU6IFwiSm9oblwiLCBhZ2U6IDMwIH07XG4gKiBjb25zdCB1c2VyID0gcmVnaXN0cnkuYnVpbGQodXNlckRhdGEsIFwiVXNlclwiKTtcbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgUiBhcyBNb2RlbFJlZ2lzdHJ5TWFuYWdlclxuICogICBwYXJ0aWNpcGFudCBNIGFzIE1vZGVsIENsYXNzXG4gKlxuICogICBDLT4+UjogbmV3IE1vZGVsUmVnaXN0cnlNYW5hZ2VyKHRlc3RGdW5jdGlvbilcbiAqICAgQy0+PlI6IHJlZ2lzdGVyKE1vZGVsQ2xhc3MpXG4gKiAgIFItPj5SOiBTdG9yZSBpbiBjYWNoZVxuICogICBDLT4+UjogZ2V0KFwiTW9kZWxOYW1lXCIpXG4gKiAgIFItLT4+QzogTW9kZWxDbGFzcyBjb25zdHJ1Y3RvclxuICogICBDLT4+UjogYnVpbGQoZGF0YSwgXCJNb2RlbE5hbWVcIilcbiAqICAgUi0+PlI6IEdldCBjb25zdHJ1Y3RvciBmcm9tIGNhY2hlXG4gKiAgIFItPj5NOiBuZXcgTW9kZWxDbGFzcyhkYXRhKVxuICogICBNLS0+PlI6IE1vZGVsIGluc3RhbmNlXG4gKiAgIFItLT4+QzogTW9kZWwgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGVsUmVnaXN0cnlNYW5hZ2VyPE0gZXh0ZW5kcyBNb2RlbD4gaW1wbGVtZW50cyBNb2RlbFJlZ2lzdHJ5PE0+IHtcbiAgcHJpdmF0ZSBjYWNoZTogUmVjb3JkPHN0cmluZywgTW9kZWxDb25zdHJ1Y3RvcjxNPj4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSB0ZXN0RnVuY3Rpb246IChvYmo6IG9iamVjdCkgPT4gYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB0ZXN0RnVuY3Rpb246IChvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGJvb2xlYW4gPSBNb2RlbC5pc01vZGVsXG4gICkge1xuICAgIHRoaXMudGVzdEZ1bmN0aW9uID0gdGVzdEZ1bmN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYSBtb2RlbCBjb25zdHJ1Y3RvciB3aXRoIHRoZSByZWdpc3RyeVxuICAgKiBAc3VtbWFyeSBBZGRzIGEgbW9kZWwgY29uc3RydWN0b3IgdG8gdGhlIHJlZ2lzdHJ5IGNhY2hlLCBtYWtpbmcgaXQgYXZhaWxhYmxlIGZvclxuICAgKiBsYXRlciByZXRyaWV2YWwgYW5kIGluc3RhbnRpYXRpb24uIElmIG5vIG5hbWUgaXMgcHJvdmlkZWQsIHRoZSBjb25zdHJ1Y3RvcidzIG5hbWVcbiAgICogcHJvcGVydHkgaXMgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZWdpc3RyeS5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbENvbnN0cnVjdG9yPE0+fSBjb25zdHJ1Y3RvciAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvciB0byByZWdpc3RlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdIC0gT3B0aW9uYWwgbmFtZSB0byByZWdpc3RlciB0aGUgY29uc3RydWN0b3IgdW5kZXIsIGRlZmF1bHRzIHRvIGNvbnN0cnVjdG9yLm5hbWVcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBjb25zdHJ1Y3RvciBpcyBub3QgYSBmdW5jdGlvblxuICAgKi9cbiAgcmVnaXN0ZXIoY29uc3RydWN0b3I6IE1vZGVsQ29uc3RydWN0b3I8TT4sIG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTW9kZWwgcmVnaXN0ZXJpbmcgZmFpbGVkLiBNaXNzaW5nIENsYXNzIG5hbWUgb3IgY29uc3RydWN0b3JcIlxuICAgICAgKTtcbiAgICBuYW1lID0gbmFtZSB8fCBjb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRoaXMuY2FjaGVbbmFtZV0gPSBjb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBHZXRzIGEgcmVnaXN0ZXJlZCBNb2RlbCB7QGxpbmsgTW9kZWxDb25zdHJ1Y3Rvcn1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGdldChuYW1lOiBzdHJpbmcpOiBNb2RlbENvbnN0cnVjdG9yPE0+IHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGVbbmFtZV07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9ialxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NsYXp6XSB3aGVuIHByb3ZpZGVkLCBpdCB3aWxsIGF0dGVtcHQgdG8gZmluZCB0aGUgbWF0Y2hpbmcgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHRocm93cyBFcnJvciBJZiBjbGF6eiBpcyBub3QgZm91bmQsIG9yIG9iaiBpcyBub3QgYSB7QGxpbmsgTW9kZWx9IG1lYW5pbmcgaXQgaGFzIG5vIHtAbGluayBNb2RlbEtleXMuQU5DSE9SfSBwcm9wZXJ0eVxuICAgKi9cbiAgYnVpbGQob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sIGNsYXp6Pzogc3RyaW5nKTogTSB7XG4gICAgaWYgKCFjbGF6eiAmJiAhdGhpcy50ZXN0RnVuY3Rpb24ob2JqKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlByb3ZpZGVkIG9iaiBpcyBub3QgYSBNb2RlbCBvYmplY3RcIik7XG4gICAgY29uc3QgbmFtZSA9IGNsYXp6IHx8IE1vZGVsLmdldE1ldGFkYXRhKG9iaiBhcyBhbnkpO1xuICAgIGlmICghKG5hbWUgaW4gdGhpcy5jYWNoZSkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBQcm92aWRlZCBjbGFzcyAke25hbWV9IGlzIG5vdCBhIHJlZ2lzdGVyZWQgTW9kZWwgb2JqZWN0YFxuICAgICAgKTtcbiAgICByZXR1cm4gbmV3IHRoaXMuY2FjaGVbbmFtZV0ob2JqKTtcbiAgfVxufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEJ1bGsgUmVnaXN0ZXJzIE1vZGVsc1xuICogQGRlc2NyaXB0aW9uIFVzZWZ1bCB3aGVuIHVzaW5nIGJ1bmRsZXJzIHRoYXQgbWlnaHQgbm90IGV2YWx1YXRlIGFsbCB0aGUgY29kZSBhdCBvbmNlXG4gKlxuICogQHRlbXBsYXRlIE0gZXh0ZW5kcyBNb2RlbFxuICogQHBhcmFtIHtBcnJheTxDb25zdHJ1Y3RvcjxNPj4gfCBBcnJheTx7bmFtZTogc3RyaW5nLCBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8TT59Pn0gW21vZGVsc11cbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKiBAY2F0ZWdvcnkgTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1bGtNb2RlbFJlZ2lzdGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIC4uLm1vZGVsczogKENvbnN0cnVjdG9yPE0+IHwgeyBuYW1lOiBzdHJpbmc7IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxNPiB9KVtdXG4pIHtcbiAgbW9kZWxzLmZvckVhY2goXG4gICAgKG06IENvbnN0cnVjdG9yPE0+IHwgeyBuYW1lOiBzdHJpbmc7IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxNPiB9KSA9PiB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8TT4gPSAoXG4gICAgICAgIG0uY29uc3RydWN0b3IgPyBtLmNvbnN0cnVjdG9yIDogbVxuICAgICAgKSBhcyBDb25zdHJ1Y3RvcjxNPjtcbiAgICAgIE1vZGVsLnJlZ2lzdGVyKGNvbnN0cnVjdG9yLCAobSBhcyBDb25zdHJ1Y3RvcjxNPikubmFtZSk7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IEFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhIFZhbGlkYXRhYmxlIE1vZGVsIG9iamVjdFxuICogQGRlc2NyaXB0aW9uIE1lYW50IHRvIGJlIHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgTW9kZWwgY2xhc3Nlc1xuICpcbiAqIE1vZGVsIG9iamVjdHMgbXVzdDpcbiAqICAtIEhhdmUgYWxsIHRoZWlyIHJlcXVpcmVkIHByb3BlcnRpZXMgbWFya2VkIHdpdGggJyEnO1xuICogIC0gSGF2ZSBhbGwgdGhlaXIgb3B0aW9uYWwgcHJvcGVydGllcyBtYXJrZWQgYXMgJz8nOlxuICpcbiAqIEBwYXJhbSB7TW9kZWxBcmc8TW9kZWw+fSBtb2RlbCBiYXNlIG9iamVjdCBmcm9tIHdoaWNoIHRvIHBvcHVsYXRlIHByb3BlcnRpZXMgZnJvbVxuICpcbiAqIEBjbGFzcyBNb2RlbFxuICogQGNhdGVnb3J5IE1vZGVsXG4gKiBAYWJzdHJhY3RcbiAqIEBpbXBsZW1lbnRzIFZhbGlkYXRhYmxlXG4gKiBAaW1wbGVtZW50cyBTZXJpYWxpemFibGVcbiAqXG4gKiBAZXhhbXBsZVxuICogICAgICBjbGFzcyBDbGFzc05hbWUge1xuICogICAgICAgICAgQHJlcXVpcmVkKClcbiAqICAgICAgICAgIHJlcXVpcmVkUHJvcGVydHlOYW1lITogUHJvcGVydHlUeXBlO1xuICpcbiAqICAgICAgICAgIG9wdGlvbmFsUHJvcGVydHlOYW1lPzogUHJvcGVydHlUeXBlO1xuICogICAgICB9XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RlbFxuICBpbXBsZW1lbnRzIFZhbGlkYXRhYmxlLCBTZXJpYWxpemFibGUsIEhhc2hhYmxlLCBDb21wYXJhYmxlPE1vZGVsPlxue1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihhcmc/OiBNb2RlbEFyZzxNb2RlbD4pIHt9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFZhbGlkYXRlcyB0aGUgb2JqZWN0IGFjY29yZGluZyB0byBpdHMgZGVjb3JhdGVkIHByb3BlcnRpZXNcbiAgICpcbiAgICogQHBhcmFtIHthbnlbXX0gW2V4Y2VwdGlvbnNdIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCB0byBiZSBpZ25vcmVkIGZvciB0aGUgdmFsaWRhdGlvbi4gTWFya2VkIGFzICdhbnknIHRvIGFsbG93IGZvciBleHRlbnNpb24gYnV0IGV4cGVjdHMgc3RyaW5nc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyguLi5leGNlcHRpb25zOiBhbnlbXSk6IE1vZGVsRXJyb3JEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgLi4uZXhjZXB0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgQ29tcGFyZSBvYmplY3QgZXF1YWxpdHkgcmVjdXJzaXZlbHlcbiAgICogQHBhcmFtIHthbnl9IG9iaiBvYmplY3QgdG8gY29tcGFyZSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4Y2VwdGlvbnNdIHByb3BlcnR5IG5hbWVzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGNvbXBhcmlzb25cbiAgICovXG4gIHB1YmxpYyBlcXVhbHMob2JqOiBhbnksIC4uLmV4Y2VwdGlvbnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRXF1YWwodGhpcywgb2JqLCAuLi5leGNlcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIG1vZGVsIGFjY29yZGluZyB0byB0aGUgY3VycmVudGx5IGRlZmluZWQge0BsaW5rIFNlcmlhbGl6ZXJ9XG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTW9kZWwuc2VyaWFsaXplKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IganMncyAndG9TdHJpbmcoKScgd2hpY2ggc3Vja3MuLi5cbiAgICogQG92ZXJyaWRlXG4gICAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lICsgXCI6IFwiICsgSlNPTi5zdHJpbmdpZnkodGhpcywgdW5kZWZpbmVkLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3Igb2JqZWN0IGhhc2guIFJlbGllcyBvbiBhIHZlcnkgYmFzaWMgaW1wbGVtZW50YXRpb24gYmFzZWQgb24gSmF2YSdzIHN0cmluZyBoYXNoO1xuICAgKi9cbiAgcHVibGljIGhhc2goKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTW9kZWwuaGFzaCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZXNlcmlhbGl6ZXMgYSBNb2RlbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBpdCBmYWlscyB0byBwYXJzZSB0aGUgc3RyaW5nLCBvciBpZiBpdCBmYWlscyB0byBidWlsZCB0aGUgbW9kZWxcbiAgICovXG4gIHN0YXRpYyBkZXNlcmlhbGl6ZShzdHI6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIE1vZGVsLmtleShNb2RlbEtleXMuU0VSSUFMSVpBVElPTiksXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZXJpYWxpemVyKVxuICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoXG4gICAgICAgIHN0cixcbiAgICAgICAgbWV0YWRhdGEuc2VyaWFsaXplcixcbiAgICAgICAgLi4uKG1ldGFkYXRhLmFyZ3MgfHwgW10pXG4gICAgICApO1xuICAgIHJldHVybiBTZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKHN0cik7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmVwb3B1bGF0ZXMgdGhlIE9iamVjdCBwcm9wZXJ0aWVzIHdpdGggdGhlIG9uZXMgZnJvbSB0aGUgbmV3IG9iamVjdFxuICAgKiBAZGVzY3JpcHRpb24gSXRlcmF0ZXMgYWxsIGNvbW1vbiBwcm9wZXJ0aWVzIG9mIG9iaiAoaWYgZXhpc3RpbmcpIGFuZCBzZWxmLCBhbmQgY29waWVzIHRoZW0gb250byBzZWxmXG4gICAqXG4gICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGZyb21PYmplY3Q8VCBleHRlbmRzIE1vZGVsPihcbiAgICBzZWxmOiBULFxuICAgIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+XG4gICk6IFQge1xuICAgIGlmICghb2JqKSBvYmogPSB7fTtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgTW9kZWwuZ2V0QXR0cmlidXRlcyhzZWxmKSkge1xuICAgICAgKHNlbGYgYXMgYW55KVtwcm9wXSA9IChvYmogYXMgYW55KVtwcm9wXSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlcG9wdWxhdGVzIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBvbmVzIGZyb20gdGhlIG5ldyBNb2RlbCBPYmplY3RcbiAgICogQGRlc2NyaXB0aW9uIEl0ZXJhdGVzIGFsbCBjb21tb24gcHJvcGVydGllcyBvZiBvYmogKGlmIGV4aXN0aW5nKSBhbmQgc2VsZiwgYW5kIGNvcGllcyB0aGVtIG9udG8gc2VsZi5cbiAgICogSXMgYXdhcmUgb2YgbmVzdGVkIE1vZGVsIE9iamVjdHMgYW5kIHJlYnVpbGRzIHRoZW0gYWxzby5cbiAgICogV2hlbiBMaXN0IHByb3BlcnRpZXMgYXJlIGRlY29yYXRlZCB3aXRoIHtAbGluayBsaXN0fSwgdGhleSBsaXN0IGl0ZW1zIHdpbGwgYWxzbyBiZSByZWJ1aWx0XG4gICAqXG4gICAqIEBwYXJhbSB7VH0gc2VsZlxuICAgKiBAcGFyYW0ge1QgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbb2JqXVxuICAgKlxuICAgKi9cbiAgc3RhdGljIGZyb21Nb2RlbDxUIGV4dGVuZHMgTW9kZWw+KHNlbGY6IFQsIG9iaj86IFQgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVCB7XG4gICAgaWYgKCFvYmopIG9iaiA9IHt9O1xuXG4gICAgbGV0IGRlY29yYXRvcnM6IERlY29yYXRvck1ldGFkYXRhW10sIGRlYzogRGVjb3JhdG9yTWV0YWRhdGE7XG5cbiAgICBjb25zdCBwcm9wcyA9IE1vZGVsLmdldEF0dHJpYnV0ZXMoc2VsZik7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdID1cbiAgICAgICAgKG9iaiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIChzZWxmIGFzIGFueSlbcHJvcF0gIT09IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgcHJvcE0gPSBNb2RlbC5pc1Byb3BlcnR5TW9kZWwoc2VsZiwgcHJvcCk7XG4gICAgICBpZiAocHJvcE0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IE1vZGVsLmJ1aWxkKFxuICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0sXG4gICAgICAgICAgICB0eXBlb2YgcHJvcE0gPT09IFwic3RyaW5nXCIgPyBwcm9wTSA6IHVuZGVmaW5lZFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxEZWNvcmF0b3JzOiBEZWNvcmF0b3JNZXRhZGF0YVtdID1cbiAgICAgICAgUmVmbGVjdGlvbi5nZXRQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVCxcbiAgICAgICAgICBzZWxmLFxuICAgICAgICAgIHByb3BcbiAgICAgICAgKS5kZWNvcmF0b3JzO1xuICAgICAgZGVjb3JhdG9ycyA9IGFsbERlY29yYXRvcnMuZmlsdGVyKFxuICAgICAgICAoZDogRGVjb3JhdG9yTWV0YWRhdGEpID0+XG4gICAgICAgICAgW01vZGVsS2V5cy5UWVBFLCBWYWxpZGF0aW9uS2V5cy5UWVBFIGFzIHN0cmluZ10uaW5kZXhPZihkLmtleSkgIT09IC0xXG4gICAgICApO1xuICAgICAgaWYgKCFkZWNvcmF0b3JzIHx8ICFkZWNvcmF0b3JzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWlsZWQgdG8gZmluZCBkZWNvcmF0b3JzIGZvciBwcm9wZXJ0eSAke3Byb3B9YCk7XG4gICAgICBkZWMgPSBkZWNvcmF0b3JzLnBvcCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgICAgY29uc3QgY2xhenogPSBkZWMucHJvcHMubmFtZVxuICAgICAgICA/IFtkZWMucHJvcHMubmFtZV1cbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGRlYy5wcm9wcy5jdXN0b21UeXBlcylcbiAgICAgICAgICA/IGRlYy5wcm9wcy5jdXN0b21UeXBlc1xuICAgICAgICAgIDogW2RlYy5wcm9wcy5jdXN0b21UeXBlc107XG4gICAgICBjb25zdCByZXNlcnZlZCA9IE9iamVjdC52YWx1ZXMoUmVzZXJ2ZWRNb2RlbHMpLm1hcCgodikgPT5cbiAgICAgICAgdi50b0xvd2VyQ2FzZSgpXG4gICAgICApIGFzIHN0cmluZ1tdO1xuXG4gICAgICBjbGF6ei5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgIGlmIChyZXNlcnZlZC5pbmRleE9mKGMudG9Mb3dlckNhc2UoKSkgPT09IC0xKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgICAgICBpZiAoYWxsRGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3REZWMgPSBhbGxEZWNvcmF0b3JzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChkKSA9PiBkLmtleSA9PT0gVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChsaXN0RGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXp6TmFtZSA9IChsaXN0RGVjLnByb3BzLmNsYXp6IGFzIHN0cmluZ1tdKS5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICh0OiBzdHJpbmcpID0+ICFqc1R5cGVzLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IFwiQXJyYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICAgICAgICAgICAgICAgICAgIClbcHJvcF0ubWFwKChlbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1wib2JqZWN0XCIsIFwiZnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZW9mIGVsKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF6ek5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNb2RlbC5idWlsZChlbCwgY2xhenpOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGVsO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gXCJTZXRcIikge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcIm9iamVjdFwiLCBcImZ1bmN0aW9uXCJdLmluY2x1ZGVzKHR5cGVvZiB2KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF6ek5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzLmFkZChNb2RlbC5idWlsZCh2LCBjbGF6ek5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMuYWRkKHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAoc2VsZiBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtwcm9wXSA9IHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKChzZWxmIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW3Byb3BdKVxuICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgUmVjb3JkPHN0cmluZywgYW55PilbcHJvcF0gPSBNb2RlbC5idWlsZChcbiAgICAgICAgICAgICAgICAgICAgKHNlbGYgYXMgYW55KVtwcm9wXSxcbiAgICAgICAgICAgICAgICAgICAgY1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgLy8gZG8gbm90aGluZy4gd2UgaGF2ZSBubyByZWdpc3RyeSBvZiB0aGlzIGNsYXNzXG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFNldHMgdGhlIEdsb2JhbCB7QGxpbmsgTW9kZWxCdWlsZGVyRnVuY3Rpb259XG4gICAqIEBwYXJhbSB7TW9kZWxCdWlsZGVyRnVuY3Rpb259IFtidWlsZGVyXVxuICAgKi9cbiAgc3RhdGljIHNldEJ1aWxkZXIoYnVpbGRlcj86IE1vZGVsQnVpbGRlckZ1bmN0aW9uKSB7XG4gICAgbW9kZWxCdWlsZGVyRnVuY3Rpb24gPSBidWlsZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgY3VycmVudCBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufVxuICAgKi9cbiAgc3RhdGljIGdldEJ1aWxkZXIoKTogTW9kZWxCdWlsZGVyRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBtb2RlbEJ1aWxkZXJGdW5jdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHtAbGluayBNb2RlbFJlZ2lzdHJ5TWFuYWdlcn1cbiAgICpcbiAgICogQHJldHVybiBNb2RlbFJlZ2lzdHJ5LCBkZWZhdWx0cyB0byB7QGxpbmsgTW9kZWxSZWdpc3RyeU1hbmFnZXJ9XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZWdpc3RyeSgpIHtcbiAgICBpZiAoIWFjdGluZ01vZGVsUmVnaXN0cnkpIGFjdGluZ01vZGVsUmVnaXN0cnkgPSBuZXcgTW9kZWxSZWdpc3RyeU1hbmFnZXIoKTtcbiAgICByZXR1cm4gYWN0aW5nTW9kZWxSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGluZ01vZGVsUmVnaXN0cnlcbiAgICpcbiAgICogQHBhcmFtIHtCdWlsZGVyUmVnaXN0cnl9IG1vZGVsUmVnaXN0cnkgdGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBvZiBSZWdpc3RyeVxuICAgKi9cbiAgc3RhdGljIHNldFJlZ2lzdHJ5KG1vZGVsUmVnaXN0cnk6IEJ1aWxkZXJSZWdpc3RyeTxhbnk+KSB7XG4gICAgYWN0aW5nTW9kZWxSZWdpc3RyeSA9IG1vZGVsUmVnaXN0cnk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgcmVnaXN0ZXIgbmV3IE1vZGVsc1xuICAgKiBAcGFyYW0ge2FueX0gY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSB3aGVuIG5vdCBkZWZpbmVkLCB0aGUgbmFtZSBvZiB0aGUgY29uc3RydWN0b3Igd2lsbCBiZSB1c2VkXG4gICAqXG4gICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyPFQgZXh0ZW5kcyBNb2RlbD4oXG4gICAgY29uc3RydWN0b3I6IE1vZGVsQ29uc3RydWN0b3I8VD4sXG4gICAgbmFtZT86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICByZXR1cm4gTW9kZWwuZ2V0UmVnaXN0cnkoKS5yZWdpc3Rlcihjb25zdHJ1Y3RvciwgbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgR2V0cyBhIHJlZ2lzdGVyZWQgTW9kZWwge0BsaW5rIE1vZGVsQ29uc3RydWN0b3J9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqXG4gICAqIEBzZWUgTW9kZWxSZWdpc3RyeVxuICAgKi9cbiAgc3RhdGljIGdldDxUIGV4dGVuZHMgTW9kZWw+KG5hbWU6IHN0cmluZyk6IE1vZGVsQ29uc3RydWN0b3I8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBNb2RlbC5nZXRSZWdpc3RyeSgpLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9ialxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NsYXp6XSB3aGVuIHByb3ZpZGVkLCBpdCB3aWxsIGF0dGVtcHQgdG8gZmluZCB0aGUgbWF0Y2hpbmcgY29uc3RydWN0b3JcbiAgICpcbiAgICogQHRocm93cyBFcnJvciBJZiBjbGF6eiBpcyBub3QgZm91bmQsIG9yIG9iaiBpcyBub3QgYSB7QGxpbmsgTW9kZWx9IG1lYW5pbmcgaXQgaGFzIG5vIHtAbGluayBNb2RlbEtleXMuQU5DSE9SfSBwcm9wZXJ0eVxuICAgKlxuICAgKiBAc2VlIE1vZGVsUmVnaXN0cnlcbiAgICovXG4gIHN0YXRpYyBidWlsZDxUIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICAgIGNsYXp6Pzogc3RyaW5nXG4gICk6IFQge1xuICAgIHJldHVybiBNb2RlbC5nZXRSZWdpc3RyeSgpLmJ1aWxkKG9iaiwgY2xhenopO1xuICB9XG5cbiAgc3RhdGljIGdldE1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pIHtcbiAgICByZXR1cm4gZ2V0TWV0YWRhdGE8TT4obW9kZWwpO1xuICB9XG5cbiAgc3RhdGljIGdldEF0dHJpYnV0ZXM8ViBleHRlbmRzIE1vZGVsPihtb2RlbDogQ29uc3RydWN0b3I8Vj4gfCBWKSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBwcm90b3R5cGUgPVxuICAgICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICA/IE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2RlbClcbiAgICAgICAgOiAobW9kZWwgYXMgYW55KS5wcm90b3R5cGU7XG4gICAgd2hpbGUgKHByb3RvdHlwZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wczogc3RyaW5nW10gPSBwcm90b3R5cGVbTW9kZWxLZXlzLkFUVFJJQlVURV07XG4gICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucHJvcHMpO1xuICAgICAgfVxuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzPE0gZXh0ZW5kcyBNb2RlbD4ob2JqMTogTSwgb2JqMjogTSwgLi4uZXhjZXB0aW9uczogYW55W10pIHtcbiAgICByZXR1cm4gaXNFcXVhbChvYmoxLCBvYmoyLCAuLi5leGNlcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBoYXNFcnJvcnM8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSwgLi4ucHJvcHNUb0lnbm9yZTogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdmFsaWRhdGUobW9kZWwsIC4uLnByb3BzVG9JZ25vcmUpO1xuICB9XG5cbiAgc3RhdGljIHNlcmlhbGl6ZTxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgTW9kZWwua2V5KE1vZGVsS2V5cy5TRVJJQUxJWkFUSU9OKSxcbiAgICAgIG1vZGVsLmNvbnN0cnVjdG9yXG4gICAgKTtcblxuICAgIGlmIChtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZXJpYWxpemVyKVxuICAgICAgcmV0dXJuIFNlcmlhbGl6YXRpb24uc2VyaWFsaXplKFxuICAgICAgICB0aGlzLFxuICAgICAgICBtZXRhZGF0YS5zZXJpYWxpemVyLFxuICAgICAgICAuLi4obWV0YWRhdGEuYXJncyB8fCBbXSlcbiAgICAgICk7XG4gICAgcmV0dXJuIFNlcmlhbGl6YXRpb24uc2VyaWFsaXplKG1vZGVsKTtcbiAgfVxuXG4gIHN0YXRpYyBoYXNoPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICBNb2RlbC5rZXkoTW9kZWxLZXlzLkhBU0hJTkcpLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuXG4gICAgaWYgKG1ldGFkYXRhICYmIG1ldGFkYXRhLmFsZ29yaXRobSlcbiAgICAgIHJldHVybiBIYXNoaW5nLmhhc2gobW9kZWwsIG1ldGFkYXRhLmFsZ29yaXRobSwgLi4uKG1ldGFkYXRhLmFyZ3MgfHwgW10pKTtcbiAgICByZXR1cm4gSGFzaGluZy5oYXNoKG1vZGVsKTtcbiAgfVxuICAvKipcbiAgICogQHN1bW1hcnkgQnVpbGRzIHRoZSBrZXkgdG8gc3RvcmUgYXMgTWV0YWRhdGEgdW5kZXIgUmVmbGVjdGlvbnNcbiAgICogQGRlc2NyaXB0aW9uIGNvbmNhdGVuYXRlcyB7QGxpbmsgTW9kZWxLZXlzI1JFRkxFQ1R9IHdpdGggdGhlIHByb3ZpZGVkIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMga2V5KHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGdldE1vZGVsS2V5KHN0cik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgYW4gb2JqZWN0IGlzIGEgbW9kZWwgaW5zdGFuY2Ugb3IgaGFzIG1vZGVsIG1ldGFkYXRhXG4gICAqIEBzdW1tYXJ5IENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gb2JqZWN0IGlzIGVpdGhlciBhbiBpbnN0YW5jZSBvZiB0aGUgTW9kZWwgY2xhc3Mgb3JcbiAgICogaGFzIG1vZGVsIG1ldGFkYXRhIGF0dGFjaGVkIHRvIGl0LiBUaGlzIGZ1bmN0aW9uIGlzIGVzc2VudGlhbCBmb3Igc2VyaWFsaXphdGlvbiBhbmRcbiAgICogZGVzZXJpYWxpemF0aW9uIHByb2Nlc3NlcywgYXMgaXQgaGVscHMgaWRlbnRpZnkgbW9kZWwgb2JqZWN0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZy5cbiAgICogSXQgc2FmZWx5IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycyBkdXJpbmcgbWV0YWRhdGEgcmV0cmlldmFsLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHRhcmdldCAtIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgbW9kZWwgaW5zdGFuY2Ugb3IgaGFzIG1vZGVsIG1ldGFkYXRhLCBmYWxzZSBvdGhlcndpc2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBDaGVjayBpZiBhbiBvYmplY3QgaXMgYSBtb2RlbFxuICAgKiBjb25zdCB1c2VyID0gbmV3IFVzZXIoeyBuYW1lOiBcIkpvaG5cIiB9KTtcbiAgICogY29uc3QgaXNVc2VyTW9kZWwgPSBpc01vZGVsKHVzZXIpOyAvLyB0cnVlXG4gICAqXG4gICAqIC8vIENoZWNrIGEgcGxhaW4gb2JqZWN0XG4gICAqIGNvbnN0IHBsYWluT2JqZWN0ID0geyBuYW1lOiBcIkpvaG5cIiB9O1xuICAgKiBjb25zdCBpc1BsYWluT2JqZWN0TW9kZWwgPSBpc01vZGVsKHBsYWluT2JqZWN0KTsgLy8gZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgaXNNb2RlbCh0YXJnZXQ6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIE1vZGVsIHx8ICEhTW9kZWwuZ2V0TWV0YWRhdGEodGFyZ2V0IGFzIGFueSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBvZiBhIG1vZGVsIGlzIGl0c2VsZiBhIG1vZGVsIG9yIGhhcyBhIG1vZGVsIHR5cGVcbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3BlY2lmaWMgcHJvcGVydHkgb2YgYSBtb2RlbCBpbnN0YW5jZSBpcyBlaXRoZXIgYSBtb2RlbCBpbnN0YW5jZVxuICAgKiBvciBoYXMgYSB0eXBlIHRoYXQgaXMgcmVnaXN0ZXJlZCBhcyBhIG1vZGVsLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIG1vZGVsIHNlcmlhbGl6YXRpb25cbiAgICogYW5kIGRlc2VyaWFsaXphdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgbmVzdGVkIG1vZGVscy5cbiAgICogQHRlbXBsYXRlIE0gZXh0ZW5kcyB7QGxpbmsgTW9kZWx9XG4gICAqIEBwYXJhbSB7TX0gdGFyZ2V0IC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkfSBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3BlcnR5IGlzIGEgbW9kZWwgaW5zdGFuY2UsXG4gICAqIHRoZSBtb2RlbCBuYW1lIGlmIHRoZSBwcm9wZXJ0eSBoYXMgYSBtb2RlbCB0eXBlLCBvciB1bmRlZmluZWQgaWYgbm90IGEgbW9kZWxcbiAgICovXG4gIHN0YXRpYyBpc1Byb3BlcnR5TW9kZWw8TSBleHRlbmRzIE1vZGVsPihcbiAgICB0YXJnZXQ6IE0sXG4gICAgYXR0cmlidXRlOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKE1vZGVsLmlzTW9kZWwoKHRhcmdldCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVthdHRyaWJ1dGVdKSkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKE1vZGVsS2V5cy5UWVBFLCB0YXJnZXQsIGF0dHJpYnV0ZSk7XG4gICAgcmV0dXJuIE1vZGVsLmdldChtZXRhZGF0YS5uYW1lKSA/IG1ldGFkYXRhLm5hbWUgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -7,7 +7,7 @@
7
7
  * @property {string} BIGINT references the bigint primitive
8
8
  *
9
9
  * @constant Primitives
10
- * @memberOf module:decorator-validation.Model
10
+ * @memberOf module:decorator-validation
11
11
  */
12
12
  export declare enum Primitives {
13
13
  STRING = "string",
@@ -26,7 +26,7 @@ export declare enum Primitives {
26
26
  * @property {string} DATE
27
27
  *
28
28
  * @constant ReservedModels
29
- * @memberOf module:decorator-validation.Model
29
+ * @memberOf module:decorator-validation
30
30
  */
31
31
  export declare enum ReservedModels {
32
32
  STRING = "string",
@@ -51,6 +51,6 @@ export declare enum ReservedModels {
51
51
  * @property {string} BIGINT
52
52
  *
53
53
  * @constant jsTypes
54
- * @memberOf module:decorator-validation.Model
54
+ * @memberOf module:decorator-validation
55
55
  */
56
56
  export declare const jsTypes: string[];
@@ -7,7 +7,7 @@
7
7
  * @property {string} BIGINT references the bigint primitive
8
8
  *
9
9
  * @constant Primitives
10
- * @memberOf module:decorator-validation.Model
10
+ * @memberOf module:decorator-validation
11
11
  */
12
12
  export var Primitives;
13
13
  (function (Primitives) {
@@ -27,7 +27,7 @@ export var Primitives;
27
27
  * @property {string} DATE
28
28
  *
29
29
  * @constant ReservedModels
30
- * @memberOf module:decorator-validation.Model
30
+ * @memberOf module:decorator-validation
31
31
  */
32
32
  export var ReservedModels;
33
33
  (function (ReservedModels) {
@@ -53,7 +53,7 @@ export var ReservedModels;
53
53
  * @property {string} BIGINT
54
54
  *
55
55
  * @constant jsTypes
56
- * @memberOf module:decorator-validation.Model
56
+ * @memberOf module:decorator-validation
57
57
  */
58
58
  export const jsTypes = [
59
59
  "string",
@@ -67,4 +67,4 @@ export const jsTypes = [
67
67
  "null",
68
68
  "bigint",
69
69
  ];
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwrQkFBaUIsQ0FBQTtJQUNqQiwrQkFBaUIsQ0FBQTtJQUNqQixpQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQU4sSUFBWSxjQU9YO0FBUEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLG1DQUFpQixDQUFBO0lBQ2pCLG1DQUFpQixDQUFBO0lBQ2pCLHFDQUFtQixDQUFBO0lBQ25CLG1DQUFpQixDQUFBO0lBQ2pCLCtCQUFhLENBQUE7QUFDZixDQUFDLEVBUFcsY0FBYyxLQUFkLGNBQWMsUUFPekI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLFVBQVU7SUFDVixRQUFRO0lBQ1IsV0FBVztJQUNYLE1BQU07SUFDTixRQUFRO0NBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHN1bW1hcnkgUmVmZXJlbmNlcyB0aGUgcmVsZXZhbnQgSlMgcHJpbWl0aXZlc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVFJJTkcgcmVmZXJlbmNlcyB0aGUgc3RyaW5nIHByaW1pdGl2ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5VTUJFUiByZWZlcmVuY2VzIHRoZSBudW1iZXIgcHJpbWl0aXZlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQk9PTEVBTiByZWZlcmVuY2VzIHRoZSBib29sZWFuIHByaW1pdGl2ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJJR0lOVCByZWZlcmVuY2VzIHRoZSBiaWdpbnQgcHJpbWl0aXZlXG4gKlxuICogQGNvbnN0YW50IFByaW1pdGl2ZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqL1xuZXhwb3J0IGVudW0gUHJpbWl0aXZlcyB7XG4gIFNUUklORyA9IFwic3RyaW5nXCIsXG4gIE5VTUJFUiA9IFwibnVtYmVyXCIsXG4gIEJPT0xFQU4gPSBcImJvb2xlYW5cIixcbiAgQklHSU5UID0gXCJiaWdpbnRcIixcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBSZWZlcmVuY2VzIHRoZSBSZXNlcnZlZCBtb2RlbCBuYW1lcyB0byBpZ25vcmUgZHVyaW5nIE1vZGVsIHJlYnVpbGRpbmdcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gU1RSSU5HXG4gKiBAcHJvcGVydHkge3N0cmluZ30gT0JKRUNUXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTlVNQkVSXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQk9PTEVBTlxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJJR0lOVFxuICogQHByb3BlcnR5IHtzdHJpbmd9IERBVEVcbiAqXG4gKiBAY29uc3RhbnQgUmVzZXJ2ZWRNb2RlbHNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqL1xuZXhwb3J0IGVudW0gUmVzZXJ2ZWRNb2RlbHMge1xuICBTVFJJTkcgPSBcInN0cmluZ1wiLFxuICBPQkpFQ1QgPSBcIm9iamVjdFwiLFxuICBOVU1CRVIgPSBcIm51bWJlclwiLFxuICBCT09MRUFOID0gXCJib29sZWFuXCIsXG4gIEJJR0lOVCA9IFwiYmlnaW50XCIsXG4gIERBVEUgPSBcImRhdGVcIixcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBSZWZlcmVuY2VzIHRoZSBiYXNpYyBzdXBwb3J0ZWQganMgdHlwZXNcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RyaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXJyYXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBib29sZWFuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ltYm9sXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZnVuY3Rpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1bmRlZmluZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBudWxsXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQklHSU5UXG4gKlxuICogQGNvbnN0YW50IGpzVHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGpzVHlwZXMgPSBbXG4gIFwic3RyaW5nXCIsXG4gIFwiYXJyYXlcIixcbiAgXCJudW1iZXJcIixcbiAgXCJib29sZWFuXCIsXG4gIFwic3ltYm9sXCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJvYmplY3RcIixcbiAgXCJ1bmRlZmluZWRcIixcbiAgXCJudWxsXCIsXG4gIFwiYmlnaW50XCIsXG5dO1xuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwrQkFBaUIsQ0FBQTtJQUNqQiwrQkFBaUIsQ0FBQTtJQUNqQixpQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQU4sSUFBWSxjQU9YO0FBUEQsV0FBWSxjQUFjO0lBQ3hCLG1DQUFpQixDQUFBO0lBQ2pCLG1DQUFpQixDQUFBO0lBQ2pCLG1DQUFpQixDQUFBO0lBQ2pCLHFDQUFtQixDQUFBO0lBQ25CLG1DQUFpQixDQUFBO0lBQ2pCLCtCQUFhLENBQUE7QUFDZixDQUFDLEVBUFcsY0FBYyxLQUFkLGNBQWMsUUFPekI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRztJQUNyQixRQUFRO0lBQ1IsT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1QsUUFBUTtJQUNSLFVBQVU7SUFDVixRQUFRO0lBQ1IsV0FBVztJQUNYLE1BQU07SUFDTixRQUFRO0NBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHN1bW1hcnkgUmVmZXJlbmNlcyB0aGUgcmVsZXZhbnQgSlMgcHJpbWl0aXZlc1xuICpcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVFJJTkcgcmVmZXJlbmNlcyB0aGUgc3RyaW5nIHByaW1pdGl2ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5VTUJFUiByZWZlcmVuY2VzIHRoZSBudW1iZXIgcHJpbWl0aXZlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQk9PTEVBTiByZWZlcmVuY2VzIHRoZSBib29sZWFuIHByaW1pdGl2ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJJR0lOVCByZWZlcmVuY2VzIHRoZSBiaWdpbnQgcHJpbWl0aXZlXG4gKlxuICogQGNvbnN0YW50IFByaW1pdGl2ZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGVudW0gUHJpbWl0aXZlcyB7XG4gIFNUUklORyA9IFwic3RyaW5nXCIsXG4gIE5VTUJFUiA9IFwibnVtYmVyXCIsXG4gIEJPT0xFQU4gPSBcImJvb2xlYW5cIixcbiAgQklHSU5UID0gXCJiaWdpbnRcIixcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBSZWZlcmVuY2VzIHRoZSBSZXNlcnZlZCBtb2RlbCBuYW1lcyB0byBpZ25vcmUgZHVyaW5nIE1vZGVsIHJlYnVpbGRpbmdcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gU1RSSU5HXG4gKiBAcHJvcGVydHkge3N0cmluZ30gT0JKRUNUXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTlVNQkVSXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQk9PTEVBTlxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJJR0lOVFxuICogQHByb3BlcnR5IHtzdHJpbmd9IERBVEVcbiAqXG4gKiBAY29uc3RhbnQgUmVzZXJ2ZWRNb2RlbHNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGVudW0gUmVzZXJ2ZWRNb2RlbHMge1xuICBTVFJJTkcgPSBcInN0cmluZ1wiLFxuICBPQkpFQ1QgPSBcIm9iamVjdFwiLFxuICBOVU1CRVIgPSBcIm51bWJlclwiLFxuICBCT09MRUFOID0gXCJib29sZWFuXCIsXG4gIEJJR0lOVCA9IFwiYmlnaW50XCIsXG4gIERBVEUgPSBcImRhdGVcIixcbn1cblxuLyoqXG4gKiBAc3VtbWFyeSBSZWZlcmVuY2VzIHRoZSBiYXNpYyBzdXBwb3J0ZWQganMgdHlwZXNcbiAqXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RyaW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYXJyYXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBudW1iZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBib29sZWFuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3ltYm9sXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZnVuY3Rpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvYmplY3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1bmRlZmluZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBudWxsXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQklHSU5UXG4gKlxuICogQGNvbnN0YW50IGpzVHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGpzVHlwZXMgPSBbXG4gIFwic3RyaW5nXCIsXG4gIFwiYXJyYXlcIixcbiAgXCJudW1iZXJcIixcbiAgXCJib29sZWFuXCIsXG4gIFwic3ltYm9sXCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJvYmplY3RcIixcbiAgXCJ1bmRlZmluZWRcIixcbiAgXCJudWxsXCIsXG4gIFwiYmlnaW50XCIsXG5dO1xuIl19
@@ -7,7 +7,7 @@ import { Model } from "./Model";
7
7
  * @return {T} the new instance
8
8
  *
9
9
  * @function construct
10
- * @memberOf module:decorator-validation.Construction
10
+ * @memberOf module:decorator-validation
11
11
  */
12
12
  export declare function construct<T extends Model>(constructor: any, ...args: any[]): T;
13
13
  /**
@@ -15,7 +15,7 @@ export declare function construct<T extends Model>(constructor: any, ...args: an
15
15
  * @param {object} obj
16
16
  *
17
17
  * @function findLastProtoBeforeObject
18
- * @memberOf module:decorator-validation.Construction
18
+ * @memberOf module:decorator-validation
19
19
  */
20
20
  export declare function findLastProtoBeforeObject(obj: object): object;
21
21
  /**
@@ -24,6 +24,6 @@ export declare function findLastProtoBeforeObject(obj: object): object;
24
24
  * @param {unknown} obj
25
25
  *
26
26
  * @function bindModelPrototype
27
- * @memberOf module:decorator-validation.Construction
27
+ * @memberOf module:decorator-validation
28
28
  */
29
29
  export declare function bindModelPrototype(obj: unknown): void;
@@ -7,7 +7,7 @@ import { Model } from "./Model";
7
7
  * @return {T} the new instance
8
8
  *
9
9
  * @function construct
10
- * @memberOf module:decorator-validation.Construction
10
+ * @memberOf module:decorator-validation
11
11
  */
12
12
  export function construct(constructor, ...args) {
13
13
  const _constr = (...argz) => new constructor(...argz);
@@ -19,7 +19,7 @@ export function construct(constructor, ...args) {
19
19
  * @param {object} obj
20
20
  *
21
21
  * @function findLastProtoBeforeObject
22
- * @memberOf module:decorator-validation.Construction
22
+ * @memberOf module:decorator-validation
23
23
  */
24
24
  export function findLastProtoBeforeObject(obj) {
25
25
  let prototype = Object.getPrototypeOf(obj);
@@ -40,7 +40,7 @@ export function findLastProtoBeforeObject(obj) {
40
40
  * @param {unknown} obj
41
41
  *
42
42
  * @function bindModelPrototype
43
- * @memberOf module:decorator-validation.Construction
43
+ * @memberOf module:decorator-validation
44
44
  */
45
45
  export function bindModelPrototype(obj) {
46
46
  if (obj instanceof Model)
@@ -61,4 +61,4 @@ export function bindModelPrototype(obj) {
61
61
  }
62
62
  throw new Error("Could not find proper prototype to bind");
63
63
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL2NvbnN0cnVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFdBQWdCLEVBQ2hCLEdBQUcsSUFBVztJQUVkLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQzFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxHQUFXO0lBQ25ELElBQUksU0FBUyxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNyRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVk7SUFDN0MsSUFBSSxHQUFHLFlBQVksS0FBSztRQUFFLE9BQU87SUFFakMsU0FBUyxhQUFhLENBQUMsYUFBc0IsRUFBRSxTQUFpQjtRQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkMsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFDRSxJQUFJLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUNoRCxDQUFDO1lBQ0QsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEhlbHBlciBGdW5jdGlvbiB0byBvdmVycmlkZSBjb25zdHJ1Y3RvcnNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdXG4gKiBAcmV0dXJuIHtUfSB0aGUgbmV3IGluc3RhbmNlXG4gKlxuICogQGZ1bmN0aW9uIGNvbnN0cnVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvbi5Db25zdHJ1Y3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0cnVjdDxUIGV4dGVuZHMgTW9kZWw+KFxuICBjb25zdHJ1Y3RvcjogYW55LFxuICAuLi5hcmdzOiBhbnlbXVxuKTogVCB7XG4gIGNvbnN0IF9jb25zdHIgPSAoLi4uYXJnejogYW55W10pID0+IG5ldyBjb25zdHJ1Y3RvciguLi5hcmd6KTtcbiAgX2NvbnN0ci5wcm90b3R5cGUgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHJldHVybiBfY29uc3RyKC4uLmFyZ3MpO1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IFJlY3Vyc2l2ZWx5IGZpbmRzIHRoZSBsYXN0IHByb3RvdHlwZSBiZWZvcmUgT2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gb2JqXG4gKlxuICogQGZ1bmN0aW9uIGZpbmRMYXN0UHJvdG9CZWZvcmVPYmplY3RcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uQ29uc3RydWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdFByb3RvQmVmb3JlT2JqZWN0KG9iajogb2JqZWN0KTogb2JqZWN0IHtcbiAgbGV0IHByb3RvdHlwZTogYW55ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBvYmo7XG4gIHdoaWxlIChwcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICBpZiAocHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gcHJvdG90eXBlO1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIHByb3RvdHlwZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBwcm9wZXIgcHJvdG90eXBlXCIpO1xufVxuXG4vKipcbiAqIEBzdW1hcnkgYmluZHMgdGhlIHtAbGluayBNb2RlbH0gY2xhc3MgYXMgYSByb290IHByb3RvdHlwZSBvZiB0aGUgcHJvdmlkZWQgaW5zdGFuY2VcbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IG9ialxuICpcbiAqIEBmdW5jdGlvbiBiaW5kTW9kZWxQcm90b3R5cGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uQ29uc3RydWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTW9kZWxQcm90b3R5cGUob2JqOiB1bmtub3duKSB7XG4gIGlmIChvYmogaW5zdGFuY2VvZiBNb2RlbCkgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIGJpbmRQcm90b3R5cGUob2JqVG9PdmVycmlkZTogdW5rbm93biwgcHJvdG90eXBlOiBvYmplY3QpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqVG9PdmVycmlkZSwgcHJvdG90eXBlKTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZTogYW55ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gYmluZFByb3RvdHlwZShvYmosIE1vZGVsLnByb3RvdHlwZSk7XG4gIH1cbiAgd2hpbGUgKHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIGNvbnN0IHByb3QgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICBpZiAoXG4gICAgICBwcm90ID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdCkgPT09IE9iamVjdC5wcm90b3R5cGVcbiAgICApIHtcbiAgICAgIHJldHVybiBiaW5kUHJvdG90eXBlKHByb3RvdHlwZSwgTW9kZWwucHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgcHJvcGVyIHByb3RvdHlwZSB0byBiaW5kXCIpO1xufVxuIl19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL2NvbnN0cnVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFdBQWdCLEVBQ2hCLEdBQUcsSUFBVztJQUVkLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQzFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxHQUFXO0lBQ25ELElBQUksU0FBUyxHQUFRLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNyRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM5RSxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVk7SUFDN0MsSUFBSSxHQUFHLFlBQVksS0FBSztRQUFFLE9BQU87SUFFakMsU0FBUyxhQUFhLENBQUMsYUFBc0IsRUFBRSxTQUFpQjtRQUM5RCxNQUFNLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkMsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxTQUFTLEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsSUFDRSxJQUFJLEtBQUssTUFBTSxDQUFDLFNBQVM7WUFDekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUNoRCxDQUFDO1lBQ0QsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuXG4vKipcbiAqIEBzdW1tYXJ5IEhlbHBlciBGdW5jdGlvbiB0byBvdmVycmlkZSBjb25zdHJ1Y3RvcnNcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHthbnlbXX0gW2FyZ3NdXG4gKiBAcmV0dXJuIHtUfSB0aGUgbmV3IGluc3RhbmNlXG4gKlxuICogQGZ1bmN0aW9uIGNvbnN0cnVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0PFQgZXh0ZW5kcyBNb2RlbD4oXG4gIGNvbnN0cnVjdG9yOiBhbnksXG4gIC4uLmFyZ3M6IGFueVtdXG4pOiBUIHtcbiAgY29uc3QgX2NvbnN0ciA9ICguLi5hcmd6OiBhbnlbXSkgPT4gbmV3IGNvbnN0cnVjdG9yKC4uLmFyZ3opO1xuICBfY29uc3RyLnByb3RvdHlwZSA9IGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgcmV0dXJuIF9jb25zdHIoLi4uYXJncyk7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgUmVjdXJzaXZlbHkgZmluZHMgdGhlIGxhc3QgcHJvdG90eXBlIGJlZm9yZSBPYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqXG4gKiBAZnVuY3Rpb24gZmluZExhc3RQcm90b0JlZm9yZU9iamVjdFxuICogQG1lbWJlck9mIG1vZHVsZTpkZWNvcmF0b3ItdmFsaWRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZExhc3RQcm90b0JlZm9yZU9iamVjdChvYmo6IG9iamVjdCk6IG9iamVjdCB7XG4gIGxldCBwcm90b3R5cGU6IGFueSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopO1xuICBpZiAocHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gb2JqO1xuICB3aGlsZSAocHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIHByb3RvdHlwZTtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiBwcm90b3R5cGU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgcHJvcGVyIHByb3RvdHlwZVwiKTtcbn1cblxuLyoqXG4gKiBAc3VtYXJ5IGJpbmRzIHRoZSB7QGxpbmsgTW9kZWx9IGNsYXNzIGFzIGEgcm9vdCBwcm90b3R5cGUgb2YgdGhlIHByb3ZpZGVkIGluc3RhbmNlXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSBvYmpcbiAqXG4gKiBAZnVuY3Rpb24gYmluZE1vZGVsUHJvdG90eXBlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kTW9kZWxQcm90b3R5cGUob2JqOiB1bmtub3duKSB7XG4gIGlmIChvYmogaW5zdGFuY2VvZiBNb2RlbCkgcmV0dXJuO1xuXG4gIGZ1bmN0aW9uIGJpbmRQcm90b3R5cGUob2JqVG9PdmVycmlkZTogdW5rbm93biwgcHJvdG90eXBlOiBvYmplY3QpIHtcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2Yob2JqVG9PdmVycmlkZSwgcHJvdG90eXBlKTtcbiAgfVxuXG4gIGNvbnN0IHByb3RvdHlwZTogYW55ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG4gIGlmIChwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gYmluZFByb3RvdHlwZShvYmosIE1vZGVsLnByb3RvdHlwZSk7XG4gIH1cbiAgd2hpbGUgKHByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIGNvbnN0IHByb3QgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKTtcbiAgICBpZiAoXG4gICAgICBwcm90ID09PSBPYmplY3QucHJvdG90eXBlIHx8XG4gICAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdCkgPT09IE9iamVjdC5wcm90b3R5cGVcbiAgICApIHtcbiAgICAgIHJldHVybiBiaW5kUHJvdG90eXBlKHByb3RvdHlwZSwgTW9kZWwucHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgcHJvcGVyIHByb3RvdHlwZSB0byBiaW5kXCIpO1xufVxuIl19
@@ -1,7 +1,8 @@
1
1
  /**
2
2
  * @summary defines the tpe os an InstanceCallback function
3
3
  *
4
- * @memberOf module:decorator-validation.Model
4
+ * @memberOf module:decorator-validation
5
+ * @category Model
5
6
  */
6
7
  export type InstanceCallback = (instance: any, ...args: any[]) => void;
7
8
  /**
@@ -17,8 +18,7 @@ export type InstanceCallback = (instance: any, ...args: any[]) => void;
17
18
  *
18
19
  * @function model
19
20
  *
20
- * @memberOf module:decorator-validation.Model
21
- *
21
+ * @category Decorators
22
22
  */
23
23
  export declare function model(instanceCallback?: InstanceCallback): any;
24
24
  export declare function hashedBy(algorithm: string, ...args: any[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
@@ -15,8 +15,7 @@ import { metadata } from "@decaf-ts/reflection";
15
15
  *
16
16
  * @function model
17
17
  *
18
- * @memberOf module:decorator-validation.Model
19
- *
18
+ * @category Decorators
20
19
  */
21
20
  export function model(instanceCallback) {
22
21
  return ((original) => {
@@ -60,4 +59,4 @@ export function serializedBy(serializer, ...args) {
60
59
  args: args,
61
60
  });
62
61
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFTaEQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxnQkFBbUM7SUFDdkQsT0FBTyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7UUFDeEIsZ0NBQWdDO1FBQ2hDLE1BQU0sY0FBYyxHQUFRLFVBQVUsR0FBRyxJQUFXO1lBQ2xELE1BQU0sUUFBUSxHQUFnQyxTQUFTLENBQ3JELFFBQVEsRUFDUixHQUFHLElBQUksQ0FDUixDQUFDO1lBQ0Ysa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsMkVBQTJFO1lBQzNFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE9BQU87Z0JBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRWxFLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTFFLElBQUksZ0JBQWdCO2dCQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRTFELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQUVGLG9EQUFvRDtRQUNwRCxjQUFjLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDOUMseURBQXlEO1FBQ3pELE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRTtZQUM1QyxRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1lBQ25CLEtBQUssRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJO1NBQzNDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFOUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlDLGtEQUFrRDtRQUNsRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDLENBQVEsQ0FBQztBQUNaLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLFNBQWlCLEVBQUUsR0FBRyxJQUFXO0lBQ3hELE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzVDLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLElBQUksRUFBRSxJQUFJO0tBQ1gsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsVUFBa0IsRUFBRSxHQUFHLElBQVc7SUFDN0QsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDbEQsVUFBVSxFQUFFLFVBQVU7UUFDdEIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmluZE1vZGVsUHJvdG90eXBlLCBjb25zdHJ1Y3QgfSBmcm9tIFwiLi9jb25zdHJ1Y3Rpb25cIjtcbmltcG9ydCB7IE1vZGVsS2V5cyB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIi4vTW9kZWxcIjtcbmltcG9ydCB7IG1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9yZWZsZWN0aW9uXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgZGVmaW5lcyB0aGUgdHBlIG9zIGFuIEluc3RhbmNlQ2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRlY29yYXRvci12YWxpZGF0aW9uLk1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIEluc3RhbmNlQ2FsbGJhY2sgPSAoaW5zdGFuY2U6IGFueSwgLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG5cbi8qKlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIGNsYXNzIGFzIGEgTW9kZWwgY2xhc3NcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIC0gUmVnaXN0ZXJzIHRoZSBjbGFzcyB1bmRlciB0aGUgbW9kZWwgcmVnaXN0cnkgc28gaXQgY2FuIGJlIGVhc2lseSByZWJ1aWx0O1xuICogLSBPdmVycmlkZXMgdGhlIGNsYXNzIGNvbnN0cnVjdG9yO1xuICogLSBSdW5zIHRoZSBnbG9iYWwge0BsaW5rIE1vZGVsQnVpbGRlckZ1bmN0aW9ufSBpZiBkZWZpbmVkO1xuICogLSBSdW5zIHRoZSBvcHRpb25hbCB7QGxpbmsgSW5zdGFuY2VDYWxsYmFja30gaWYgcHJvdmlkZWQ7XG4gKlxuICogQHBhcmFtIHtJbnN0YW5jZUNhbGxiYWNrfSBbaW5zdGFuY2VDYWxsYmFja10gb3B0aW9uYWwgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBpbnN0YW5jZSB1cG9uIGluc3RhbnRpYXRpb24uIGRlZmF1bHRzIHRvIHVuZGVmaW5lZFxuICpcbiAqIEBmdW5jdGlvbiBtb2RlbFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb24uTW9kZWxcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbChpbnN0YW5jZUNhbGxiYWNrPzogSW5zdGFuY2VDYWxsYmFjaykge1xuICByZXR1cm4gKChvcmlnaW5hbDogYW55KSA9PiB7XG4gICAgLy8gdGhlIG5ldyBjb25zdHJ1Y3RvciBiZWhhdmlvdXJcbiAgICBjb25zdCBuZXdDb25zdHJ1Y3RvcjogYW55ID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogUmV0dXJuVHlwZTx0eXBlb2Ygb3JpZ2luYWw+ID0gY29uc3RydWN0KFxuICAgICAgICBvcmlnaW5hbCxcbiAgICAgICAgLi4uYXJnc1xuICAgICAgKTtcbiAgICAgIGJpbmRNb2RlbFByb3RvdHlwZShpbnN0YW5jZSk7XG4gICAgICAvLyBydW4gYSBidWlsZGVyIGZ1bmN0aW9uIGlmIGRlZmluZWQgd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQgKFRoZSBNb2RlbEFyZylcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBNb2RlbC5nZXRCdWlsZGVyKCk7XG4gICAgICBpZiAoYnVpbGRlcikgYnVpbGRlcihpbnN0YW5jZSwgYXJncy5sZW5ndGggPyBhcmdzWzBdIDogdW5kZWZpbmVkKTtcblxuICAgICAgbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5NT0RFTCksIG9yaWdpbmFsLm5hbWUpKGluc3RhbmNlLmNvbnN0cnVjdG9yKTtcblxuICAgICAgaWYgKGluc3RhbmNlQ2FsbGJhY2spIGluc3RhbmNlQ2FsbGJhY2soaW5zdGFuY2UsIC4uLmFyZ3MpO1xuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcblxuICAgIC8vIGNvcHkgcHJvdG90eXBlIHNvIGluc3RhbmNlb2Ygb3BlcmF0b3Igc3RpbGwgd29ya3NcbiAgICBuZXdDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBvcmlnaW5hbC5wcm90b3R5cGU7XG4gICAgLy8gU2V0cyB0aGUgcHJvcGVyIGNvbnN0cnVjdG9yIG5hbWUgZm9yIHR5cGUgdmVyaWZpY2F0aW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld0NvbnN0cnVjdG9yLCBcIm5hbWVcIiwge1xuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogb3JpZ2luYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUsXG4gICAgfSk7XG5cbiAgICBtZXRhZGF0YShNb2RlbC5rZXkoTW9kZWxLZXlzLk1PREVMKSwgb3JpZ2luYWwubmFtZSkob3JpZ2luYWwpO1xuXG4gICAgTW9kZWwucmVnaXN0ZXIobmV3Q29uc3RydWN0b3IsIG9yaWdpbmFsLm5hbWUpO1xuXG4gICAgLy8gcmV0dXJuIG5ldyBjb25zdHJ1Y3RvciAod2lsbCBvdmVycmlkZSBvcmlnaW5hbClcbiAgICByZXR1cm4gbmV3Q29uc3RydWN0b3I7XG4gIH0pIGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hlZEJ5KGFsZ29yaXRobTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuICByZXR1cm4gbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5IQVNISU5HKSwge1xuICAgIGFsZ29yaXRobTogYWxnb3JpdGhtLFxuICAgIGFyZ3M6IGFyZ3MsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplZEJ5KHNlcmlhbGl6ZXI6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgcmV0dXJuIG1ldGFkYXRhKE1vZGVsLmtleShNb2RlbEtleXMuU0VSSUFMSVpBVElPTiksIHtcbiAgICBzZXJpYWxpemVyOiBzZXJpYWxpemVyLFxuICAgIGFyZ3M6IGFyZ3MsXG4gIH0pO1xufVxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVaEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLGdCQUFtQztJQUN2RCxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtRQUN4QixnQ0FBZ0M7UUFDaEMsTUFBTSxjQUFjLEdBQVEsVUFBVSxHQUFHLElBQVc7WUFDbEQsTUFBTSxRQUFRLEdBQWdDLFNBQVMsQ0FDckQsUUFBUSxFQUNSLEdBQUcsSUFBSSxDQUNSLENBQUM7WUFDRixrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QiwyRUFBMkU7WUFDM0UsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksT0FBTztnQkFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFbEUsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFMUUsSUFBSSxnQkFBZ0I7Z0JBQUUsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFFMUQsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDO1FBRUYsb0RBQW9EO1FBQ3BELGNBQWMsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUM5Qyx5REFBeUQ7UUFDekQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFO1lBQzVDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUk7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU5RCxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsa0RBQWtEO1FBQ2xELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUMsQ0FBUSxDQUFDO0FBQ1osQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsU0FBaUIsRUFBRSxHQUFHLElBQVc7SUFDeEQsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDNUMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsSUFBSSxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxVQUFrQixFQUFFLEdBQUcsSUFBVztJQUM3RCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNsRCxVQUFVLEVBQUUsVUFBVTtRQUN0QixJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBiaW5kTW9kZWxQcm90b3R5cGUsIGNvbnN0cnVjdCB9IGZyb20gXCIuL2NvbnN0cnVjdGlvblwiO1xuaW1wb3J0IHsgTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi9Nb2RlbFwiO1xuaW1wb3J0IHsgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBkZWZpbmVzIHRoZSB0cGUgb3MgYW4gSW5zdGFuY2VDYWxsYmFjayBmdW5jdGlvblxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGVjb3JhdG9yLXZhbGlkYXRpb25cbiAqIEBjYXRlZ29yeSBNb2RlbFxuICovXG5leHBvcnQgdHlwZSBJbnN0YW5jZUNhbGxiYWNrID0gKGluc3RhbmNlOiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkO1xuXG4vKipcbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBjbGFzcyBhcyBhIE1vZGVsIGNsYXNzXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiAtIFJlZ2lzdGVycyB0aGUgY2xhc3MgdW5kZXIgdGhlIG1vZGVsIHJlZ2lzdHJ5IHNvIGl0IGNhbiBiZSBlYXNpbHkgcmVidWlsdDtcbiAqIC0gT3ZlcnJpZGVzIHRoZSBjbGFzcyBjb25zdHJ1Y3RvcjtcbiAqIC0gUnVucyB0aGUgZ2xvYmFsIHtAbGluayBNb2RlbEJ1aWxkZXJGdW5jdGlvbn0gaWYgZGVmaW5lZDtcbiAqIC0gUnVucyB0aGUgb3B0aW9uYWwge0BsaW5rIEluc3RhbmNlQ2FsbGJhY2t9IGlmIHByb3ZpZGVkO1xuICpcbiAqIEBwYXJhbSB7SW5zdGFuY2VDYWxsYmFja30gW2luc3RhbmNlQ2FsbGJhY2tdIG9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgaW5zdGFuY2UgdXBvbiBpbnN0YW50aWF0aW9uLiBkZWZhdWx0cyB0byB1bmRlZmluZWRcbiAqXG4gKiBAZnVuY3Rpb24gbW9kZWxcbiAqXG4gKiBAY2F0ZWdvcnkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kZWwoaW5zdGFuY2VDYWxsYmFjaz86IEluc3RhbmNlQ2FsbGJhY2spIHtcbiAgcmV0dXJuICgob3JpZ2luYWw6IGFueSkgPT4ge1xuICAgIC8vIHRoZSBuZXcgY29uc3RydWN0b3IgYmVoYXZpb3VyXG4gICAgY29uc3QgbmV3Q29uc3RydWN0b3I6IGFueSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgY29uc3QgaW5zdGFuY2U6IFJldHVyblR5cGU8dHlwZW9mIG9yaWdpbmFsPiA9IGNvbnN0cnVjdChcbiAgICAgICAgb3JpZ2luYWwsXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG4gICAgICBiaW5kTW9kZWxQcm90b3R5cGUoaW5zdGFuY2UpO1xuICAgICAgLy8gcnVuIGEgYnVpbGRlciBmdW5jdGlvbiBpZiBkZWZpbmVkIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50IChUaGUgTW9kZWxBcmcpXG4gICAgICBjb25zdCBidWlsZGVyID0gTW9kZWwuZ2V0QnVpbGRlcigpO1xuICAgICAgaWYgKGJ1aWxkZXIpIGJ1aWxkZXIoaW5zdGFuY2UsIGFyZ3MubGVuZ3RoID8gYXJnc1swXSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgIG1ldGFkYXRhKE1vZGVsLmtleShNb2RlbEtleXMuTU9ERUwpLCBvcmlnaW5hbC5uYW1lKShpbnN0YW5jZS5jb25zdHJ1Y3Rvcik7XG5cbiAgICAgIGlmIChpbnN0YW5jZUNhbGxiYWNrKSBpbnN0YW5jZUNhbGxiYWNrKGluc3RhbmNlLCAuLi5hcmdzKTtcblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG5cbiAgICAvLyBjb3B5IHByb3RvdHlwZSBzbyBpbnN0YW5jZW9mIG9wZXJhdG9yIHN0aWxsIHdvcmtzXG4gICAgbmV3Q29uc3RydWN0b3IucHJvdG90eXBlID0gb3JpZ2luYWwucHJvdG90eXBlO1xuICAgIC8vIFNldHMgdGhlIHByb3BlciBjb25zdHJ1Y3RvciBuYW1lIGZvciB0eXBlIHZlcmlmaWNhdGlvblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdDb25zdHJ1Y3RvciwgXCJuYW1lXCIsIHtcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IG9yaWdpbmFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIH0pO1xuXG4gICAgbWV0YWRhdGEoTW9kZWwua2V5KE1vZGVsS2V5cy5NT0RFTCksIG9yaWdpbmFsLm5hbWUpKG9yaWdpbmFsKTtcblxuICAgIE1vZGVsLnJlZ2lzdGVyKG5ld0NvbnN0cnVjdG9yLCBvcmlnaW5hbC5uYW1lKTtcblxuICAgIC8vIHJldHVybiBuZXcgY29uc3RydWN0b3IgKHdpbGwgb3ZlcnJpZGUgb3JpZ2luYWwpXG4gICAgcmV0dXJuIG5ld0NvbnN0cnVjdG9yO1xuICB9KSBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoZWRCeShhbGdvcml0aG06IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgcmV0dXJuIG1ldGFkYXRhKE1vZGVsLmtleShNb2RlbEtleXMuSEFTSElORyksIHtcbiAgICBhbGdvcml0aG06IGFsZ29yaXRobSxcbiAgICBhcmdzOiBhcmdzLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZWRCeShzZXJpYWxpemVyOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gIHJldHVybiBtZXRhZGF0YShNb2RlbC5rZXkoTW9kZWxLZXlzLlNFUklBTElaQVRJT04pLCB7XG4gICAgc2VyaWFsaXplcjogc2VyaWFsaXplcixcbiAgICBhcmdzOiBhcmdzLFxuICB9KTtcbn1cbiJdfQ==
@@ -5,3 +5,4 @@ export * from "./Model";
5
5
  export * from "./ModelErrorDefinition";
6
6
  export * from "./types";
7
7
  export * from "./validation";
8
+ export * from "./utils";
@@ -5,4 +5,5 @@ export * from "./Model";
5
5
  export * from "./ModelErrorDefinition";
6
6
  export * from "./types";
7
7
  export * from "./validation";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbiJdfQ==
8
+ export * from "./utils";
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL01vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Nb2RlbEVycm9yRGVmaW5pdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG4iXX0=