@messaia/cdk 17.1.5 → 18.0.0-rc02

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 (242) hide show
  1. package/esm2022/lib/base/base.module.mjs +8 -8
  2. package/esm2022/lib/base/components/base.component.mjs +4 -4
  3. package/esm2022/lib/base/components/dynamic-table-config-dialog.comnponent.mjs +3 -3
  4. package/esm2022/lib/base/components/generic-form-base.component.mjs +4 -4
  5. package/esm2022/lib/base/components/generic-form.component.mjs +3 -3
  6. package/esm2022/lib/base/components/generic-list.component.mjs +4 -4
  7. package/esm2022/lib/base/components/generic-reactive-form.component.mjs +4 -4
  8. package/esm2022/lib/base/constants/common.mjs +2 -2
  9. package/esm2022/lib/base/helpers/auth-helper.mjs +1 -1
  10. package/esm2022/lib/base/interceptors/base.interceptor.mjs +4 -4
  11. package/esm2022/lib/base/interceptors/caching-interceptor.mjs +4 -4
  12. package/esm2022/lib/base/interceptors/loading.interceptor.mjs +4 -4
  13. package/esm2022/lib/base/services/file.service.mjs +3 -3
  14. package/esm2022/lib/base/services/loading-screen.service.mjs +3 -3
  15. package/esm2022/lib/base/services/print.service.mjs +3 -3
  16. package/esm2022/lib/chips/chips.module.mjs +4 -4
  17. package/esm2022/lib/chips/components/chips.component.mjs +4 -4
  18. package/esm2022/lib/chips/directives/autocomplete-option.directive.mjs +3 -3
  19. package/esm2022/lib/chips/directives/chip.directive.mjs +3 -3
  20. package/esm2022/lib/common/behaviors/control-value-accesor.mixin.mjs +1 -1
  21. package/esm2022/lib/common/behaviors/disabled.mixin.mjs +1 -1
  22. package/esm2022/lib/common/common.module.mjs +4 -4
  23. package/esm2022/lib/common/directives/delayed-hover.directive.mjs +4 -4
  24. package/esm2022/lib/common/directives/disable-control.directive.mjs +4 -4
  25. package/esm2022/lib/common/functions/utils.mjs +4 -4
  26. package/esm2022/lib/common/helpers/app-storage.mjs +4 -4
  27. package/esm2022/lib/common/helpers/dynamic-builder.mjs +4 -4
  28. package/esm2022/lib/common/helpers/dynamic-component-compiler.mjs +3 -3
  29. package/esm2022/lib/common/models/app-setting.mjs +3 -3
  30. package/esm2022/lib/common/pipes/data-source.pipe.mjs +3 -3
  31. package/esm2022/lib/common/pipes/enum.pipe.mjs +3 -3
  32. package/esm2022/lib/common/pipes/file-size.pipe.mjs +4 -4
  33. package/esm2022/lib/common/pipes/filter.pipe.mjs +4 -4
  34. package/esm2022/lib/common/pipes/first-letter.mjs +3 -3
  35. package/esm2022/lib/common/pipes/form-array.pipe.mjs +3 -3
  36. package/esm2022/lib/common/pipes/form-control.pipe.mjs +3 -3
  37. package/esm2022/lib/common/pipes/form-group.pipe.mjs +3 -3
  38. package/esm2022/lib/common/pipes/func.pipe.mjs +3 -3
  39. package/esm2022/lib/common/pipes/join.pipe.mjs +4 -4
  40. package/esm2022/lib/common/pipes/keys.mjs +4 -4
  41. package/esm2022/lib/common/pipes/month-name.pipe.mjs +3 -3
  42. package/esm2022/lib/common/pipes/nested-property.mjs +3 -3
  43. package/esm2022/lib/common/pipes/only-number.mjs +4 -4
  44. package/esm2022/lib/common/pipes/order.pipe.mjs +4 -4
  45. package/esm2022/lib/common/pipes/placeholder.pipe.mjs +4 -4
  46. package/esm2022/lib/common/pipes/property-join.pipe.mjs +4 -4
  47. package/esm2022/lib/common/pipes/safe-html.pipe.mjs +3 -3
  48. package/esm2022/lib/common/pipes/split.pipe.mjs +3 -3
  49. package/esm2022/lib/common/pipes/time.pipe.mjs +4 -4
  50. package/esm2022/lib/common/pipes/titlecase.pipe.mjs +3 -3
  51. package/esm2022/lib/common/pipes/truncate.pipe.mjs +3 -3
  52. package/esm2022/lib/common/pipes/values.mjs +3 -3
  53. package/esm2022/lib/common/services/base.service.mjs +3 -3
  54. package/esm2022/lib/common/services/enum.service.mjs +4 -4
  55. package/esm2022/lib/common/services/event-queue.service.mjs +3 -3
  56. package/esm2022/lib/dialogs/alert-dialog/alert-dialog.component.mjs +3 -3
  57. package/esm2022/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +3 -3
  58. package/esm2022/lib/dialogs/dialog.component.mjs +13 -13
  59. package/esm2022/lib/dialogs/dialogs.module.mjs +4 -4
  60. package/esm2022/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +3 -3
  61. package/esm2022/lib/dialogs/services/dialog.service.mjs +4 -4
  62. package/esm2022/lib/file/file-input.component.mjs +4 -4
  63. package/esm2022/lib/file/file.module.mjs +4 -4
  64. package/esm2022/lib/form-validators/algorithm/luhn-algorithm.mjs +1 -1
  65. package/esm2022/lib/form-validators/core/default-container.mjs +10 -10
  66. package/esm2022/lib/form-validators/directives/base-directive.mjs +4 -4
  67. package/esm2022/lib/form-validators/directives/control-host.directive.mjs +4 -4
  68. package/esm2022/lib/form-validators/directives/html-control-template.directive.mjs +3 -3
  69. package/esm2022/lib/form-validators/directives/rx-form.directive.mjs +4 -4
  70. package/esm2022/lib/form-validators/directives/template-validations/async-validation.directive.mjs +3 -3
  71. package/esm2022/lib/form-validators/directives/template-validations/base-validator.directive.mjs +4 -4
  72. package/esm2022/lib/form-validators/directives/template-validations/control-expression-process.mjs +4 -4
  73. package/esm2022/lib/form-validators/directives/template-validations/file-control.directive.mjs +4 -4
  74. package/esm2022/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +4 -4
  75. package/esm2022/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +4 -4
  76. package/esm2022/lib/form-validators/domain/disable-provider.mjs +1 -1
  77. package/esm2022/lib/form-validators/domain/element-processor/decimal.provider.mjs +4 -4
  78. package/esm2022/lib/form-validators/domain/element-processor/mask.provider.mjs +1 -1
  79. package/esm2022/lib/form-validators/domain/form-data.mjs +1 -1
  80. package/esm2022/lib/form-validators/models/form-builder-configuration.mjs +1 -1
  81. package/esm2022/lib/form-validators/reactive-form-validators/allOf.validator.mjs +1 -1
  82. package/esm2022/lib/form-validators/reactive-form-validators/and.validator.mjs +1 -1
  83. package/esm2022/lib/form-validators/reactive-form-validators/async/base.async.validator.mjs +1 -1
  84. package/esm2022/lib/form-validators/reactive-form-validators/choice.validator.mjs +1 -1
  85. package/esm2022/lib/form-validators/reactive-form-validators/compare.validator.mjs +1 -1
  86. package/esm2022/lib/form-validators/reactive-form-validators/compose.validator.mjs +1 -1
  87. package/esm2022/lib/form-validators/reactive-form-validators/conditional-change.validator.mjs +1 -1
  88. package/esm2022/lib/form-validators/reactive-form-validators/contains.validator.mjs +1 -1
  89. package/esm2022/lib/form-validators/reactive-form-validators/credit-card.validator.mjs +1 -1
  90. package/esm2022/lib/form-validators/reactive-form-validators/cusip.validator.mjs +1 -1
  91. package/esm2022/lib/form-validators/reactive-form-validators/custom.validator.mjs +1 -1
  92. package/esm2022/lib/form-validators/reactive-form-validators/different.validator.mjs +1 -1
  93. package/esm2022/lib/form-validators/reactive-form-validators/endsWith.validator.mjs +1 -1
  94. package/esm2022/lib/form-validators/reactive-form-validators/even.validator.mjs +1 -1
  95. package/esm2022/lib/form-validators/reactive-form-validators/extension.validator.mjs +1 -1
  96. package/esm2022/lib/form-validators/reactive-form-validators/factor.validator.mjs +1 -1
  97. package/esm2022/lib/form-validators/reactive-form-validators/file.validator.mjs +1 -1
  98. package/esm2022/lib/form-validators/reactive-form-validators/fileSize.validator.mjs +1 -1
  99. package/esm2022/lib/form-validators/reactive-form-validators/grid.validator.mjs +1 -1
  100. package/esm2022/lib/form-validators/reactive-form-validators/iban.validator.mjs +1 -1
  101. package/esm2022/lib/form-validators/reactive-form-validators/image.validator.mjs +1 -1
  102. package/esm2022/lib/form-validators/reactive-form-validators/ip.validator.mjs +1 -1
  103. package/esm2022/lib/form-validators/reactive-form-validators/json.validator.mjs +1 -1
  104. package/esm2022/lib/form-validators/reactive-form-validators/latLong.validator.mjs +1 -1
  105. package/esm2022/lib/form-validators/reactive-form-validators/leapYear.validator.mjs +1 -1
  106. package/esm2022/lib/form-validators/reactive-form-validators/lowercase.validator.mjs +1 -1
  107. package/esm2022/lib/form-validators/reactive-form-validators/mask.validator.mjs +1 -1
  108. package/esm2022/lib/form-validators/reactive-form-validators/maxLength.validator.mjs +1 -1
  109. package/esm2022/lib/form-validators/reactive-form-validators/maxNumber.validator.mjs +1 -1
  110. package/esm2022/lib/form-validators/reactive-form-validators/minLength.validator.mjs +1 -1
  111. package/esm2022/lib/form-validators/reactive-form-validators/minNumber.validator.mjs +1 -1
  112. package/esm2022/lib/form-validators/reactive-form-validators/noneOf.validator.mjs +1 -1
  113. package/esm2022/lib/form-validators/reactive-form-validators/not.validator.mjs +1 -1
  114. package/esm2022/lib/form-validators/reactive-form-validators/notEmpty.validator.mjs +1 -1
  115. package/esm2022/lib/form-validators/reactive-form-validators/numeric.validator.mjs +1 -1
  116. package/esm2022/lib/form-validators/reactive-form-validators/odd.validator.mjs +1 -1
  117. package/esm2022/lib/form-validators/reactive-form-validators/oneOf.validator.mjs +1 -1
  118. package/esm2022/lib/form-validators/reactive-form-validators/or.validator.mjs +1 -1
  119. package/esm2022/lib/form-validators/reactive-form-validators/password.validator.mjs +1 -1
  120. package/esm2022/lib/form-validators/reactive-form-validators/pattern.validator.mjs +1 -1
  121. package/esm2022/lib/form-validators/reactive-form-validators/port.validator.mjs +1 -1
  122. package/esm2022/lib/form-validators/reactive-form-validators/primeNumber.validator.mjs +1 -1
  123. package/esm2022/lib/form-validators/reactive-form-validators/range.validator.mjs +1 -1
  124. package/esm2022/lib/form-validators/reactive-form-validators/required.validator.mjs +1 -1
  125. package/esm2022/lib/form-validators/reactive-form-validators/requiredTrue.validator.mjs +1 -1
  126. package/esm2022/lib/form-validators/reactive-form-validators/rule.validator.mjs +1 -1
  127. package/esm2022/lib/form-validators/reactive-form-validators/startsWith.validator.mjs +1 -1
  128. package/esm2022/lib/form-validators/reactive-form-validators/time.validator.mjs +1 -1
  129. package/esm2022/lib/form-validators/reactive-form-validators/unique.validator.mjs +1 -1
  130. package/esm2022/lib/form-validators/reactive-form-validators/uppercase.validator.mjs +1 -1
  131. package/esm2022/lib/form-validators/reactive-form-validators/url.validator.mjs +1 -1
  132. package/esm2022/lib/form-validators/services/base-form-builder.mjs +1 -1
  133. package/esm2022/lib/form-validators/services/entity.service.mjs +1 -1
  134. package/esm2022/lib/form-validators/services/form-control.mjs +1 -1
  135. package/esm2022/lib/form-validators/services/reactive-form.module.mjs +8 -8
  136. package/esm2022/lib/form-validators/services/rx-form-array.mjs +1 -1
  137. package/esm2022/lib/form-validators/services/rx-form-builder.mjs +4 -4
  138. package/esm2022/lib/form-validators/services/rx-form-group.mjs +1 -1
  139. package/esm2022/lib/form-validators/services/typed-form-builder.mjs +3 -3
  140. package/esm2022/lib/form-validators/util/app-util.mjs +1 -1
  141. package/esm2022/lib/form-validators/util/check-length.mjs +1 -1
  142. package/esm2022/lib/form-validators/util/config-provider.mjs +1 -1
  143. package/esm2022/lib/form-validators/util/date-checker.function.mjs +1 -1
  144. package/esm2022/lib/form-validators/util/date-provider.mjs +1 -1
  145. package/esm2022/lib/form-validators/util/form-provider.mjs +1 -1
  146. package/esm2022/lib/form-validators/util/instance-provider.function.mjs +1 -1
  147. package/esm2022/lib/form-validators/util/ip-checker.mjs +1 -1
  148. package/esm2022/lib/form-validators/util/linq.mjs +1 -1
  149. package/esm2022/lib/form-validators/util/object-maker.mjs +1 -1
  150. package/esm2022/lib/form-validators/util/reactive-form-config.mjs +1 -1
  151. package/esm2022/lib/form-validators/util/regex-validator.mjs +1 -1
  152. package/esm2022/lib/form-validators/util/relational-checker.function.mjs +1 -1
  153. package/esm2022/lib/form-validators/util/reset-form.mjs +1 -1
  154. package/esm2022/lib/form-validators/util/sanitizers.mjs +1 -1
  155. package/esm2022/lib/form-validators/util/time-checker.function.mjs +1 -1
  156. package/esm2022/lib/form-validators/util/validator-value-checker.mjs +1 -1
  157. package/esm2022/lib/form-validators/validators-extension/base-validator.function.mjs +1 -1
  158. package/esm2022/lib/form-validators/validators-function/alpha-validation.function.mjs +1 -1
  159. package/esm2022/lib/form-validators/validators-function/regex-validation.function.mjs +1 -1
  160. package/esm2022/lib/forms/components/datepicker/datepicker-header.component.mjs +3 -3
  161. package/esm2022/lib/forms/components/generic-form/generic-form.component.mjs +16 -16
  162. package/esm2022/lib/forms/directives/mat-form-field-editor.directive.mjs +4 -4
  163. package/esm2022/lib/forms/directives/mat-form-field-readonly.directive.mjs +4 -4
  164. package/esm2022/lib/forms/directives/nested-property-ng-model.directive.mjs +4 -4
  165. package/esm2022/lib/forms/directives/vd-generic-form-custom-field.directive.mjs +3 -3
  166. package/esm2022/lib/forms/forms.module.mjs +4 -4
  167. package/esm2022/lib/forms/functions/decorators.mjs +1 -1
  168. package/esm2022/lib/forms/functions/functions.mjs +1 -1
  169. package/esm2022/lib/forms/helpers/abstract-mat-form-field.mjs +4 -4
  170. package/esm2022/lib/forms/helpers/abstract-select-form-field.component.mjs +4 -4
  171. package/esm2022/lib/forms/helpers/value-accessor-base.mjs +3 -3
  172. package/esm2022/lib/forms/pipes/group-filter.pipe.mjs +4 -4
  173. package/esm2022/lib/forms/validators/empty-string-reset.directive.mjs +4 -4
  174. package/esm2022/lib/forms/validators/equal-validator.directive.mjs +4 -4
  175. package/esm2022/lib/forms/validators/native-element-injector.directive.mjs +4 -4
  176. package/esm2022/lib/forms/validators/unique-validator-directive.mjs +4 -4
  177. package/esm2022/lib/http/http.module.mjs +7 -11
  178. package/esm2022/lib/http/services/generic.service.mjs +1 -1
  179. package/esm2022/lib/layout/dynamic-menu/dynamic-menu.component.mjs +3 -3
  180. package/esm2022/lib/layout/layout-card-over/layout-card-over.component.mjs +3 -3
  181. package/esm2022/lib/layout/layout-compact/layout-compact.component.mjs +4 -4
  182. package/esm2022/lib/layout/layout-footer/layout-footer.component.mjs +4 -4
  183. package/esm2022/lib/layout/layout-manage-list/layout-manage-list.component.mjs +4 -4
  184. package/esm2022/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +9 -9
  185. package/esm2022/lib/layout/layout-nav/layout-nav.component.mjs +5 -5
  186. package/esm2022/lib/layout/layout-nav-list/layout-nav-list.component.mjs +4 -4
  187. package/esm2022/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +9 -9
  188. package/esm2022/lib/layout/layout-toggle.class.mjs +4 -4
  189. package/esm2022/lib/layout/layout.component.mjs +4 -4
  190. package/esm2022/lib/layout/layout.directives.mjs +9 -9
  191. package/esm2022/lib/layout/layout.module.mjs +4 -4
  192. package/esm2022/lib/layout/list-toolbar/list-toolbar.component.mjs +3 -3
  193. package/esm2022/lib/layout/navigation-drawer/navigation-drawer.component.mjs +10 -10
  194. package/esm2022/lib/list/components/list.component.mjs +3 -3
  195. package/esm2022/lib/list/directives/vd-list-option.directive.mjs +3 -3
  196. package/esm2022/lib/list/list.module.mjs +4 -4
  197. package/esm2022/lib/media/directives/media-toggle.directive.mjs +4 -4
  198. package/esm2022/lib/media/media.module.mjs +4 -4
  199. package/esm2022/lib/media/services/media.service.mjs +4 -4
  200. package/esm2022/lib/menu/components/menu.component.mjs +4 -4
  201. package/esm2022/lib/menu/menu.module.mjs +4 -4
  202. package/esm2022/lib/menu/resolvers/menu-form-includes.resolve.mjs +4 -4
  203. package/esm2022/lib/menu/resolvers/menu-item-form-includes.resolve.mjs +4 -4
  204. package/esm2022/lib/menu/resolvers/menu-list-projection.resolve.mjs +4 -4
  205. package/esm2022/lib/menu/resolvers/menu-settings.resolve.mjs +3 -3
  206. package/esm2022/lib/menu/services/menu-items.service.mjs +3 -3
  207. package/esm2022/lib/menu/services/menu.resolve.mjs +7 -7
  208. package/esm2022/lib/menu/services/menu.service.mjs +3 -3
  209. package/esm2022/lib/search/search.module.mjs +4 -4
  210. package/esm2022/lib/select/components/select.component.mjs +4 -4
  211. package/esm2022/lib/select/directives/vd-select-option.directive.mjs +3 -3
  212. package/esm2022/lib/select/directives/vd-select-trigger.directive.mjs +3 -3
  213. package/esm2022/lib/select/select.module.mjs +4 -4
  214. package/esm2022/lib/table/components/dynamic-table/dynamic-table.component.mjs +4 -4
  215. package/esm2022/lib/table/components/filter-clear.component.mjs +4 -4
  216. package/esm2022/lib/table/components/filter-date.component.mjs +4 -4
  217. package/esm2022/lib/table/components/filter-input.component.mjs +4 -4
  218. package/esm2022/lib/table/components/filter-select.component.mjs +7 -7
  219. package/esm2022/lib/table/directives/data-source-filter.directive.mjs +4 -4
  220. package/esm2022/lib/table/directives/vd-table-field.directive.mjs +3 -3
  221. package/esm2022/lib/table/functions/decorators.mjs +1 -1
  222. package/esm2022/lib/table/functions/functions.mjs +1 -1
  223. package/esm2022/lib/table/paginator-intl.mjs +4 -4
  224. package/esm2022/lib/table/table.data-source.mjs +1 -1
  225. package/esm2022/lib/table/table.module.mjs +4 -4
  226. package/esm2022/lib/table/table.static-data-source.mjs +1 -1
  227. package/fesm2022/messaia-cdk.mjs +486 -490
  228. package/fesm2022/messaia-cdk.mjs.map +1 -1
  229. package/lib/common/styles/_theme-functions.scss +0 -23
  230. package/lib/common/styles/colors/_colors-dark.scss +1350 -345
  231. package/lib/common/styles/colors/_colors-light.scss +3157 -829
  232. package/lib/common/styles/core/_button.scss +35 -29
  233. package/lib/common/styles/{_common-theme.scss → m2/_common-theme.scss} +6 -6
  234. package/lib/common/styles/m2/_theme-functions.scss +21 -0
  235. package/lib/common/styles/m3/_common-theme.scss +47 -0
  236. package/lib/common/styles/m3/_theme-functions.scss +21 -0
  237. package/lib/common/styles/platform.scss +1 -1
  238. package/lib/common/theming/_all-theme.scss +1 -1
  239. package/lib/common/theming/_m2-all-theme.scss +27 -0
  240. package/lib/http/http.module.d.ts +1 -2
  241. package/lib/layout/{_layout-theme.scss → _m2-layout-theme.scss} +11 -10
  242. package/package.json +3 -3
@@ -217,4 +217,4 @@ export class BaseFormBuilder {
217
217
  }
218
218
  }
219
219
  }
220
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvc2VydmljZXMvYmFzZS1mb3JtLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDeEI7OztPQUdHO0lBQ08sY0FBYztRQUNwQiwrQkFBK0I7UUFDL0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWxCLGdEQUFnRDtRQUNoRCxnQkFBZ0IsQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFFaEYseUJBQXlCO1FBQ3pCLElBQUksU0FBUyxHQUFHLGFBQWEsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVwRSw2Q0FBNkM7UUFDN0MsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsZ0NBQWdDLFNBQVMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUVyRix1Q0FBdUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTyxpQkFBaUIsQ0FBQyxLQUFVLEVBQUUsd0JBQWtELEVBQUUsYUFBbUI7UUFDM0csMkRBQTJEO1FBQzNELElBQUksaUJBQWlCLEdBQUcsZ0JBQWdC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M0UsS0FBSyxJQUFJLE1BQU0sSUFBSSxZQUFZLEVBQUU7WUFDN0IsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBPQkpFQ1RfUFJPUEVSVFksIFBST1BFUlRZIH0gZnJvbSBcIi4uL2NvbnN0XCI7XHJcbmltcG9ydCB7IGRlZmF1bHRDb250YWluZXIgfSBmcm9tICcuLi9jb3JlL2RlZmF1bHQtY29udGFpbmVyJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tYnVpbGRlci1jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgSW5zdGFuY2VDb250YWluZXIgfSBmcm9tIFwiLi4vbW9kZWxzL2luc3RhbmNlLWNvbnRhaW5lclwiO1xyXG5pbXBvcnQgeyBBdXRvSW5zdGFuY2VDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvaW50ZXJmYWNlL2F1dG8taW5zdGFuY2UtY29uZmlnLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFByb3BlcnR5SW5mbyB9IGZyb20gXCIuLi9tb2RlbHMvcHJvcGVydHktaW5mb1wiO1xyXG5pbXBvcnQgeyBnZXRJbnN0YW5jZSwgaW5zdGFuY2VQcm92aWRlciB9IGZyb20gXCIuLi91dGlsL2luc3RhbmNlLXByb3ZpZGVyLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSAnLi4vdXRpbC9yZWdleC12YWxpZGF0b3InO1xyXG5pbXBvcnQgeyBTQU5JVElaRVJTIH0gZnJvbSBcIi4uL3V0aWwvc2FuaXRpemVyc1wiO1xyXG5cclxuLyoqXHJcbiAqIERlZmluaXRpb24gb2YgQmFzZUZvcm1CdWlsZGVyIGNsYXNzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQmFzZUZvcm1CdWlsZGVyIHtcclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlSW5zdGFuY2UoKSB7XHJcbiAgICAgICAgLyogQ3JlYXRlIGEgbmV3IGVtcHR5IG9iamVjdCAqL1xyXG4gICAgICAgIGxldCBpbnN0YW5jZSA9IHt9O1xyXG5cclxuICAgICAgICAvKiBJbmNyZW1lbnQgbW9kZWwgY291bnQgaW4gZGVmYXVsdCBjb250YWluZXIgKi9cclxuICAgICAgICBkZWZhdWx0Q29udGFpbmVyLm1vZGVsSW5jcmVtZW50Q291bnQgPSBkZWZhdWx0Q29udGFpbmVyLm1vZGVsSW5jcmVtZW50Q291bnQgKyAxO1xyXG5cclxuICAgICAgICAvKiBHZW5lcmF0ZSBtb2RlbCBuYW1lICovXHJcbiAgICAgICAgbGV0IG1vZGVsTmFtZSA9IGBSeFdlYk1vZGVsJHtkZWZhdWx0Q29udGFpbmVyLm1vZGVsSW5jcmVtZW50Q291bnR9YDtcclxuXHJcbiAgICAgICAgLyogRHluYW1pY2FsbHkgY3JlYXRlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uICovXHJcbiAgICAgICAgaW5zdGFuY2UuY29uc3RydWN0b3IgPSBGdW5jdGlvbihgXCJ1c2Ugc3RyaWN0XCI7cmV0dXJuKGZ1bmN0aW9uICR7bW9kZWxOYW1lfSgpeyB9KWApKCk7XHJcblxyXG4gICAgICAgIC8qIFJldHVybiB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZSAqL1xyXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyBvYmplY3QuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBtb2RlbCBUaGUgbW9kZWwgb3IgY2xhc3MgZm9yIHdoaWNoIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLlxyXG4gICAgICogQHBhcmFtIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZvcm0gYnVpbGRlci5cclxuICAgICAqIEBwYXJhbSBjbGFzc0luc3RhbmNlIEFuIG9wdGlvbmFsIGV4aXN0aW5nIGluc3RhbmNlIG9mIHRoZSBjbGFzcy5cclxuICAgICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVDbGFzc09iamVjdChtb2RlbDogYW55LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgY2xhc3NJbnN0YW5jZT86IGFueSk6IGFueSB7XHJcbiAgICAgICAgLyogR2V0IHRoZSBpbnN0YW5jZSBjb250YWluZXIgZnJvbSB0aGUgZGVmYXVsdCBjb250YWluZXIgKi9cclxuICAgICAgICBsZXQgaW5zdGFuY2VDb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyLmdldChtb2RlbCk7XHJcblxyXG4gICAgICAgIC8qIFJldHJpZXZlIHRoZSBhdXRvIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZm9ybSBidWlsZGVyIGNvbmZpZ3VyYXRpb24gKi9cclxuICAgICAgICBsZXQgYXV0b0luc3RhbmNlQ29uZmlnOiBBdXRvSW5zdGFuY2VDb25maWcgfCB1bmRlZmluZWQgPSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPyBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYXV0b0luc3RhbmNlQ29uZmlnIDogdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAvKiBDaGVjayBpZiBhdXRvIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24gaXMgbm90IHByb3ZpZGVkICovXHJcbiAgICAgICAgaWYgKCFhdXRvSW5zdGFuY2VDb25maWcpIHtcclxuICAgICAgICAgICAgLyogUmV0dXJuIHRoZSBleGlzdGluZyBjbGFzcyBpbnN0YW5jZSBpZiBpdCdzIHByb3ZpZGVkIGFuZCBub3QgYSBmdW5jdGlvbiwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSAqL1xyXG4gICAgICAgICAgICByZXR1cm4gY2xhc3NJbnN0YW5jZSAmJiB0eXBlb2YgY2xhc3NJbnN0YW5jZSAhPSBcImZ1bmN0aW9uXCIgPyBjbGFzc0luc3RhbmNlIDogZ2V0SW5zdGFuY2UobW9kZWwsIFtdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIElmIGF1dG8gaW5zdGFuY2UgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZCAqL1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvKiBFbnN1cmUgY2xhc3NJbnN0YW5jZSBpcyBhIG5ldyBpbnN0YW5jZSBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCAqL1xyXG4gICAgICAgICAgICBjbGFzc0luc3RhbmNlID0gY2xhc3NJbnN0YW5jZSAmJiB0eXBlb2YgY2xhc3NJbnN0YW5jZSAhPSBcImZ1bmN0aW9uXCIgPyBjbGFzc0luc3RhbmNlIDogZ2V0SW5zdGFuY2UobW9kZWwsIGF1dG9JbnN0YW5jZUNvbmZpZy5hcmd1bWVudHMgfHwgW10pO1xyXG5cclxuICAgICAgICAgICAgLyogSGFuZGxlIG9iamVjdFByb3BJbnN0YW5jZUNvbmZpZyAqL1xyXG4gICAgICAgICAgICBpZiAoYXV0b0luc3RhbmNlQ29uZmlnLm9iamVjdFByb3BJbnN0YW5jZUNvbmZpZyAmJiBhdXRvSW5zdGFuY2VDb25maWcub2JqZWN0UHJvcEluc3RhbmNlQ29uZmlnLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGF1dG9JbnN0YW5jZUNvbmZpZy5vYmplY3RQcm9wSW5zdGFuY2VDb25maWcuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvKiBGaW5kIHRoZSBvYmplY3QgcHJvcGVydHkgaW4gdGhlIGluc3RhbmNlIGNvbnRhaW5lciAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RQcm9wZXJ0eSA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXM/LmZpbHRlcihwcm9wZXJ0eSA9PiBwcm9wZXJ0eS5uYW1lID09IHQucHJvcGVydHlOYW1lICYmIHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBPQkpFQ1RfUFJPUEVSVFkpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmplY3RQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGNsYXNzSW5zdGFuY2VbdC5wcm9wZXJ0eU5hbWVdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlYXRlIGFuIGluc3RhbmNlIGZvciB0aGUgb2JqZWN0IHByb3BlcnR5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzSW5zdGFuY2VbdC5wcm9wZXJ0eU5hbWVdID0gZ2V0SW5zdGFuY2Uob2JqZWN0UHJvcGVydHkuZW50aXR5LCB0LmFyZ3VtZW50cyB8fCBbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIG9iamVjdCB2YWx1ZSAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPYmplY3RWYWx1ZShkYXRhLCBjbGFzc0luc3RhbmNlW3QucHJvcGVydHlOYW1lXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyogSGFuZGxlIGFycmF5UHJvcEluc3RhbmNlQ29uZmlnICovXHJcbiAgICAgICAgICAgIGlmIChhdXRvSW5zdGFuY2VDb25maWcuYXJyYXlQcm9wSW5zdGFuY2VDb25maWcgJiYgYXV0b0luc3RhbmNlQ29uZmlnLmFycmF5UHJvcEluc3RhbmNlQ29uZmlnLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGF1dG9JbnN0YW5jZUNvbmZpZy5hcnJheVByb3BJbnN0YW5jZUNvbmZpZy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgdGhlIGFycmF5IHByb3BlcnR5IGluIHRoZSBpbnN0YW5jZSBjb250YWluZXIgKi9cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0aWVzPy5maWx0ZXIocHJvcGVydHkgPT4gcHJvcGVydHkubmFtZSA9PSB0LnByb3BlcnR5TmFtZSAmJiBwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT0gQVJSQVlfUFJPUEVSVFkpWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGNsYXNzSW5zdGFuY2VbdC5wcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0luc3RhbmNlW3QucHJvcGVydHlOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHQucm93SXRlbXM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3JlYXRlIGFuIGluc3RhbmNlIGZvciBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBnZXRJbnN0YW5jZShwcm9wZXJ0eS5lbnRpdHksIHQuYXJndW1lbnRzIHx8IFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGFbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIG9iamVjdCB2YWx1ZSBmb3IgZWFjaCBpdGVtICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPYmplY3RWYWx1ZShkYXRhW2ldLCBpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbnN0YW5jZVt0LnByb3BlcnR5TmFtZV0ucHVzaChpbnN0YW5jZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLyogUmV0dXJuIHRoZSB1cGRhdGVkIGNsYXNzIGluc3RhbmNlICovXHJcbiAgICAgICAgICAgIHJldHVybiBjbGFzc0luc3RhbmNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIGNsYXNzIGluc3RhbmNlIG9iamVjdCB3aXRoIHZhbHVlcyBmcm9tIHRoZSBlbnRpdHkgb2JqZWN0IGJhc2VkIG9uIHRoZSBpbnN0YW5jZSBjb250YWluZXIgcHJvcGVydGllcy5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCBvciBjbGFzcyBmb3Igd2hpY2ggdGhlIGluc3RhbmNlIGNvbnRhaW5lciBpcyByZXRyaWV2ZWQuXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5T2JqZWN0IFRoZSBlbnRpdHkgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB1cGRhdGUuXHJcbiAgICAgKiBAcGFyYW0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZm9ybSBidWlsZGVyLlxyXG4gICAgICogQHJldHVybnMgVGhlIHVwZGF0ZWQgY2xhc3MgaW5zdGFuY2Ugb2JqZWN0LlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlT2JqZWN0KG1vZGVsOiBhbnksIGVudGl0eU9iamVjdDogYW55LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IGFueSB7XHJcbiAgICAgICAgLyogR2V0IHRoZSBpbnN0YW5jZSBjb250YWluZXIgdXNpbmcgdGhlIHByb3ZpZGVkIG1vZGVsICovXHJcbiAgICAgICAgbGV0IGluc3RhbmNlQ29udGFpbmVyID0gaW5zdGFuY2VQcm92aWRlcihtb2RlbCk7XHJcblxyXG4gICAgICAgIC8qIEdldCBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgKi9cclxuICAgICAgICBsZXQgY2xhc3NJbnN0YW5jZSA9IGdldEluc3RhbmNlKG1vZGVsLCBbXSk7XHJcblxyXG4gICAgICAgIC8qIENoZWNrIGlmIGluc3RhbmNlIGNvbnRhaW5lciBleGlzdHMgKi9cclxuICAgICAgICBpZiAoaW5zdGFuY2VDb250YWluZXIpIHtcclxuICAgICAgICAgICAgLyogSXRlcmF0ZSB0aHJvdWdoIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBpbnN0YW5jZSBjb250YWluZXIgKi9cclxuICAgICAgICAgICAgaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcz8uZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIC8qIERldGVybWluZSB0aGUgZW50aXR5IHR5cGUgYmFzZWQgb24gcHJvcGVydHkgdHlwZSBhbmQgY29uZmlndXJhdGlvbiAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IGVudGl0eSA9ICgodC5wcm9wZXJ0eVR5cGUgPT0gT0JKRUNUX1BST1BFUlRZIHx8IHQucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZKSAmJiB0LmVudGl0eSkgPyB0LmVudGl0eSA6IChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllcykgPyBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzW3QubmFtZV0gOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVudGl0eSAmJiB0LmVudGl0eVByb3ZpZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5ID0gdC5lbnRpdHlQcm92aWRlci5jYWxsKGVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLyogU3dpdGNoIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSB0eXBlICovXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHQucHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHRoZSB2YWx1ZSBmb3Igc2luZ2xlIHByb3BlcnR5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzSW5zdGFuY2VbdC5uYW1lXSA9IHRoaXMuZ2V0VmFsdWUoZW50aXR5T2JqZWN0LCB0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBPQkpFQ1RfUFJPUEVSVFk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdldCB0aGUgdmFsdWUgZm9yIG9iamVjdCBwcm9wZXJ0eSAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKGVudGl0eU9iamVjdCwgdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWN1cnNpdmVseSB1cGRhdGUgdGhlIG9iamVjdCBwcm9wZXJ0eSAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbnN0YW5jZVt0Lm5hbWVdID0gdGhpcy51cGRhdGVPYmplY3QoZW50aXR5LCBvYmplY3RWYWx1ZSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBUlJBWV9QUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSB2YWx1ZSBmb3IgYXJyYXkgcHJvcGVydHkgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFycmF5T2JqZWN0VmFsdWUgPSB0aGlzLmdldFZhbHVlKGVudGl0eU9iamVjdCwgdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5T2JqZWN0VmFsdWUgJiYgQXJyYXkuaXNBcnJheShhcnJheU9iamVjdFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbnN0YW5jZVt0Lm5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgYXJyYXlPYmplY3RWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbmNlT2JqZWN0ID0gdGhpcy51cGRhdGVPYmplY3QoZW50aXR5LCByb3csIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbnN0YW5jZVt0Lm5hbWVdLnB1c2goaW5zdGFuY2VPYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFJldHVybiB0aGUgdXBkYXRlZCBjbGFzcyBpbnN0YW5jZSBvYmplY3QgKi9cclxuICAgICAgICByZXR1cm4gY2xhc3NJbnN0YW5jZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVzIGFuIGluc3RhbmNlIGJhc2VkIG9uIHRoZSBmdW5jdGlvbiBhbmQgZW50aXR5IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBpbnN0YW5jZUZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gcHJvdmlkZSBhbiBpbnN0YW5jZSBmcm9tLlxyXG4gICAgICogQHBhcmFtIGVudGl0eU9iamVjdCAtIFRoZSBlbnRpdHkgb2JqZWN0IHRvIHVzZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBwcm92aWRlZCBpbnN0YW5jZSBjb250YWluZXIuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBpbnN0YWNlUHJvdmlkZXIoaW5zdGFuY2VGdW5jOiBhbnksIGVudGl0eU9iamVjdDogYW55KTogSW5zdGFuY2VDb250YWluZXIge1xyXG4gICAgICAgIHJldHVybiBpbnN0YW5jZVByb3ZpZGVyKGluc3RhbmNlRnVuYywgZW50aXR5T2JqZWN0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gLSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZ2V0IHRoZSBkZWZhdWx0IGZvci5cclxuICAgICAqIEBwYXJhbSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZvcm0gYnVpbGRlci5cclxuICAgICAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCB2YWx1ZTogYW55LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmXHJcbiAgICAgICAgICAgIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5wcm9wc0NvbmZpZyAmJlxyXG4gICAgICAgICAgICBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24ucHJvcHNDb25maWdbcHJvcGVydHlJbmZvLm5hbWVdICYmXHJcbiAgICAgICAgICAgIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5wcm9wc0NvbmZpZ1twcm9wZXJ0eUluZm8ubmFtZV0uZGVmYXVsdFZhbHVlICYmXHJcbiAgICAgICAgICAgICFSZWdleFZhbGlkYXRvci5pc05vdEJsYW5rKHZhbHVlKSkgPyBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24ucHJvcHNDb25maWdbcHJvcGVydHlJbmZvLm5hbWVdLmRlZmF1bHRWYWx1ZSA6XHJcbiAgICAgICAgICAgIChwcm9wZXJ0eUluZm8uZGVmYXVsdFZhbHVlICE9IHVuZGVmaW5lZCAmJiAhUmVnZXhWYWxpZGF0b3IuaXNOb3RCbGFuayh2YWx1ZSkpID8gcHJvcGVydHlJbmZvLmRlZmF1bHRWYWx1ZSA6IHZhbHVlXHJcblxyXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYW5pdGl6ZXMgdGhlIHByb3ZpZGVkIHZhbHVlIGJhc2VkIG9uIHRoZSBpbnN0YW5jZSBjb250YWluZXIgYW5kIHByb3BlcnR5IG5hbWUuXHJcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VDb250YWluZXIgLSBUaGUgY29udGFpbmVyIGZvciB0aGUgaW5zdGFuY2UuXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNhbml0aXplLlxyXG4gICAgICogQHBhcmFtIGVudGl0eU9iamVjdCAtIFRoZSBlbnRpdHkgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIGJhc2VPYmplY3QgLSBUaGUgYmFzZSBvYmplY3QuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgc2FuaXRpemVkIHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgc2FuaXRpemVWYWx1ZShpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIsIHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBlbnRpdHlPYmplY3Q6IGFueSwgYmFzZU9iamVjdDogYW55KSB7XHJcbiAgICAgICAgLyogSWYgc2FuaXRpemVycyBhcmUgZGVmaW5lZCBmb3IgdGhlIHByb3BlcnR5IGFuZCB0aGUgcHJvcGVydHkgZXhpc3RzIGluIHRoZSBpbnN0YW5jZUNvbnRhaW5lciAqL1xyXG4gICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lci5zYW5pdGl6ZXJzICYmIGluc3RhbmNlQ29udGFpbmVyLnNhbml0aXplcnNbcHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICAvKiBJdGVyYXRlIG92ZXIgZWFjaCBzYW5pdGl6ZXIgZGVmaW5lZCBmb3IgdGhlIHByb3BlcnR5ICovXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNhbml0aXplciBvZiBpbnN0YW5jZUNvbnRhaW5lci5zYW5pdGl6ZXJzW3Byb3BlcnR5TmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIC8qIEFwcGx5IHRoZSBzYW5pdGl6ZXIgdG8gdGhlIHZhbHVlICovXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFNBTklUSVpFUlNbc2FuaXRpemVyLm5hbWVdKHZhbHVlLCBzYW5pdGl6ZXIuY29uZmlnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogSWYgdGhlIHByb3BlcnR5IGV4aXN0cyBpbiB0aGUgZW50aXR5T2JqZWN0IGFuZCBpdHMgdmFsdWUgaGFzIGNoYW5nZWQgKi9cclxuICAgICAgICBpZiAoZW50aXR5T2JqZWN0W3Byb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCAmJiBlbnRpdHlPYmplY3RbcHJvcGVydHlOYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgLyogVXBkYXRlIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpbiB0aGUgZW50aXR5T2JqZWN0ICovXHJcbiAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBJZiB0aGUgcHJvcGVydHkgZXhpc3RzIGluIHRoZSBiYXNlT2JqZWN0IGFuZCBpdHMgdmFsdWUgaGFzIGNoYW5nZWQgKi9cclxuICAgICAgICBpZiAoYmFzZU9iamVjdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQgJiYgYmFzZU9iamVjdFtwcm9wZXJ0eU5hbWVdICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAvKiBVcGRhdGUgdGhlIHByb3BlcnR5IHZhbHVlIGluIHRoZSBiYXNlT2JqZWN0ICovXHJcbiAgICAgICAgICAgIGJhc2VPYmplY3RbcHJvcGVydHlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogUmV0dXJuIHRoZSBzYW5pdGl6ZWQgb3IgdW5jaGFuZ2VkIHZhbHVlICovXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSBlbnRpdHlPYmplY3QgLSBUaGUgZW50aXR5IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eUluZm8gLSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIC0gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBmb3JtIGJ1aWxkZXIuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFsdWUoZW50aXR5T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcm9wZXJ0eUluZm86IFByb3BlcnR5SW5mbywgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICBsZXQgcHJvcFZhbHVlID0gKHByb3BlcnR5SW5mby5kYXRhUHJvcGVydHlOYW1lKSA/IGVudGl0eU9iamVjdFtwcm9wZXJ0eUluZm8uZGF0YVByb3BlcnR5TmFtZV0gOiBlbnRpdHlPYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRWYWx1ZShwcm9wZXJ0eUluZm8sIHByb3BWYWx1ZSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5T2JqZWN0IC0gVGhlIGVudGl0eSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gY2xhc3NJbnN0YW5jZSAtIFRoZSBjbGFzcyBpbnN0YW5jZSB0byBzZXQgdGhlIHZhbHVlIG9uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldE9iamVjdFZhbHVlKGVudGl0eU9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2xhc3NJbnN0YW5jZTogYW55KSB7XHJcbiAgICAgICAgZm9yICh2YXIgY29sdW1uIGluIGVudGl0eU9iamVjdCkge1xyXG4gICAgICAgICAgICBjbGFzc0luc3RhbmNlW2NvbHVtbl0gPSBlbnRpdHlPYmplY3RbY29sdW1uXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1mb3JtLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvc2VydmljZXMvYmFzZS1mb3JtLWJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDeEI7OztPQUdHO0lBQ08sY0FBYztRQUNwQiwrQkFBK0I7UUFDL0IsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWxCLGdEQUFnRDtRQUNoRCxnQkFBZ0IsQ0FBQyxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFFaEYseUJBQXlCO1FBQ3pCLElBQUksU0FBUyxHQUFHLGFBQWEsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUVwRSw2Q0FBNkM7UUFDN0MsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsZ0NBQWdDLFNBQVMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUVyRix1Q0FBdUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTyxpQkFBaUIsQ0FBQyxLQUFVLEVBQUUsd0JBQWtELEVBQUUsYUFBbUI7UUFDM0csMkRBQTJEO1FBQzNELElBQUksaUJBQWlCLEdBQUcsZ0JBQWdC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LGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEksT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGNBQWMsQ0FBQyxZQUFvQyxFQUFFLGFBQWtCO1FBQzNFLEtBQUssSUFBSSxNQUFNLElBQUksWUFBWSxFQUFFLENBQUM7WUFDOUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVJSQVlfUFJPUEVSVFksIE9CSkVDVF9QUk9QRVJUWSwgUFJPUEVSVFkgfSBmcm9tIFwiLi4vY29uc3RcIjtcclxuaW1wb3J0IHsgZGVmYXVsdENvbnRhaW5lciB9IGZyb20gJy4uL2NvcmUvZGVmYXVsdC1jb250YWluZXInO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1idWlsZGVyLWNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBJbnN0YW5jZUNvbnRhaW5lciB9IGZyb20gXCIuLi9tb2RlbHMvaW5zdGFuY2UtY29udGFpbmVyXCI7XHJcbmltcG9ydCB7IEF1dG9JbnN0YW5jZUNvbmZpZyB9IGZyb20gJy4uL21vZGVscy9pbnRlcmZhY2UvYXV0by1pbnN0YW5jZS1jb25maWcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcIi4uL21vZGVscy9wcm9wZXJ0eS1pbmZvXCI7XHJcbmltcG9ydCB7IGdldEluc3RhbmNlLCBpbnN0YW5jZVByb3ZpZGVyIH0gZnJvbSBcIi4uL3V0aWwvaW5zdGFuY2UtcHJvdmlkZXIuZnVuY3Rpb25cIjtcclxuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuLi91dGlsL3JlZ2V4LXZhbGlkYXRvcic7XHJcbmltcG9ydCB7IFNBTklUSVpFUlMgfSBmcm9tIFwiLi4vdXRpbC9zYW5pdGl6ZXJzXCI7XHJcblxyXG4vKipcclxuICogRGVmaW5pdGlvbiBvZiBCYXNlRm9ybUJ1aWxkZXIgY2xhc3NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBCYXNlRm9ybUJ1aWxkZXIge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlLlxyXG4gICAgICogQHJldHVybnMgVGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjcmVhdGVJbnN0YW5jZSgpIHtcclxuICAgICAgICAvKiBDcmVhdGUgYSBuZXcgZW1wdHkgb2JqZWN0ICovXHJcbiAgICAgICAgbGV0IGluc3RhbmNlID0ge307XHJcblxyXG4gICAgICAgIC8qIEluY3JlbWVudCBtb2RlbCBjb3VudCBpbiBkZWZhdWx0IGNvbnRhaW5lciAqL1xyXG4gICAgICAgIGRlZmF1bHRDb250YWluZXIubW9kZWxJbmNyZW1lbnRDb3VudCA9IGRlZmF1bHRDb250YWluZXIubW9kZWxJbmNyZW1lbnRDb3VudCArIDE7XHJcblxyXG4gICAgICAgIC8qIEdlbmVyYXRlIG1vZGVsIG5hbWUgKi9cclxuICAgICAgICBsZXQgbW9kZWxOYW1lID0gYFJ4V2ViTW9kZWwke2RlZmF1bHRDb250YWluZXIubW9kZWxJbmNyZW1lbnRDb3VudH1gO1xyXG5cclxuICAgICAgICAvKiBEeW5hbWljYWxseSBjcmVhdGUgY29uc3RydWN0b3IgZnVuY3Rpb24gKi9cclxuICAgICAgICBpbnN0YW5jZS5jb25zdHJ1Y3RvciA9IEZ1bmN0aW9uKGBcInVzZSBzdHJpY3RcIjtyZXR1cm4oZnVuY3Rpb24gJHttb2RlbE5hbWV9KCl7IH0pYCkoKTtcclxuXHJcbiAgICAgICAgLyogUmV0dXJuIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlICovXHJcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIG9iamVjdC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG1vZGVsIFRoZSBtb2RlbCBvciBjbGFzcyBmb3Igd2hpY2ggdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuXHJcbiAgICAgKiBAcGFyYW0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZm9ybSBidWlsZGVyLlxyXG4gICAgICogQHBhcmFtIGNsYXNzSW5zdGFuY2UgQW4gb3B0aW9uYWwgZXhpc3RpbmcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxyXG4gICAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNsYXNzT2JqZWN0KG1vZGVsOiBhbnksIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBjbGFzc0luc3RhbmNlPzogYW55KTogYW55IHtcclxuICAgICAgICAvKiBHZXQgdGhlIGluc3RhbmNlIGNvbnRhaW5lciBmcm9tIHRoZSBkZWZhdWx0IGNvbnRhaW5lciAqL1xyXG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lciA9IGRlZmF1bHRDb250YWluZXIuZ2V0KG1vZGVsKTtcclxuXHJcbiAgICAgICAgLyogUmV0cmlldmUgdGhlIGF1dG8gaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBmb3JtIGJ1aWxkZXIgY29uZmlndXJhdGlvbiAqL1xyXG4gICAgICAgIGxldCBhdXRvSW5zdGFuY2VDb25maWc6IEF1dG9JbnN0YW5jZUNvbmZpZyB8IHVuZGVmaW5lZCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hdXRvSW5zdGFuY2VDb25maWcgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIC8qIENoZWNrIGlmIGF1dG8gaW5zdGFuY2UgY29uZmlndXJhdGlvbiBpcyBub3QgcHJvdmlkZWQgKi9cclxuICAgICAgICBpZiAoIWF1dG9JbnN0YW5jZUNvbmZpZykge1xyXG4gICAgICAgICAgICAvKiBSZXR1cm4gdGhlIGV4aXN0aW5nIGNsYXNzIGluc3RhbmNlIGlmIGl0J3MgcHJvdmlkZWQgYW5kIG5vdCBhIGZ1bmN0aW9uLCBvdGhlcndpc2UgY3JlYXRlIGEgbmV3IGluc3RhbmNlICovXHJcbiAgICAgICAgICAgIHJldHVybiBjbGFzc0luc3RhbmNlICYmIHR5cGVvZiBjbGFzc0luc3RhbmNlICE9IFwiZnVuY3Rpb25cIiA/IGNsYXNzSW5zdGFuY2UgOiBnZXRJbnN0YW5jZShtb2RlbCwgW10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogSWYgYXV0byBpbnN0YW5jZSBjb25maWd1cmF0aW9uIGlzIHByb3ZpZGVkICovXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIC8qIEVuc3VyZSBjbGFzc0luc3RhbmNlIGlzIGEgbmV3IGluc3RhbmNlIGlmIG5vdCBhbHJlYWR5IHByb3ZpZGVkICovXHJcbiAgICAgICAgICAgIGNsYXNzSW5zdGFuY2UgPSBjbGFzc0luc3RhbmNlICYmIHR5cGVvZiBjbGFzc0luc3RhbmNlICE9IFwiZnVuY3Rpb25cIiA/IGNsYXNzSW5zdGFuY2UgOiBnZXRJbnN0YW5jZShtb2RlbCwgYXV0b0luc3RhbmNlQ29uZmlnLmFyZ3VtZW50cyB8fCBbXSk7XHJcblxyXG4gICAgICAgICAgICAvKiBIYW5kbGUgb2JqZWN0UHJvcEluc3RhbmNlQ29uZmlnICovXHJcbiAgICAgICAgICAgIGlmIChhdXRvSW5zdGFuY2VDb25maWcub2JqZWN0UHJvcEluc3RhbmNlQ29uZmlnICYmIGF1dG9JbnN0YW5jZUNvbmZpZy5vYmplY3RQcm9wSW5zdGFuY2VDb25maWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYXV0b0luc3RhbmNlQ29uZmlnLm9iamVjdFByb3BJbnN0YW5jZUNvbmZpZy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIEZpbmQgdGhlIG9iamVjdCBwcm9wZXJ0eSBpbiB0aGUgaW5zdGFuY2UgY29udGFpbmVyICovXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9iamVjdFByb3BlcnR5ID0gaW5zdGFuY2VDb250YWluZXIucHJvcGVydGllcz8uZmlsdGVyKHByb3BlcnR5ID0+IHByb3BlcnR5Lm5hbWUgPT0gdC5wcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHkucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdFByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gY2xhc3NJbnN0YW5jZVt0LnByb3BlcnR5TmFtZV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBDcmVhdGUgYW4gaW5zdGFuY2UgZm9yIHRoZSBvYmplY3QgcHJvcGVydHkgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbnN0YW5jZVt0LnByb3BlcnR5TmFtZV0gPSBnZXRJbnN0YW5jZShvYmplY3RQcm9wZXJ0eS5lbnRpdHksIHQuYXJndW1lbnRzIHx8IFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgb2JqZWN0IHZhbHVlICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE9iamVjdFZhbHVlKGRhdGEsIGNsYXNzSW5zdGFuY2VbdC5wcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBIYW5kbGUgYXJyYXlQcm9wSW5zdGFuY2VDb25maWcgKi9cclxuICAgICAgICAgICAgaWYgKGF1dG9JbnN0YW5jZUNvbmZpZy5hcnJheVByb3BJbnN0YW5jZUNvbmZpZyAmJiBhdXRvSW5zdGFuY2VDb25maWcuYXJyYXlQcm9wSW5zdGFuY2VDb25maWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYXV0b0luc3RhbmNlQ29uZmlnLmFycmF5UHJvcEluc3RhbmNlQ29uZmlnLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLyogRmluZCB0aGUgYXJyYXkgcHJvcGVydHkgaW4gdGhlIGluc3RhbmNlIGNvbnRhaW5lciAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXM/LmZpbHRlcihwcm9wZXJ0eSA9PiBwcm9wZXJ0eS5uYW1lID09IHQucHJvcGVydHlOYW1lICYmIHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PSBBUlJBWV9QUk9QRVJUWSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gY2xhc3NJbnN0YW5jZVt0LnByb3BlcnR5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzSW5zdGFuY2VbdC5wcm9wZXJ0eU5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdC5yb3dJdGVtczsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDcmVhdGUgYW4gaW5zdGFuY2UgZm9yIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IGdldEluc3RhbmNlKHByb3BlcnR5LmVudGl0eSwgdC5hcmd1bWVudHMgfHwgW10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YVtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNldCB0aGUgb2JqZWN0IHZhbHVlIGZvciBlYWNoIGl0ZW0gKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE9iamVjdFZhbHVlKGRhdGFbaV0sIGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0luc3RhbmNlW3QucHJvcGVydHlOYW1lXS5wdXNoKGluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBSZXR1cm4gdGhlIHVwZGF0ZWQgY2xhc3MgaW5zdGFuY2UgKi9cclxuICAgICAgICAgICAgcmV0dXJuIGNsYXNzSW5zdGFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlcyB0aGUgY2xhc3MgaW5zdGFuY2Ugb2JqZWN0IHdpdGggdmFsdWVzIGZyb20gdGhlIGVudGl0eSBvYmplY3QgYmFzZWQgb24gdGhlIGluc3RhbmNlIGNvbnRhaW5lciBwcm9wZXJ0aWVzLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbW9kZWwgVGhlIG1vZGVsIG9yIGNsYXNzIGZvciB3aGljaCB0aGUgaW5zdGFuY2UgY29udGFpbmVyIGlzIHJldHJpZXZlZC5cclxuICAgICAqIEBwYXJhbSBlbnRpdHlPYmplY3QgVGhlIGVudGl0eSBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWVzIHRvIHVwZGF0ZS5cclxuICAgICAqIEBwYXJhbSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBmb3JtIGJ1aWxkZXIuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBjbGFzcyBpbnN0YW5jZSBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB1cGRhdGVPYmplY3QobW9kZWw6IGFueSwgZW50aXR5T2JqZWN0OiBhbnksIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogYW55IHtcclxuICAgICAgICAvKiBHZXQgdGhlIGluc3RhbmNlIGNvbnRhaW5lciB1c2luZyB0aGUgcHJvdmlkZWQgbW9kZWwgKi9cclxuICAgICAgICBsZXQgaW5zdGFuY2VDb250YWluZXIgPSBpbnN0YW5jZVByb3ZpZGVyKG1vZGVsKTtcclxuXHJcbiAgICAgICAgLyogR2V0IGEgbmV3IGluc3RhbmNlIG9mIHRoZSBtb2RlbCAqL1xyXG4gICAgICAgIGxldCBjbGFzc0luc3RhbmNlID0gZ2V0SW5zdGFuY2UobW9kZWwsIFtdKTtcclxuXHJcbiAgICAgICAgLyogQ2hlY2sgaWYgaW5zdGFuY2UgY29udGFpbmVyIGV4aXN0cyAqL1xyXG4gICAgICAgIGlmIChpbnN0YW5jZUNvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAvKiBJdGVyYXRlIHRocm91Z2ggdGhlIHByb3BlcnRpZXMgaW4gdGhlIGluc3RhbmNlIGNvbnRhaW5lciAqL1xyXG4gICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0aWVzPy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBlbnRpdHkgdHlwZSBiYXNlZCBvbiBwcm9wZXJ0eSB0eXBlIGFuZCBjb25maWd1cmF0aW9uICovXHJcbiAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gKCh0LnByb3BlcnR5VHlwZSA9PSBPQkpFQ1RfUFJPUEVSVFkgfHwgdC5wcm9wZXJ0eVR5cGUgPT0gQVJSQVlfUFJPUEVSVFkpICYmIHQuZW50aXR5KSA/IHQuZW50aXR5IDogKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uZ2VuZXJpY0VudGl0aWVzKSA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXNbdC5uYW1lXSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmICghZW50aXR5ICYmIHQuZW50aXR5UHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHkgPSB0LmVudGl0eVByb3ZpZGVyLmNhbGwoZW50aXR5T2JqZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKiBTd2l0Y2ggYmFzZWQgb24gdGhlIHByb3BlcnR5IHR5cGUgKi9cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodC5wcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBST1BFUlRZOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIHZhbHVlIGZvciBzaW5nbGUgcHJvcGVydHkgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbnN0YW5jZVt0Lm5hbWVdID0gdGhpcy5nZXRWYWx1ZShlbnRpdHlPYmplY3QsIHQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIE9CSkVDVF9QUk9QRVJUWTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyogR2V0IHRoZSB2YWx1ZSBmb3Igb2JqZWN0IHByb3BlcnR5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZW50aXR5T2JqZWN0LCB0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZWx5IHVwZGF0ZSB0aGUgb2JqZWN0IHByb3BlcnR5ICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0luc3RhbmNlW3QubmFtZV0gPSB0aGlzLnVwZGF0ZU9iamVjdChlbnRpdHksIG9iamVjdFZhbHVlLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEFSUkFZX1BST1BFUlRZOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBHZXQgdGhlIHZhbHVlIGZvciBhcnJheSBwcm9wZXJ0eSAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyYXlPYmplY3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZW50aXR5T2JqZWN0LCB0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlPYmplY3RWYWx1ZSAmJiBBcnJheS5pc0FycmF5KGFycmF5T2JqZWN0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0luc3RhbmNlW3QubmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBhcnJheU9iamVjdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVjdXJzaXZlbHkgdXBkYXRlIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFuY2VPYmplY3QgPSB0aGlzLnVwZGF0ZU9iamVjdChlbnRpdHksIHJvdywgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0luc3RhbmNlW3QubmFtZV0ucHVzaChpbnN0YW5jZU9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogUmV0dXJuIHRoZSB1cGRhdGVkIGNsYXNzIGluc3RhbmNlIG9iamVjdCAqL1xyXG4gICAgICAgIHJldHVybiBjbGFzc0luc3RhbmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvdmlkZXMgYW4gaW5zdGFuY2UgYmFzZWQgb24gdGhlIGZ1bmN0aW9uIGFuZCBlbnRpdHkgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIGluc3RhbmNlRnVuYyAtIFRoZSBmdW5jdGlvbiB0byBwcm92aWRlIGFuIGluc3RhbmNlIGZyb20uXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5T2JqZWN0IC0gVGhlIGVudGl0eSBvYmplY3QgdG8gdXNlLlxyXG4gICAgICogQHJldHVybnMgVGhlIHByb3ZpZGVkIGluc3RhbmNlIGNvbnRhaW5lci5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGluc3RhY2VQcm92aWRlcihpbnN0YW5jZUZ1bmM6IGFueSwgZW50aXR5T2JqZWN0OiBhbnkpOiBJbnN0YW5jZUNvbnRhaW5lciB7XHJcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlUHJvdmlkZXIoaW5zdGFuY2VGdW5jLCBlbnRpdHlPYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5SW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBnZXQgdGhlIGRlZmF1bHQgZm9yLlxyXG4gICAgICogQHBhcmFtIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAtIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgZm9ybSBidWlsZGVyLlxyXG4gICAgICogQHJldHVybnMgVGhlIGRlZmF1bHQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBnZXREZWZhdWx0VmFsdWUocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8sIHZhbHVlOiBhbnksIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gJiZcclxuICAgICAgICAgICAgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLnByb3BzQ29uZmlnICYmXHJcbiAgICAgICAgICAgIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5wcm9wc0NvbmZpZ1twcm9wZXJ0eUluZm8ubmFtZV0gJiZcclxuICAgICAgICAgICAgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLnByb3BzQ29uZmlnW3Byb3BlcnR5SW5mby5uYW1lXS5kZWZhdWx0VmFsdWUgJiZcclxuICAgICAgICAgICAgIVJlZ2V4VmFsaWRhdG9yLmlzTm90QmxhbmsodmFsdWUpKSA/IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5wcm9wc0NvbmZpZ1twcm9wZXJ0eUluZm8ubmFtZV0uZGVmYXVsdFZhbHVlIDpcclxuICAgICAgICAgICAgKHByb3BlcnR5SW5mby5kZWZhdWx0VmFsdWUgIT0gdW5kZWZpbmVkICYmICFSZWdleFZhbGlkYXRvci5pc05vdEJsYW5rKHZhbHVlKSkgPyBwcm9wZXJ0eUluZm8uZGVmYXVsdFZhbHVlIDogdmFsdWVcclxuXHJcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhbml0aXplcyB0aGUgcHJvdmlkZWQgdmFsdWUgYmFzZWQgb24gdGhlIGluc3RhbmNlIGNvbnRhaW5lciBhbmQgcHJvcGVydHkgbmFtZS5cclxuICAgICAqIEBwYXJhbSBpbnN0YW5jZUNvbnRhaW5lciAtIFRoZSBjb250YWluZXIgZm9yIHRoZSBpbnN0YW5jZS5cclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2FuaXRpemUuXHJcbiAgICAgKiBAcGFyYW0gZW50aXR5T2JqZWN0IC0gVGhlIGVudGl0eSBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0gYmFzZU9iamVjdCAtIFRoZSBiYXNlIG9iamVjdC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBzYW5pdGl6ZWQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzYW5pdGl6ZVZhbHVlKGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGVudGl0eU9iamVjdDogYW55LCBiYXNlT2JqZWN0OiBhbnkpIHtcclxuICAgICAgICAvKiBJZiBzYW5pdGl6ZXJzIGFyZSBkZWZpbmVkIGZvciB0aGUgcHJvcGVydHkgYW5kIHRoZSBwcm9wZXJ0eSBleGlzdHMgaW4gdGhlIGluc3RhbmNlQ29udGFpbmVyICovXHJcbiAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyLnNhbml0aXplcnMgJiYgaW5zdGFuY2VDb250YWluZXIuc2FuaXRpemVyc1twcm9wZXJ0eU5hbWVdKSB7XHJcbiAgICAgICAgICAgIC8qIEl0ZXJhdGUgb3ZlciBlYWNoIHNhbml0aXplciBkZWZpbmVkIGZvciB0aGUgcHJvcGVydHkgKi9cclxuICAgICAgICAgICAgZm9yIChsZXQgc2FuaXRpemVyIG9mIGluc3RhbmNlQ29udGFpbmVyLnNhbml0aXplcnNbcHJvcGVydHlOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgLyogQXBwbHkgdGhlIHNhbml0aXplciB0byB0aGUgdmFsdWUgKi9cclxuICAgICAgICAgICAgICAgIHZhbHVlID0gU0FOSVRJWkVSU1tzYW5pdGl6ZXIubmFtZV0odmFsdWUsIHNhbml0aXplci5jb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBJZiB0aGUgcHJvcGVydHkgZXhpc3RzIGluIHRoZSBlbnRpdHlPYmplY3QgYW5kIGl0cyB2YWx1ZSBoYXMgY2hhbmdlZCAqL1xyXG4gICAgICAgIGlmIChlbnRpdHlPYmplY3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkICYmIGVudGl0eU9iamVjdFtwcm9wZXJ0eU5hbWVdICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAvKiBVcGRhdGUgdGhlIHByb3BlcnR5IHZhbHVlIGluIHRoZSBlbnRpdHlPYmplY3QgKi9cclxuICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIElmIHRoZSBwcm9wZXJ0eSBleGlzdHMgaW4gdGhlIGJhc2VPYmplY3QgYW5kIGl0cyB2YWx1ZSBoYXMgY2hhbmdlZCAqL1xyXG4gICAgICAgIGlmIChiYXNlT2JqZWN0W3Byb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCAmJiBiYXNlT2JqZWN0W3Byb3BlcnR5TmFtZV0gIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgcHJvcGVydHkgdmFsdWUgaW4gdGhlIGJhc2VPYmplY3QgKi9cclxuICAgICAgICAgICAgYmFzZU9iamVjdFtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBSZXR1cm4gdGhlIHNhbml0aXplZCBvciB1bmNoYW5nZWQgdmFsdWUgKi9cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5LlxyXG4gICAgICogQHBhcmFtIGVudGl0eU9iamVjdCAtIFRoZSBlbnRpdHkgb2JqZWN0LlxyXG4gICAgICogQHBhcmFtIHByb3BlcnR5SW5mbyAtIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9wZXJ0eS5cclxuICAgICAqIEBwYXJhbSBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gLSBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGZvcm0gYnVpbGRlci5cclxuICAgICAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShlbnRpdHlPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGxldCBwcm9wVmFsdWUgPSAocHJvcGVydHlJbmZvLmRhdGFQcm9wZXJ0eU5hbWUpID8gZW50aXR5T2JqZWN0W3Byb3BlcnR5SW5mby5kYXRhUHJvcGVydHlOYW1lXSA6IGVudGl0eU9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5SW5mbywgcHJvcFZhbHVlLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBlbnRpdHlPYmplY3QgLSBUaGUgZW50aXR5IG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBjbGFzc0luc3RhbmNlIC0gVGhlIGNsYXNzIGluc3RhbmNlIHRvIHNldCB0aGUgdmFsdWUgb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0T2JqZWN0VmFsdWUoZW50aXR5T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjbGFzc0luc3RhbmNlOiBhbnkpIHtcclxuICAgICAgICBmb3IgKHZhciBjb2x1bW4gaW4gZW50aXR5T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGNsYXNzSW5zdGFuY2VbY29sdW1uXSA9IGVudGl0eU9iamVjdFtjb2x1bW5dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -73,4 +73,4 @@ export function isMatched(jsonObject, compareObject) {
73
73
  }
74
74
  return isModified;
75
75
  }
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvc2VydmljZXMvZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxZQUFZLENBQUMsS0FBVTtJQUM1QixPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUM7QUFDM0gsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEtBQVU7SUFDeEIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssaUJBQWlCLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsVUFBa0M7SUFDcEQsSUFBSSxPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQzFCLEtBQUssSUFBSSxVQUFVLElBQUksVUFBVSxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLElBQUksV0FBVyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTtvQkFDdkMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDekIsS0FBSyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQ3BDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUNmLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7eUJBQ3hDOzZCQUVJOzRC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QyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5mdW5jdGlvbiBpc09iamVjdFR5cGUodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuICEodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBEYXRlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoanNvbk9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xyXG4gICAgbGV0IGpPYmplY3Q6IGFueSA9IHt9O1xyXG4gICAgaWYgKGlzT2JqZWN0VHlwZShqc29uT2JqZWN0KSkge1xyXG4gICAgICAgIGZvciAodmFyIGNvbHVtbk5hbWUgaW4ganNvbk9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoKGNvbHVtbk5hbWUgIT0gXCJmb3JtR3JvdXBcIikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGpzb25PYmplY3RbY29sdW1uTmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgak9iamVjdFtjb2x1bW5OYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBqc29uT2JqZWN0W2NvbHVtbk5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChyb3cpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqT2JqZWN0W2NvbHVtbk5hbWVdLnB1c2goY2xvbmUocm93KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgak9iamVjdFtjb2x1bW5OYW1lXS5wdXNoKHJvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBqc29uT2JqZWN0W2NvbHVtbk5hbWVdID09IFwib2JqZWN0XCIgJiYgIShqc29uT2JqZWN0W2NvbHVtbk5hbWVdIGluc3RhbmNlb2YgUmVnRXhwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGpPYmplY3RbY29sdW1uTmFtZV0gPSBjbG9uZShqc29uT2JqZWN0W2NvbHVtbk5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGpPYmplY3RbY29sdW1uTmFtZV0gPSBqc29uT2JqZWN0W2NvbHVtbk5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gak9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4ganNvbk9iamVjdDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlKGZpcnN0T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBzZWNvbmRPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcclxuICAgIGZvciAodmFyIGNvbHVtbk5hbWUgaW4gc2Vjb25kT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2Vjb25kT2JqZWN0W2NvbHVtbk5hbWVdKSkge1xyXG4gICAgICAgICAgICBpZiAoIWZpcnN0T2JqZWN0W2NvbHVtbk5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9iamVjdFtjb2x1bW5OYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByb3cgb2Ygc2Vjb25kT2JqZWN0W2NvbHVtbk5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9iamVjdFtjb2x1bW5OYW1lXS5wdXNoKGNsb25lKHJvdykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RPYmplY3RbY29sdW1uTmFtZV0gPT0gXCJvYmplY3RcIiAmJiAhKGZpcnN0T2JqZWN0W2NvbHVtbk5hbWVdIGluc3RhbmNlb2YgUmVnRXhwKSkge1xyXG4gICAgICAgICAgICBmaXJzdE9iamVjdFtjb2x1bW5OYW1lXSA9IG1lcmdlKGZpcnN0T2JqZWN0W2NvbHVtbk5hbWVdLCBzZWNvbmRPYmplY3RbY29sdW1uTmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZmlyc3RPYmplY3RbY29sdW1uTmFtZV0gPSBzZWNvbmRPYmplY3RbY29sdW1uTmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaXJzdE9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hlZChqc29uT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjb21wYXJlT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaXNNb2RpZmllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgY29sdW1uTmFtZSBpbiBjb21wYXJlT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbk9iamVjdFtjb2x1bW5OYW1lXSkpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uT2JqZWN0W2NvbHVtbk5hbWVdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpc01vZGlmaWVkID0gaXNNYXRjaGVkKGpzb25PYmplY3RbY29sdW1uTmFtZV1baV0sIGNvbXBhcmVPYmplY3RbY29sdW1uTmFtZV1baV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBqc29uT2JqZWN0W2NvbHVtbk5hbWVdID09IFwib2JqZWN0XCIgJiYgIShqc29uT2JqZWN0W2NvbHVtbk5hbWVdIGluc3RhbmNlb2YgUmVnRXhwKSkge1xyXG4gICAgICAgICAgICBpc01vZGlmaWVkID0gaXNNYXRjaGVkKGpzb25PYmplY3RbY29sdW1uTmFtZV0sIGNvbXBhcmVPYmplY3RbY29sdW1uTmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaXNNb2RpZmllZCA9ICEoanNvbk9iamVjdFtjb2x1bW5OYW1lXSA9PSBjb21wYXJlT2JqZWN0W2NvbHVtbk5hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzTW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc01vZGlmaWVkO1xyXG59XHJcbiJdfQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvc2VydmljZXMvZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxZQUFZLENBQUMsS0FBVTtJQUM1QixPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUM7QUFDM0gsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEtBQVU7SUFDeEIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssaUJBQWlCLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsVUFBa0M7SUFDcEQsSUFBSSxPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ3RCLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDM0IsS0FBSyxJQUFJLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN4QyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN6QixLQUFLLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNyQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUNoQixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFH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Q0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7YUFDSSxDQUFDO1lBQ0YsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQUksVUFBVSxFQUFFLENBQUM7WUFDYixNQUFNO1FBQ1YsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmZ1bmN0aW9uIGlzT2JqZWN0VHlwZSh2YWx1ZTogYW55KSB7XHJcbiAgICByZXR1cm4gISh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIERhdGUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShqc29uT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICBsZXQgak9iamVjdDogYW55ID0ge307XHJcbiAgICBpZiAoaXNPYmplY3RUeXBlKGpzb25PYmplY3QpKSB7XHJcbiAgICAgICAgZm9yICh2YXIgY29sdW1uTmFtZSBpbiBqc29uT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICgoY29sdW1uTmFtZSAhPSBcImZvcm1Hcm91cFwiKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbk9iamVjdFtjb2x1bW5OYW1lXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBqT2JqZWN0W2NvbHVtbk5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGpzb25PYmplY3RbY29sdW1uTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHJvdykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpPYmplY3RbY29sdW1uTmFtZV0ucHVzaChjbG9uZShyb3cpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqT2JqZWN0W2NvbHVtbk5hbWVdLnB1c2gocm93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGpzb25PYmplY3RbY29sdW1uTmFtZV0gPT0gXCJvYmplY3RcIiAmJiAhKGpzb25PYmplY3RbY29sdW1uTmFtZV0gaW5zdGFuY2VvZiBSZWdFeHApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgak9iamVjdFtjb2x1bW5OYW1lXSA9IGNsb25lKGpzb25PYmplY3RbY29sdW1uTmFtZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgak9iamVjdFtjb2x1bW5OYW1lXSA9IGpzb25PYmplY3RbY29sdW1uTmFtZV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqT2JqZWN0O1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBqc29uT2JqZWN0O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoZmlyc3RPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHNlY29uZE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xyXG4gICAgZm9yICh2YXIgY29sdW1uTmFtZSBpbiBzZWNvbmRPYmplY3QpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWNvbmRPYmplY3RbY29sdW1uTmFtZV0pKSB7XHJcbiAgICAgICAgICAgIGlmICghZmlyc3RPYmplY3RbY29sdW1uTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0T2JqZWN0W2NvbHVtbk5hbWVdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBzZWNvbmRPYmplY3RbY29sdW1uTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0T2JqZWN0W2NvbHVtbk5hbWVdLnB1c2goY2xvbmUocm93KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaXJzdE9iamVjdFtjb2x1bW5OYW1lXSA9PSBcIm9iamVjdFwiICYmICEoZmlyc3RPYmplY3RbY29sdW1uTmFtZV0gaW5zdGFuY2VvZiBSZWdFeHApKSB7XHJcbiAgICAgICAgICAgIGZpcnN0T2JqZWN0W2NvbHVtbk5hbWVdID0gbWVyZ2UoZmlyc3RPYmplY3RbY29sdW1uTmFtZV0sIHNlY29uZE9iamVjdFtjb2x1bW5OYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmaXJzdE9iamVjdFtjb2x1bW5OYW1lXSA9IHNlY29uZE9iamVjdFtjb2x1bW5OYW1lXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpcnN0T2JqZWN0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGVkKGpzb25PYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNvbXBhcmVPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBib29sZWFuIHtcclxuICAgIGxldCBpc01vZGlmaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBjb2x1bW5OYW1lIGluIGNvbXBhcmVPYmplY3QpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uT2JqZWN0W2NvbHVtbk5hbWVdKSkge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb25PYmplY3RbY29sdW1uTmFtZV0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlzTW9kaWZpZWQgPSBpc01hdGNoZWQoanNvbk9iamVjdFtjb2x1bW5OYW1lXVtpXSwgY29tcGFyZU9iamVjdFtjb2x1bW5OYW1lXVtpXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGpzb25PYmplY3RbY29sdW1uTmFtZV0gPT0gXCJvYmplY3RcIiAmJiAhKGpzb25PYmplY3RbY29sdW1uTmFtZV0gaW5zdGFuY2VvZiBSZWdFeHApKSB7XHJcbiAgICAgICAgICAgIGlzTW9kaWZpZWQgPSBpc01hdGNoZWQoanNvbk9iamVjdFtjb2x1bW5OYW1lXSwgY29tcGFyZU9iamVjdFtjb2x1bW5OYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpc01vZGlmaWVkID0gIShqc29uT2JqZWN0W2NvbHVtbk5hbWVdID09IGNvbXBhcmVPYmplY3RbY29sdW1uTmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNNb2RpZmllZCkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzTW9kaWZpZWQ7XHJcbn1cclxuIl19
@@ -367,4 +367,4 @@ export class RxFormControl extends FormControl {
367
367
  return value !== undefined && value !== null && value !== "" ? value : "";
368
368
  }
369
369
  }
370
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL2Zvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTZELFdBQVcsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxNQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFDOUIsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLE1BQU0sU0FBUyxHQUFXLFdBQVcsQ0FBQztBQUN0QyxNQUFNLFFBQVEsR0FBVyxVQUFVLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBVztJQTJEd0U7SUFBOEM7SUFBaUU7SUExRHpOLFNBQVMsQ0FBVTtJQUNuQixPQUFPLENBQVM7SUFDaEIsYUFBYSxDQUFVO0lBQ3ZCLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFDOUIsZ0JBQWdCLENBQW1CO0lBQ25DLDRCQUE0QixDQUE4QjtJQUMxRCxrQkFBa0IsQ0FBWTtJQUM5QixvQkFBb0IsQ0FBWTtJQUNoQyxtQkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDckMsWUFBWSxDQUE4QjtJQUMxQyxxQkFBcUIsQ0FBOEI7SUFDbkQsVUFBVSxDQUFNO0lBQ2hCLFdBQVcsQ0FBVTtJQUNyQixNQUFNLEdBQVksS0FBSyxDQUFDO0lBQ3hCLFdBQVcsQ0FBZ0I7SUFDM0IsZ0JBQWdCLENBQXFCO0lBRTdDLGFBQWEsR0FBOEIsRUFBRSxDQUFDO0lBQzlDLG9CQUFvQixDQUFzQjtJQUMxQyxPQUFPLENBQVk7SUFDbkIsUUFBUSxDQUFZO0lBRXBCLElBQUksYUFBYTtRQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQzlDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ3RDO2FBQ0ksSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CO1lBQ3pELE9BQU8sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM5QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzthQUNsQztTQUNKO2FBRUksSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDM0QsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUNsQztRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWSxTQUFjLEVBQUUsZUFBNEUsRUFBVSxZQUFvQyxFQUFVLFVBQWtDLEVBQUUsV0FBbUIsRUFBVSxXQUE0QjtRQUN6UCxLQUFLLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFBO1FBRDZFLGlCQUFZLEdBQVosWUFBWSxDQUF3QjtRQUFVLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQStCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUV6UCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxHQUFJLGVBQTBDLENBQUMsVUFBMkIsQ0FBQztRQUMzRixJQUFJLENBQUMsZ0JBQWdCLEdBQUksZUFBMEMsQ0FBQyxlQUFxQyxDQUFDO1FBQzFHLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQWdDLENBQUM7UUFDdEksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN6RSxJQUFJLGNBQWMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLEdBQUcsRUFBRTtnQkFDbEgsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbEYsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ25DO2FBRUo7U0FDSjtJQUNMLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2xDLFlBQVksRUFBRSxJQUFJO1lBQ2xCLEdBQUc7Z0JBQ0MsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUN4QztnQkFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDeEIsQ0FBQztZQUNELEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBVTtRQUMzQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUE7UUFDckIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDZixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFVBQWlCO1FBQ3hDLElBQUksVUFBVTtZQUNWLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3JFLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUFnRDtRQUMxRCxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQTZCLENBQUM7UUFDakQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsWUFBMEQ7UUFDekUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQWtDLENBQUM7UUFDM0QsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVSxFQUFFLE9BTXBCO1FBQ1MsSUFBSSxDQUFDLE1BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ25DLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMvQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSztZQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQzlDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSyxJQUFJLENBQUMsSUFBWSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDNUUsSUFBSSxDQUFDLElBQVksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7U0FDNUM7UUFDSyxJQUFJLENBQUMsTUFBTyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQVEsSUFBSSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksT0FBTyxJQUFJLENBQUMsb0JBQW9CLEtBQUssVUFBVSxFQUFFO1lBQzlFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsb0JBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekUsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFnQyxDQUFDO1lBQzFELGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFHRCxnQkFBZ0IsQ0FBQyxLQUFnQztRQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQStCO1FBQzlDLElBQUksQ0FBQyxNQUFNO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7O1lBRXhCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUViO1FBQ0csSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNoQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQzVCLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBRWpFLENBQUM7SUFFRCxlQUFlLENBQUMsSUFFZjtRQUNHLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbEMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsU0FBUztZQUM5QixJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNqRSxDQUFDO0lBRUQsV0FBVyxDQUFDLElBRVg7UUFDRyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLE1BQU07WUFDM0IsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBRWQ7UUFDRyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDN0IsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBR2I7UUFDRyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU87WUFDNUIsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsOEJBQThCLENBQUMsU0FBbUI7UUFDOUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQzNJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO2dCQUM5RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBWSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFXLEVBQUUsVUFBZSxFQUFFO1FBQ2hDLElBQUksS0FBSyxLQUFLLFNBQVM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7O1lBRTlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxTQUFTO1FBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLE1BQWMsQ0FBQyxLQUFLLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVPLHlCQUF5QjtRQUM3QixJQUFJLE1BQU0sR0FBWSxJQUFJLENBQUM7UUFDM0IsUUFBUSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDdkMsS0FBSywyQkFBMkIsQ0FBQyxRQUFRO2dCQUNyQyxNQUFNLEdBQVMsSUFBSSxDQUFDLE1BQU8sQ0FBQyxTQUFTLENBQUM7Z0JBQ3RDLE1BQU07WUFDVixLQUFLLDJCQUEyQixDQUFDLE9BQU87Z0JBQ3BDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNyQixNQUFNO1lBQ1YsS0FBSywyQkFBMkIsQ0FBQyxTQUFTO2dCQUN0QyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDdEIsTUFBTTtZQUNWLEtBQUssMkJBQTJCLENBQUMsZ0JBQWdCO2dCQUM3QyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNyQyxNQUFNO1lBQ1YsS0FBSywyQkFBMkIsQ0FBQyxlQUFlO2dCQUM1QyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBVSxJQUFJLENBQUMsTUFBTyxDQUFDLFNBQVMsQ0FBQztnQkFDckQsTUFBTTtZQUNWLEtBQUssMkJBQTJCLENBQUMsaUJBQWlCO2dCQUM5QyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBVSxJQUFJLENBQUMsTUFBTyxDQUFDLFNBQVMsQ0FBQztnQkFDdEQsTUFBTTtZQUNWO2dCQUNJLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDckI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxTQUFvQixFQUFFLE9BQWU7UUFDOUQsSUFBSyxTQUFpQixDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ3BDLElBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFFLFNBQWlCLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0YsSUFBSSxpQkFBaUIsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGtCQUFrQixHQUFJLGlCQUFrQixDQUFDLHVCQUF3QixDQUFDLEtBQUssQ0FBQyxzQkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDcEgsSUFBSSxDQUFDLFlBQVksR0FBRyxpQkFBa0IsQ0FBQyx1QkFBd0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxDQUFDLG9CQUFvQixHQUFJLGlCQUFrQixDQUFDLHVCQUF3QixDQUFDLFlBQVksQ0FBQyxzQkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDOUgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLGlCQUFrQixDQUFDLHVCQUF3QixDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNHLElBQUksSUFBSSxDQUFDLG9CQUFvQjtvQkFDekIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQzthQUN4QztTQUVKO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVU7UUFDaEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLEtBQUssSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMvRDtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLHVCQUF1QixDQUFDLGFBQXFCLEVBQUUsT0FBZTtRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM3RSxJQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxJQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUNaLElBQUksQ0FBQyxNQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNoSCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTs0QkFDckIsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFHLElBQUksQ0FBQyxNQUFjLENBQUMsQ0FBQyxDQUFDLElBQUssSUFBSSxDQUFDLE1BQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsTUFBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUM3SSxJQUFJLENBQUMsTUFBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO3lCQUNsSDtxQkFDSjt5QkFBTTt3QkFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtxQkFDN0Q7b0JBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWMsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUMsQ0FBQTthQUNMO2lCQUFNO2dCQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dCQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE1BQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFBO29CQUM5RCxPQUFRLElBQUksQ0FBQyxNQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM3RDthQUNKO1lBQ0QsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDcEQsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQzVHO2FBQU07WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXhDLENBQUM7SUFFTyxXQUFXO1FBQ2YsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4SCxDQUFDO0lBRU8sZUFBZSxDQUFDLFdBQXNDLEVBQUUsT0FBZTtRQUMzRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSyxXQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hFLE9BQVEsV0FBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU87SUFDWCxDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxhQUFxQjtRQUM3RCxJQUFLLElBQVksQ0FBQyxRQUFRLENBQUM7WUFDdkIsS0FBSyxJQUFJLFdBQVcsSUFBSyxJQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvTCxJQUFJLE9BQU8sRUFBRTtvQkFDVCxJQUFJLGFBQWEsSUFBSSxVQUFVLEVBQUU7d0JBQzdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ2hGLElBQUksTUFBTTs0QkFDTixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7OzRCQUVqQixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7cUJBQ3hCO3lCQUFNLElBQUksYUFBYSxJQUFJLFdBQVc7d0JBQ25DLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQzt5QkFDbkIsSUFBSSxhQUFhLElBQUksZUFBZTt3QkFDckMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUUvQjthQUNKO0lBQ1QsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQW9CLEVBQUUsT0FBd0I7UUFDcEUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUNqQixPQUFPLENBQUMsTUFBYyxDQUFDLGNBQWMsQ0FBQyxFQUN2QyxPQUFPLEVBQ1AsZUFBZSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUNoRCxPQUFPLENBQUMsTUFBYyxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFVO1FBQ3ZCLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQWJzdHJhY3RDb250cm9sT3B0aW9ucywgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ09OVFJPTFNfRVJST1IsIE1FU1NBR0UsIFZBTFVFX0NIQU5HRURfU1lOQyB9IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHsgTU9ERUxfSU5TVEFOQ0UsIFBBVENILCBSWENPREUgfSBmcm9tIFwiLi4vY29uc3QvYXBwLmNvbnN0XCI7XHJcbmltcG9ydCB7IERFQ09SQVRPUlMgfSBmcm9tIFwiLi4vY29uc3QvZGVjb3JhdG9ycy5jb25zdFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0Q29udGFpbmVyIH0gZnJvbSBcIi4uL2NvcmUvZGVmYXVsdC1jb250YWluZXJcIjtcclxuaW1wb3J0IHsgRGlzYWJsZVByb3ZpZGVyIH0gZnJvbSAnLi4vZG9tYWluL2Rpc2FibGUtcHJvdmlkZXInO1xyXG5pbXBvcnQgeyBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kgfSBmcm9tIFwiLi4vZW51bXNcIjtcclxuaW1wb3J0IHsgRGF0YVNhbml0aXplciB9IGZyb20gXCIuLi9tb2RlbHMvZGF0YS1zYW5pdGl6ZXJcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb25VdGlsIH0gZnJvbSAnLi4vdXRpbC9hcHAtdXRpbCc7XHJcbmltcG9ydCB7IE9iamVjdE1ha2VyIH0gZnJvbSBcIi4uL3V0aWwvb2JqZWN0LW1ha2VyXCI7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybUNvbmZpZyB9IGZyb20gXCIuLi91dGlsL3JlYWN0aXZlLWZvcm0tY29uZmlnXCI7XHJcbmltcG9ydCB7IFNBTklUSVpFUlMgfSBmcm9tIFwiLi4vdXRpbC9zYW5pdGl6ZXJzXCI7XHJcblxyXG5jb25zdCBESVJUWTogc3RyaW5nID0gXCJkaXJ0eVwiO1xyXG5jb25zdCBUT1VDSEVEOiBzdHJpbmcgPSBcInRvdWNoZWRcIjtcclxuY29uc3QgVU5UT1VDSEVEOiBzdHJpbmcgPSBcInVudG91Y2hlZFwiO1xyXG5jb25zdCBQUklTVElORTogc3RyaW5nID0gXCJwcmlzdGluZVwiO1xyXG5jb25zdCBQRU5ESU5HOiBzdHJpbmcgPSBcInBlbmRpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSeEZvcm1Db250cm9sIGV4dGVuZHMgRm9ybUNvbnRyb2wge1xyXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGtleU5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgX2Vycm9yTWVzc2FnZT86IHN0cmluZztcclxuICAgIHByaXZhdGUgX2Vycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBwcml2YXRlIF9kaXNhYmxlUHJvdmlkZXI/OiBEaXNhYmxlUHJvdmlkZXI7XHJcbiAgICBwcml2YXRlIF9lcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3k6IEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneTtcclxuICAgIHByaXZhdGUgX21lc3NhZ2VFeHByZXNzaW9uPzogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIF9jbGFzc05hbWVFeHByZXNzaW9uPzogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIF9pc1Bhc3NlZEV4cHJlc3Npb246IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2NvbnRyb2xQcm9wPzogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XHJcbiAgICBwcml2YXRlIF9jbGFzc05hbWVDb250cm9sUHJvcD86IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9O1xyXG4gICAgcHJpdmF0ZSBfYmFzZVZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIF9pc01vZGlmaWVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XHJcbiAgICBwcml2YXRlIF9hc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXTtcclxuXHJcbiAgICBiYWNrRW5kRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICB1cGRhdGVPbkVsZW1lbnRDbGFzcz86IGJvb2xlYW4gfCBGdW5jdGlvbjtcclxuICAgIHByZUhvb2s/OiBGdW5jdGlvbjtcclxuICAgIHBvc3RIb29rPzogRnVuY3Rpb247XHJcblxyXG4gICAgZ2V0IGVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yTWVzc2FnZXMubGVuZ3RoID09IDAgJiYgdGhpcy5lcnJvcnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uICYmICF0aGlzLl9pc1Bhc3NlZEV4cHJlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICBpZiAoIXRoaXMuZXJyb3JzICYmIHRoaXMuX2Vycm9yTWVzc2FnZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLl9sYW5ndWFnZSAhPSB0aGlzLmdldExhbmd1YWdlKCkpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JNZXNzYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZXJyb3JNZXNzYWdlID09IHVuZGVmaW5lZCAmJiB0aGlzLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiAmJiAhdGhpcy5faXNQYXNzZWRFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZXJyb3JzICYmIHRoaXMuX2Vycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fbGFuZ3VhZ2UgIT0gdGhpcy5nZXRMYW5ndWFnZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9lcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoZm9ybVN0YXRlOiBhbnksIHZhbGlkYXRvck9yT3B0czogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGwsIHByaXZhdGUgZW50aXR5T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcml2YXRlIGJhc2VPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHByaXZhdGUgX3Nhbml0aXplcnM6IERhdGFTYW5pdGl6ZXJbXSkge1xyXG4gICAgICAgIHN1cGVyKGZvcm1TdGF0ZSwgdmFsaWRhdG9yT3JPcHRzKVxyXG4gICAgICAgIHRoaXMuZGVmaW5lRXJyb3JzUHJvcGVydHkoKTtcclxuICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSBmb3JtU3RhdGUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLmdldEZvcm1TdGF0ZShmb3JtU3RhdGUpO1xyXG4gICAgICAgIHRoaXMuX2lzTW9kaWZpZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmtleU5hbWUgPSBjb250cm9sTmFtZTtcclxuICAgICAgICB0aGlzLl92YWxpZGF0b3JzID0gKHZhbGlkYXRvck9yT3B0cyBhcyBBYnN0cmFjdENvbnRyb2xPcHRpb25zKS52YWxpZGF0b3JzIGFzIFZhbGlkYXRvckZuW107XHJcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JzID0gKHZhbGlkYXRvck9yT3B0cyBhcyBBYnN0cmFjdENvbnRyb2xPcHRpb25zKS5hc3luY1ZhbGlkYXRvcnMgYXMgQXN5bmNWYWxpZGF0b3JGbltdO1xyXG4gICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneSA9IFJlYWN0aXZlRm9ybUNvbmZpZy5nZXQoXCJyZWFjdGl2ZUZvcm0uZXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5XCIpIGFzIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneTtcclxuICAgICAgICBpZiAodGhpcy5fc2FuaXRpemVycykge1xyXG4gICAgICAgICAgICB2YXIgZmxvYXRTYW5pdGl6ZXIgPSB0aGlzLl9zYW5pdGl6ZXJzLmZpbHRlcih0ID0+IHQubmFtZSA9PSBcInRvRmxvYXRcIilbMF1cclxuICAgICAgICAgICAgaWYgKGZsb2F0U2FuaXRpemVyICYmIHRoaXMuX2Jhc2VWYWx1ZSAmJiBSZWFjdGl2ZUZvcm1Db25maWcubnVtYmVyICYmIFJlYWN0aXZlRm9ybUNvbmZpZy5udW1iZXIuZGVjaW1hbFN5bWJvbCA9PSBcIixcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJhc2VWYWx1ZSA9IFN0cmluZyh0aGlzLl9iYXNlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pbmRleE9mKCcuJykgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSBiYXNlVmFsdWUucmVwbGFjZShcIi5cIiwgUmVhY3RpdmVGb3JtQ29uZmlnLm51bWJlci5kZWNpbWFsU3ltYm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBzdXBlci5zZXRWYWx1ZSh0aGlzLl9iYXNlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlZmluZUVycm9yc1Byb3BlcnR5KCkge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImVycm9yc1wiLCB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhbmd1YWdlICYmIHRoaXMuX2xhbmd1YWdlICE9IHRoaXMuZ2V0TGFuZ3VhZ2UoKSAmJiB0aGlzLnZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbXCJlcnJvcnNcIl0gPSB0aGlzLnZhbGlkYXRvcih0aGlzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9ycztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0KHZhbHVlKSB7IHRoaXMuX2Vycm9ycyA9IHZhbHVlOyB9LFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGb3JtU3RhdGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBiYXNlVmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBiYXNlVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCh0ID0+IGJhc2VWYWx1ZS5wdXNoKHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNb2RpZmllZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNNb2RpZmllZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbGlkYXRvclNvdXJjZSh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBc3luY1ZhbGlkYXRvcnMoKTogQXN5bmNWYWxpZGF0b3JGbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWxpZGF0b3JTb3VyY2UodGhpcy5fYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhbGlkYXRvclNvdXJjZSh2YWxpZGF0b3JzOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3JzKVxyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSA/IFsuLi52YWxpZGF0b3JzXSA6IFt2YWxpZGF0b3JzXVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcjogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSBuZXdWYWxpZGF0b3IgYXMgVmFsaWRhdG9yRm5bXTtcclxuICAgICAgICBzdXBlci5zZXRWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcjogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRvcnMgPSBuZXdWYWxpZGF0b3IgYXMgQXN5bmNWYWxpZGF0b3JGbltdO1xyXG4gICAgICAgIHN1cGVyLnNldEFzeW5jVmFsaWRhdG9ycyhuZXdWYWxpZGF0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgZGlydHk/OiBib29sZWFuO1xyXG4gICAgICAgIHVwZGF0ZUNoYW5nZWQ/OiBib29sZWFuO1xyXG4gICAgICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcclxuICAgICAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xyXG4gICAgICAgIGlzVGhyb3VnaER5bmFtaWM/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgICg8YW55PnRoaXMucGFyZW50KS5jaGFuZ2luZyA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBhcnNlZFZhbHVlID0gdGhpcy5nZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZSlcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRpcnR5KVxyXG4gICAgICAgICAgICB0aGlzLmJhc2VPYmplY3RbdGhpcy5rZXlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZW50aXR5T2JqZWN0W3RoaXMua2V5TmFtZV0gPSBwYXJzZWRWYWx1ZTtcclxuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIHRoaXMuYmluZEVycm9yKCk7XHJcbiAgICAgICAgdGhpcy5iaW5kQ2xhc3NOYW1lKCk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRXhwcmVzc2lvbnMoKTtcclxuICAgICAgICB0aGlzLmNhbGxQYXRjaCgpO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmICFvcHRpb25zLnVwZGF0ZUNoYW5nZWQgJiYgKHRoaXMucm9vdCBhcyBhbnkpW1ZBTFVFX0NIQU5HRURfU1lOQ10pIHtcclxuICAgICAgICAgICAgKHRoaXMucm9vdCBhcyBhbnkpW1ZBTFVFX0NIQU5HRURfU1lOQ10oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKDxhbnk+dGhpcy5wYXJlbnQpLmNoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udHJvbFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNhbml0aXplZFZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmRFcnJvcigpIHtcclxuICAgICAgICBpZiAodGhpcy5fbWVzc2FnZUV4cHJlc3Npb24pXHJcbiAgICAgICAgICAgIHRoaXMuX2lzUGFzc2VkRXhwcmVzc2lvbiA9IHRoaXMuZXhlY3V0ZUV4cHJlc3Npb24odGhpcy5fbWVzc2FnZUV4cHJlc3Npb24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICB2YXIgdDogYW55ID0gdGhpcztcclxuICAgICAgICB0W1wiZXJyb3JzXCJdID0gdGhpcy5lcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZENsYXNzTmFtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy51cGRhdGVPbkVsZW1lbnRDbGFzcyAmJiB0eXBlb2YgdGhpcy51cGRhdGVPbkVsZW1lbnRDbGFzcyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLmV4ZWN1dGVFeHByZXNzaW9uKHRoaXMuX2NsYXNzTmFtZUV4cHJlc3Npb24hLCB0aGlzKTtcclxuICAgICAgICAgICAgbGV0IHVwZGF0ZUVsZW1lbnQgPSB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzIGFzIEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICB1cGRhdGVFbGVtZW50KGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRCYWNrRW5kRXJyb3JzKGVycm9yOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZXJyb3IpLmZvckVhY2goa2V5ID0+IHRoaXMuYmFja0VuZEVycm9yc1trZXldID0gZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQmFja0VuZEVycm9ycyhlcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICAgICAgaWYgKCFlcnJvcnMpXHJcbiAgICAgICAgICAgIHRoaXMuYmFja0VuZEVycm9ycyA9IHt9O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKHQgPT4gZGVsZXRlIHRoaXMuYmFja0VuZEVycm9yc1t0XSk7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1RvdWNoZWQob3B0cz86IHtcclxuICAgICAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudG91Y2hlZDtcclxuICAgICAgICBzdXBlci5tYXJrQXNUb3VjaGVkKG9wdHMpO1xyXG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gdGhpcy50b3VjaGVkKVxyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbVE9VQ0hFRCwgVU5UT1VDSEVEXSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSB0aGlzLnVudG91Y2hlZDtcclxuICAgICAgICBzdXBlci5tYXJrQXNVbnRvdWNoZWQob3B0cyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSB0aGlzLnVudG91Y2hlZClcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1VOVE9VQ0hFRCwgVE9VQ0hFRF0pXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzRGlydHkob3B0cz86IHtcclxuICAgICAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuX2RpcnR5O1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc0RpcnR5KG9wdHMpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMuX2RpcnR5KVxyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbRElSVFldKVxyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSB0aGlzLnByaXN0aW5lO1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xyXG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gdGhpcy5wcmlzdGluZSlcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1BSSVNUSU5FXSlcclxuICAgIH1cclxuXHJcbiAgICBtYXJrQXNQZW5kaW5nKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucGVuZGluZztcclxuICAgICAgICBzdXBlci5tYXJrQXNEaXJ0eShvcHRzKTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMucGVuZGluZylcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1BFTkRJTkddKVxyXG4gICAgfVxyXG5cclxuICAgIHJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihwcm9wTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcHJvcE5hbWVzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5fY29udHJvbFByb3AgJiYgdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5fY29udHJvbFByb3BbbmFtZV0pIHx8ICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5jaGVja0Vycm9yTWVzc2FnZVN0cmF0ZWd5KCkpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXJyb3IoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wICYmIHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wW25hbWVdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kQ2xhc3NOYW1lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLmdldE1lc3NhZ2VFeHByZXNzaW9uKDxGb3JtR3JvdXA+dGhpcy5wYXJlbnQsIHRoaXMua2V5TmFtZSk7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmRpc2FibGVkLCBcIl9yZWZEaXNhYmxlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVycm9yLCBcIl9yZWZNZXNzYWdlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVsZW1lbnRDbGFzcywgXCJfcmVmQ2xhc3NOYW1lQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRXhwcmVzc2lvbnMoKTtcclxuICAgICAgICB0aGlzLmJpbmRFcnJvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KHZhbHVlPzogYW55LCBvcHRpb25zOiBhbnkgPSB7fSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5nZXRGb3JtU3RhdGUodGhpcy5fYmFzZVZhbHVlKSwgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21taXQoKSB7XHJcbiAgICAgICAgdGhpcy5fYmFzZVZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNhbGxQYXRjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsbFBhdGNoKCkge1xyXG4gICAgICAgIHRoaXMuX2lzTW9kaWZpZWQgPSB0aGlzLmdldFZhbHVlKHRoaXMuX2Jhc2VWYWx1ZSkgIT0gdGhpcy5nZXRWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgKHRoaXMucGFyZW50IGFzIGFueSlbUEFUQ0hdKVxyXG4gICAgICAgICAgICAodGhpcy5wYXJlbnQgYXMgYW55KVtQQVRDSF0odGhpcy5rZXlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrRXJyb3JNZXNzYWdlU3RyYXRlZ3koKSB7XHJcbiAgICAgICAgbGV0IGlzQmluZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLl9lcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kpIHtcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25TdWJtaXQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSAoPGFueT50aGlzLnBhcmVudCkuc3VibWl0dGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uRGlydHk6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLl9kaXJ0eTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PblRvdWNoZWQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLnRvdWNoZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25EaXJ0eU9yVG91Y2hlZDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMuX2RpcnR5IHx8IHRoaXMudG91Y2hlZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PbkRpcnR5T3JTdWJtaXQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLl9kaXJ0eSB8fCAoPGFueT50aGlzLnBhcmVudCkuc3VibWl0dGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uVG91Y2hlZE9yU3VibWl0OlxyXG4gICAgICAgICAgICAgICAgaXNCaW5kID0gdGhpcy50b3VjaGVkIHx8ICg8YW55PnRoaXMucGFyZW50KS5zdWJtaXR0ZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0JpbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleGVjdXRlRXhwcmVzc2lvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzRXhwcmVzc2lvbihcIl9yZWZEaXNhYmxlQ29udHJvbHNcIiwgXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NFeHByZXNzaW9uKFwiX3JlZk1lc3NhZ2VDb250cm9sc1wiLCBcImJpbmRFcnJvclwiKTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NFeHByZXNzaW9uKFwiX3JlZkNsYXNzTmFtZUNvbnRyb2xzXCIsIFwiYmluZENsYXNzTmFtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1lc3NhZ2VFeHByZXNzaW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBrZXlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoKGZvcm1Hcm91cCBhcyBhbnkpW01PREVMX0lOU1RBTkNFXSkge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2VDb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyLmdldCgoZm9ybUdyb3VwIGFzIGFueSlbTU9ERUxfSU5TVEFOQ0VdLmNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiA9IChpbnN0YW5jZUNvbnRhaW5lciEubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMhLmVycm9yLmNvbmRpdGlvbmFsRXhwcmVzc2lvbnMgYXMgYW55KVtrZXlOYW1lXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbFByb3AgPSBpbnN0YW5jZUNvbnRhaW5lciEubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMhLmVycm9yLmNvbnRyb2xQcm9wW3RoaXMua2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGFzc05hbWVFeHByZXNzaW9uID0gKGluc3RhbmNlQ29udGFpbmVyIS5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycyEuZWxlbWVudENsYXNzLmNvbmRpdGlvbmFsRXhwcmVzc2lvbnMgYXMgYW55KVtrZXlOYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wID0gaW5zdGFuY2VDb250YWluZXIhLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIS5lbGVtZW50Q2xhc3MuY29udHJvbFByb3Bba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xhc3NOYW1lRXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc2FuaXRpemVyIG9mIHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gU0FOSVRJWkVSU1tzYW5pdGl6ZXIubmFtZV0odmFsdWUsIHNhbml0aXplci5jb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJpbmRDb25kaXRpb25hbENvbnRyb2xzKGRlY29yYXRvclR5cGU6IHN0cmluZywgcmVmTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVByb3ZpZGVyID0gbmV3IERpc2FibGVQcm92aWRlcihkZWNvcmF0b3JUeXBlLCB0aGlzLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgKHRoaXMgYXMgYW55KVtyZWZOYW1lXSA9IHRoaXMuX2Rpc2FibGVQcm92aWRlci56ZXJvQXJndW1lbnRQcm9jZXNzKHRoaXMsIHRoaXMua2V5TmFtZSk7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVByb3ZpZGVyLm9uZUFyZ3VtZW50UHJvY2Vzcyh0aGlzLCBgJHt0aGlzLmtleU5hbWV9JHtSWENPREV9MWApLmZvckVhY2godCA9PiAodGhpcyBhcyBhbnkpW3JlZk5hbWVdLnB1c2godCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgaWYgKCghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5jaGVja0Vycm9yTWVzc2FnZVN0cmF0ZWd5KCkpIHx8IHRoaXMuX2lzUGFzc2VkRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2VzID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5lcnJvcnMpLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvcnMhLCB0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9lcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck9iamVjdCA9IE9iamVjdE1ha2VyLnRvSnNvbih0LCB1bmRlZmluZWQsICh0aGlzLmVycm9ycyBhcyBhbnkpW3RdICYmICh0aGlzLmVycm9ycyBhcyBhbnkpW3RdW3RdID8gWyh0aGlzLmVycm9ycyBhcyBhbnkpW3RdW3RdXSA6IFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3QsIHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvcnMhLCB0KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlcy5wdXNoKHRoaXMuX2Vycm9yTWVzc2FnZSEpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBiYWNrRW5kRXJyb3JzID0gT2JqZWN0LmtleXModGhpcy5iYWNrRW5kRXJyb3JzKTtcclxuICAgICAgICAgICAgaWYgKGJhY2tFbmRFcnJvcnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGJhY2tFbmRFcnJvcnMuZm9yRWFjaCh0ID0+IHsgdGhpcy5fZXJyb3JNZXNzYWdlcy5wdXNoKHRoaXMuX2Vycm9yTWVzc2FnZSA9IHRoaXMuYmFja0VuZEVycm9yc1t0XSk7IH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5nZXRMYW5ndWFnZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldExhbmd1YWdlKCkge1xyXG4gICAgICAgIHJldHVybiAoUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4gJiYgUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4ubGFuZ3VhZ2UpID8gUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4ubGFuZ3VhZ2UgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGtleU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChlcnJvck9iamVjdFtrZXlOYW1lXSAmJiAoZXJyb3JPYmplY3QgYXMgYW55KVtrZXlOYW1lXVtNRVNTQUdFXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKGVycm9yT2JqZWN0IGFzIGFueSlba2V5TmFtZV1bTUVTU0FHRV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzRXhwcmVzc2lvbihwcm9wTmFtZTogc3RyaW5nLCBvcGVyYXRpb25UeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoKHRoaXMgYXMgYW55KVtwcm9wTmFtZV0pXHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbnRyb2xJbmZvIG9mICh0aGlzIGFzIGFueSlbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGNvbnRyb2xJbmZvLmlzUm9vdCA/IEFwcGxpY2F0aW9uVXRpbC5nZXRDb250cm9sKGNvbnRyb2xJbmZvLmNvbnRyb2xQYXRoLCBBcHBsaWNhdGlvblV0aWwuZ2V0Um9vdEZvcm1Hcm91cCh0aGlzKSkgOiBBcHBsaWNhdGlvblV0aWwuZ2V0Rm9ybUNvbnRyb2woY29udHJvbEluZm8uY29udHJvbFBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBcImRpc2FibGVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZXhlY3V0ZUV4cHJlc3Npb24oY29udHJvbEluZm8uY29uZGl0aW9uYWxFeHByZXNzaW9uLCBjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb25UeXBlID09IFwiYmluZEVycm9yXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuYmluZEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3BlcmF0aW9uVHlwZSA9PSBcImJpbmRDbGFzc05hbWVcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5iaW5kQ2xhc3NOYW1lKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleGVjdXRlRXhwcmVzc2lvbihleHByZXNzaW9uOiBGdW5jdGlvbiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogQm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24uY2FsbChcclxuICAgICAgICAgICAgKGNvbnRyb2wucGFyZW50IGFzIGFueSlbTU9ERUxfSU5TVEFOQ0VdLFxyXG4gICAgICAgICAgICBjb250cm9sLFxyXG4gICAgICAgICAgICBBcHBsaWNhdGlvblV0aWwuZ2V0UGFyZW50TW9kZWxJbnN0YW5jZVZhbHVlKHRoaXMpLFxyXG4gICAgICAgICAgICAoY29udHJvbC5wYXJlbnQgYXMgYW55KVtNT0RFTF9JTlNUQU5DRV1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSBcIlwiID8gdmFsdWUgOiBcIlwiO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL2Zvcm0tY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTZELFdBQVcsRUFBMEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoSSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxNQUFNLEtBQUssR0FBVyxPQUFPLENBQUM7QUFDOUIsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBQ2xDLE1BQU0sU0FBUyxHQUFXLFdBQVcsQ0FBQztBQUN0QyxNQUFNLFFBQVEsR0FBVyxVQUFVLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBRWxDLE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBVztJQTJEd0U7SUFBOEM7SUFBaUU7SUExRHpO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LElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ2hGLElBQUksTUFBTTs0QkFDTixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7OzRCQUVqQixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3pCLENBQUM7eUJBQU0sSUFBSSxhQUFhLElBQUksV0FBVzt3QkFDbkMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUNuQixJQUFJLGFBQWEsSUFBSSxlQUFlO3dCQUNyQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBRWhDLENBQUM7WUFDTCxDQUFDO0lBQ1QsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQW9CLEVBQUUsT0FBd0I7UUFDcEUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUNqQixPQUFPLENBQUMsTUFBYyxDQUFDLGNBQWMsQ0FBQyxFQUN2QyxPQUFPLEVBQ1AsZUFBZSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUNoRCxPQUFPLENBQUMsTUFBYyxDQUFDLGNBQWMsQ0FBQyxDQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFVO1FBQ3ZCLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQWJzdHJhY3RDb250cm9sT3B0aW9ucywgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ09OVFJPTFNfRVJST1IsIE1FU1NBR0UsIFZBTFVFX0NIQU5HRURfU1lOQyB9IGZyb20gJy4uL2NvbnN0JztcclxuaW1wb3J0IHsgTU9ERUxfSU5TVEFOQ0UsIFBBVENILCBSWENPREUgfSBmcm9tIFwiLi4vY29uc3QvYXBwLmNvbnN0XCI7XHJcbmltcG9ydCB7IERFQ09SQVRPUlMgfSBmcm9tIFwiLi4vY29uc3QvZGVjb3JhdG9ycy5jb25zdFwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0Q29udGFpbmVyIH0gZnJvbSBcIi4uL2NvcmUvZGVmYXVsdC1jb250YWluZXJcIjtcclxuaW1wb3J0IHsgRGlzYWJsZVByb3ZpZGVyIH0gZnJvbSAnLi4vZG9tYWluL2Rpc2FibGUtcHJvdmlkZXInO1xyXG5pbXBvcnQgeyBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kgfSBmcm9tIFwiLi4vZW51bXNcIjtcclxuaW1wb3J0IHsgRGF0YVNhbml0aXplciB9IGZyb20gXCIuLi9tb2RlbHMvZGF0YS1zYW5pdGl6ZXJcIjtcclxuaW1wb3J0IHsgQXBwbGljYXRpb25VdGlsIH0gZnJvbSAnLi4vdXRpbC9hcHAtdXRpbCc7XHJcbmltcG9ydCB7IE9iamVjdE1ha2VyIH0gZnJvbSBcIi4uL3V0aWwvb2JqZWN0LW1ha2VyXCI7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybUNvbmZpZyB9IGZyb20gXCIuLi91dGlsL3JlYWN0aXZlLWZvcm0tY29uZmlnXCI7XHJcbmltcG9ydCB7IFNBTklUSVpFUlMgfSBmcm9tIFwiLi4vdXRpbC9zYW5pdGl6ZXJzXCI7XHJcblxyXG5jb25zdCBESVJUWTogc3RyaW5nID0gXCJkaXJ0eVwiO1xyXG5jb25zdCBUT1VDSEVEOiBzdHJpbmcgPSBcInRvdWNoZWRcIjtcclxuY29uc3QgVU5UT1VDSEVEOiBzdHJpbmcgPSBcInVudG91Y2hlZFwiO1xyXG5jb25zdCBQUklTVElORTogc3RyaW5nID0gXCJwcmlzdGluZVwiO1xyXG5jb25zdCBQRU5ESU5HOiBzdHJpbmcgPSBcInBlbmRpbmdcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSeEZvcm1Db250cm9sIGV4dGVuZHMgRm9ybUNvbnRyb2wge1xyXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGtleU5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgX2Vycm9yTWVzc2FnZT86IHN0cmluZztcclxuICAgIHByaXZhdGUgX2Vycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBwcml2YXRlIF9kaXNhYmxlUHJvdmlkZXI/OiBEaXNhYmxlUHJvdmlkZXI7XHJcbiAgICBwcml2YXRlIF9lcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3k6IEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneTtcclxuICAgIHByaXZhdGUgX21lc3NhZ2VFeHByZXNzaW9uPzogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIF9jbGFzc05hbWVFeHByZXNzaW9uPzogRnVuY3Rpb247XHJcbiAgICBwcml2YXRlIF9pc1Bhc3NlZEV4cHJlc3Npb246IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX2NvbnRyb2xQcm9wPzogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH07XHJcbiAgICBwcml2YXRlIF9jbGFzc05hbWVDb250cm9sUHJvcD86IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9O1xyXG4gICAgcHJpdmF0ZSBfYmFzZVZhbHVlOiBhbnk7XHJcbiAgICBwcml2YXRlIF9pc01vZGlmaWVkOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX3ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW107XHJcbiAgICBwcml2YXRlIF9hc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXTtcclxuXHJcbiAgICBiYWNrRW5kRXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgICB1cGRhdGVPbkVsZW1lbnRDbGFzcz86IGJvb2xlYW4gfCBGdW5jdGlvbjtcclxuICAgIHByZUhvb2s/OiBGdW5jdGlvbjtcclxuICAgIHBvc3RIb29rPzogRnVuY3Rpb247XHJcblxyXG4gICAgZ2V0IGVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yTWVzc2FnZXMubGVuZ3RoID09IDAgJiYgdGhpcy5lcnJvcnMpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX21lc3NhZ2VFeHByZXNzaW9uICYmICF0aGlzLl9pc1Bhc3NlZEV4cHJlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICBpZiAoIXRoaXMuZXJyb3JzICYmIHRoaXMuX2Vycm9yTWVzc2FnZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLl9sYW5ndWFnZSAhPSB0aGlzLmdldExhbmd1YWdlKCkpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3JNZXNzYWdlcztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZXJyb3JNZXNzYWdlID09IHVuZGVmaW5lZCAmJiB0aGlzLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiAmJiAhdGhpcy5faXNQYXNzZWRFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZXJyb3JzICYmIHRoaXMuX2Vycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbnRyb2xFcnJvck1lc3NhZ2VzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fbGFuZ3VhZ2UgIT0gdGhpcy5nZXRMYW5ndWFnZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9lcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoZm9ybVN0YXRlOiBhbnksIHZhbGlkYXRvck9yT3B0czogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGwsIHByaXZhdGUgZW50aXR5T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcml2YXRlIGJhc2VPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHByaXZhdGUgX3Nhbml0aXplcnM6IERhdGFTYW5pdGl6ZXJbXSkge1xyXG4gICAgICAgIHN1cGVyKGZvcm1TdGF0ZSwgdmFsaWRhdG9yT3JPcHRzKVxyXG4gICAgICAgIHRoaXMuZGVmaW5lRXJyb3JzUHJvcGVydHkoKTtcclxuICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSBmb3JtU3RhdGUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLmdldEZvcm1TdGF0ZShmb3JtU3RhdGUpO1xyXG4gICAgICAgIHRoaXMuX2lzTW9kaWZpZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmtleU5hbWUgPSBjb250cm9sTmFtZTtcclxuICAgICAgICB0aGlzLl92YWxpZGF0b3JzID0gKHZhbGlkYXRvck9yT3B0cyBhcyBBYnN0cmFjdENvbnRyb2xPcHRpb25zKS52YWxpZGF0b3JzIGFzIFZhbGlkYXRvckZuW107XHJcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JzID0gKHZhbGlkYXRvck9yT3B0cyBhcyBBYnN0cmFjdENvbnRyb2xPcHRpb25zKS5hc3luY1ZhbGlkYXRvcnMgYXMgQXN5bmNWYWxpZGF0b3JGbltdO1xyXG4gICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneSA9IFJlYWN0aXZlRm9ybUNvbmZpZy5nZXQoXCJyZWFjdGl2ZUZvcm0uZXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5XCIpIGFzIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneTtcclxuICAgICAgICBpZiAodGhpcy5fc2FuaXRpemVycykge1xyXG4gICAgICAgICAgICB2YXIgZmxvYXRTYW5pdGl6ZXIgPSB0aGlzLl9zYW5pdGl6ZXJzLmZpbHRlcih0ID0+IHQubmFtZSA9PSBcInRvRmxvYXRcIilbMF1cclxuICAgICAgICAgICAgaWYgKGZsb2F0U2FuaXRpemVyICYmIHRoaXMuX2Jhc2VWYWx1ZSAmJiBSZWFjdGl2ZUZvcm1Db25maWcubnVtYmVyICYmIFJlYWN0aXZlRm9ybUNvbmZpZy5udW1iZXIuZGVjaW1hbFN5bWJvbCA9PSBcIixcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGJhc2VWYWx1ZSA9IFN0cmluZyh0aGlzLl9iYXNlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pbmRleE9mKCcuJykgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSBiYXNlVmFsdWUucmVwbGFjZShcIi5cIiwgUmVhY3RpdmVGb3JtQ29uZmlnLm51bWJlci5kZWNpbWFsU3ltYm9sKTtcclxuICAgICAgICAgICAgICAgICAgICBzdXBlci5zZXRWYWx1ZSh0aGlzLl9iYXNlVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlZmluZUVycm9yc1Byb3BlcnR5KCkge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImVycm9yc1wiLCB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhbmd1YWdlICYmIHRoaXMuX2xhbmd1YWdlICE9IHRoaXMuZ2V0TGFuZ3VhZ2UoKSAmJiB0aGlzLnZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXNbXCJlcnJvcnNcIl0gPSB0aGlzLnZhbGlkYXRvcih0aGlzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9ycztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0KHZhbHVlKSB7IHRoaXMuX2Vycm9ycyA9IHZhbHVlOyB9LFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGb3JtU3RhdGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBiYXNlVmFsdWUgPSB2YWx1ZVxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICBiYXNlVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCh0ID0+IGJhc2VWYWx1ZS5wdXNoKHQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNNb2RpZmllZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXNNb2RpZmllZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbGlkYXRvclNvdXJjZSh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBc3luY1ZhbGlkYXRvcnMoKTogQXN5bmNWYWxpZGF0b3JGbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWxpZGF0b3JTb3VyY2UodGhpcy5fYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFZhbGlkYXRvclNvdXJjZSh2YWxpZGF0b3JzOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3JzKVxyXG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSA/IFsuLi52YWxpZGF0b3JzXSA6IFt2YWxpZGF0b3JzXVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcjogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSBuZXdWYWxpZGF0b3IgYXMgVmFsaWRhdG9yRm5bXTtcclxuICAgICAgICBzdXBlci5zZXRWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcik7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKG5ld1ZhbGlkYXRvcjogQXN5bmNWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm5bXSB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRvcnMgPSBuZXdWYWxpZGF0b3IgYXMgQXN5bmNWYWxpZGF0b3JGbltdO1xyXG4gICAgICAgIHN1cGVyLnNldEFzeW5jVmFsaWRhdG9ycyhuZXdWYWxpZGF0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlKHZhbHVlOiBhbnksIG9wdGlvbnM/OiB7XHJcbiAgICAgICAgZGlydHk/OiBib29sZWFuO1xyXG4gICAgICAgIHVwZGF0ZUNoYW5nZWQ/OiBib29sZWFuO1xyXG4gICAgICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcclxuICAgICAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xyXG4gICAgICAgIGlzVGhyb3VnaER5bmFtaWM/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgICg8YW55PnRoaXMucGFyZW50KS5jaGFuZ2luZyA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBhcnNlZFZhbHVlID0gdGhpcy5nZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZSlcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRpcnR5KVxyXG4gICAgICAgICAgICB0aGlzLmJhc2VPYmplY3RbdGhpcy5rZXlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZW50aXR5T2JqZWN0W3RoaXMua2V5TmFtZV0gPSBwYXJzZWRWYWx1ZTtcclxuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIHRoaXMuYmluZEVycm9yKCk7XHJcbiAgICAgICAgdGhpcy5iaW5kQ2xhc3NOYW1lKCk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRXhwcmVzc2lvbnMoKTtcclxuICAgICAgICB0aGlzLmNhbGxQYXRjaCgpO1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmICFvcHRpb25zLnVwZGF0ZUNoYW5nZWQgJiYgKHRoaXMucm9vdCBhcyBhbnkpW1ZBTFVFX0NIQU5HRURfU1lOQ10pIHtcclxuICAgICAgICAgICAgKHRoaXMucm9vdCBhcyBhbnkpW1ZBTFVFX0NIQU5HRURfU1lOQ10oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKDxhbnk+dGhpcy5wYXJlbnQpLmNoYW5naW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udHJvbFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNhbml0aXplZFZhbHVlKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmRFcnJvcigpIHtcclxuICAgICAgICBpZiAodGhpcy5fbWVzc2FnZUV4cHJlc3Npb24pXHJcbiAgICAgICAgICAgIHRoaXMuX2lzUGFzc2VkRXhwcmVzc2lvbiA9IHRoaXMuZXhlY3V0ZUV4cHJlc3Npb24odGhpcy5fbWVzc2FnZUV4cHJlc3Npb24sIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKTtcclxuICAgICAgICB2YXIgdDogYW55ID0gdGhpcztcclxuICAgICAgICB0W1wiZXJyb3JzXCJdID0gdGhpcy5lcnJvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgYmluZENsYXNzTmFtZSgpIHtcclxuICAgICAgICBpZiAodGhpcy51cGRhdGVPbkVsZW1lbnRDbGFzcyAmJiB0eXBlb2YgdGhpcy51cGRhdGVPbkVsZW1lbnRDbGFzcyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSB0aGlzLmV4ZWN1dGVFeHByZXNzaW9uKHRoaXMuX2NsYXNzTmFtZUV4cHJlc3Npb24hLCB0aGlzKTtcclxuICAgICAgICAgICAgbGV0IHVwZGF0ZUVsZW1lbnQgPSB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzIGFzIEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICB1cGRhdGVFbGVtZW50KGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRCYWNrRW5kRXJyb3JzKGVycm9yOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZXJyb3IpLmZvckVhY2goa2V5ID0+IHRoaXMuYmFja0VuZEVycm9yc1trZXldID0gZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQmFja0VuZEVycm9ycyhlcnJvcnM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICAgICAgaWYgKCFlcnJvcnMpXHJcbiAgICAgICAgICAgIHRoaXMuYmFja0VuZEVycm9ycyA9IHt9O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKHQgPT4gZGVsZXRlIHRoaXMuYmFja0VuZEVycm9yc1t0XSk7XHJcbiAgICAgICAgdGhpcy5zZXRDb250cm9sRXJyb3JNZXNzYWdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1RvdWNoZWQob3B0cz86IHtcclxuICAgICAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMudG91Y2hlZDtcclxuICAgICAgICBzdXBlci5tYXJrQXNUb3VjaGVkKG9wdHMpO1xyXG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gdGhpcy50b3VjaGVkKVxyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbVE9VQ0hFRCwgVU5UT1VDSEVEXSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSB0aGlzLnVudG91Y2hlZDtcclxuICAgICAgICBzdXBlci5tYXJrQXNVbnRvdWNoZWQob3B0cyk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSB0aGlzLnVudG91Y2hlZClcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1VOVE9VQ0hFRCwgVE9VQ0hFRF0pXHJcbiAgICB9XHJcblxyXG4gICAgbWFya0FzRGlydHkob3B0cz86IHtcclxuICAgICAgICBvbmx5U2VsZj86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuX2RpcnR5O1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc0RpcnR5KG9wdHMpO1xyXG4gICAgICAgIHRoaXMuX2RpcnR5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMuX2RpcnR5KVxyXG4gICAgICAgICAgICB0aGlzLnJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihbRElSVFldKVxyXG4gICAgfVxyXG5cclxuICAgIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSB0aGlzLnByaXN0aW5lO1xyXG4gICAgICAgIHN1cGVyLm1hcmtBc1ByaXN0aW5lKG9wdHMpO1xyXG4gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gdGhpcy5wcmlzdGluZSlcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1BSSVNUSU5FXSlcclxuICAgIH1cclxuXHJcbiAgICBtYXJrQXNQZW5kaW5nKG9wdHM/OiB7XHJcbiAgICAgICAgb25seVNlbGY/OiBib29sZWFuO1xyXG4gICAgICAgIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdGF0ZSA9IHRoaXMucGVuZGluZztcclxuICAgICAgICBzdXBlci5tYXJrQXNEaXJ0eShvcHRzKTtcclxuICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IHRoaXMucGVuZGluZylcclxuICAgICAgICAgICAgdGhpcy5ydW5Db250cm9sUHJvcENoYW5nZUV4cHJlc3Npb24oW1BFTkRJTkddKVxyXG4gICAgfVxyXG5cclxuICAgIHJ1bkNvbnRyb2xQcm9wQ2hhbmdlRXhwcmVzc2lvbihwcm9wTmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgcHJvcE5hbWVzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy5fY29udHJvbFByb3AgJiYgdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5fY29udHJvbFByb3BbbmFtZV0pIHx8ICghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5jaGVja0Vycm9yTWVzc2FnZVN0cmF0ZWd5KCkpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXJyb3IoKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wICYmIHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wW25hbWVdKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kQ2xhc3NOYW1lKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLmdldE1lc3NhZ2VFeHByZXNzaW9uKDxGb3JtR3JvdXA+dGhpcy5wYXJlbnQsIHRoaXMua2V5TmFtZSk7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmRpc2FibGVkLCBcIl9yZWZEaXNhYmxlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVycm9yLCBcIl9yZWZNZXNzYWdlQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5iaW5kQ29uZGl0aW9uYWxDb250cm9scyhERUNPUkFUT1JTLmVsZW1lbnRDbGFzcywgXCJfcmVmQ2xhc3NOYW1lQ29udHJvbHNcIik7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlRXhwcmVzc2lvbnMoKTtcclxuICAgICAgICB0aGlzLmJpbmRFcnJvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0KHZhbHVlPzogYW55LCBvcHRpb25zOiBhbnkgPSB7fSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5nZXRGb3JtU3RhdGUodGhpcy5fYmFzZVZhbHVlKSwgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5fZGlydHkgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb21taXQoKSB7XHJcbiAgICAgICAgdGhpcy5fYmFzZVZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICB0aGlzLmNhbGxQYXRjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FsbFBhdGNoKCkge1xyXG4gICAgICAgIHRoaXMuX2lzTW9kaWZpZWQgPSB0aGlzLmdldFZhbHVlKHRoaXMuX2Jhc2VWYWx1ZSkgIT0gdGhpcy5nZXRWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgKHRoaXMucGFyZW50IGFzIGFueSlbUEFUQ0hdKVxyXG4gICAgICAgICAgICAodGhpcy5wYXJlbnQgYXMgYW55KVtQQVRDSF0odGhpcy5rZXlOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrRXJyb3JNZXNzYWdlU3RyYXRlZ3koKSB7XHJcbiAgICAgICAgbGV0IGlzQmluZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLl9lcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kpIHtcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25TdWJtaXQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSAoPGFueT50aGlzLnBhcmVudCkuc3VibWl0dGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uRGlydHk6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLl9kaXJ0eTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PblRvdWNoZWQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLnRvdWNoZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFcnJvck1lc3NhZ2VCaW5kaW5nU3RyYXRlZ3kuT25EaXJ0eU9yVG91Y2hlZDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRoaXMuX2RpcnR5IHx8IHRoaXMudG91Y2hlZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVycm9yTWVzc2FnZUJpbmRpbmdTdHJhdGVneS5PbkRpcnR5T3JTdWJtaXQ6XHJcbiAgICAgICAgICAgICAgICBpc0JpbmQgPSB0aGlzLl9kaXJ0eSB8fCAoPGFueT50aGlzLnBhcmVudCkuc3VibWl0dGVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXJyb3JNZXNzYWdlQmluZGluZ1N0cmF0ZWd5Lk9uVG91Y2hlZE9yU3VibWl0OlxyXG4gICAgICAgICAgICAgICAgaXNCaW5kID0gdGhpcy50b3VjaGVkIHx8ICg8YW55PnRoaXMucGFyZW50KS5zdWJtaXR0ZWQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGlzQmluZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpc0JpbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleGVjdXRlRXhwcmVzc2lvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzRXhwcmVzc2lvbihcIl9yZWZEaXNhYmxlQ29udHJvbHNcIiwgXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NFeHByZXNzaW9uKFwiX3JlZk1lc3NhZ2VDb250cm9sc1wiLCBcImJpbmRFcnJvclwiKTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NFeHByZXNzaW9uKFwiX3JlZkNsYXNzTmFtZUNvbnRyb2xzXCIsIFwiYmluZENsYXNzTmFtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1lc3NhZ2VFeHByZXNzaW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBrZXlOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoKGZvcm1Hcm91cCBhcyBhbnkpW01PREVMX0lOU1RBTkNFXSkge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2VDb250YWluZXIgPSBkZWZhdWx0Q29udGFpbmVyLmdldCgoZm9ybUdyb3VwIGFzIGFueSlbTU9ERUxfSU5TVEFOQ0VdLmNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlRXhwcmVzc2lvbiA9IChpbnN0YW5jZUNvbnRhaW5lciEubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMhLmVycm9yLmNvbmRpdGlvbmFsRXhwcmVzc2lvbnMgYXMgYW55KVtrZXlOYW1lXVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbFByb3AgPSBpbnN0YW5jZUNvbnRhaW5lciEubm9uVmFsaWRhdGlvbkRlY29yYXRvcnMhLmVycm9yLmNvbnRyb2xQcm9wW3RoaXMua2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGFzc05hbWVFeHByZXNzaW9uID0gKGluc3RhbmNlQ29udGFpbmVyIS5ub25WYWxpZGF0aW9uRGVjb3JhdG9ycyEuZWxlbWVudENsYXNzLmNvbmRpdGlvbmFsRXhwcmVzc2lvbnMgYXMgYW55KVtrZXlOYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NsYXNzTmFtZUNvbnRyb2xQcm9wID0gaW5zdGFuY2VDb250YWluZXIhLm5vblZhbGlkYXRpb25EZWNvcmF0b3JzIS5lbGVtZW50Q2xhc3MuY29udHJvbFByb3Bba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xhc3NOYW1lRXhwcmVzc2lvbilcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9uRWxlbWVudENsYXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTYW5pdGl6ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc2FuaXRpemVyIG9mIHRoaXMuX3Nhbml0aXplcnMpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gU0FOSVRJWkVSU1tzYW5pdGl6ZXIubmFtZV0odmFsdWUsIHNhbml0aXplci5jb25maWcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJpbmRDb25kaXRpb25hbENvbnRyb2xzKGRlY29yYXRvclR5cGU6IHN0cmluZywgcmVmTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVByb3ZpZGVyID0gbmV3IERpc2FibGVQcm92aWRlcihkZWNvcmF0b3JUeXBlLCB0aGlzLmVudGl0eU9iamVjdCk7XHJcbiAgICAgICAgKHRoaXMgYXMgYW55KVtyZWZOYW1lXSA9IHRoaXMuX2Rpc2FibGVQcm92aWRlci56ZXJvQXJndW1lbnRQcm9jZXNzKHRoaXMsIHRoaXMua2V5TmFtZSk7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVByb3ZpZGVyLm9uZUFyZ3VtZW50UHJvY2Vzcyh0aGlzLCBgJHt0aGlzLmtleU5hbWV9JHtSWENPREV9MWApLmZvckVhY2godCA9PiAodGhpcyBhcyBhbnkpW3JlZk5hbWVdLnB1c2godCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0Q29udHJvbEVycm9yTWVzc2FnZXMoKSB7XHJcbiAgICAgICAgaWYgKCghdGhpcy5fbWVzc2FnZUV4cHJlc3Npb24gJiYgdGhpcy5jaGVja0Vycm9yTWVzc2FnZVN0cmF0ZWd5KCkpIHx8IHRoaXMuX2lzUGFzc2VkRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2VzID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5lcnJvcnMpLmZvckVhY2godCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvcnMhLCB0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9lcnJvck1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck9iamVjdCA9IE9iamVjdE1ha2VyLnRvSnNvbih0LCB1bmRlZmluZWQsICh0aGlzLmVycm9ycyBhcyBhbnkpW3RdICYmICh0aGlzLmVycm9ycyBhcyBhbnkpW3RdW3RdID8gWyh0aGlzLmVycm9ycyBhcyBhbnkpW3RdW3RdXSA6IFtdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3QsIHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvcnMhLCB0KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlcy5wdXNoKHRoaXMuX2Vycm9yTWVzc2FnZSEpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICh0aGlzLnBhcmVudCBhcyBhbnkpW0NPTlRST0xTX0VSUk9SXVt0aGlzLmtleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBiYWNrRW5kRXJyb3JzID0gT2JqZWN0LmtleXModGhpcy5iYWNrRW5kRXJyb3JzKTtcclxuICAgICAgICAgICAgaWYgKGJhY2tFbmRFcnJvcnMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIGJhY2tFbmRFcnJvcnMuZm9yRWFjaCh0ID0+IHsgdGhpcy5fZXJyb3JNZXNzYWdlcy5wdXNoKHRoaXMuX2Vycm9yTWVzc2FnZSA9IHRoaXMuYmFja0VuZEVycm9yc1t0XSk7IH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JNZXNzYWdlcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gdGhpcy5nZXRMYW5ndWFnZSgpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldExhbmd1YWdlKCkge1xyXG4gICAgICAgIHJldHVybiAoUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4gJiYgUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4ubGFuZ3VhZ2UpID8gUmVhY3RpdmVGb3JtQ29uZmlnLmkxOG4ubGFuZ3VhZ2UgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3JPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGtleU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChlcnJvck9iamVjdFtrZXlOYW1lXSAmJiAoZXJyb3JPYmplY3QgYXMgYW55KVtrZXlOYW1lXVtNRVNTQUdFXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKGVycm9yT2JqZWN0IGFzIGFueSlba2V5TmFtZV1bTUVTU0FHRV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwcm9jZXNzRXhwcmVzc2lvbihwcm9wTmFtZTogc3RyaW5nLCBvcGVyYXRpb25UeXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoKHRoaXMgYXMgYW55KVtwcm9wTmFtZV0pXHJcbiAgICAgICAgICAgIGZvciAodmFyIGNvbnRyb2xJbmZvIG9mICh0aGlzIGFzIGFueSlbcHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGNvbnRyb2xJbmZvLmlzUm9vdCA/IEFwcGxpY2F0aW9uVXRpbC5nZXRDb250cm9sKGNvbnRyb2xJbmZvLmNvbnRyb2xQYXRoLCBBcHBsaWNhdGlvblV0aWwuZ2V0Um9vdEZvcm1Hcm91cCh0aGlzKSkgOiBBcHBsaWNhdGlvblV0aWwuZ2V0Rm9ybUNvbnRyb2woY29udHJvbEluZm8uY29udHJvbFBhdGgsIHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uVHlwZSA9PSBcImRpc2FibGVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZXhlY3V0ZUV4cHJlc3Npb24oY29udHJvbEluZm8uY29uZGl0aW9uYWxFeHByZXNzaW9uLCBjb250cm9sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb25UeXBlID09IFwiYmluZEVycm9yXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuYmluZEVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3BlcmF0aW9uVHlwZSA9PSBcImJpbmRDbGFzc05hbWVcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5iaW5kQ2xhc3NOYW1lKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleGVjdXRlRXhwcmVzc2lvbihleHByZXNzaW9uOiBGdW5jdGlvbiwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogQm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24uY2FsbChcclxuICAgICAgICAgICAgKGNvbnRyb2wucGFyZW50IGFzIGFueSlbTU9ERUxfSU5TVEFOQ0VdLFxyXG4gICAgICAgICAgICBjb250cm9sLFxyXG4gICAgICAgICAgICBBcHBsaWNhdGlvblV0aWwuZ2V0UGFyZW50TW9kZWxJbnN0YW5jZVZhbHVlKHRoaXMpLFxyXG4gICAgICAgICAgICAoY29udHJvbC5wYXJlbnQgYXMgYW55KVtNT0RFTF9JTlNUQU5DRV1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSBcIlwiID8gdmFsdWUgOiBcIlwiO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -16,11 +16,11 @@ import { TypedFormBuilder } from "./typed-form-builder";
16
16
  import * as i0 from "@angular/core";
17
17
  export class RxReactiveFormsModule {
18
18
  static forRoot() { return { ngModule: RxReactiveFormsModule, providers: [] }; }
19
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RxReactiveFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
- /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: RxReactiveFormsModule, declarations: [RxwebFormDirective, HtmlControlTemplateDirective, ControlHostDirective, RxFormControlDirective, FileControlDirective, ImageFileControlDirective, AsyncValidationDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule], exports: [AsyncValidationDirective, RxwebFormDirective, HtmlControlTemplateDirective, RxFormControlDirective, FileControlDirective, ImageFileControlDirective] });
21
- /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RxReactiveFormsModule, providers: [RxFormBuilder, DecimalProvider, DecimalPipe], imports: [CommonModule, FormsModule, ReactiveFormsModule] });
19
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RxReactiveFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: RxReactiveFormsModule, declarations: [RxwebFormDirective, HtmlControlTemplateDirective, ControlHostDirective, RxFormControlDirective, FileControlDirective, ImageFileControlDirective, AsyncValidationDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule], exports: [AsyncValidationDirective, RxwebFormDirective, HtmlControlTemplateDirective, RxFormControlDirective, FileControlDirective, ImageFileControlDirective] });
21
+ /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RxReactiveFormsModule, providers: [RxFormBuilder, DecimalProvider, DecimalPipe], imports: [CommonModule, FormsModule, ReactiveFormsModule] });
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RxReactiveFormsModule, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: RxReactiveFormsModule, decorators: [{
24
24
  type: NgModule,
25
25
  args: [{
26
26
  declarations: [RxwebFormDirective, HtmlControlTemplateDirective, ControlHostDirective, RxFormControlDirective, FileControlDirective, ImageFileControlDirective, AsyncValidationDirective],
@@ -36,11 +36,11 @@ export class ReactiveTypedFormsModule {
36
36
  ReactiveFormConfig.autoInstancePush = true;
37
37
  }
38
38
  static forRoot() { return { ngModule: ReactiveTypedFormsModule, providers: [] }; }
39
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ReactiveTypedFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
40
- /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: ReactiveTypedFormsModule, imports: [CommonModule, FormsModule, ReactiveFormsModule, RxReactiveFormsModule], exports: [ReactiveFormsModule, FormsModule, ReactiveFormsModule] });
41
- /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ReactiveTypedFormsModule, providers: [{ provide: FormBuilder, useClass: TypedFormBuilder }, TypedFormBuilder], imports: [CommonModule, FormsModule, ReactiveFormsModule, RxReactiveFormsModule.forRoot(), ReactiveFormsModule, FormsModule, ReactiveFormsModule] });
39
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ReactiveTypedFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
40
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: ReactiveTypedFormsModule, imports: [CommonModule, FormsModule, ReactiveFormsModule, RxReactiveFormsModule], exports: [ReactiveFormsModule, FormsModule, ReactiveFormsModule] });
41
+ /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ReactiveTypedFormsModule, providers: [{ provide: FormBuilder, useClass: TypedFormBuilder }, TypedFormBuilder], imports: [CommonModule, FormsModule, ReactiveFormsModule, RxReactiveFormsModule.forRoot(), ReactiveFormsModule, FormsModule, ReactiveFormsModule] });
42
42
  }
43
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ReactiveTypedFormsModule, decorators: [{
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ReactiveTypedFormsModule, decorators: [{
44
44
  type: NgModule,
45
45
  args: [{
46
46
  declarations: [],
@@ -111,4 +111,4 @@ export class RxFormArray extends FormArray {
111
111
  }
112
112
  }
113
113
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Zvcm0tdmFsaWRhdG9ycy9zZXJ2aWNlcy9yeC1mb3JtLWFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsTUFBTSxVQUFVLEdBQVcsV0FBVyxDQUFDO0FBRXZDLE1BQU0sT0FBTyxXQUFZLFNBQVEsU0FBUztJQUtsQjtJQUF3RjtJQUpwRyxVQUFVLENBQVM7SUFDbkIsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVUsRUFBRSxDQUFDO0lBRTlCLFlBQW9CLFdBQWtCLEVBQUUsUUFBYSxFQUFFLGVBQXFCLEVBQUUsY0FBb0IsRUFBVSxXQUE2RDtRQUNySyxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQURqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBTztRQUFzRSxnQkFBVyxHQUFYLFdBQVcsQ0FBa0Q7UUFFckssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBWSxFQUFFLFVBQTZELEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRTtRQUN0RyxJQUFJLFNBQVMsR0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFD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QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDekUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO29CQUNsQixNQUFNO2lCQUNUO2FBQ0o7SUFDVCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQVk7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEM7SUFDTCxDQUFDO0NBR0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQXJyYXkgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbmltcG9ydCB7IFBBVENILCBWQUxVRV9DSEFOR0VEX1NZTkMgfSBmcm9tIFwiLi4vY29uc3QvYXBwLmNvbnN0XCI7XHJcbmltcG9ydCB7IFJlc2V0Rm9ybVR5cGUgfSBmcm9tIFwiLi4vZW51bXMvcmVzZXQtdHlwZVwiO1xyXG5pbXBvcnQgeyBPYmplY3RNYWtlciB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LW1ha2VyJztcclxuaW1wb3J0IHsgY2xvbmUsIGlzTWF0Y2hlZCB9IGZyb20gJy4vZW50aXR5LnNlcnZpY2UnO1xyXG5cclxuY29uc3QgUFJPUF9BUlJBWTogc3RyaW5nID0gXCJwcm9wQXJyYXlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBSeEZvcm1BcnJheSBleHRlbmRzIEZvcm1BcnJheSB7XHJcbiAgICBwcml2YXRlIF9iYXNlVmFsdWU/OiBhbnlbXTtcclxuICAgIHByaXZhdGUgX2lzTW9kaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgX21vZGlmaWVkOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYXJyYXlPYmplY3Q6IGFueVtdLCBjb250cm9sczogYW55LCB2YWxpZGF0b3JPck9wdHM/OiBhbnksIGFzeW5jVmFsaWRhdG9yPzogYW55LCBwcml2YXRlIGFycmF5Q29uZmlnPzogeyBhbGxvd01heEluZGV4PzogbnVtYmVyLCBtZXNzYWdlS2V5Pzogc3RyaW5nIH0pIHtcclxuICAgICAgICBzdXBlcihjb250cm9scywgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcik7XHJcbiAgICAgICAgdGhpcy5jbG9uZU9iamVjdChhcnJheU9iamVjdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzTW9kaWZpZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTW9kaWZpZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaChjb250cm9sOiBhbnksIG9wdGlvbnM6IHsgZW1pdEV2ZW50PzogYm9vbGVhbiwgaXNBZGRlZEluc3RhbmNlOiBib29sZWFuIH0gPSB7IGlzQWRkZWRJbnN0YW5jZTogZmFsc2UgfSkge1xyXG4gICAgICAgIGxldCBmb3JtR3JvdXA6IGFueSA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAodGhpcy5hcnJheU9iamVjdClcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wubW9kZWxJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmlzQWRkZWRJbnN0YW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlPYmplY3QucHVzaChjb250cm9sLm1vZGVsSW5zdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcnJheU9iamVjdFt0aGlzLmFycmF5T2JqZWN0Lmxlbmd0aF0gPSBjb250cm9sLm1vZGVsSW5zdGFuY2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgc3VwZXIucHVzaChjb250cm9sKTtcclxuICAgICAgICBpZiAoZm9ybUdyb3VwW1ZBTFVFX0NIQU5HRURfU1lOQ10pIHtcclxuICAgICAgICAgICAgZm9ybUdyb3VwLnZhbHVlQ2hhbmdlZFN5bmMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0Y2goKVxyXG4gICAgICAgIHRoaXMuY2hlY2tWYWxpZGF0aW9uKClcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaCgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrTW9kaWZpY2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XHJcbiAgICAgICAgICAgICh0aGlzLnBhcmVudCBhcyBhbnkpW1BBVENIXSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXNldEZvcm0ob3B0aW9ucz86IHtcclxuICAgICAgICBpbmRleDogbnVtYmVyLFxyXG4gICAgICAgIGdyb3VwT3B0aW9uOiB7XHJcbiAgICAgICAgICAgIHJlc2V0VHlwZT86IFJlc2V0Rm9ybVR5cGUsXHJcbiAgICAgICAgICAgIHdpdGg/OiBzdHJpbmdbXSxcclxuICAgICAgICAgICAgdmFsdWU/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwdXNoRnVuY3Rpb246ICh2YWx1ZTogT2JqZWN0KSA9PiBib29sZWFuO1xyXG4gICAgfSkge1xyXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuaW5kZXggPj0gMCAmJiBvcHRpb25zLmdyb3VwT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICg8YW55PnRoaXMuY29udHJvbHNbb3B0aW9ucy5pbmRleF0pLnJlc2V0Rm9ybShvcHRpb25zLmdyb3VwT3B0aW9uKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fYmFzZVZhbHVlIS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbHNbaV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMuY29udHJvbHNbaV0pLnJlc2V0Rm9ybSh7IHZhbHVlOiAodGhpcy5fYmFzZVZhbHVlIGFzIGFueSlbaV0gfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnB1c2hGdW5jdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybUdyb3VwID0gb3B0aW9ucy5wdXNoRnVuY3Rpb24oKHRoaXMuX2Jhc2VWYWx1ZSBhcyBhbnkpW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoKGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbW1pdCgpIHtcclxuICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSBbXVxyXG4gICAgICAgIGZvciAobGV0IGZvcm1Hcm91cCBvZiB0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgICg8YW55PmZvcm1Hcm91cCkuY29tbWl0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Jhc2VWYWx1ZS5wdXNoKGNsb25lKGZvcm1Hcm91cC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXRjaCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICByZW1vdmVBdChpbmRleDogbnVtYmVyLCBvcHRpb25zOiB7IGVtaXRFdmVudD86IGJvb2xlYW4sIGlzUmVtb3ZlZEluc3RhbmNlPzogYm9vbGVhbiB9ID0geyBpc1JlbW92ZWRJbnN0YW5jZTogZmFsc2UgfSkge1xyXG4gICAgICAgIGxldCBmb3JtR3JvdXA6IGFueSA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIW9wdGlvbnMuaXNSZW1vdmVkSW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5hcnJheU9iamVjdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGluZGV4OyBpIDwgdGhpcy5hcnJheU9iamVjdC5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlPYmplY3RbaV0gPSB0aGlzLmFycmF5T2JqZWN0W2kgKyAxXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5hcnJheU9iamVjdC5wb3AoKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBzdXBlci5yZW1vdmVBdChpbmRleCwgb3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cFtWQUxVRV9DSEFOR0VEX1NZTkNdKSB7XHJcbiAgICAgICAgICAgIGZvcm1Hcm91cC52YWx1ZUNoYW5nZWRTeW5jKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhdGNoKClcclxuICAgICAgICB0aGlzLmNoZWNrVmFsaWRhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tWYWxpZGF0aW9uKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hcnJheUNvbmZpZyAhPSB1bmRlZmluZWQgJiYgdGhpcy5hcnJheUNvbmZpZy5hbGxvd01heEluZGV4ICYmIHRoaXMubGVuZ3RoID4gdGhpcy5hcnJheUNvbmZpZy5hbGxvd01heEluZGV4KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFcnJvcnMoT2JqZWN0TWFrZXIudG9Kc29uKFBST1BfQVJSQVksIHRoaXMuYXJyYXlDb25maWcsIFt0aGlzLmxlbmd0aCwgdGhpcy5hcnJheUNvbmZpZy5hbGxvd01heEluZGV4XSkpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmVycm9ycyAmJiB0aGlzLmVycm9yc1tQUk9QX0FSUkFZXSlcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmVycm9yc1tQUk9QX0FSUkFZXTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tNb2RpZmljYXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5faXNNb2RpZmllZCA9ICEodGhpcy5fYmFzZVZhbHVlIS5sZW5ndGggPT0gdGhpcy5jb250cm9scy5sZW5ndGgpO1xyXG4gICAgICAgIGlmICghdGhpcy5faXNNb2RpZmllZClcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbnRyb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pc01vZGlmaWVkID0gaXNNYXRjaGVkKHRoaXMuX2Jhc2VWYWx1ZSFbaV0sIHRoaXMuY29udHJvbHNbaV0udmFsdWUpXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNNb2RpZmllZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9uZU9iamVjdCh2YWx1ZTogYW55W10pIHtcclxuICAgICAgICB0aGlzLl9iYXNlVmFsdWUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCByb3cgb2YgdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fYmFzZVZhbHVlLnB1c2goY2xvbmUocm93KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1hcnJheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2Zvcm0tdmFsaWRhdG9ycy9zZXJ2aWNlcy9yeC1mb3JtLWFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFcEQsTUFBTSxVQUFVLEdBQVcsV0FBVyxDQUFDO0FBRXZDLE1BQU0sT0FBTyxXQUFZLFNBQVEsU0FBUztJQUtsQjtJQUF3RjtJQUpwRyxVQUFVLENBQVM7SUFDbkIsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQVUsRUFBRSxDQUFDO0lBRTlCLFlBQW9CLFdBQWtCLEVBQUUsUUFBYSxFQUFFLGVBQXFCLEVBQUUsY0FBb0IsRUFBVSxXQUE2RDtRQUNySyxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQURqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBTztRQUFzRSxnQkFBVyxHQUFYLFdBQVcsQ0FBa0Q7UUFFckssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBWSxFQUFFLFVBQTZELEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRTtRQUN0RyxJQUFJLFNBQVMsR0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFD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QTtJQUNOLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDekUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25CLE1BQU07Z0JBQ1YsQ0FBQztZQUNMLENBQUM7SUFDVCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQVk7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztDQUdKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9ybUFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5pbXBvcnQgeyBQQVRDSCwgVkFMVUVfQ0hBTkdFRF9TWU5DIH0gZnJvbSBcIi4uL2NvbnN0L2FwcC5jb25zdFwiO1xyXG5pbXBvcnQgeyBSZXNldEZvcm1UeXBlIH0gZnJvbSBcIi4uL2VudW1zL3Jlc2V0LXR5cGVcIjtcclxuaW1wb3J0IHsgT2JqZWN0TWFrZXIgfSBmcm9tICcuLi91dGlsL29iamVjdC1tYWtlcic7XHJcbmltcG9ydCB7IGNsb25lLCBpc01hdGNoZWQgfSBmcm9tICcuL2VudGl0eS5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IFBST1BfQVJSQVk6IHN0cmluZyA9IFwicHJvcEFycmF5XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUnhGb3JtQXJyYXkgZXh0ZW5kcyBGb3JtQXJyYXkge1xyXG4gICAgcHJpdmF0ZSBfYmFzZVZhbHVlPzogYW55W107XHJcbiAgICBwcml2YXRlIF9pc01vZGlmaWVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9tb2RpZmllZDogYW55W10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFycmF5T2JqZWN0OiBhbnlbXSwgY29udHJvbHM6IGFueSwgdmFsaWRhdG9yT3JPcHRzPzogYW55LCBhc3luY1ZhbGlkYXRvcj86IGFueSwgcHJpdmF0ZSBhcnJheUNvbmZpZz86IHsgYWxsb3dNYXhJbmRleD86IG51bWJlciwgbWVzc2FnZUtleT86IHN0cmluZyB9KSB7XHJcbiAgICAgICAgc3VwZXIoY29udHJvbHMsIHZhbGlkYXRvck9yT3B0cywgYXN5bmNWYWxpZGF0b3IpO1xyXG4gICAgICAgIHRoaXMuY2xvbmVPYmplY3QoYXJyYXlPYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc01vZGlmaWVkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc01vZGlmaWVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2goY29udHJvbDogYW55LCBvcHRpb25zOiB7IGVtaXRFdmVudD86IGJvb2xlYW4sIGlzQWRkZWRJbnN0YW5jZTogYm9vbGVhbiB9ID0geyBpc0FkZGVkSW5zdGFuY2U6IGZhbHNlIH0pIHtcclxuICAgICAgICBsZXQgZm9ybUdyb3VwOiBhbnkgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlPYmplY3QpXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm1vZGVsSW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5pc0FkZGVkSW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFycmF5T2JqZWN0LnB1c2goY29udHJvbC5tb2RlbEluc3RhbmNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlPYmplY3RbdGhpcy5hcnJheU9iamVjdC5sZW5ndGhdID0gY29udHJvbC5tb2RlbEluc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyLnB1c2goY29udHJvbCk7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cFtWQUxVRV9DSEFOR0VEX1NZTkNdKSB7XHJcbiAgICAgICAgICAgIGZvcm1Hcm91cC52YWx1ZUNoYW5nZWRTeW5jKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhdGNoKClcclxuICAgICAgICB0aGlzLmNoZWNrVmFsaWRhdGlvbigpXHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2goKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja01vZGlmaWNhdGlvbigpO1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xyXG4gICAgICAgICAgICAodGhpcy5wYXJlbnQgYXMgYW55KVtQQVRDSF0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRGb3JtKG9wdGlvbnM/OiB7XHJcbiAgICAgICAgaW5kZXg6IG51bWJlcixcclxuICAgICAgICBncm91cE9wdGlvbjoge1xyXG4gICAgICAgICAgICByZXNldFR5cGU/OiBSZXNldEZvcm1UeXBlLFxyXG4gICAgICAgICAgICB3aXRoPzogc3RyaW5nW10sXHJcbiAgICAgICAgICAgIHZhbHVlPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHVzaEZ1bmN0aW9uOiAodmFsdWU6IE9iamVjdCkgPT4gYm9vbGVhbjtcclxuICAgIH0pIHtcclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmluZGV4ID49IDAgJiYgb3B0aW9ucy5ncm91cE9wdGlvbikge1xyXG4gICAgICAgICAgICAoPGFueT50aGlzLmNvbnRyb2xzW29wdGlvbnMuaW5kZXhdKS5yZXNldEZvcm0ob3B0aW9ucy5ncm91cE9wdGlvbilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2Jhc2VWYWx1ZSEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xzW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLmNvbnRyb2xzW2ldKS5yZXNldEZvcm0oeyB2YWx1ZTogKHRoaXMuX2Jhc2VWYWx1ZSBhcyBhbnkpW2ldIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wdXNoRnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1Hcm91cCA9IG9wdGlvbnMucHVzaEZ1bmN0aW9uKCh0aGlzLl9iYXNlVmFsdWUgYXMgYW55KVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaChmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21taXQoKSB7XHJcbiAgICAgICAgdGhpcy5fYmFzZVZhbHVlID0gW11cclxuICAgICAgICBmb3IgKGxldCBmb3JtR3JvdXAgb2YgdGhpcy5jb250cm9scykge1xyXG4gICAgICAgICAgICAoPGFueT5mb3JtR3JvdXApLmNvbW1pdCgpO1xyXG4gICAgICAgICAgICB0aGlzLl9iYXNlVmFsdWUucHVzaChjbG9uZShmb3JtR3JvdXAudmFsdWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGF0Y2goKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcmVtb3ZlQXQoaW5kZXg6IG51bWJlciwgb3B0aW9uczogeyBlbWl0RXZlbnQ/OiBib29sZWFuLCBpc1JlbW92ZWRJbnN0YW5jZT86IGJvb2xlYW4gfSA9IHsgaXNSZW1vdmVkSW5zdGFuY2U6IGZhbHNlIH0pIHtcclxuICAgICAgICBsZXQgZm9ybUdyb3VwOiBhbnkgPSB0aGlzLnJvb3Q7XHJcbiAgICAgICAgaWYgKCFvcHRpb25zLmlzUmVtb3ZlZEluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlPYmplY3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IHRoaXMuYXJyYXlPYmplY3QubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFycmF5T2JqZWN0W2ldID0gdGhpcy5hcnJheU9iamVjdFtpICsgMV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlPYmplY3QucG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgc3VwZXIucmVtb3ZlQXQoaW5kZXgsIG9wdGlvbnMpO1xyXG4gICAgICAgIGlmIChmb3JtR3JvdXBbVkFMVUVfQ0hBTkdFRF9TWU5DXSkge1xyXG4gICAgICAgICAgICBmb3JtR3JvdXAudmFsdWVDaGFuZ2VkU3luYygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wYXRjaCgpXHJcbiAgICAgICAgdGhpcy5jaGVja1ZhbGlkYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrVmFsaWRhdGlvbigpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXJyYXlDb25maWcgIT0gdW5kZWZpbmVkICYmIHRoaXMuYXJyYXlDb25maWcuYWxsb3dNYXhJbmRleCAmJiB0aGlzLmxlbmd0aCA+IHRoaXMuYXJyYXlDb25maWcuYWxsb3dNYXhJbmRleClcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RXJyb3JzKE9iamVjdE1ha2VyLnRvSnNvbihQUk9QX0FSUkFZLCB0aGlzLmFycmF5Q29uZmlnLCBbdGhpcy5sZW5ndGgsIHRoaXMuYXJyYXlDb25maWcuYWxsb3dNYXhJbmRleF0pKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5lcnJvcnMgJiYgdGhpcy5lcnJvcnNbUFJPUF9BUlJBWV0pXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5lcnJvcnNbUFJPUF9BUlJBWV07XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrTW9kaWZpY2F0aW9uKCkge1xyXG4gICAgICAgIHRoaXMuX2lzTW9kaWZpZWQgPSAhKHRoaXMuX2Jhc2VWYWx1ZSEubGVuZ3RoID09IHRoaXMuY29udHJvbHMubGVuZ3RoKTtcclxuICAgICAgICBpZiAoIXRoaXMuX2lzTW9kaWZpZWQpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb250cm9scy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNNb2RpZmllZCA9IGlzTWF0Y2hlZCh0aGlzLl9iYXNlVmFsdWUhW2ldLCB0aGlzLmNvbnRyb2xzW2ldLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzTW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2xvbmVPYmplY3QodmFsdWU6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5fYmFzZVZhbHVlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgcm93IG9mIHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Jhc2VWYWx1ZS5wdXNoKGNsb25lKHJvdykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==