@messaia/cdk 17.1.0-rc15 → 17.1.0-rc17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/esm2022/lib/form-validators/abstract/typed-form.mjs +10 -1
  2. package/esm2022/lib/form-validators/algorithm/luhn-algorithm.mjs +25 -7
  3. package/esm2022/lib/form-validators/const/app-validators.const.mjs +2 -2
  4. package/esm2022/lib/form-validators/const/app.const.mjs +49 -1
  5. package/esm2022/lib/form-validators/const/config-names.const.mjs +25 -1
  6. package/esm2022/lib/form-validators/const/config-required-fields.const.mjs +26 -2
  7. package/esm2022/lib/form-validators/const/events.const.mjs +40 -1
  8. package/esm2022/lib/form-validators/const/html-elements.const.mjs +19 -1
  9. package/esm2022/lib/form-validators/const/validator.const.mjs +22 -1
  10. package/esm2022/lib/form-validators/core/{validator.static.mjs → annotation-types.mjs} +1 -1
  11. package/esm2022/lib/form-validators/core/default-container.mjs +493 -0
  12. package/esm2022/lib/form-validators/decorators/allOf.decorator.mjs +2 -2
  13. package/esm2022/lib/form-validators/decorators/alpha.decorator.mjs +3 -3
  14. package/esm2022/lib/form-validators/decorators/alphaNumeric.decorator.mjs +3 -3
  15. package/esm2022/lib/form-validators/decorators/and.decorator.mjs +2 -2
  16. package/esm2022/lib/form-validators/decorators/ascii.decorator.mjs +2 -2
  17. package/esm2022/lib/form-validators/decorators/async.decorator.mjs +2 -2
  18. package/esm2022/lib/form-validators/decorators/base-decorator.function.mjs +2 -2
  19. package/esm2022/lib/form-validators/decorators/choice.decorator.mjs +2 -2
  20. package/esm2022/lib/form-validators/decorators/compare.decorator.mjs +2 -2
  21. package/esm2022/lib/form-validators/decorators/compose.decorator.mjs +2 -2
  22. package/esm2022/lib/form-validators/decorators/contains.decorator.mjs +2 -2
  23. package/esm2022/lib/form-validators/decorators/credit-card.decorator.mjs +2 -2
  24. package/esm2022/lib/form-validators/decorators/cusip.decorator.mjs +2 -2
  25. package/esm2022/lib/form-validators/decorators/custom.decorator.mjs +2 -2
  26. package/esm2022/lib/form-validators/decorators/dataUri.decorator.mjs +2 -2
  27. package/esm2022/lib/form-validators/decorators/date.decorator.mjs +3 -3
  28. package/esm2022/lib/form-validators/decorators/different.decorator.mjs +2 -2
  29. package/esm2022/lib/form-validators/decorators/digit.decorator.mjs +2 -2
  30. package/esm2022/lib/form-validators/decorators/email.decorator.mjs +2 -2
  31. package/esm2022/lib/form-validators/decorators/endsWith.decorator.mjs +2 -2
  32. package/esm2022/lib/form-validators/decorators/even.decorator.mjs +2 -2
  33. package/esm2022/lib/form-validators/decorators/extension.decorator.mjs +2 -2
  34. package/esm2022/lib/form-validators/decorators/factor.decorator.mjs +2 -2
  35. package/esm2022/lib/form-validators/decorators/file.decorator.mjs +2 -2
  36. package/esm2022/lib/form-validators/decorators/fileSize.decorator.mjs +2 -2
  37. package/esm2022/lib/form-validators/decorators/greater-than-equal-to.decorator.mjs +2 -2
  38. package/esm2022/lib/form-validators/decorators/greater-than.decorator.mjs +2 -2
  39. package/esm2022/lib/form-validators/decorators/grid.decorator.mjs +2 -2
  40. package/esm2022/lib/form-validators/decorators/hexColor.decorator.mjs +2 -2
  41. package/esm2022/lib/form-validators/decorators/image.decorator.mjs +2 -2
  42. package/esm2022/lib/form-validators/decorators/json.decorator.mjs +2 -2
  43. package/esm2022/lib/form-validators/decorators/latLong.decorator.mjs +2 -2
  44. package/esm2022/lib/form-validators/decorators/latitude.decorator.mjs +2 -2
  45. package/esm2022/lib/form-validators/decorators/leapYear.decorator.mjs +2 -2
  46. package/esm2022/lib/form-validators/decorators/less-than-equal-to.decorator.mjs +2 -2
  47. package/esm2022/lib/form-validators/decorators/less-than.decorator.mjs +2 -2
  48. package/esm2022/lib/form-validators/decorators/longitude.decorator.mjs +2 -2
  49. package/esm2022/lib/form-validators/decorators/lowercase.decorator.mjs +2 -2
  50. package/esm2022/lib/form-validators/decorators/mac.decorator.mjs +2 -2
  51. package/esm2022/lib/form-validators/decorators/mask.decorator.mjs +2 -2
  52. package/esm2022/lib/form-validators/decorators/maxDate.decorator.mjs +2 -2
  53. package/esm2022/lib/form-validators/decorators/maxLength.decorator.mjs +2 -2
  54. package/esm2022/lib/form-validators/decorators/maxNumber.decorator.mjs +2 -2
  55. package/esm2022/lib/form-validators/decorators/maxTime.decorator.mjs +2 -2
  56. package/esm2022/lib/form-validators/decorators/minDate.decorator.mjs +2 -2
  57. package/esm2022/lib/form-validators/decorators/minLength.decorator.mjs +2 -2
  58. package/esm2022/lib/form-validators/decorators/minNumber.decorator.mjs +2 -2
  59. package/esm2022/lib/form-validators/decorators/minTime.decorator.mjs +2 -2
  60. package/esm2022/lib/form-validators/decorators/model.decorator.mjs +2 -2
  61. package/esm2022/lib/form-validators/decorators/non-validation-decorators/disable.decorator.mjs +2 -2
  62. package/esm2022/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.mjs +2 -2
  63. package/esm2022/lib/form-validators/decorators/non-validation-decorators/error.decorator.mjs +2 -2
  64. package/esm2022/lib/form-validators/decorators/non-validation-decorators/update-on.decorator.mjs +2 -2
  65. package/esm2022/lib/form-validators/decorators/noneOf.decorator.mjs +2 -2
  66. package/esm2022/lib/form-validators/decorators/not.decorator.mjs +2 -2
  67. package/esm2022/lib/form-validators/decorators/notEmpty.decorator.mjs +2 -2
  68. package/esm2022/lib/form-validators/decorators/numeric.decorator.mjs +2 -2
  69. package/esm2022/lib/form-validators/decorators/odd.decorator.mjs +2 -2
  70. package/esm2022/lib/form-validators/decorators/oneOf.decorator.mjs +2 -2
  71. package/esm2022/lib/form-validators/decorators/or.decorator.mjs +2 -2
  72. package/esm2022/lib/form-validators/decorators/password.decorator.mjs +2 -2
  73. package/esm2022/lib/form-validators/decorators/pattern.decorator.mjs +2 -2
  74. package/esm2022/lib/form-validators/decorators/port.decorator.mjs +2 -2
  75. package/esm2022/lib/form-validators/decorators/primeNumber.decorator.mjs +2 -2
  76. package/esm2022/lib/form-validators/decorators/prop-array.decorator.mjs +2 -2
  77. package/esm2022/lib/form-validators/decorators/prop-object.decorator.mjs +2 -2
  78. package/esm2022/lib/form-validators/decorators/prop.decorator.mjs +2 -2
  79. package/esm2022/lib/form-validators/decorators/range.decorator.mjs +2 -2
  80. package/esm2022/lib/form-validators/decorators/required.decorator.mjs +2 -2
  81. package/esm2022/lib/form-validators/decorators/requiredTrue.decorator.mjs +2 -2
  82. package/esm2022/lib/form-validators/decorators/rule.decorator.mjs +2 -2
  83. package/esm2022/lib/form-validators/decorators/sanitize/blacklist.decorator.mjs +2 -2
  84. package/esm2022/lib/form-validators/decorators/sanitize/escape.decorator.mjs +2 -2
  85. package/esm2022/lib/form-validators/decorators/sanitize/ltrim.decorator.mjs +2 -2
  86. package/esm2022/lib/form-validators/decorators/sanitize/prefix.decorator.mjs +2 -2
  87. package/esm2022/lib/form-validators/decorators/sanitize/rtrim.decorator.mjs +2 -2
  88. package/esm2022/lib/form-validators/decorators/sanitize/sanitize.decorator.mjs +2 -2
  89. package/esm2022/lib/form-validators/decorators/sanitize/stripLow.decorator.mjs +2 -2
  90. package/esm2022/lib/form-validators/decorators/sanitize/suffix.decorator.mjs +2 -2
  91. package/esm2022/lib/form-validators/decorators/sanitize/toBoolean.decorator.mjs +2 -2
  92. package/esm2022/lib/form-validators/decorators/sanitize/toDate.decorator.mjs +2 -2
  93. package/esm2022/lib/form-validators/decorators/sanitize/toDouble.decorator.mjs +2 -2
  94. package/esm2022/lib/form-validators/decorators/sanitize/toFloat.decorator.mjs +2 -2
  95. package/esm2022/lib/form-validators/decorators/sanitize/toInt.decorator.mjs +2 -2
  96. package/esm2022/lib/form-validators/decorators/sanitize/toString.decorator.mjs +2 -2
  97. package/esm2022/lib/form-validators/decorators/sanitize/trim.decorator.mjs +2 -2
  98. package/esm2022/lib/form-validators/decorators/sanitize/whitelist.decorator.mjs +2 -2
  99. package/esm2022/lib/form-validators/decorators/startsWith.decorator.mjs +2 -2
  100. package/esm2022/lib/form-validators/decorators/time.decorator.mjs +2 -2
  101. package/esm2022/lib/form-validators/decorators/unique.decorator.mjs +2 -2
  102. package/esm2022/lib/form-validators/decorators/uppercase.decorator.mjs +2 -2
  103. package/esm2022/lib/form-validators/decorators/url.decorator.mjs +2 -2
  104. package/esm2022/lib/form-validators/directives/base-directive.mjs +34 -3
  105. package/esm2022/lib/form-validators/directives/control-host.directive.mjs +18 -1
  106. package/esm2022/lib/form-validators/directives/html-control-template.directive.mjs +15 -1
  107. package/esm2022/lib/form-validators/directives/rx-form.directive.mjs +108 -14
  108. package/esm2022/lib/form-validators/directives/template-validations/async-validation.directive.mjs +2 -4
  109. package/esm2022/lib/form-validators/directives/template-validations/base-validator.directive.mjs +17 -7
  110. package/esm2022/lib/form-validators/directives/template-validations/control-expression-process.mjs +22 -8
  111. package/esm2022/lib/form-validators/domain/disable-provider.mjs +107 -4
  112. package/esm2022/lib/form-validators/domain/element-processor/decimal.provider.mjs +67 -7
  113. package/esm2022/lib/form-validators/domain/element-processor/mask.provider.mjs +4 -3
  114. package/esm2022/lib/form-validators/domain/form-data.mjs +53 -7
  115. package/esm2022/lib/form-validators/models/control-info.mjs +2 -0
  116. package/esm2022/lib/form-validators/models/data-sanitizer.mjs +2 -0
  117. package/esm2022/lib/form-validators/models/decorator-configuration.mjs +2 -0
  118. package/esm2022/lib/form-validators/models/form-builder-configuration.mjs +35 -13
  119. package/esm2022/lib/form-validators/models/instance-container.mjs +2 -0
  120. package/esm2022/lib/form-validators/models/password-validation.model.mjs +1 -1
  121. package/esm2022/lib/form-validators/models/prop-validation-config.mjs +1 -1
  122. package/esm2022/lib/form-validators/models/property-info.mjs +2 -0
  123. package/esm2022/lib/form-validators/reactive-form-validators/allOf.validator.mjs +2 -2
  124. package/esm2022/lib/form-validators/reactive-form-validators/alpha.validator.mjs +2 -2
  125. package/esm2022/lib/form-validators/reactive-form-validators/alphaNumeric.validator.mjs +2 -2
  126. package/esm2022/lib/form-validators/reactive-form-validators/and.validator.mjs +2 -2
  127. package/esm2022/lib/form-validators/reactive-form-validators/ascii.validator.mjs +2 -2
  128. package/esm2022/lib/form-validators/reactive-form-validators/choice.validator.mjs +2 -2
  129. package/esm2022/lib/form-validators/reactive-form-validators/compare.validator.mjs +2 -2
  130. package/esm2022/lib/form-validators/reactive-form-validators/compose.validator.mjs +2 -2
  131. package/esm2022/lib/form-validators/reactive-form-validators/contains.validator.mjs +2 -2
  132. package/esm2022/lib/form-validators/reactive-form-validators/credit-card.validator.mjs +2 -2
  133. package/esm2022/lib/form-validators/reactive-form-validators/cusip.validator.mjs +2 -2
  134. package/esm2022/lib/form-validators/reactive-form-validators/dataUri.validator.mjs +2 -2
  135. package/esm2022/lib/form-validators/reactive-form-validators/date.validator.mjs +2 -2
  136. package/esm2022/lib/form-validators/reactive-form-validators/different.validator.mjs +2 -2
  137. package/esm2022/lib/form-validators/reactive-form-validators/digit.validator.mjs +2 -2
  138. package/esm2022/lib/form-validators/reactive-form-validators/email.validator.mjs +2 -2
  139. package/esm2022/lib/form-validators/reactive-form-validators/endsWith.validator.mjs +2 -2
  140. package/esm2022/lib/form-validators/reactive-form-validators/even.validator.mjs +2 -2
  141. package/esm2022/lib/form-validators/reactive-form-validators/extension.validator.mjs +2 -2
  142. package/esm2022/lib/form-validators/reactive-form-validators/factor.validator.mjs +2 -2
  143. package/esm2022/lib/form-validators/reactive-form-validators/file.validator.mjs +2 -2
  144. package/esm2022/lib/form-validators/reactive-form-validators/fileSize.validator.mjs +2 -2
  145. package/esm2022/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.mjs +2 -2
  146. package/esm2022/lib/form-validators/reactive-form-validators/greater-than.validator.mjs +2 -2
  147. package/esm2022/lib/form-validators/reactive-form-validators/grid.validator.mjs +2 -2
  148. package/esm2022/lib/form-validators/reactive-form-validators/hexcolor.validator.mjs +2 -2
  149. package/esm2022/lib/form-validators/reactive-form-validators/iban.validator.mjs +2 -2
  150. package/esm2022/lib/form-validators/reactive-form-validators/image.validator.mjs +2 -2
  151. package/esm2022/lib/form-validators/reactive-form-validators/ip.validator.mjs +2 -2
  152. package/esm2022/lib/form-validators/reactive-form-validators/json.validator.mjs +2 -2
  153. package/esm2022/lib/form-validators/reactive-form-validators/latLong.validator.mjs +2 -2
  154. package/esm2022/lib/form-validators/reactive-form-validators/latitude.validator.mjs +2 -2
  155. package/esm2022/lib/form-validators/reactive-form-validators/leapYear.validator.mjs +2 -2
  156. package/esm2022/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.mjs +2 -2
  157. package/esm2022/lib/form-validators/reactive-form-validators/less-than.validator.mjs +2 -2
  158. package/esm2022/lib/form-validators/reactive-form-validators/longitude.validator.mjs +2 -2
  159. package/esm2022/lib/form-validators/reactive-form-validators/lowercase.validator.mjs +2 -2
  160. package/esm2022/lib/form-validators/reactive-form-validators/mac.validator.mjs +2 -2
  161. package/esm2022/lib/form-validators/reactive-form-validators/mask.validator.mjs +2 -2
  162. package/esm2022/lib/form-validators/reactive-form-validators/maxDate.validator.mjs +2 -2
  163. package/esm2022/lib/form-validators/reactive-form-validators/maxLength.validator.mjs +2 -2
  164. package/esm2022/lib/form-validators/reactive-form-validators/maxNumber.validator.mjs +2 -2
  165. package/esm2022/lib/form-validators/reactive-form-validators/maxTime.validator.mjs +2 -2
  166. package/esm2022/lib/form-validators/reactive-form-validators/minDate.validator.mjs +2 -2
  167. package/esm2022/lib/form-validators/reactive-form-validators/minLength.validator.mjs +2 -2
  168. package/esm2022/lib/form-validators/reactive-form-validators/minNumber.validator.mjs +2 -2
  169. package/esm2022/lib/form-validators/reactive-form-validators/minTime.validator.mjs +2 -2
  170. package/esm2022/lib/form-validators/reactive-form-validators/noneOf.validator.mjs +2 -2
  171. package/esm2022/lib/form-validators/reactive-form-validators/not.validator.mjs +2 -2
  172. package/esm2022/lib/form-validators/reactive-form-validators/notEmpty.validator.mjs +2 -2
  173. package/esm2022/lib/form-validators/reactive-form-validators/numeric.validator.mjs +2 -2
  174. package/esm2022/lib/form-validators/reactive-form-validators/odd.validator.mjs +2 -2
  175. package/esm2022/lib/form-validators/reactive-form-validators/oneOf.validator.mjs +2 -2
  176. package/esm2022/lib/form-validators/reactive-form-validators/or.validator.mjs +2 -2
  177. package/esm2022/lib/form-validators/reactive-form-validators/password.validator.mjs +2 -2
  178. package/esm2022/lib/form-validators/reactive-form-validators/port.validator.mjs +2 -2
  179. package/esm2022/lib/form-validators/reactive-form-validators/primeNumber.validator.mjs +2 -2
  180. package/esm2022/lib/form-validators/reactive-form-validators/range.validator.mjs +2 -2
  181. package/esm2022/lib/form-validators/reactive-form-validators/required.validator.mjs +2 -2
  182. package/esm2022/lib/form-validators/reactive-form-validators/requiredTrue.validator.mjs +2 -2
  183. package/esm2022/lib/form-validators/reactive-form-validators/startsWith.validator.mjs +2 -2
  184. package/esm2022/lib/form-validators/reactive-form-validators/time.validator.mjs +2 -2
  185. package/esm2022/lib/form-validators/reactive-form-validators/unique.validator.mjs +2 -2
  186. package/esm2022/lib/form-validators/reactive-form-validators/uppercase.validator.mjs +2 -2
  187. package/esm2022/lib/form-validators/reactive-form-validators/url.validator.mjs +2 -2
  188. package/esm2022/lib/form-validators/services/base-form-builder.mjs +105 -6
  189. package/esm2022/lib/form-validators/services/form-control.mjs +2 -2
  190. package/esm2022/lib/form-validators/services/reactive-form.module.mjs +2 -2
  191. package/esm2022/lib/form-validators/services/rx-form-builder.mjs +479 -39
  192. package/esm2022/lib/form-validators/services/rx-form-group.mjs +197 -52
  193. package/esm2022/lib/form-validators/util/date-checker.function.mjs +2 -2
  194. package/esm2022/lib/form-validators/util/instance-provider.function.mjs +2 -2
  195. package/esm2022/lib/form-validators/util/relational-checker.function.mjs +2 -2
  196. package/esm2022/lib/form-validators/util/time-checker.function.mjs +2 -2
  197. package/esm2022/lib/form-validators/validators-extension/allOf-validator.extension.mjs +4 -4
  198. package/esm2022/lib/form-validators/validators-extension/alpha-validator.extension.mjs +4 -4
  199. package/esm2022/lib/form-validators/validators-extension/alphaNumeric-validator.extension.mjs +4 -4
  200. package/esm2022/lib/form-validators/validators-extension/and-validator.extension.mjs +2 -2
  201. package/esm2022/lib/form-validators/validators-extension/ascii-validator.extension.mjs +2 -2
  202. package/esm2022/lib/form-validators/validators-extension/base-validator.function.mjs +2 -2
  203. package/esm2022/lib/form-validators/validators-extension/choice-validator.extension.mjs +4 -4
  204. package/esm2022/lib/form-validators/validators-extension/compare-validator.extension.mjs +2 -2
  205. package/esm2022/lib/form-validators/validators-extension/compose-validator.extension.mjs +2 -2
  206. package/esm2022/lib/form-validators/validators-extension/contains-validator.extension.mjs +4 -4
  207. package/esm2022/lib/form-validators/validators-extension/credit-card-validator.extension.mjs +4 -4
  208. package/esm2022/lib/form-validators/validators-extension/cusip-validator.extension.mjs +2 -2
  209. package/esm2022/lib/form-validators/validators-extension/custom-validator.extension.mjs +4 -4
  210. package/esm2022/lib/form-validators/validators-extension/dataUri-validator.extension.mjs +2 -2
  211. package/esm2022/lib/form-validators/validators-extension/date-validator.extension.mjs +4 -4
  212. package/esm2022/lib/form-validators/validators-extension/different-validator.extension.mjs +2 -2
  213. package/esm2022/lib/form-validators/validators-extension/digit-validator.extension.mjs +2 -2
  214. package/esm2022/lib/form-validators/validators-extension/email-validator.extension.mjs +2 -2
  215. package/esm2022/lib/form-validators/validators-extension/endsWith-validator.extension.mjs +4 -4
  216. package/esm2022/lib/form-validators/validators-extension/even-validator.extension.mjs +2 -2
  217. package/esm2022/lib/form-validators/validators-extension/extension-validator.extension.mjs +2 -2
  218. package/esm2022/lib/form-validators/validators-extension/factor-validator.extension.mjs +4 -4
  219. package/esm2022/lib/form-validators/validators-extension/file-validator.extension.mjs +2 -2
  220. package/esm2022/lib/form-validators/validators-extension/fileSize-validator.extension.mjs +2 -2
  221. package/esm2022/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.mjs +4 -4
  222. package/esm2022/lib/form-validators/validators-extension/greater-than-validator.extension.mjs +4 -4
  223. package/esm2022/lib/form-validators/validators-extension/grid-validator.extension.mjs +2 -2
  224. package/esm2022/lib/form-validators/validators-extension/hexcolor-validator.extension.mjs +2 -2
  225. package/esm2022/lib/form-validators/validators-extension/iban-validator.extension.mjs +4 -4
  226. package/esm2022/lib/form-validators/validators-extension/image-validator.extension.mjs +2 -2
  227. package/esm2022/lib/form-validators/validators-extension/ip-validator.extension.mjs +4 -4
  228. package/esm2022/lib/form-validators/validators-extension/json-validator.extension.mjs +2 -2
  229. package/esm2022/lib/form-validators/validators-extension/latLong-validator.extension.mjs +2 -2
  230. package/esm2022/lib/form-validators/validators-extension/latitude-validator.extension.mjs +2 -2
  231. package/esm2022/lib/form-validators/validators-extension/leapYear-validator.extension.mjs +2 -2
  232. package/esm2022/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.mjs +4 -4
  233. package/esm2022/lib/form-validators/validators-extension/less-than-validator.extension.mjs +4 -4
  234. package/esm2022/lib/form-validators/validators-extension/longitude-validator.extension.mjs +2 -2
  235. package/esm2022/lib/form-validators/validators-extension/lowercase-validator.extension.mjs +2 -2
  236. package/esm2022/lib/form-validators/validators-extension/mac-validator.extension.mjs +2 -2
  237. package/esm2022/lib/form-validators/validators-extension/mask-validator.extension.mjs +2 -2
  238. package/esm2022/lib/form-validators/validators-extension/maxDate-validator.extension.mjs +4 -4
  239. package/esm2022/lib/form-validators/validators-extension/maxLength-validator.extension.mjs +4 -4
  240. package/esm2022/lib/form-validators/validators-extension/maxNumber-validator.extension.mjs +4 -4
  241. package/esm2022/lib/form-validators/validators-extension/maxTime-validator.extension.mjs +4 -4
  242. package/esm2022/lib/form-validators/validators-extension/minDate-validator.extension.mjs +4 -4
  243. package/esm2022/lib/form-validators/validators-extension/minLength-validator.extension.mjs +4 -4
  244. package/esm2022/lib/form-validators/validators-extension/minNumber-validator.extension.mjs +4 -4
  245. package/esm2022/lib/form-validators/validators-extension/minTime-validator.extension.mjs +4 -4
  246. package/esm2022/lib/form-validators/validators-extension/noneOf-validator.extension.mjs +4 -4
  247. package/esm2022/lib/form-validators/validators-extension/not-validator.extension.mjs +2 -2
  248. package/esm2022/lib/form-validators/validators-extension/notEmpty-validator.extension.mjs +2 -2
  249. package/esm2022/lib/form-validators/validators-extension/numeric-validator.extension.mjs +4 -4
  250. package/esm2022/lib/form-validators/validators-extension/odd-validator.extension.mjs +2 -2
  251. package/esm2022/lib/form-validators/validators-extension/oneOf-validator.extension.mjs +4 -4
  252. package/esm2022/lib/form-validators/validators-extension/or-validator.extension.mjs +2 -2
  253. package/esm2022/lib/form-validators/validators-extension/password-validator.extension.mjs +4 -4
  254. package/esm2022/lib/form-validators/validators-extension/pattern-validator.extension.mjs +4 -4
  255. package/esm2022/lib/form-validators/validators-extension/port-validator.extension.mjs +2 -2
  256. package/esm2022/lib/form-validators/validators-extension/primeNumber-validator.extension.mjs +2 -2
  257. package/esm2022/lib/form-validators/validators-extension/range-validator.extension.mjs +4 -4
  258. package/esm2022/lib/form-validators/validators-extension/required-validator.extension.mjs +2 -2
  259. package/esm2022/lib/form-validators/validators-extension/requiredTrue-validator.extension.mjs +2 -2
  260. package/esm2022/lib/form-validators/validators-extension/startsWith-validator.extension.mjs +4 -4
  261. package/esm2022/lib/form-validators/validators-extension/time-validator.extension.mjs +4 -4
  262. package/esm2022/lib/form-validators/validators-extension/unique-validator.extension.mjs +2 -2
  263. package/esm2022/lib/form-validators/validators-extension/uppercase-validator.extension.mjs +2 -2
  264. package/esm2022/lib/form-validators/validators-extension/url-validator.extension.mjs +4 -4
  265. package/esm2022/lib/form-validators/validators-function/alpha-validation.function.mjs +28 -1
  266. package/esm2022/lib/form-validators/validators-function/regex-validation.function.mjs +17 -1
  267. package/fesm2022/messaia-cdk.mjs +1777 -203
  268. package/fesm2022/messaia-cdk.mjs.map +1 -1
  269. package/lib/form-validators/abstract/typed-form.d.ts +9 -0
  270. package/lib/form-validators/algorithm/luhn-algorithm.d.ts +7 -0
  271. package/lib/form-validators/const/app.const.d.ts +48 -0
  272. package/lib/form-validators/const/config-names.const.d.ts +24 -0
  273. package/lib/form-validators/const/config-required-fields.const.d.ts +3 -0
  274. package/lib/form-validators/const/events.const.d.ts +39 -0
  275. package/lib/form-validators/const/html-elements.const.d.ts +18 -0
  276. package/lib/form-validators/const/validator.const.d.ts +21 -0
  277. package/lib/form-validators/core/default-container.d.ts +153 -0
  278. package/lib/form-validators/directives/base-directive.d.ts +17 -0
  279. package/lib/form-validators/directives/control-host.directive.d.ts +17 -0
  280. package/lib/form-validators/directives/html-control-template.directive.d.ts +13 -0
  281. package/lib/form-validators/directives/rx-form.directive.d.ts +34 -3
  282. package/lib/form-validators/directives/template-validations/async-validation.directive.d.ts +1 -3
  283. package/lib/form-validators/directives/template-validations/base-validator.directive.d.ts +15 -5
  284. package/lib/form-validators/directives/template-validations/control-expression-process.d.ts +19 -8
  285. package/lib/form-validators/domain/disable-provider.d.ts +54 -0
  286. package/lib/form-validators/domain/element-processor/decimal.provider.d.ts +36 -1
  287. package/lib/form-validators/domain/form-data.d.ts +21 -0
  288. package/lib/form-validators/models/control-info.d.ts +25 -0
  289. package/lib/form-validators/models/data-sanitizer.d.ts +13 -0
  290. package/lib/form-validators/models/decorator-configuration.d.ts +37 -0
  291. package/lib/form-validators/models/form-builder-configuration.d.ts +33 -0
  292. package/lib/form-validators/models/instance-container.d.ts +47 -0
  293. package/lib/form-validators/models/password-validation.model.d.ts +54 -0
  294. package/lib/form-validators/models/prop-validation-config.d.ts +156 -0
  295. package/lib/form-validators/models/property-info.d.ts +49 -0
  296. package/lib/form-validators/services/base-form-builder.d.ts +59 -2
  297. package/lib/form-validators/services/form-control.d.ts +1 -1
  298. package/lib/form-validators/services/rx-form-builder.d.ts +197 -1
  299. package/lib/form-validators/services/rx-form-group.d.ts +121 -0
  300. package/lib/form-validators/util/instance-provider.function.d.ts +1 -1
  301. package/lib/form-validators/validators-extension/allOf-validator.extension.d.ts +1 -1
  302. package/lib/form-validators/validators-extension/alpha-validator.extension.d.ts +1 -1
  303. package/lib/form-validators/validators-extension/iban-validator.extension.d.ts +1 -1
  304. package/lib/form-validators/validators-extension/maxLength-validator.extension.d.ts +1 -1
  305. package/lib/form-validators/validators-function/alpha-validation.function.d.ts +7 -0
  306. package/lib/form-validators/validators-function/regex-validation.function.d.ts +16 -0
  307. package/package.json +1 -1
  308. package/esm2022/lib/form-validators/core/defaultContainer.mjs +0 -257
  309. package/esm2022/lib/form-validators/core/validator.interface.mjs +0 -2
  310. package/lib/form-validators/core/defaultContainer.d.ts +0 -18
  311. package/lib/form-validators/core/validator.interface.d.ts +0 -62
  312. /package/lib/form-validators/core/{validator.static.d.ts → annotation-types.d.ts} +0 -0
@@ -0,0 +1,493 @@
1
+ import { ARRAY_PROPERTY, OBJECT_PROPERTY, PROPERTY, RXCODE } from "../const";
2
+ import { DECORATORS } from "../const/decorators.const";
3
+ import { Linq } from "../util/linq";
4
+ import { AnnotationTypes } from "./annotation-types";
5
+ /**
6
+ * Represents a default container for managing instance configurations.
7
+ *
8
+ * Manages the configuration and instantiation of validation decorators, sanitizers, and other properties for classes.
9
+ * This class serves as a container for managing instance-related configurations and properties.
10
+ */
11
+ export class DefaultContainer {
12
+ /**
13
+ * Represents whether the container is operating in experimental mode.
14
+ * Experimental mode may introduce features that are still under development or testing.
15
+ */
16
+ isExperimental = false;
17
+ /**
18
+ * Array containing instances and their configurations.
19
+ * Each element represents an instance of the application with associated properties and decorators.
20
+ */
21
+ instances = [];
22
+ /**
23
+ * Counter used for generating unique identifiers for model instances.
24
+ * This counter is incremented each time a new model instance is added to the container.
25
+ */
26
+ modelIncrementCount = 0;
27
+ /**
28
+ * Retrieves an instance container based on the provided instance function.
29
+ * @param instanceFunc The instance function.
30
+ * @returns The instance container.
31
+ */
32
+ get(instanceFunc) {
33
+ return this.instances.filter(instance => instance.instance === instanceFunc)[0];
34
+ }
35
+ /**
36
+ * Retrieves or creates an instance container based on the provided parameters.
37
+ * @param target The target.
38
+ * @param parameterIndex The parameter index.
39
+ * @param propertyKey The property key.
40
+ * @param decoratorType The decorator type.
41
+ * @returns The instance container.
42
+ */
43
+ getInstance(target, parameterIndex, propertyKey, decoratorType) {
44
+ /* Determine if the property key is defined */
45
+ let isPropertyKey = (propertyKey != undefined);
46
+ /* Get the instance function based on whether the property key is defined */
47
+ let instanceFunc = !isPropertyKey ? target : target.constructor;
48
+ /* Filter instances to find the one matching the instance function */
49
+ let instance = this.instances.filter(instance => instance.instance === instanceFunc)[0];
50
+ /* If no instance is found, create a new instance container */
51
+ if (!instance) {
52
+ instance = this.addInstanceContainer(instanceFunc);
53
+ }
54
+ /* Return the instance container */
55
+ return instance;
56
+ }
57
+ /**
58
+ * Adds property configurations to the instance container.
59
+ * @param target The target.
60
+ * @param configs The configurations.
61
+ */
62
+ addPropsConfig(target, configs) {
63
+ /* Find the instance container associated with the target */
64
+ let instanceContainer = this.instances.find(instance => instance.instance === target);
65
+ /* Check if the instance container exists */
66
+ if (instanceContainer) {
67
+ /* Iterate through the provided configurations or an empty array if none are provided */
68
+ for (let config of configs ?? []) {
69
+ /* Iterate through the property names in the configuration */
70
+ for (let prop of config.propNames) {
71
+ /* Find the property info in the instance container's properties */
72
+ let propertyInfo = instanceContainer.properties?.find(t => t.name == prop && (t.propertyType !== OBJECT_PROPERTY && t.propertyType !== ARRAY_PROPERTY));
73
+ /* If the property info exists, add property configuration */
74
+ if (propertyInfo) {
75
+ this.addPropConfig(target, [propertyInfo], config);
76
+ }
77
+ else {
78
+ /* If the property name is ':all:', add property configuration for all properties */
79
+ if (prop === ":all:") {
80
+ this.addPropConfig(target, instanceContainer.properties?.filter(t => t.propertyType !== OBJECT_PROPERTY && t.propertyType !== ARRAY_PROPERTY), config);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ else if (configs === undefined) {
87
+ /* If the instance container does not exist and no configurations are provided, create a new instance container */
88
+ this.addInstanceContainer(target);
89
+ }
90
+ }
91
+ /**
92
+ * Adds a property configuration to the instance container.
93
+ * @param target The target.
94
+ * @param properties The properties.
95
+ * @param config The configuration.
96
+ */
97
+ addPropConfig(target, properties, config) {
98
+ /* Iterates through the provided properties and applies configurations based on the provided config object */
99
+ for (var propertyInfo of properties) {
100
+ let excludeProp = false;
101
+ /* Check if excludePropNames exist in the config */
102
+ if (config.excludePropNames) {
103
+ /* Check if the current property should be excluded based on its name */
104
+ excludeProp = config.excludePropNames.find(t => t == propertyInfo.name) !== undefined;
105
+ }
106
+ /* If the property should not be excluded */
107
+ if (!excludeProp) {
108
+ /* Apply validation configurations */
109
+ if (config.validationConfig) {
110
+ /* Iterate through the validation configurations */
111
+ for (let typeName in config.validationConfig) {
112
+ /* Initialize validation for the property */
113
+ this.init({ constructor: target }, 0, propertyInfo.name, typeName, config.validationConfig[typeName] === true ? undefined : config.validationConfig[typeName], false);
114
+ }
115
+ }
116
+ /* Apply error decorator configuration */
117
+ if (config.error) {
118
+ this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.error, DECORATORS.error);
119
+ }
120
+ /* Apply disable decorator configuration */
121
+ if (config.disable) {
122
+ this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.disable, DECORATORS.disabled);
123
+ }
124
+ /* Apply elementClass decorator configuration */
125
+ if (config.elementClass) {
126
+ this.addDecoratorConfig({ constructor: target }, 0, propertyInfo.name, config.elementClass, DECORATORS.elementClass);
127
+ }
128
+ /* Apply ignore configuration */
129
+ if (config.ignore) {
130
+ propertyInfo.ignore = config.ignore;
131
+ }
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * Adds a sanitizer to the instance container.
137
+ * @param target The target.
138
+ * @param parameterIndex The parameter index.
139
+ * @param propertyKey The property key.
140
+ * @param decoratorType The decorator type.
141
+ * @param value The value.
142
+ */
143
+ addSanitizer(target, parameterIndex, propertyKey, decoratorType, value) {
144
+ /* Retrieves the instance container based on the provided parameters and adds a sanitizer configuration to it */
145
+ let instance = this.getInstance(target, parameterIndex, propertyKey, decoratorType);
146
+ if (instance) {
147
+ /* Check if the sanitizers object for the property exists */
148
+ if (!instance.sanitizers[propertyKey]) {
149
+ instance.sanitizers[propertyKey] = [];
150
+ }
151
+ /* Push the sanitizer configuration to the sanitizers object */
152
+ instance.sanitizers[propertyKey].push({ name: decoratorType, config: value });
153
+ }
154
+ }
155
+ /**
156
+ * Adds a decorator configuration to the instance container.
157
+ * @param target The target.
158
+ * @param parameterIndex The parameter index.
159
+ * @param propertyKey The property key.
160
+ * @param config The configuration.
161
+ * @param decoratorType The decorator type.
162
+ */
163
+ addDecoratorConfig(target, parameterIndex, propertyKey, config, decoratorType) {
164
+ /* Determine if the property key is defined */
165
+ let isPropertyKey = (propertyKey != undefined);
166
+ /* Determine the function or constructor to be used as instanceFunc */
167
+ let instanceFunc = !isPropertyKey ? target : target.constructor;
168
+ /* Find the instance container based on instanceFunc */
169
+ let instance = this.instances.find(instance => instance.instance === instanceFunc);
170
+ /* If the instance container doesn't exist, create a new one */
171
+ if (!instance) {
172
+ instance = this.addInstanceContainer(instanceFunc);
173
+ }
174
+ /* Add conditional expressions to the non-validation decorators of the instance container */
175
+ (instance?.nonValidationDecorators)[decoratorType].conditionalExpressions[propertyKey] = config.conditionalExpression;
176
+ /* Extract columns from the conditional expression */
177
+ let columns = Linq.expressionColumns(config.conditionalExpression, true);
178
+ /* Iterate over each column */
179
+ columns.forEach(column => {
180
+ if (column.argumentIndex !== -1) {
181
+ /* Construct the column name based on whether objectPropName is defined */
182
+ let columnName = (!column.objectPropName) ? `${column.propName}${RXCODE}${column.argumentIndex}` : `${column.objectPropName}.${column.propName}${RXCODE}${column.argumentIndex}`;
183
+ /* Check if the column exists in changeDetection and initialize it if necessary */
184
+ if (!(instance?.nonValidationDecorators)[decoratorType].changeDetection[columnName]) {
185
+ (instance?.nonValidationDecorators)[decoratorType].changeDetection[columnName] = [];
186
+ }
187
+ /* Add the property key to the changeDetection column */
188
+ let disabledColumns = (instance?.nonValidationDecorators)[decoratorType].changeDetection[columnName];
189
+ if (disabledColumns.indexOf(columnName) === -1) {
190
+ disabledColumns.push(propertyKey);
191
+ }
192
+ }
193
+ else {
194
+ /* Handle the controlProp if argumentIndex is -1 */
195
+ if (!(instance?.nonValidationDecorators)[decoratorType].controlProp[propertyKey]) {
196
+ (instance?.nonValidationDecorators)[decoratorType].controlProp[propertyKey] = {};
197
+ }
198
+ /* Set the column name to true in controlProp */
199
+ (instance?.nonValidationDecorators)[decoratorType].controlProp[propertyKey][column.propName.replace(";", "")] = true;
200
+ }
201
+ });
202
+ }
203
+ /**
204
+ * Initializes a decorator configuration.
205
+ * @param target The target.
206
+ * @param parameterIndex The parameter index.
207
+ * @param propertyKey The property key.
208
+ * @param annotationType The annotation type.
209
+ * @param config The configuration.
210
+ * @param isAsync Indicates whether it's an asynchronous operation.
211
+ */
212
+ init(target, parameterIndex, propertyKey, annotationType, config, isAsync) {
213
+ /* Define the decorator configuration */
214
+ var decoratorConfiguration = {
215
+ propertyIndex: parameterIndex,
216
+ propertyName: propertyKey,
217
+ annotationType: annotationType,
218
+ config: config,
219
+ isAsync: isAsync,
220
+ isValidator: annotationType !== "updateOn"
221
+ };
222
+ /* Determine if the property key is defined */
223
+ let isPropertyKey = (propertyKey != undefined);
224
+ /* Determine the function or constructor to be used as instanceFunc */
225
+ this.addAnnotation(!isPropertyKey ? target : target.constructor, decoratorConfiguration);
226
+ }
227
+ /**
228
+ * Initializes a property object.
229
+ * @param name The name.
230
+ * @param propertyType The property type.
231
+ * @param entity The entity.
232
+ * @param target The target.
233
+ * @param config The configuration.
234
+ */
235
+ initPropertyObject(name, propertyType, entity, target, config) {
236
+ /* Define the property information */
237
+ var propertyInfo = {
238
+ name: name,
239
+ propertyType: propertyType,
240
+ entity: entity,
241
+ dataPropertyName: config ? config.name : undefined,
242
+ entityProvider: config ? config.entityProvider : undefined
243
+ };
244
+ /* Add the property to the target's constructor */
245
+ this.addProperty(target.constructor, propertyInfo);
246
+ }
247
+ /**
248
+ * Adds an instance container to the list of instances.
249
+ * @param instanceFunc The instance function.
250
+ * @returns The added instance container.
251
+ */
252
+ addInstanceContainer(instanceFunc) {
253
+ /* Define an instance container */
254
+ let instanceContainer = {
255
+ instance: instanceFunc,
256
+ propertyAnnotations: [],
257
+ properties: [],
258
+ nonValidationDecorators: {
259
+ /* Disabled decorators */
260
+ disabled: {
261
+ conditionalExpressions: {},
262
+ changeDetection: {},
263
+ controlProp: {} /* Control properties for disabled decorators */
264
+ },
265
+ /* Error decorators */
266
+ error: {
267
+ conditionalExpressions: {},
268
+ changeDetection: {},
269
+ controlProp: {} /* Control properties for error decorators */
270
+ },
271
+ /* Element class decorators */
272
+ elementClass: {
273
+ conditionalExpressions: {},
274
+ changeDetection: {},
275
+ controlProp: {} /* Control properties for element class decorators */
276
+ }
277
+ },
278
+ /* Sanitizers associated with the instance */
279
+ sanitizers: {}
280
+ };
281
+ /* Add the instance container to the instances array */
282
+ this.instances.push(instanceContainer);
283
+ /* Return the created instance container */
284
+ return instanceContainer;
285
+ }
286
+ /**
287
+ * Adds a property to the instance container.
288
+ * @param instanceFunc The instance function.
289
+ * @param propertyInfo The property information.
290
+ * @param isFromAnnotation Indicates whether it's added from an annotation.
291
+ */
292
+ addProperty(instanceFunc, propertyInfo, isFromAnnotation = false) {
293
+ /* Find the instance in the instances array */
294
+ let instance = this.instances.find(instance => instance.instance === instanceFunc);
295
+ /* Check if the instance exists */
296
+ if (instance) {
297
+ /* Add property information to the existing instance */
298
+ this.addPropertyInfo(instance, propertyInfo, !isFromAnnotation);
299
+ }
300
+ else {
301
+ /* Create a new instance container if it doesn't exist */
302
+ instance = this.addInstanceContainer(instanceFunc);
303
+ /* Add property information to the newly created instance */
304
+ this.addPropertyInfo(instance, propertyInfo);
305
+ }
306
+ }
307
+ /**
308
+ * Adds property information to the instance container.
309
+ * @param instance The instance container.
310
+ * @param propertyInfo The property information.
311
+ * @param isAddProperty Indicates whether it's added as a new property.
312
+ */
313
+ addPropertyInfo(instance, propertyInfo, isAddProperty = false) {
314
+ /* Find the property with the same name in the instance's properties */
315
+ var property = instance.properties?.find(t => t.name == propertyInfo.name);
316
+ /* Check if the property doesn't already exist */
317
+ if (!property) {
318
+ /* Add the property information to the instance's properties */
319
+ instance.properties?.push(propertyInfo);
320
+ }
321
+ else if (isAddProperty) {
322
+ /* Update property information if requested */
323
+ property.dataPropertyName = propertyInfo.dataPropertyName;
324
+ property.defaultValue = propertyInfo.defaultValue;
325
+ }
326
+ }
327
+ /**
328
+ * Adds an annotation to the instance container.
329
+ * @param instanceFunc The instance function.
330
+ * @param decoratorConfiguration The decorator configuration.
331
+ */
332
+ addAnnotation(instanceFunc, decoratorConfiguration) {
333
+ /* Add property information to the instance */
334
+ this.addProperty(instanceFunc, { propertyType: PROPERTY, name: decoratorConfiguration.propertyName }, true);
335
+ /* Find or create the instance in the instances array */
336
+ let instance = this.instances.find(instance => instance.instance === instanceFunc);
337
+ if (instance) {
338
+ /* Add the decorator configuration to the instance's property annotations */
339
+ instance.propertyAnnotations.push(decoratorConfiguration);
340
+ }
341
+ else {
342
+ instance = this.addInstanceContainer(instanceFunc);
343
+ instance.propertyAnnotations.push(decoratorConfiguration);
344
+ }
345
+ /* Add change validation based on the provided configuration */
346
+ if (decoratorConfiguration.config && decoratorConfiguration.config.conditionalExpression) {
347
+ let columns = Linq.expressionColumns(decoratorConfiguration.config.conditionalExpression);
348
+ this.addChangeValidation(instance, decoratorConfiguration.propertyName, columns);
349
+ }
350
+ /* Add dynamic configuration and validation */
351
+ if (decoratorConfiguration.config && decoratorConfiguration.config.dynamicConfig) {
352
+ let columns = Linq.dynamicConfigParser(decoratorConfiguration.config.dynamicConfig, decoratorConfiguration.propertyName);
353
+ this.addChangeValidation(instance, decoratorConfiguration.propertyName, columns);
354
+ }
355
+ /* Set conditional columns based on the decorator configuration */
356
+ this.setConditionalColumns(instance, decoratorConfiguration);
357
+ }
358
+ /**
359
+ * Sets conditional columns based on the decorator configuration.
360
+ * @param instance The instance container.
361
+ * @param decoratorConfiguration The decorator configuration.
362
+ */
363
+ setConditionalColumns(instance, decoratorConfiguration) {
364
+ /* Checks if there is an instance and decorator configuration present */
365
+ if (instance && decoratorConfiguration.config) {
366
+ /* Handles logical annotations (AND, OR, NOT) */
367
+ if (decoratorConfiguration.annotationType == AnnotationTypes.and ||
368
+ decoratorConfiguration.annotationType == AnnotationTypes.or ||
369
+ decoratorConfiguration.annotationType == AnnotationTypes.not) {
370
+ /* Iterates over validation configurations */
371
+ Object.keys(decoratorConfiguration.config.validation).forEach(t => {
372
+ /* Checks if the validation configuration is not a boolean */
373
+ if (typeof decoratorConfiguration.config.validation[t] !== "boolean") {
374
+ /* Sets logical conditional based on the validation configuration */
375
+ this.setLogicalConditional(instance, t, decoratorConfiguration.config.validation[t].fieldName, decoratorConfiguration.propertyName);
376
+ }
377
+ });
378
+ }
379
+ else {
380
+ /* Sets logical conditional for non-logical annotations */
381
+ this.setLogicalConditional(instance, decoratorConfiguration.annotationType, decoratorConfiguration.config.fieldName, decoratorConfiguration.propertyName);
382
+ }
383
+ }
384
+ }
385
+ /**
386
+ * Sets logical conditionals based on the decorator configuration.
387
+ * @param instance The instance container.
388
+ * @param annotationType The annotation type.
389
+ * @param fieldName The field name.
390
+ * @param propertyName The property name.
391
+ */
392
+ setLogicalConditional(instance, annotationType, fieldName, propertyName) {
393
+ /*
394
+ * Checks if there is an instance and annotation type with applicable conditions
395
+ * for setting conditional value properties.
396
+ */
397
+ if (instance && ((annotationType == AnnotationTypes.compare ||
398
+ annotationType == AnnotationTypes.greaterThan ||
399
+ annotationType == AnnotationTypes.greaterThanEqualTo ||
400
+ annotationType == AnnotationTypes.lessThan ||
401
+ annotationType == AnnotationTypes.lessThanEqualTo ||
402
+ annotationType == AnnotationTypes.different ||
403
+ annotationType == AnnotationTypes.factor ||
404
+ annotationType == AnnotationTypes.minTime ||
405
+ annotationType == AnnotationTypes.maxTime) ||
406
+ (annotationType == AnnotationTypes.creditCard && fieldName) ||
407
+ ((annotationType == AnnotationTypes.minDate || annotationType == AnnotationTypes.maxDate) && fieldName))) {
408
+ /* Sets conditional value property based on the conditions */
409
+ this.setConditionalValueProp(instance, fieldName, propertyName);
410
+ }
411
+ }
412
+ /**
413
+ * Sets conditional value properties based on the decorator configuration.
414
+ * @param instance The instance container.
415
+ * @param propertyName The property name.
416
+ * @param refPropertyName The reference property name.
417
+ */
418
+ setConditionalValueProp(instance, propertyName, refPropertyName) {
419
+ /* Checks if propName exists */
420
+ if (propertyName) {
421
+ /* Splits propName into individual properties */
422
+ let splitProps = propertyName.split ? propertyName.split('.') : '';
423
+ /* Checks if the length of splitProps is less than 2 */
424
+ if (splitProps.length < 2) {
425
+ /* Initializes conditionalValidationProps if it does not exist */
426
+ if (!instance.conditionalValidationProps) {
427
+ instance.conditionalValidationProps = {};
428
+ }
429
+ /* Initializes conditionalValidationProps[propName] if it does not exist */
430
+ if (!instance.conditionalValidationProps[propertyName]) {
431
+ instance.conditionalValidationProps[propertyName] = [];
432
+ }
433
+ /* Pushes refPropName into conditionalValidationProps[propName] if it does not exist */
434
+ if (instance.conditionalValidationProps[propertyName].indexOf(refPropertyName) == -1) {
435
+ instance.conditionalValidationProps[propertyName].push(refPropertyName);
436
+ }
437
+ }
438
+ else {
439
+ /* Adds change validation for complex properties */
440
+ this.addChangeValidation(instance, refPropertyName, [{ argumentIndex: 1, objectPropName: splitProps[0], propName: splitProps[1], referencePropName: refPropertyName }]);
441
+ }
442
+ }
443
+ }
444
+ /**
445
+ * Adds change validation based on the columns.
446
+ * @param instance The instance container.
447
+ * @param propertyName The property name.
448
+ * @param columns The columns.
449
+ */
450
+ addChangeValidation(instance, propertyName, columns) {
451
+ /* Checks if instance exists. */
452
+ if (instance) {
453
+ /* Initializes conditionalValidationProps if it does not exist. */
454
+ if (!instance.conditionalValidationProps) {
455
+ instance.conditionalValidationProps = {};
456
+ }
457
+ /* Iterates through columns. */
458
+ columns.forEach(t => {
459
+ /* Checks if propName exists and objectPropName does not exist. */
460
+ if (t.propName && !t.objectPropName) {
461
+ /* Initializes conditionalValidationProps[t.propName] if it does not exist. */
462
+ if (!instance.conditionalValidationProps[t.propName]) {
463
+ instance.conditionalValidationProps[t.propName] = [];
464
+ }
465
+ /* Pushes propertyName into conditionalValidationProps[t.propName] if it does not exist. */
466
+ if (instance.conditionalValidationProps[t.propName].indexOf(propertyName) == -1) {
467
+ instance.conditionalValidationProps[t.propName].push(propertyName);
468
+ }
469
+ }
470
+ else {
471
+ /* Checks if propName and objectPropName exist. */
472
+ if (t.propName && t.objectPropName) {
473
+ /* Initializes conditionalObjectProps if it does not exist. */
474
+ if (!instance.conditionalObjectProps) {
475
+ instance.conditionalObjectProps = [];
476
+ }
477
+ /* Sets referencePropName and adds it to conditionalObjectProps. */
478
+ t.referencePropName = propertyName;
479
+ instance.conditionalObjectProps.push(t);
480
+ }
481
+ }
482
+ });
483
+ }
484
+ }
485
+ }
486
+ /**
487
+ * Represents a default container for managing instance configurations.
488
+ *
489
+ * Manages the configuration and instantiation of validation decorators, sanitizers, and other properties for classes.
490
+ * This class serves as a container for managing instance-related configurations and properties.
491
+ */
492
+ export const defaultContainer = new DefaultContainer();
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvY29yZS9kZWZhdWx0LWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUt2RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFDekI7OztJQUdBO0lBQ08sY0FBYyxHQUFZLEtBQUssQ0FBQztJQUV2Qzs7O09BR0c7SUFDSyxTQUFTLEdBQXdCLEVBQUUsQ0FBQztJQUU1Qzs7O09BR0c7SUFDSSxtQkFBbUIsR0FBVyxDQUFDLENBQUM7SUFFdkM7Ozs7T0FJRztJQUNJLEdBQUcsQ0FBSSxZQUFpQjtRQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFdBQVcsQ0FBQyxNQUFXLEVBQUUsY0FBbUIsRUFBRSxXQUFtQixFQUFFLGFBQXFCO1FBQzNGLDhDQUE4QztRQUM5QyxJQUFJLGFBQWEsR0FBRyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsQ0FBQztRQUUvQyw0RUFBNEU7UUFDNUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFB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QkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzNDO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7Q0FDSjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVJSQVlfUFJPUEVSVFksIE9CSkVDVF9QUk9QRVJUWSwgUFJPUEVSVFksIFJYQ09ERSB9IGZyb20gXCIuLi9jb25zdFwiO1xyXG5pbXBvcnQgeyBERUNPUkFUT1JTIH0gZnJvbSBcIi4uL2NvbnN0L2RlY29yYXRvcnMuY29uc3RcIjtcclxuaW1wb3J0IHsgUHJvcHNDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy9wcm9wcy1jb25maWdcIjtcclxuaW1wb3J0IHsgRGVjb3JhdG9yQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9tb2RlbHMvZGVjb3JhdG9yLWNvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VDb250YWluZXIgfSBmcm9tIFwiLi4vbW9kZWxzL2luc3RhbmNlLWNvbnRhaW5lclwiO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwiLi4vbW9kZWxzL3Byb3BlcnR5LWluZm9cIjtcclxuaW1wb3J0IHsgTGlucSB9IGZyb20gXCIuLi91dGlsL2xpbnFcIjtcclxuaW1wb3J0IHsgQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIi4vYW5ub3RhdGlvbi10eXBlc1wiO1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBkZWZhdWx0IGNvbnRhaW5lciBmb3IgbWFuYWdpbmcgaW5zdGFuY2UgY29uZmlndXJhdGlvbnMuXHJcbiAqIFxyXG4gKiBNYW5hZ2VzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBpbnN0YW50aWF0aW9uIG9mIHZhbGlkYXRpb24gZGVjb3JhdG9ycywgc2FuaXRpemVycywgYW5kIG90aGVyIHByb3BlcnRpZXMgZm9yIGNsYXNzZXMuXHJcbiAqIFRoaXMgY2xhc3Mgc2VydmVzIGFzIGEgY29udGFpbmVyIGZvciBtYW5hZ2luZyBpbnN0YW5jZS1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFuZCBwcm9wZXJ0aWVzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERlZmF1bHRDb250YWluZXIge1xyXG4gICAgLyoqXHJcbiAgKiBSZXByZXNlbnRzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBvcGVyYXRpbmcgaW4gZXhwZXJpbWVudGFsIG1vZGUuXHJcbiAgKiBFeHBlcmltZW50YWwgbW9kZSBtYXkgaW50cm9kdWNlIGZlYXR1cmVzIHRoYXQgYXJlIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IG9yIHRlc3RpbmcuXHJcbiAgKi9cclxuICAgIHB1YmxpYyBpc0V4cGVyaW1lbnRhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJyYXkgY29udGFpbmluZyBpbnN0YW5jZXMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb25zLlxyXG4gICAgICogRWFjaCBlbGVtZW50IHJlcHJlc2VudHMgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcGxpY2F0aW9uIHdpdGggYXNzb2NpYXRlZCBwcm9wZXJ0aWVzIGFuZCBkZWNvcmF0b3JzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluc3RhbmNlczogSW5zdGFuY2VDb250YWluZXJbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ291bnRlciB1c2VkIGZvciBnZW5lcmF0aW5nIHVuaXF1ZSBpZGVudGlmaWVycyBmb3IgbW9kZWwgaW5zdGFuY2VzLlxyXG4gICAgICogVGhpcyBjb3VudGVyIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIG5ldyBtb2RlbCBpbnN0YW5jZSBpcyBhZGRlZCB0byB0aGUgY29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbW9kZWxJbmNyZW1lbnRDb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyBhbiBpbnN0YW5jZSBjb250YWluZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluc3RhbmNlIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIGluc3RhbmNlRnVuYyBUaGUgaW5zdGFuY2UgZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgY29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0PFQ+KGluc3RhbmNlRnVuYzogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluc3RhbmNlcy5maWx0ZXIoaW5zdGFuY2UgPT4gaW5zdGFuY2UuaW5zdGFuY2UgPT09IGluc3RhbmNlRnVuYylbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyBhbiBpbnN0YW5jZSBjb250YWluZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlcnMuXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVySW5kZXggVGhlIHBhcmFtZXRlciBpbmRleC5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSBUaGUgcHJvcGVydHkga2V5LlxyXG4gICAgICogQHBhcmFtIGRlY29yYXRvclR5cGUgVGhlIGRlY29yYXRvciB0eXBlLlxyXG4gICAgICogQHJldHVybnMgVGhlIGluc3RhbmNlIGNvbnRhaW5lci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEluc3RhbmNlKHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICAvKiBEZXRlcm1pbmUgaWYgdGhlIHByb3BlcnR5IGtleSBpcyBkZWZpbmVkICovXHJcbiAgICAgICAgbGV0IGlzUHJvcGVydHlLZXkgPSAocHJvcGVydHlLZXkgIT0gdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgICAgLyogR2V0IHRoZSBpbnN0YW5jZSBmdW5jdGlvbiBiYXNlZCBvbiB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBrZXkgaXMgZGVmaW5lZCAqL1xyXG4gICAgICAgIGxldCBpbnN0YW5jZUZ1bmMgPSAhaXNQcm9wZXJ0eUtleSA/IHRhcmdldCA6IHRhcmdldC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICAgICAgLyogRmlsdGVyIGluc3RhbmNlcyB0byBmaW5kIHRoZSBvbmUgbWF0Y2hpbmcgdGhlIGluc3RhbmNlIGZ1bmN0aW9uICovXHJcbiAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpWzBdO1xyXG5cclxuICAgICAgICAvKiBJZiBubyBpbnN0YW5jZSBpcyBmb3VuZCwgY3JlYXRlIGEgbmV3IGluc3RhbmNlIGNvbnRhaW5lciAqL1xyXG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmFkZEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBSZXR1cm4gdGhlIGluc3RhbmNlIGNvbnRhaW5lciAqL1xyXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgcHJvcGVydHkgY29uZmlndXJhdGlvbnMgdG8gdGhlIGluc3RhbmNlIGNvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldC5cclxuICAgICAqIEBwYXJhbSBjb25maWdzIFRoZSBjb25maWd1cmF0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFByb3BzQ29uZmlnKHRhcmdldDogYW55LCBjb25maWdzPzogUHJvcHNDb25maWdbXSkge1xyXG4gICAgICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGNvbnRhaW5lciBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCAqL1xyXG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lciA9IHRoaXMuaW5zdGFuY2VzLmZpbmQoaW5zdGFuY2UgPT4gaW5zdGFuY2UuaW5zdGFuY2UgPT09IHRhcmdldCk7XHJcblxyXG4gICAgICAgIC8qIENoZWNrIGlmIHRoZSBpbnN0YW5jZSBjb250YWluZXIgZXhpc3RzICovXHJcbiAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbnMgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm9uZSBhcmUgcHJvdmlkZWQgKi9cclxuICAgICAgICAgICAgZm9yIChsZXQgY29uZmlnIG9mIGNvbmZpZ3MgPz8gW10pIHtcclxuICAgICAgICAgICAgICAgIC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcHJvcGVydHkgbmFtZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gKi9cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHByb3Agb2YgY29uZmlnLnByb3BOYW1lcykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgdGhlIHByb3BlcnR5IGluZm8gaW4gdGhlIGluc3RhbmNlIGNvbnRhaW5lcidzIHByb3BlcnRpZXMgKi9cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHlJbmZvID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcz8uZmluZCh0ID0+IHQubmFtZSA9PSBwcm9wICYmICh0LnByb3BlcnR5VHlwZSAhPT0gT0JKRUNUX1BST1BFUlRZICYmIHQucHJvcGVydHlUeXBlICE9PSBBUlJBWV9QUk9QRVJUWSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGUgcHJvcGVydHkgaW5mbyBleGlzdHMsIGFkZCBwcm9wZXJ0eSBjb25maWd1cmF0aW9uICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFByb3BDb25maWcodGFyZ2V0LCBbcHJvcGVydHlJbmZvXSwgY29uZmlnKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBwcm9wZXJ0eSBuYW1lIGlzICc6YWxsOicsIGFkZCBwcm9wZXJ0eSBjb25maWd1cmF0aW9uIGZvciBhbGwgcHJvcGVydGllcyAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCI6YWxsOlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFByb3BDb25maWcodGFyZ2V0LCBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0aWVzPy5maWx0ZXIodCA9PiB0LnByb3BlcnR5VHlwZSAhPT0gT0JKRUNUX1BST1BFUlRZICYmIHQucHJvcGVydHlUeXBlICE9PSBBUlJBWV9QUk9QRVJUWSkhLCBjb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWdzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgLyogSWYgdGhlIGluc3RhbmNlIGNvbnRhaW5lciBkb2VzIG5vdCBleGlzdCBhbmQgbm8gY29uZmlndXJhdGlvbnMgYXJlIHByb3ZpZGVkLCBjcmVhdGUgYSBuZXcgaW5zdGFuY2UgY29udGFpbmVyICovXHJcbiAgICAgICAgICAgIHRoaXMuYWRkSW5zdGFuY2VDb250YWluZXIodGFyZ2V0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgcHJvcGVydHkgY29uZmlndXJhdGlvbiB0byB0aGUgaW5zdGFuY2UgY29udGFpbmVyLlxyXG4gICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0LlxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkUHJvcENvbmZpZyh0YXJnZXQ6IGFueSwgcHJvcGVydGllczogUHJvcGVydHlJbmZvW10sIGNvbmZpZzogUHJvcHNDb25maWcpIHtcclxuICAgICAgICAvKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBwcm92aWRlZCBwcm9wZXJ0aWVzIGFuZCBhcHBsaWVzIGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb25maWcgb2JqZWN0ICovXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcGVydHlJbmZvIG9mIHByb3BlcnRpZXMpIHtcclxuICAgICAgICAgICAgbGV0IGV4Y2x1ZGVQcm9wOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvKiBDaGVjayBpZiBleGNsdWRlUHJvcE5hbWVzIGV4aXN0IGluIHRoZSBjb25maWcgKi9cclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5leGNsdWRlUHJvcE5hbWVzKSB7XHJcbiAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgY3VycmVudCBwcm9wZXJ0eSBzaG91bGQgYmUgZXhjbHVkZWQgYmFzZWQgb24gaXRzIG5hbWUgKi9cclxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVQcm9wID0gY29uZmlnLmV4Y2x1ZGVQcm9wTmFtZXMuZmluZCh0ID0+IHQgPT0gcHJvcGVydHlJbmZvLm5hbWUpICE9PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qIElmIHRoZSBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIGV4Y2x1ZGVkICovXHJcbiAgICAgICAgICAgIGlmICghZXhjbHVkZVByb3ApIHtcclxuICAgICAgICAgICAgICAgIC8qIEFwcGx5IHZhbGlkYXRpb24gY29uZmlndXJhdGlvbnMgKi9cclxuICAgICAgICAgICAgICAgIGlmIChjb25maWcudmFsaWRhdGlvbkNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIEl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9ucyAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHR5cGVOYW1lIGluIGNvbmZpZy52YWxpZGF0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdmFsaWRhdGlvbiBmb3IgdGhlIHByb3BlcnR5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdCh7IGNvbnN0cnVjdG9yOiB0YXJnZXQgfSwgMCwgcHJvcGVydHlJbmZvLm5hbWUsIHR5cGVOYW1lLCAoY29uZmlnLnZhbGlkYXRpb25Db25maWcgYXMgYW55KVt0eXBlTmFtZV0gPT09IHRydWUgPyB1bmRlZmluZWQgOiAoY29uZmlnLnZhbGlkYXRpb25Db25maWcgYXMgYW55KVt0eXBlTmFtZV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLyogQXBwbHkgZXJyb3IgZGVjb3JhdG9yIGNvbmZpZ3VyYXRpb24gKi9cclxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZERlY29yYXRvckNvbmZpZyh7IGNvbnN0cnVjdG9yOiB0YXJnZXQgfSwgMCwgcHJvcGVydHlJbmZvLm5hbWUsIGNvbmZpZy5lcnJvciwgREVDT1JBVE9SUy5lcnJvcilcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBBcHBseSBkaXNhYmxlIGRlY29yYXRvciBjb25maWd1cmF0aW9uICovXHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmRpc2FibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZERlY29yYXRvckNvbmZpZyh7IGNvbnN0cnVjdG9yOiB0YXJnZXQgfSwgMCwgcHJvcGVydHlJbmZvLm5hbWUsIGNvbmZpZy5kaXNhYmxlLCBERUNPUkFUT1JTLmRpc2FibGVkKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIEFwcGx5IGVsZW1lbnRDbGFzcyBkZWNvcmF0b3IgY29uZmlndXJhdGlvbiAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbGVtZW50Q2xhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZERlY29yYXRvckNvbmZpZyh7IGNvbnN0cnVjdG9yOiB0YXJnZXQgfSwgMCwgcHJvcGVydHlJbmZvLm5hbWUsIGNvbmZpZy5lbGVtZW50Q2xhc3MsIERFQ09SQVRPUlMuZWxlbWVudENsYXNzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIEFwcGx5IGlnbm9yZSBjb25maWd1cmF0aW9uICovXHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmlnbm9yZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5SW5mby5pZ25vcmUgPSBjb25maWcuaWdub3JlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgc2FuaXRpemVyIHRvIHRoZSBpbnN0YW5jZSBjb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVySW5kZXggVGhlIHBhcmFtZXRlciBpbmRleC5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eUtleSBUaGUgcHJvcGVydHkga2V5LlxyXG4gICAgICogQHBhcmFtIGRlY29yYXRvclR5cGUgVGhlIGRlY29yYXRvciB0eXBlLlxyXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFNhbml0aXplcih0YXJnZXQ6IGFueSwgcGFyYW1ldGVySW5kZXg6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVjb3JhdG9yVHlwZTogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xyXG4gICAgICAgIC8qIFJldHJpZXZlcyB0aGUgaW5zdGFuY2UgY29udGFpbmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzIGFuZCBhZGRzIGEgc2FuaXRpemVyIGNvbmZpZ3VyYXRpb24gdG8gaXQgKi9cclxuICAgICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLmdldEluc3RhbmNlKHRhcmdldCwgcGFyYW1ldGVySW5kZXgsIHByb3BlcnR5S2V5LCBkZWNvcmF0b3JUeXBlKTtcclxuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHNhbml0aXplcnMgb2JqZWN0IGZvciB0aGUgcHJvcGVydHkgZXhpc3RzICovXHJcbiAgICAgICAgICAgIGlmICghKGluc3RhbmNlLnNhbml0aXplcnMgYXMgYW55KVtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgICAgICAgIChpbnN0YW5jZS5zYW5pdGl6ZXJzIGFzIGFueSlbcHJvcGVydHlLZXldID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qIFB1c2ggdGhlIHNhbml0aXplciBjb25maWd1cmF0aW9uIHRvIHRoZSBzYW5pdGl6ZXJzIG9iamVjdCAqL1xyXG4gICAgICAgICAgICAoaW5zdGFuY2Uuc2FuaXRpemVycyBhcyBhbnkpW3Byb3BlcnR5S2V5XS5wdXNoKHsgbmFtZTogZGVjb3JhdG9yVHlwZSwgY29uZmlnOiB2YWx1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgZGVjb3JhdG9yIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGluc3RhbmNlIGNvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldC5cclxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJJbmRleCBUaGUgcGFyYW1ldGVyIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IFRoZSBwcm9wZXJ0eSBrZXkuXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxyXG4gICAgICogQHBhcmFtIGRlY29yYXRvclR5cGUgVGhlIGRlY29yYXRvciB0eXBlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkRGVjb3JhdG9yQ29uZmlnKHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBjb25maWc6IGFueSwgZGVjb3JhdG9yVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgLyogRGV0ZXJtaW5lIGlmIHRoZSBwcm9wZXJ0eSBrZXkgaXMgZGVmaW5lZCAqL1xyXG4gICAgICAgIGxldCBpc1Byb3BlcnR5S2V5ID0gKHByb3BlcnR5S2V5ICE9IHVuZGVmaW5lZCk7XHJcblxyXG4gICAgICAgIC8qIERldGVybWluZSB0aGUgZnVuY3Rpb24gb3IgY29uc3RydWN0b3IgdG8gYmUgdXNlZCBhcyBpbnN0YW5jZUZ1bmMgKi9cclxuICAgICAgICBsZXQgaW5zdGFuY2VGdW5jID0gIWlzUHJvcGVydHlLZXkgPyB0YXJnZXQgOiB0YXJnZXQuY29uc3RydWN0b3I7XHJcblxyXG4gICAgICAgIC8qIEZpbmQgdGhlIGluc3RhbmNlIGNvbnRhaW5lciBiYXNlZCBvbiBpbnN0YW5jZUZ1bmMgKi9cclxuICAgICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5maW5kKGluc3RhbmNlID0+IGluc3RhbmNlLmluc3RhbmNlID09PSBpbnN0YW5jZUZ1bmMpO1xyXG5cclxuICAgICAgICAvKiBJZiB0aGUgaW5zdGFuY2UgY29udGFpbmVyIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBhIG5ldyBvbmUgKi9cclxuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogQWRkIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIHRvIHRoZSBub24tdmFsaWRhdGlvbiBkZWNvcmF0b3JzIG9mIHRoZSBpbnN0YW5jZSBjb250YWluZXIgKi9cclxuICAgICAgICAoaW5zdGFuY2U/Lm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY29uZGl0aW9uYWxFeHByZXNzaW9uc1twcm9wZXJ0eUtleV0gPSBjb25maWcuY29uZGl0aW9uYWxFeHByZXNzaW9uO1xyXG5cclxuICAgICAgICAvKiBFeHRyYWN0IGNvbHVtbnMgZnJvbSB0aGUgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiAqL1xyXG4gICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhjb25maWcuY29uZGl0aW9uYWxFeHByZXNzaW9uLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLyogSXRlcmF0ZSBvdmVyIGVhY2ggY29sdW1uICovXHJcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4uYXJndW1lbnRJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIC8qIENvbnN0cnVjdCB0aGUgY29sdW1uIG5hbWUgYmFzZWQgb24gd2hldGhlciBvYmplY3RQcm9wTmFtZSBpcyBkZWZpbmVkICovXHJcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1uTmFtZSA9ICghY29sdW1uLm9iamVjdFByb3BOYW1lKSA/IGAke2NvbHVtbi5wcm9wTmFtZX0ke1JYQ09ERX0ke2NvbHVtbi5hcmd1bWVudEluZGV4fWAgOiBgJHtjb2x1bW4ub2JqZWN0UHJvcE5hbWV9LiR7Y29sdW1uLnByb3BOYW1lfSR7UlhDT0RFfSR7Y29sdW1uLmFyZ3VtZW50SW5kZXh9YDtcclxuXHJcbiAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgY29sdW1uIGV4aXN0cyBpbiBjaGFuZ2VEZXRlY3Rpb24gYW5kIGluaXRpYWxpemUgaXQgaWYgbmVjZXNzYXJ5ICovXHJcbiAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZT8ubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMgYXMgYW55KVtkZWNvcmF0b3JUeXBlXS5jaGFuZ2VEZXRlY3Rpb25bY29sdW1uTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAoaW5zdGFuY2U/Lm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY2hhbmdlRGV0ZWN0aW9uW2NvbHVtbk5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLyogQWRkIHRoZSBwcm9wZXJ0eSBrZXkgdG8gdGhlIGNoYW5nZURldGVjdGlvbiBjb2x1bW4gKi9cclxuICAgICAgICAgICAgICAgIGxldCBkaXNhYmxlZENvbHVtbnMgPSAoaW5zdGFuY2U/Lm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY2hhbmdlRGV0ZWN0aW9uW2NvbHVtbk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbk5hbWUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkQ29sdW1ucy5wdXNoKHByb3BlcnR5S2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8qIEhhbmRsZSB0aGUgY29udHJvbFByb3AgaWYgYXJndW1lbnRJbmRleCBpcyAtMSAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2U/Lm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIGFzIGFueSlbZGVjb3JhdG9yVHlwZV0uY29udHJvbFByb3BbcHJvcGVydHlLZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlPy5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycyBhcyBhbnkpW2RlY29yYXRvclR5cGVdLmNvbnRyb2xQcm9wW3Byb3BlcnR5S2V5XSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgY29sdW1uIG5hbWUgdG8gdHJ1ZSBpbiBjb250cm9sUHJvcCAqL1xyXG4gICAgICAgICAgICAgICAgKGluc3RhbmNlPy5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycyBhcyBhbnkpW2RlY29yYXRvclR5cGVdLmNvbnRyb2xQcm9wW3Byb3BlcnR5S2V5XVtjb2x1bW4ucHJvcE5hbWUucmVwbGFjZShcIjtcIiwgXCJcIildID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBkZWNvcmF0b3IgY29uZmlndXJhdGlvbi5cclxuICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldC5cclxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJJbmRleCBUaGUgcGFyYW1ldGVyIGluZGV4LlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5S2V5IFRoZSBwcm9wZXJ0eSBrZXkuXHJcbiAgICAgKiBAcGFyYW0gYW5ub3RhdGlvblR5cGUgVGhlIGFubm90YXRpb24gdHlwZS5cclxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gaXNBc3luYyBJbmRpY2F0ZXMgd2hldGhlciBpdCdzIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbml0KHRhcmdldDogYW55LCBwYXJhbWV0ZXJJbmRleDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBhbm5vdGF0aW9uVHlwZTogc3RyaW5nLCBjb25maWc6IGFueSwgaXNBc3luYzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIC8qIERlZmluZSB0aGUgZGVjb3JhdG9yIGNvbmZpZ3VyYXRpb24gKi9cclxuICAgICAgICB2YXIgZGVjb3JhdG9yQ29uZmlndXJhdGlvbjogRGVjb3JhdG9yQ29uZmlndXJhdGlvbiA9IHtcclxuICAgICAgICAgICAgcHJvcGVydHlJbmRleDogcGFyYW1ldGVySW5kZXgsXHJcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlLZXksXHJcbiAgICAgICAgICAgIGFubm90YXRpb25UeXBlOiBhbm5vdGF0aW9uVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXHJcbiAgICAgICAgICAgIGlzQXN5bmM6IGlzQXN5bmMsXHJcbiAgICAgICAgICAgIGlzVmFsaWRhdG9yOiBhbm5vdGF0aW9uVHlwZSAhPT0gXCJ1cGRhdGVPblwiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBEZXRlcm1pbmUgaWYgdGhlIHByb3BlcnR5IGtleSBpcyBkZWZpbmVkICovXHJcbiAgICAgICAgbGV0IGlzUHJvcGVydHlLZXkgPSAocHJvcGVydHlLZXkgIT0gdW5kZWZpbmVkKTtcclxuXHJcbiAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBmdW5jdGlvbiBvciBjb25zdHJ1Y3RvciB0byBiZSB1c2VkIGFzIGluc3RhbmNlRnVuYyAqL1xyXG4gICAgICAgIHRoaXMuYWRkQW5ub3RhdGlvbighaXNQcm9wZXJ0eUtleSA/IHRhcmdldCA6IHRhcmdldC5jb25zdHJ1Y3RvciwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIHByb3BlcnR5IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5VHlwZSBUaGUgcHJvcGVydHkgdHlwZS5cclxuICAgICAqIEBwYXJhbSBlbnRpdHkgVGhlIGVudGl0eS5cclxuICAgICAqIEBwYXJhbSB0YXJnZXQgVGhlIHRhcmdldC5cclxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbml0UHJvcGVydHlPYmplY3QobmFtZTogc3RyaW5nLCBwcm9wZXJ0eVR5cGU6IHN0cmluZywgZW50aXR5OiBhbnksIHRhcmdldDogYW55LCBjb25maWc/OiBhbnkpIHtcclxuICAgICAgICAvKiBEZWZpbmUgdGhlIHByb3BlcnR5IGluZm9ybWF0aW9uICovXHJcbiAgICAgICAgdmFyIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICAgICAgICBwcm9wZXJ0eVR5cGU6IHByb3BlcnR5VHlwZSxcclxuICAgICAgICAgICAgZW50aXR5OiBlbnRpdHksXHJcbiAgICAgICAgICAgIGRhdGFQcm9wZXJ0eU5hbWU6IGNvbmZpZyA/IGNvbmZpZy5uYW1lIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBlbnRpdHlQcm92aWRlcjogY29uZmlnID8gY29uZmlnLmVudGl0eVByb3ZpZGVyIDogdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBBZGQgdGhlIHByb3BlcnR5IHRvIHRoZSB0YXJnZXQncyBjb25zdHJ1Y3RvciAqL1xyXG4gICAgICAgIHRoaXMuYWRkUHJvcGVydHkodGFyZ2V0LmNvbnN0cnVjdG9yLCBwcm9wZXJ0eUluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhbiBpbnN0YW5jZSBjb250YWluZXIgdG8gdGhlIGxpc3Qgb2YgaW5zdGFuY2VzLlxyXG4gICAgICogQHBhcmFtIGluc3RhbmNlRnVuYyBUaGUgaW5zdGFuY2UgZnVuY3Rpb24uXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYWRkZWQgaW5zdGFuY2UgY29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkSW5zdGFuY2VDb250YWluZXIoaW5zdGFuY2VGdW5jOiBhbnkpOiBJbnN0YW5jZUNvbnRhaW5lciB7XHJcbiAgICAgICAgLyogRGVmaW5lIGFuIGluc3RhbmNlIGNvbnRhaW5lciAqL1xyXG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIgPSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZUZ1bmMsICAgICAvKiBJbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRhaW5lciAqL1xyXG4gICAgICAgICAgICBwcm9wZXJ0eUFubm90YXRpb25zOiBbXSwgICAgLyogQW5ub3RhdGlvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzICovXHJcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IFtdLCAgICAgICAgICAgICAvKiBQcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5zdGFuY2UgKi9cclxuICAgICAgICAgICAgbm9uVmFsaWRhdGlvbkRlY29yYXRvcnM6IHtcclxuICAgICAgICAgICAgICAgIC8qIERpc2FibGVkIGRlY29yYXRvcnMgKi9cclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxFeHByZXNzaW9uczoge30sIC8qIENvbmRpdGlvbmFsIGV4cHJlc3Npb25zIGZvciBkaXNhYmxlZCBkZWNvcmF0b3JzICovXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiB7fSwgICAgICAgIC8qIENoYW5nZSBkZXRlY3Rpb24gZm9yIGRpc2FibGVkIGRlY29yYXRvcnMgKi9cclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sUHJvcDoge30gICAgICAgICAgICAgLyogQ29udHJvbCBwcm9wZXJ0aWVzIGZvciBkaXNhYmxlZCBkZWNvcmF0b3JzICovXHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIEVycm9yIGRlY29yYXRvcnMgKi9cclxuICAgICAgICAgICAgICAgIGVycm9yOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxFeHByZXNzaW9uczoge30sIC8qIENvbmRpdGlvbmFsIGV4cHJlc3Npb25zIGZvciBlcnJvciBkZWNvcmF0b3JzICovXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiB7fSwgICAgICAgIC8qIENoYW5nZSBkZXRlY3Rpb24gZm9yIGVycm9yIGRlY29yYXRvcnMgKi9cclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sUHJvcDoge30gICAgICAgICAgICAgLyogQ29udHJvbCBwcm9wZXJ0aWVzIGZvciBlcnJvciBkZWNvcmF0b3JzICovXHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIEVsZW1lbnQgY2xhc3MgZGVjb3JhdG9ycyAqL1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudENsYXNzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxFeHByZXNzaW9uczoge30sIC8qIENvbmRpdGlvbmFsIGV4cHJlc3Npb25zIGZvciBlbGVtZW50IGNsYXNzIGRlY29yYXRvcnMgKi9cclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IHt9LCAgICAgICAgLyogQ2hhbmdlIGRldGVjdGlvbiBmb3IgZWxlbWVudCBjbGFzcyBkZWNvcmF0b3JzICovXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbFByb3A6IHt9ICAgICAgICAgICAgIC8qIENvbnRyb2wgcHJvcGVydGllcyBmb3IgZWxlbWVudCBjbGFzcyBkZWNvcmF0b3JzICovXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvKiBTYW5pdGl6ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5zdGFuY2UgKi9cclxuICAgICAgICAgICAgc2FuaXRpemVyczoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvKiBBZGQgdGhlIGluc3RhbmNlIGNvbnRhaW5lciB0byB0aGUgaW5zdGFuY2VzIGFycmF5ICovXHJcbiAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZUNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIC8qIFJldHVybiB0aGUgY3JlYXRlZCBpbnN0YW5jZSBjb250YWluZXIgKi9cclxuICAgICAgICByZXR1cm4gaW5zdGFuY2VDb250YWluZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgcHJvcGVydHkgdG8gdGhlIGluc3RhbmNlIGNvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSBpbnN0YW5jZUZ1bmMgVGhlIGluc3RhbmNlIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5SW5mbyBUaGUgcHJvcGVydHkgaW5mb3JtYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gaXNGcm9tQW5ub3RhdGlvbiBJbmRpY2F0ZXMgd2hldGhlciBpdCdzIGFkZGVkIGZyb20gYW4gYW5ub3RhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFByb3BlcnR5KGluc3RhbmNlRnVuYzogYW55LCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbywgaXNGcm9tQW5ub3RhdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgLyogRmluZCB0aGUgaW5zdGFuY2UgaW4gdGhlIGluc3RhbmNlcyBhcnJheSAqL1xyXG4gICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmZpbmQoaW5zdGFuY2UgPT4gaW5zdGFuY2UuaW5zdGFuY2UgPT09IGluc3RhbmNlRnVuYyk7XHJcblxyXG4gICAgICAgIC8qIENoZWNrIGlmIHRoZSBpbnN0YW5jZSBleGlzdHMgKi9cclxuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgLyogQWRkIHByb3BlcnR5IGluZm9ybWF0aW9uIHRvIHRoZSBleGlzdGluZyBpbnN0YW5jZSAqL1xyXG4gICAgICAgICAgICB0aGlzLmFkZFByb3BlcnR5SW5mbyhpbnN0YW5jZSwgcHJvcGVydHlJbmZvLCAhaXNGcm9tQW5ub3RhdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLyogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIGNvbnRhaW5lciBpZiBpdCBkb2Vzbid0IGV4aXN0ICovXHJcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG5cclxuICAgICAgICAgICAgLyogQWRkIHByb3BlcnR5IGluZm9ybWF0aW9uIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlICovXHJcbiAgICAgICAgICAgIHRoaXMuYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlLCBwcm9wZXJ0eUluZm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgcHJvcGVydHkgaW5mb3JtYXRpb24gdG8gdGhlIGluc3RhbmNlIGNvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgaW5zdGFuY2UgY29udGFpbmVyLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5SW5mbyBUaGUgcHJvcGVydHkgaW5mb3JtYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gaXNBZGRQcm9wZXJ0eSBJbmRpY2F0ZXMgd2hldGhlciBpdCdzIGFkZGVkIGFzIGEgbmV3IHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkUHJvcGVydHlJbmZvKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIGlzQWRkUHJvcGVydHk6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIC8qIEZpbmQgdGhlIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUgaW5zdGFuY2UncyBwcm9wZXJ0aWVzICovXHJcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gaW5zdGFuY2UucHJvcGVydGllcz8uZmluZCh0ID0+IHQubmFtZSA9PSBwcm9wZXJ0eUluZm8ubmFtZSk7XHJcblxyXG4gICAgICAgIC8qIENoZWNrIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGFscmVhZHkgZXhpc3QgKi9cclxuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIC8qIEFkZCB0aGUgcHJvcGVydHkgaW5mb3JtYXRpb24gdG8gdGhlIGluc3RhbmNlJ3MgcHJvcGVydGllcyAqL1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5wcm9wZXJ0aWVzPy5wdXNoKHByb3BlcnR5SW5mbyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0FkZFByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSBwcm9wZXJ0eSBpbmZvcm1hdGlvbiBpZiByZXF1ZXN0ZWQgKi9cclxuICAgICAgICAgICAgcHJvcGVydHkuZGF0YVByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5kYXRhUHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICBwcm9wZXJ0eS5kZWZhdWx0VmFsdWUgPSBwcm9wZXJ0eUluZm8uZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYW4gYW5ub3RhdGlvbiB0byB0aGUgaW5zdGFuY2UgY29udGFpbmVyLlxyXG4gICAgICogQHBhcmFtIGluc3RhbmNlRnVuYyBUaGUgaW5zdGFuY2UgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0gZGVjb3JhdG9yQ29uZmlndXJhdGlvbiBUaGUgZGVjb3JhdG9yIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRBbm5vdGF0aW9uKGluc3RhbmNlRnVuYzogYW55LCBkZWNvcmF0b3JDb25maWd1cmF0aW9uOiBEZWNvcmF0b3JDb25maWd1cmF0aW9uKTogdm9pZCB7XHJcbiAgICAgICAgLyogQWRkIHByb3BlcnR5IGluZm9ybWF0aW9uIHRvIHRoZSBpbnN0YW5jZSAqL1xyXG4gICAgICAgIHRoaXMuYWRkUHJvcGVydHkoaW5zdGFuY2VGdW5jLCB7IHByb3BlcnR5VHlwZTogUFJPUEVSVFksIG5hbWU6IGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lIH0sIHRydWUpO1xyXG5cclxuICAgICAgICAvKiBGaW5kIG9yIGNyZWF0ZSB0aGUgaW5zdGFuY2UgaW4gdGhlIGluc3RhbmNlcyBhcnJheSAqL1xyXG4gICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2VzLmZpbmQoaW5zdGFuY2UgPT4gaW5zdGFuY2UuaW5zdGFuY2UgPT09IGluc3RhbmNlRnVuYyk7XHJcbiAgICAgICAgaWYgKGluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIC8qIEFkZCB0aGUgZGVjb3JhdG9yIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGluc3RhbmNlJ3MgcHJvcGVydHkgYW5ub3RhdGlvbnMgKi9cclxuICAgICAgICAgICAgaW5zdGFuY2UucHJvcGVydHlBbm5vdGF0aW9ucy5wdXNoKGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5hZGRJbnN0YW5jZUNvbnRhaW5lcihpbnN0YW5jZUZ1bmMpO1xyXG4gICAgICAgICAgICBpbnN0YW5jZS5wcm9wZXJ0eUFubm90YXRpb25zLnB1c2goZGVjb3JhdG9yQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBBZGQgY2hhbmdlIHZhbGlkYXRpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gKi9cclxuICAgICAgICBpZiAoZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcgJiYgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcuY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5jb25kaXRpb25hbEV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICB0aGlzLmFkZENoYW5nZVZhbGlkYXRpb24oaW5zdGFuY2UsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lLCBjb2x1bW5zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIEFkZCBkeW5hbWljIGNvbmZpZ3VyYXRpb24gYW5kIHZhbGlkYXRpb24gKi9cclxuICAgICAgICBpZiAoZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcgJiYgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcuZHluYW1pY0NvbmZpZykge1xyXG4gICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZHluYW1pY0NvbmZpZ1BhcnNlcihkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5keW5hbWljQ29uZmlnLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLnByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hhbmdlVmFsaWRhdGlvbihpbnN0YW5jZSwgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5wcm9wZXJ0eU5hbWUsIGNvbHVtbnMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogU2V0IGNvbmRpdGlvbmFsIGNvbHVtbnMgYmFzZWQgb24gdGhlIGRlY29yYXRvciBjb25maWd1cmF0aW9uICovXHJcbiAgICAgICAgdGhpcy5zZXRDb25kaXRpb25hbENvbHVtbnMoaW5zdGFuY2UsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBjb25kaXRpb25hbCBjb2x1bW5zIGJhc2VkIG9uIHRoZSBkZWNvcmF0b3IgY29uZmlndXJhdGlvbi5cclxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgaW5zdGFuY2UgY29udGFpbmVyLlxyXG4gICAgICogQHBhcmFtIGRlY29yYXRvckNvbmZpZ3VyYXRpb24gVGhlIGRlY29yYXRvciBjb25maWd1cmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0Q29uZGl0aW9uYWxDb2x1bW5zKGluc3RhbmNlOiBhbnksIGRlY29yYXRvckNvbmZpZ3VyYXRpb246IERlY29yYXRvckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICAvKiBDaGVja3MgaWYgdGhlcmUgaXMgYW4gaW5zdGFuY2UgYW5kIGRlY29yYXRvciBjb25maWd1cmF0aW9uIHByZXNlbnQgKi9cclxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcpIHtcclxuICAgICAgICAgICAgLyogSGFuZGxlcyBsb2dpY2FsIGFubm90YXRpb25zIChBTkQsIE9SLCBOT1QpICovXHJcbiAgICAgICAgICAgIGlmIChkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5hbmQgfHxcclxuICAgICAgICAgICAgICAgIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm9yIHx8XHJcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5ub3RcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvKiBJdGVyYXRlcyBvdmVyIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbnMgKi9cclxuICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnLnZhbGlkYXRpb24pLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2tzIGlmIHRoZSB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gaXMgbm90IGEgYm9vbGVhbiAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVjb3JhdG9yQ29uZmlndXJhdGlvbi5jb25maWcudmFsaWRhdGlvblt0XSAhPT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0cyBsb2dpY2FsIGNvbmRpdGlvbmFsIGJhc2VkIG9uIHRoZSB2YWxpZGF0aW9uIGNvbmZpZ3VyYXRpb24gKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2dpY2FsQ29uZGl0aW9uYWwoaW5zdGFuY2UsIHQsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24uY29uZmlnLnZhbGlkYXRpb25bdF0uZmllbGROYW1lLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLnByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8qIFNldHMgbG9naWNhbCBjb25kaXRpb25hbCBmb3Igbm9uLWxvZ2ljYWwgYW5ub3RhdGlvbnMgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9naWNhbENvbmRpdGlvbmFsKGluc3RhbmNlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmFubm90YXRpb25UeXBlLCBkZWNvcmF0b3JDb25maWd1cmF0aW9uLmNvbmZpZy5maWVsZE5hbWUsIGRlY29yYXRvckNvbmZpZ3VyYXRpb24ucHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgbG9naWNhbCBjb25kaXRpb25hbHMgYmFzZWQgb24gdGhlIGRlY29yYXRvciBjb25maWd1cmF0aW9uLlxyXG4gICAgICogQHBhcmFtIGluc3RhbmNlIFRoZSBpbnN0YW5jZSBjb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0gYW5ub3RhdGlvblR5cGUgVGhlIGFubm90YXRpb24gdHlwZS5cclxuICAgICAqIEBwYXJhbSBmaWVsZE5hbWUgVGhlIGZpZWxkIG5hbWUuXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0TG9naWNhbENvbmRpdGlvbmFsKGluc3RhbmNlOiBhbnksIGFubm90YXRpb25UeXBlOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIC8qIFxyXG4gICAgICAgICAqIENoZWNrcyBpZiB0aGVyZSBpcyBhbiBpbnN0YW5jZSBhbmQgYW5ub3RhdGlvbiB0eXBlIHdpdGggYXBwbGljYWJsZSBjb25kaXRpb25zXHJcbiAgICAgICAgICogZm9yIHNldHRpbmcgY29uZGl0aW9uYWwgdmFsdWUgcHJvcGVydGllcy5cclxuICAgICAgICAgKi9cclxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgKFxyXG4gICAgICAgICAgICAoYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmNvbXBhcmUgfHxcclxuICAgICAgICAgICAgICAgIGFubm90YXRpb25UeXBlID09IEFubm90YXRpb25UeXBlcy5ncmVhdGVyVGhhbiB8fFxyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmdyZWF0ZXJUaGFuRXF1YWxUbyB8fFxyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLmxlc3NUaGFuIHx8XHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubGVzc1RoYW5FcXVhbFRvIHx8XHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuZGlmZmVyZW50IHx8XHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuZmFjdG9yIHx8XHJcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMubWluVGltZSB8fFxyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm1heFRpbWUpIHx8XHJcbiAgICAgICAgICAgIChhbm5vdGF0aW9uVHlwZSA9PSBBbm5vdGF0aW9uVHlwZXMuY3JlZGl0Q2FyZCAmJiBmaWVsZE5hbWUpIHx8XHJcbiAgICAgICAgICAgICgoYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm1pbkRhdGUgfHwgYW5ub3RhdGlvblR5cGUgPT0gQW5ub3RhdGlvblR5cGVzLm1heERhdGUpICYmIGZpZWxkTmFtZSlcclxuICAgICAgICApKSB7XHJcbiAgICAgICAgICAgIC8qIFNldHMgY29uZGl0aW9uYWwgdmFsdWUgcHJvcGVydHkgYmFzZWQgb24gdGhlIGNvbmRpdGlvbnMgKi9cclxuICAgICAgICAgICAgdGhpcy5zZXRDb25kaXRpb25hbFZhbHVlUHJvcChpbnN0YW5jZSwgZmllbGROYW1lLCBwcm9wZXJ0eU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgY29uZGl0aW9uYWwgdmFsdWUgcHJvcGVydGllcyBiYXNlZCBvbiB0aGUgZGVjb3JhdG9yIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgVGhlIGluc3RhbmNlIGNvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgVGhlIHByb3BlcnR5IG5hbWUuXHJcbiAgICAgKiBAcGFyYW0gcmVmUHJvcGVydHlOYW1lIFRoZSByZWZlcmVuY2UgcHJvcGVydHkgbmFtZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldENvbmRpdGlvbmFsVmFsdWVQcm9wKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHJlZlByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgLyogQ2hlY2tzIGlmIHByb3BOYW1lIGV4aXN0cyAqL1xyXG4gICAgICAgIGlmIChwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgLyogU3BsaXRzIHByb3BOYW1lIGludG8gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzICovXHJcbiAgICAgICAgICAgIGxldCBzcGxpdFByb3BzID0gcHJvcGVydHlOYW1lLnNwbGl0ID8gcHJvcGVydHlOYW1lLnNwbGl0KCcuJykgOiAnJztcclxuXHJcbiAgICAgICAgICAgIC8qIENoZWNrcyBpZiB0aGUgbGVuZ3RoIG9mIHNwbGl0UHJvcHMgaXMgbGVzcyB0aGFuIDIgKi9cclxuICAgICAgICAgICAgaWYgKHNwbGl0UHJvcHMubGVuZ3RoIDwgMikge1xyXG4gICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZXMgY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgaWYgaXQgZG9lcyBub3QgZXhpc3QgKi9cclxuICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemVzIGNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXSBpZiBpdCBkb2VzIG5vdCBleGlzdCAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHlOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8qIFB1c2hlcyByZWZQcm9wTmFtZSBpbnRvIGNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BOYW1lXSBpZiBpdCBkb2VzIG5vdCBleGlzdCAqL1xyXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5TmFtZV0uaW5kZXhPZihyZWZQcm9wZXJ0eU5hbWUpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHlOYW1lXS5wdXNoKHJlZlByb3BlcnR5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvKiBBZGRzIGNoYW5nZSB2YWxpZGF0aW9uIGZvciBjb21wbGV4IHByb3BlcnRpZXMgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hhbmdlVmFsaWRhdGlvbihpbnN0YW5jZSwgcmVmUHJvcGVydHlOYW1lLCBbeyBhcmd1bWVudEluZGV4OiAxLCBvYmplY3RQcm9wTmFtZTogc3BsaXRQcm9wc1swXSwgcHJvcE5hbWU6IHNwbGl0UHJvcHNbMV0sIHJlZmVyZW5jZVByb3BOYW1lOiByZWZQcm9wZXJ0eU5hbWUgfV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGNoYW5nZSB2YWxpZGF0aW9uIGJhc2VkIG9uIHRoZSBjb2x1bW5zLlxyXG4gICAgICogQHBhcmFtIGluc3RhbmNlIFRoZSBpbnN0YW5jZSBjb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lLlxyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgVGhlIGNvbHVtbnMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRDaGFuZ2VWYWxpZGF0aW9uKGluc3RhbmNlOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIGNvbHVtbnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgLyogQ2hlY2tzIGlmIGluc3RhbmNlIGV4aXN0cy4gKi9cclxuICAgICAgICBpZiAoaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgLyogSW5pdGlhbGl6ZXMgY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgaWYgaXQgZG9lcyBub3QgZXhpc3QuICovXHJcbiAgICAgICAgICAgIGlmICghaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzID0ge307XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qIEl0ZXJhdGVzIHRocm91Z2ggY29sdW1ucy4gKi9cclxuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgLyogQ2hlY2tzIGlmIHByb3BOYW1lIGV4aXN0cyBhbmQgb2JqZWN0UHJvcE5hbWUgZG9lcyBub3QgZXhpc3QuICovXHJcbiAgICAgICAgICAgICAgICBpZiAodC5wcm9wTmFtZSAmJiAhdC5vYmplY3RQcm9wTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIEluaXRpYWxpemVzIGNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3QucHJvcE5hbWVdIGlmIGl0IGRvZXMgbm90IGV4aXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzIGFzIGFueSlbdC5wcm9wTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzIGFzIGFueSlbdC5wcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8qIFB1c2hlcyBwcm9wZXJ0eU5hbWUgaW50byBjb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1t0LnByb3BOYW1lXSBpZiBpdCBkb2VzIG5vdCBleGlzdC4gKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzIGFzIGFueSlbdC5wcm9wTmFtZV0uaW5kZXhPZihwcm9wZXJ0eU5hbWUpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyBhcyBhbnkpW3QucHJvcE5hbWVdLnB1c2gocHJvcGVydHlOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIENoZWNrcyBpZiBwcm9wTmFtZSBhbmQgb2JqZWN0UHJvcE5hbWUgZXhpc3QuICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQucHJvcE5hbWUgJiYgdC5vYmplY3RQcm9wTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplcyBjb25kaXRpb25hbE9iamVjdFByb3BzIGlmIGl0IGRvZXMgbm90IGV4aXN0LiAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0cyByZWZlcmVuY2VQcm9wTmFtZSBhbmQgYWRkcyBpdCB0byBjb25kaXRpb25hbE9iamVjdFByb3BzLiAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0LnJlZmVyZW5jZVByb3BOYW1lID0gcHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgZGVmYXVsdCBjb250YWluZXIgZm9yIG1hbmFnaW5nIGluc3RhbmNlIGNvbmZpZ3VyYXRpb25zLlxyXG4gKiBcclxuICogTWFuYWdlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgaW5zdGFudGlhdGlvbiBvZiB2YWxpZGF0aW9uIGRlY29yYXRvcnMsIHNhbml0aXplcnMsIGFuZCBvdGhlciBwcm9wZXJ0aWVzIGZvciBjbGFzc2VzLlxyXG4gKiBUaGlzIGNsYXNzIHNlcnZlcyBhcyBhIGNvbnRhaW5lciBmb3IgbWFuYWdpbmcgaW5zdGFuY2UtcmVsYXRlZCBjb25maWd1cmF0aW9ucyBhbmQgcHJvcGVydGllcy5cclxuICovXHJcbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29udGFpbmVyID0gbmV3IERlZmF1bHRDb250YWluZXIoKTsiXX0=
@@ -1,4 +1,4 @@
1
- import { AnnotationTypes } from '../core/validator.static';
1
+ import { AnnotationTypes } from '../core/annotation-types';
2
2
  import { baseAsyncValidator } from "../reactive-form-validators/async/base.async.validator";
3
3
  import { baseDecoratorFunction } from "./base-decorator.function";
4
4
  export function allOf(config) {
@@ -7,4 +7,4 @@ export function allOf(config) {
7
7
  export function allOfAsync(config) {
8
8
  return baseDecoratorFunction(AnnotationTypes.allOf, [baseAsyncValidator(config, AnnotationTypes.allOf)], true);
9
9
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsT2YuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL2RlY29yYXRvcnMvYWxsT2YuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM1RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxNQUFNLFVBQVUsS0FBSyxDQUFDLE1BQW9CO0lBQ3RDLE9BQU8scUJBQXFCLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFvQjtJQUMzQyxPQUFPLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25UeXBlcyB9IGZyb20gJy4uL2NvcmUvdmFsaWRhdG9yLnN0YXRpYyc7XHJcbmltcG9ydCB7IEFycmF5Q29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcvYXJyYXktY29uZmlnXCI7XHJcbmltcG9ydCB7IGJhc2VBc3luY1ZhbGlkYXRvciB9IGZyb20gXCIuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvYXN5bmMvYmFzZS5hc3luYy52YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgYmFzZURlY29yYXRvckZ1bmN0aW9uIH0gZnJvbSBcIi4vYmFzZS1kZWNvcmF0b3IuZnVuY3Rpb25cIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhbGxPZihjb25maWc/OiBBcnJheUNvbmZpZykge1xyXG4gICAgcmV0dXJuIGJhc2VEZWNvcmF0b3JGdW5jdGlvbihBbm5vdGF0aW9uVHlwZXMuYWxsT2YsIGNvbmZpZyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhbGxPZkFzeW5jKGNvbmZpZz86IEFycmF5Q29uZmlnKSB7XHJcbiAgICByZXR1cm4gYmFzZURlY29yYXRvckZ1bmN0aW9uKEFubm90YXRpb25UeXBlcy5hbGxPZiwgW2Jhc2VBc3luY1ZhbGlkYXRvcihjb25maWcsIEFubm90YXRpb25UeXBlcy5hbGxPZildLCB0cnVlKTtcclxufSJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsT2YuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL2RlY29yYXRvcnMvYWxsT2YuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM1RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVsRSxNQUFNLFVBQVUsS0FBSyxDQUFDLE1BQW9CO0lBQ3RDLE9BQU8scUJBQXFCLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFvQjtJQUMzQyxPQUFPLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25UeXBlcyB9IGZyb20gJy4uL2NvcmUvYW5ub3RhdGlvbi10eXBlcyc7XHJcbmltcG9ydCB7IEFycmF5Q29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy9jb25maWcvYXJyYXktY29uZmlnXCI7XHJcbmltcG9ydCB7IGJhc2VBc3luY1ZhbGlkYXRvciB9IGZyb20gXCIuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvYXN5bmMvYmFzZS5hc3luYy52YWxpZGF0b3JcIjtcclxuaW1wb3J0IHsgYmFzZURlY29yYXRvckZ1bmN0aW9uIH0gZnJvbSBcIi4vYmFzZS1kZWNvcmF0b3IuZnVuY3Rpb25cIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhbGxPZihjb25maWc/OiBBcnJheUNvbmZpZykge1xyXG4gICAgcmV0dXJuIGJhc2VEZWNvcmF0b3JGdW5jdGlvbihBbm5vdGF0aW9uVHlwZXMuYWxsT2YsIGNvbmZpZyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhbGxPZkFzeW5jKGNvbmZpZz86IEFycmF5Q29uZmlnKSB7XHJcbiAgICByZXR1cm4gYmFzZURlY29yYXRvckZ1bmN0aW9uKEFubm90YXRpb25UeXBlcy5hbGxPZiwgW2Jhc2VBc3luY1ZhbGlkYXRvcihjb25maWcsIEFubm90YXRpb25UeXBlcy5hbGxPZildLCB0cnVlKTtcclxufSJdfQ==