ca-components 1.3.997 → 1.3.998

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 (140) hide show
  1. package/esm2022/lib/animations/index.mjs +11 -0
  2. package/esm2022/lib/animations/slide-in-out.animation.mjs +20 -0
  3. package/esm2022/lib/ca-components.module.mjs +7 -1
  4. package/esm2022/lib/components/ca-checkbox/ca-checkbox.component.mjs +3 -3
  5. package/esm2022/lib/components/ca-dropdown-menu/ca-dropdown-menu.component.mjs +8 -5
  6. package/esm2022/lib/components/ca-dropdown-menu/enums/dropdown-menu.enum.mjs +2 -2
  7. package/esm2022/lib/components/ca-dropdown-menu/interfaces/dropdown-menu-item.interface.mjs +1 -1
  8. package/esm2022/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.mjs +19 -35
  9. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.mjs +1 -1
  10. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.mjs +1 -1
  11. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.mjs +1 -1
  12. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.mjs +1 -1
  13. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.mjs +1 -1
  14. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.mjs +1 -1
  15. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.mjs +1 -1
  16. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.mjs +1 -1
  17. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.mjs +1 -1
  18. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.mjs +1 -1
  19. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.mjs +1 -1
  20. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.mjs +1 -1
  21. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.mjs +1 -1
  22. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.mjs +1 -1
  23. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.mjs +1 -1
  24. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.mjs +1 -1
  25. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.mjs +1 -1
  26. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.mjs +1 -1
  27. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.mjs +1 -1
  28. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.mjs +1 -1
  29. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.mjs +1 -1
  30. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.mjs +1 -1
  31. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.mjs +1 -1
  32. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.mjs +1 -1
  33. package/esm2022/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.mjs +1 -1
  34. package/esm2022/lib/components/ca-input-dropdown-test/interfaces/input-dropdown-option.interface.mjs +2 -0
  35. package/esm2022/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.mjs +4 -2
  36. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.mjs +1 -1
  37. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.mjs +1 -1
  38. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.mjs +1 -1
  39. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.mjs +1 -1
  40. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.mjs +1 -1
  41. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.mjs +1 -1
  42. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.mjs +1 -1
  43. package/esm2022/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.mjs +1 -1
  44. package/esm2022/lib/components/ca-input-dropdown-test/types/index.mjs +2 -0
  45. package/esm2022/lib/components/ca-input-dropdown-test/types/input-dropdown-forms.type.mjs +2 -0
  46. package/esm2022/lib/components/ca-input-dropdown-test/types/select-dropdown-value.type.mjs +2 -0
  47. package/esm2022/lib/components/ca-input-dropdown-test/validators/dropdown-empty-value.validator.mjs +1 -1
  48. package/esm2022/lib/components/ca-last-fuel-price-progress/ca-last-fuel-price-progress.component.mjs +22 -13
  49. package/esm2022/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-config.interface.mjs +1 -1
  50. package/esm2022/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-data.interface.mjs +1 -1
  51. package/esm2022/lib/components/ca-map/ca-map.component.mjs +53 -81
  52. package/esm2022/lib/components/ca-map/utils/helpers/map-marker-icon.helper.mjs +5 -4
  53. package/esm2022/lib/components/ca-map/utils/services/map-marker-icon.service.mjs +23 -5
  54. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +41 -8
  55. package/esm2022/lib/components/ca-map-dropdown/enums/map-dropdown-string.enum.mjs +3 -1
  56. package/esm2022/lib/components/ca-map-dropdown/models/map-dropdown-content.model.mjs +1 -1
  57. package/esm2022/lib/components/ca-new-filter/components/ca-filter-list-dropdown/ca-filter-list-dropdown.component.mjs +31 -23
  58. package/esm2022/lib/components/ca-pickup-delivery-block/ca-pickup-delivery-block.component.mjs +3 -3
  59. package/esm2022/lib/components/ca-search-multiple-states-2/ca-search-multiple-states-2.component.mjs +112 -0
  60. package/esm2022/lib/components/ca-search-multiple-states-2/enums/index.mjs +2 -0
  61. package/esm2022/lib/components/ca-search-multiple-states-2/enums/search-multiple-state-action.enum.mjs +5 -0
  62. package/esm2022/lib/components/ca-search-multiple-states-2/util/index.mjs +2 -0
  63. package/esm2022/lib/components/ca-search-multiple-states-2/util/routes/multiple-search-state-svg.route.mjs +6 -0
  64. package/esm2022/lib/enums/general-actions.enum.mjs +27 -11
  65. package/esm2022/lib/enums/string-placeholder.enum.mjs +2 -1
  66. package/esm2022/lib/pipes/date-from-string.pipe.mjs +4 -1
  67. package/esm2022/public-api.mjs +2 -1
  68. package/fesm2022/ca-components.mjs +450 -275
  69. package/fesm2022/ca-components.mjs.map +1 -1
  70. package/lib/animations/index.d.ts +10 -0
  71. package/lib/animations/slide-in-out.animation.d.ts +1 -0
  72. package/lib/ca-components.module.d.ts +24 -23
  73. package/lib/components/ca-dropdown-menu/enums/dropdown-menu.enum.d.ts +1 -1
  74. package/lib/components/ca-dropdown-menu/interfaces/dropdown-menu-item.interface.d.ts +1 -1
  75. package/lib/components/ca-filters/ca-filter.component.d.ts +2 -2
  76. package/lib/components/ca-input-dropdown-test/ca-input-dropdown-test.component.d.ts +29 -34
  77. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-default-template/ca-input-dropdown-default-template.component.d.ts +6 -6
  78. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-details-template/ca-input-dropdown-details-template.component.d.ts +6 -6
  79. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-dispatch/ca-input-dropdown-dispatch.component.d.ts +6 -6
  80. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-double-text-template/ca-input-dropdown-double-text-template.component.d.ts +6 -6
  81. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-fuel-franchise/ca-input-dropdown-fuel-franchise.component.d.ts +10 -10
  82. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-groups/ca-input-dropdown-groups.component.d.ts +6 -6
  83. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-labels/ca-input-dropdown-labels.component.d.ts +6 -6
  84. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker-item/ca-input-dropdown-load-broker-item.component.d.ts +3 -3
  85. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker/ca-input-dropdown-load-broker.component.d.ts +6 -6
  86. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact-item/ca-input-dropdown-load-broker-contact-item.component.d.ts +3 -3
  87. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-contact/ca-input-dropdown-load-broker-contact.component.d.ts +6 -6
  88. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper-item/ca-input-dropdown-load-broker-shipper-item.component.d.ts +4 -4
  89. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-broker-shipper/ca-input-dropdown-load-broker-shipper.component.d.ts +6 -6
  90. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher-item/ca-input-dropdown-load-dispatcher-item.component.d.ts +4 -4
  91. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatcher/ca-input-dropdown-load-dispatcher.component.d.ts +6 -6
  92. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd-item/ca-input-dropdown-load-dispatches-ttd-item.d.ts +4 -4
  93. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-load-dispatches-ttd/ca-input-dropdown-load-dispatches-ttd.component.d.ts +6 -6
  94. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-multiselect/ca-input-dropdown-multiselect.component.d.ts +6 -6
  95. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-payroll-trucks/ca-input-dropdown-payroll-trucks.component.d.ts +6 -6
  96. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svg-template/ca-input-dropdown-svg-template.component.d.ts +6 -6
  97. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-dispatch-template/ca-input-dropdown-svgtext-dispatch-template.component.d.ts +6 -6
  98. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template-item/ca-input-dropdown-svgtext-template-item.component.d.ts +4 -4
  99. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-svgtext-template/ca-input-dropdown-svgtext-template.component.d.ts +6 -6
  100. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-text-counter/ca-input-dropdown-text-counter.component.d.ts +6 -6
  101. package/lib/components/ca-input-dropdown-test/components/ca-input-dropdown-triple-text-template/ca-input-dropdown-triple-text-template.component.d.ts +6 -6
  102. package/lib/components/ca-input-dropdown-test/{models/input-dropdown-option.model.d.ts → interfaces/input-dropdown-option.interface.d.ts} +1 -1
  103. package/lib/components/ca-input-dropdown-test/pipes/dropdown-options.pipe.d.ts +3 -3
  104. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-default-template-class.pipe.d.ts +2 -2
  105. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-fuel-franchise-class.pipe.d.ts +2 -2
  106. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-get-icon.pipe.d.ts +2 -2
  107. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-label-class.pipe.d.ts +2 -2
  108. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-load-broker-container.pipe.d.ts +2 -2
  109. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-multiselect-class.pipe.d.ts +2 -2
  110. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-container.pipe.d.ts +2 -2
  111. package/lib/components/ca-input-dropdown-test/pipes/input-dropdown-svgtext-template-icon.pipe.d.ts +2 -2
  112. package/lib/components/ca-input-dropdown-test/types/index.d.ts +1 -0
  113. package/lib/components/ca-input-dropdown-test/types/input-dropdown-forms.type.d.ts +7 -0
  114. package/lib/components/ca-input-dropdown-test/types/select-dropdown-value.type.d.ts +7 -0
  115. package/lib/components/ca-last-fuel-price-progress/ca-last-fuel-price-progress.component.d.ts +1 -0
  116. package/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-config.interface.d.ts +1 -0
  117. package/lib/components/ca-last-fuel-price-progress/interfaces/last-fuel-price-progress-data.interface.d.ts +2 -0
  118. package/lib/components/ca-map/ca-map.component.d.ts +12 -18
  119. package/lib/components/ca-map/utils/helpers/map-marker-icon.helper.d.ts +1 -1
  120. package/lib/components/ca-map/utils/services/map-marker-icon.service.d.ts +2 -2
  121. package/lib/components/ca-map-dropdown/ca-map-dropdown.component.d.ts +5 -1
  122. package/lib/components/ca-map-dropdown/enums/map-dropdown-string.enum.d.ts +3 -1
  123. package/lib/components/ca-map-dropdown/models/map-dropdown-content.model.d.ts +2 -1
  124. package/lib/components/ca-new-filter/components/ca-filter-list-dropdown/ca-filter-list-dropdown.component.d.ts +5 -5
  125. package/lib/components/ca-search-multiple-states-2/ca-search-multiple-states-2.component.d.ts +32 -0
  126. package/lib/components/ca-search-multiple-states-2/enums/index.d.ts +1 -0
  127. package/lib/components/ca-search-multiple-states-2/enums/search-multiple-state-action.enum.d.ts +3 -0
  128. package/lib/components/ca-search-multiple-states-2/util/index.d.ts +1 -0
  129. package/lib/components/ca-search-multiple-states-2/util/routes/multiple-search-state-svg.route.d.ts +5 -0
  130. package/lib/enums/general-actions.enum.d.ts +26 -10
  131. package/lib/enums/string-placeholder.enum.d.ts +2 -1
  132. package/package.json +1 -1
  133. package/public-api.d.ts +1 -0
  134. package/esm2022/lib/components/ca-input-dropdown-test/models/index.mjs +0 -4
  135. package/esm2022/lib/components/ca-input-dropdown-test/models/input-dropdown-option.model.mjs +0 -2
  136. package/esm2022/lib/components/ca-input-dropdown-test/models/load-modal-status.model.mjs +0 -2
  137. package/esm2022/lib/components/ca-input-dropdown-test/models/status-order.model.mjs +0 -2
  138. package/lib/components/ca-input-dropdown-test/models/index.d.ts +0 -3
  139. package/lib/components/ca-input-dropdown-test/models/load-modal-status.model.d.ts +0 -5
  140. package/lib/components/ca-input-dropdown-test/models/status-order.model.d.ts +0 -4
@@ -5,6 +5,7 @@ export var eMapDropdownString;
5
5
  eMapDropdownString["RATING_REVIEW"] = "rating-review";
6
6
  eMapDropdownString["DIVIDER"] = "divider";
7
7
  eMapDropdownString["REPAIR_SHOP_SERVICES"] = "repair-shop-services";
8
+ eMapDropdownString["FUEL_PRICE_RANGE"] = "fuel-price-range";
8
9
  eMapDropdownString["ICON_TEXT"] = "icon-text";
9
10
  eMapDropdownString["TITLE"] = "title";
10
11
  eMapDropdownString["TITLE_COUNT"] = "title-count";
@@ -14,5 +15,6 @@ export var eMapDropdownString;
14
15
  eMapDropdownString["SUBTITLE"] = "subtitle";
15
16
  eMapDropdownString["TEXT"] = "text";
16
17
  eMapDropdownString["SMALL_SUBTITLE"] = "small-subtitle";
18
+ eMapDropdownString["DATE"] = "date";
17
19
  })(eMapDropdownString || (eMapDropdownString = {}));
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWRyb3Bkb3duLXN0cmluZy5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbWFwLWRyb3Bkb3duL2VudW1zL21hcC1kcm9wZG93bi1zdHJpbmcuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxrQkFlVDtBQWZILFdBQVksa0JBQWtCO0lBQzFCLDZCQUE2QjtJQUM3QixtREFBNkIsQ0FBQTtJQUM3QixxREFBK0IsQ0FBQTtJQUMvQix5Q0FBbUIsQ0FBQTtJQUNuQixtRUFBNkMsQ0FBQTtJQUM3Qyw2Q0FBdUIsQ0FBQTtJQUN2QixxQ0FBZSxDQUFBO0lBQ2YsaURBQTJCLENBQUE7SUFDM0IsK0NBQXlCLENBQUE7SUFDekIsK0NBQXlCLENBQUE7SUFDekIsK0NBQXlCLENBQUE7SUFDekIsMkNBQXFCLENBQUE7SUFDckIsbUNBQWEsQ0FBQTtJQUNiLHVEQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFmUyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBZTNCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gZU1hcERyb3Bkb3duU3RyaW5nIHtcbiAgICAvLyBEcm9wZG93biBDb250ZW50IFRlbXBsYXRlc1xuICAgIEhFQURFUl9USVRMRSA9ICdoZWFkZXItdGl0bGUnLFxuICAgIFJBVElOR19SRVZJRVcgPSAncmF0aW5nLXJldmlldycsXG4gICAgRElWSURFUiA9ICdkaXZpZGVyJyxcbiAgICBSRVBBSVJfU0hPUF9TRVJWSUNFUyA9ICdyZXBhaXItc2hvcC1zZXJ2aWNlcycsXG4gICAgSUNPTl9URVhUID0gJ2ljb24tdGV4dCcsXG4gICAgVElUTEUgPSAndGl0bGUnLFxuICAgIFRJVExFX0NPVU5UID0gJ3RpdGxlLWNvdW50JyxcbiAgICBNT05FWV9URVhUID0gJ21vbmV5LXRleHQnLFxuICAgIE9QRU5fSE9VUlMgPSAnb3Blbi1ob3VycycsXG4gICAgVEVYVF9DT1VOVCA9ICd0ZXh0LWNvdW50JyxcbiAgICBTVUJUSVRMRSA9ICdzdWJ0aXRsZScsXG4gICAgVEVYVCA9ICd0ZXh0JyxcbiAgICBTTUFMTF9TVUJUSVRMRSA9ICdzbWFsbC1zdWJ0aXRsZScsXG4gIH1cbiAgIl19
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWRyb3Bkb3duLXN0cmluZy5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbWFwLWRyb3Bkb3duL2VudW1zL21hcC1kcm9wZG93bi1zdHJpbmcuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxrQkFpQlQ7QUFqQkgsV0FBWSxrQkFBa0I7SUFDMUIsNkJBQTZCO0lBQzdCLG1EQUE2QixDQUFBO0lBQzdCLHFEQUErQixDQUFBO0lBQy9CLHlDQUFtQixDQUFBO0lBQ25CLG1FQUE2QyxDQUFBO0lBQzdDLDJEQUFxQyxDQUFBO0lBQ3JDLDZDQUF1QixDQUFBO0lBQ3ZCLHFDQUFlLENBQUE7SUFDZixpREFBMkIsQ0FBQTtJQUMzQiwrQ0FBeUIsQ0FBQTtJQUN6QiwrQ0FBeUIsQ0FBQTtJQUN6QiwrQ0FBeUIsQ0FBQTtJQUN6QiwyQ0FBcUIsQ0FBQTtJQUNyQixtQ0FBYSxDQUFBO0lBQ2IsdURBQWlDLENBQUE7SUFDakMsbUNBQWEsQ0FBQTtBQUNmLENBQUMsRUFqQlMsa0JBQWtCLEtBQWxCLGtCQUFrQixRQWlCM0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBlTWFwRHJvcGRvd25TdHJpbmcge1xuICAgIC8vIERyb3Bkb3duIENvbnRlbnQgVGVtcGxhdGVzXG4gICAgSEVBREVSX1RJVExFID0gJ2hlYWRlci10aXRsZScsXG4gICAgUkFUSU5HX1JFVklFVyA9ICdyYXRpbmctcmV2aWV3JyxcbiAgICBESVZJREVSID0gJ2RpdmlkZXInLFxuICAgIFJFUEFJUl9TSE9QX1NFUlZJQ0VTID0gJ3JlcGFpci1zaG9wLXNlcnZpY2VzJyxcbiAgICBGVUVMX1BSSUNFX1JBTkdFID0gJ2Z1ZWwtcHJpY2UtcmFuZ2UnLFxuICAgIElDT05fVEVYVCA9ICdpY29uLXRleHQnLFxuICAgIFRJVExFID0gJ3RpdGxlJyxcbiAgICBUSVRMRV9DT1VOVCA9ICd0aXRsZS1jb3VudCcsXG4gICAgTU9ORVlfVEVYVCA9ICdtb25leS10ZXh0JyxcbiAgICBPUEVOX0hPVVJTID0gJ29wZW4taG91cnMnLFxuICAgIFRFWFRfQ09VTlQgPSAndGV4dC1jb3VudCcsXG4gICAgU1VCVElUTEUgPSAnc3VidGl0bGUnLFxuICAgIFRFWFQgPSAndGV4dCcsXG4gICAgU01BTExfU1VCVElUTEUgPSAnc21hbGwtc3VidGl0bGUnLFxuICAgIERBVEUgPSAnZGF0ZScsXG4gIH1cbiAgIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWRyb3Bkb3duLWNvbnRlbnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1tYXAtZHJvcGRvd24vbW9kZWxzL21hcC1kcm9wZG93bi1jb250ZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1hcERyb3Bkb3duQ29udGVudCB7XG4gIG1haW5Db250ZW50PzogTWFwRHJvcGRvd25Db250ZW50SXRlbVtdO1xuICBleHBhbmRlZENvbnRlbnQ/OiBNYXBEcm9wZG93bkNvbnRlbnRJdGVtW107XG4gIGNsdXN0ZXJEYXRhPzogTWFwRHJvcGRvd25DbHVzdGVySXRlbVtdO1xuICBzZWxlY3RlZENsdXN0ZXJJdGVtRGF0YT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBEcm9wZG93bkNvbnRlbnRJdGVtIHtcbiAgdGVtcGxhdGU6XG4gICAgfCAnaGVhZGVyLXRpdGxlJ1xuICAgIHwgJ3JhdGluZy1yZXZpZXcnXG4gICAgfCAnZGl2aWRlcidcbiAgICB8ICdyZXBhaXItc2hvcC1zZXJ2aWNlcydcbiAgICB8ICdpY29uLXRleHQnXG4gICAgfCAndGl0bGUnXG4gICAgfCAndGl0bGUtY291bnQnXG4gICAgfCAnc3VidGl0bGUnXG4gICAgfCAndGV4dCdcbiAgICB8ICdtb25leS10ZXh0J1xuICAgIHwgJ29wZW4taG91cnMnXG4gICAgfCAnc21hbGwtc3VidGl0bGUnXG4gICAgfCAndGV4dC1jb3VudCdcbiAgICB8ICdzaWRlLWJ5LXNpZGUnO1xuICBmaWVsZDogc3RyaW5nO1xuICBzZWNvbmRGaWVsZD86IHN0cmluZztcbiAgdGhpcmRGaWVsZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGljb25Ub29sdGlwVGV4dD86IHN0cmluZztcbiAgaGFzQmFja0J1dHRvbj86IGJvb2xlYW47XG4gIGN1c3RvbUNsYXNzQ29udGFpbmVyPzogc3RyaW5nO1xuICBjdXN0b21DbGFzc1RleHQ/OiBzdHJpbmc7XG4gIHNpZGVCeVNpZGVJbmZvPzoge1xuICAgIGxlZnRTaWRlOiBNYXBEcm9wZG93bkNvbnRlbnRJdGVtO1xuICAgIHJpZ2h0U2lkZTogTWFwRHJvcGRvd25Db250ZW50SXRlbTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBEcm9wZG93bkNsdXN0ZXJJdGVtIHtcbiAgaWQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBmYXZvdXJpdGU/OiBib29sZWFuO1xuICBpc0Nsb3NlZD86IGJvb2xlYW47XG4gIHByaWNlUGVyR2FsbG9uPzogbnVtYmVyIHwgbnVsbDtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWRyb3Bkb3duLWNvbnRlbnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1tYXAtZHJvcGRvd24vbW9kZWxzL21hcC1kcm9wZG93bi1jb250ZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1hcERyb3Bkb3duQ29udGVudCB7XG4gIG1haW5Db250ZW50PzogTWFwRHJvcGRvd25Db250ZW50SXRlbVtdO1xuICBleHBhbmRlZENvbnRlbnQ/OiBNYXBEcm9wZG93bkNvbnRlbnRJdGVtW107XG4gIGNsdXN0ZXJEYXRhPzogTWFwRHJvcGRvd25DbHVzdGVySXRlbVtdO1xuICBzZWxlY3RlZENsdXN0ZXJJdGVtRGF0YT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBEcm9wZG93bkNvbnRlbnRJdGVtIHtcbiAgdGVtcGxhdGU6XG4gICAgfCAnaGVhZGVyLXRpdGxlJ1xuICAgIHwgJ3JhdGluZy1yZXZpZXcnXG4gICAgfCAnZGl2aWRlcidcbiAgICB8ICdyZXBhaXItc2hvcC1zZXJ2aWNlcydcbiAgICB8ICdmdWVsLXByaWNlLXJhbmdlJ1xuICAgIHwgJ2ljb24tdGV4dCdcbiAgICB8ICd0aXRsZSdcbiAgICB8ICd0aXRsZS1jb3VudCdcbiAgICB8ICdzdWJ0aXRsZSdcbiAgICB8ICd0ZXh0J1xuICAgIHwgJ21vbmV5LXRleHQnXG4gICAgfCAnb3Blbi1ob3VycydcbiAgICB8ICdzbWFsbC1zdWJ0aXRsZSdcbiAgICB8ICd0ZXh0LWNvdW50J1xuICAgIHwgJ3NpZGUtYnktc2lkZSdcbiAgICB8ICdkYXRlJztcbiAgZmllbGQ6IHN0cmluZztcbiAgc2Vjb25kRmllbGQ/OiBzdHJpbmc7XG4gIHRoaXJkRmllbGQ/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgY291bnQ/OiBudW1iZXI7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpY29uVG9vbHRpcFRleHQ/OiBzdHJpbmc7XG4gIGhhc0JhY2tCdXR0b24/OiBib29sZWFuO1xuICBjdXN0b21DbGFzc0NvbnRhaW5lcj86IHN0cmluZztcbiAgY3VzdG9tQ2xhc3NUZXh0Pzogc3RyaW5nO1xuICBpc0RhdGU/OiBib29sZWFuO1xuICBzaWRlQnlTaWRlSW5mbz86IHtcbiAgICBsZWZ0U2lkZTogTWFwRHJvcGRvd25Db250ZW50SXRlbTtcbiAgICByaWdodFNpZGU6IE1hcERyb3Bkb3duQ29udGVudEl0ZW07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwRHJvcGRvd25DbHVzdGVySXRlbSB7XG4gIGlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgZmF2b3VyaXRlPzogYm9vbGVhbjtcbiAgaXNDbG9zZWQ/OiBib29sZWFuO1xuICBwcmljZVBlckdhbGxvbj86IG51bWJlciB8IG51bGw7XG59XG4iXX0=
@@ -25,19 +25,19 @@ import * as i1 from "@angular/forms";
25
25
  import * as i2 from "@angular/common";
26
26
  export class CaFilterListDropdownComponent extends NewFilterBaseComponent {
27
27
  set type(value) {
28
- this.setInitalType(value);
28
+ this.setInitialType(value);
29
29
  }
30
30
  set list(value) {
31
- this.setInitalList(value);
31
+ this.setInitialList(value);
32
32
  }
33
33
  constructor(formBuilder) {
34
34
  super();
35
35
  this.formBuilder = formBuilder;
36
36
  this.caFiltersSvgRoutes = CaFiltersSvgRoutes;
37
37
  this.loadStatusEnum = eLoadStatus;
38
- this.srollLimitSize = 8;
39
- this.previusUnSelectedState = [];
40
- this.previusSelectedState = [];
38
+ this.scrollLimitSize = 8;
39
+ this.previousUnSelectedState = [];
40
+ this.previousSelectedState = [];
41
41
  this.selectedList = [];
42
42
  this.unselectedList = [];
43
43
  this.searchForm = this.formBuilder.group({
@@ -76,7 +76,8 @@ export class CaFilterListDropdownComponent extends NewFilterBaseComponent {
76
76
  this.activeCount = 0;
77
77
  }
78
78
  passFilterValue() {
79
- this.emitData(this.selectedList.map((list) => list.id));
79
+ const selectedListIds = this.selectedList?.map((list) => list.id);
80
+ this.emitData(selectedListIds);
80
81
  this.selectedCount = this.activeCount;
81
82
  }
82
83
  sortValues(sorting) {
@@ -84,10 +85,10 @@ export class CaFilterListDropdownComponent extends NewFilterBaseComponent {
84
85
  this.directionMultiplier = sorting.directionMultiplier;
85
86
  }
86
87
  onResetFilterState() {
87
- // Reset to previus value, since user didn't save it, he click on outside
88
- this.selectedList = [...this.previusSelectedState];
89
- this.unselectedList = [...this.previusUnSelectedState];
90
- this.selectedCount = this.previusSelectedState.length;
88
+ // Reset to previous value, since user didn't save it, he click on outside
89
+ this.selectedList = [...this.previousSelectedState];
90
+ this.unselectedList = [...this.previousUnSelectedState];
91
+ this.selectedCount = this.previousSelectedState.length;
91
92
  this.activeCount = this.selectedList.length;
92
93
  this.resetInputValue();
93
94
  }
@@ -96,19 +97,26 @@ export class CaFilterListDropdownComponent extends NewFilterBaseComponent {
96
97
  filterType: this.type,
97
98
  selectedIds: list,
98
99
  });
99
- this.previusSelectedState = [...this.selectedList];
100
- this.previusUnSelectedState = [...this.unselectedList];
100
+ this.previousSelectedState = [...this.selectedList];
101
+ this.previousUnSelectedState = [...this.unselectedList];
101
102
  this.resetInputValue();
102
103
  }
103
104
  updateLists() {
104
- this.selectedList = this._list.filter((item) => item.selected);
105
- this.unselectedList = this._list.filter((item) => !item.selected);
105
+ if (!this._list)
106
+ return;
107
+ this.selectedList = [];
108
+ this.unselectedList = [];
109
+ this._list?.forEach((item) => {
110
+ item.selected
111
+ ? (this.selectedList = [...this.selectedList, item])
112
+ : (this.unselectedList = [...this.unselectedList, item]);
113
+ });
106
114
  }
107
115
  moveItem(item, fromList, toList) {
108
116
  const index = fromList.indexOf(item);
109
117
  if (index !== -1) {
110
- fromList.splice(index, 1);
111
- toList.push(item);
118
+ fromList?.splice(index, 1);
119
+ toList?.push(item);
112
120
  // Update references so list is updated
113
121
  this.selectedList = [...this.selectedList];
114
122
  this.unselectedList = [...this.unselectedList];
@@ -118,20 +126,20 @@ export class CaFilterListDropdownComponent extends NewFilterBaseComponent {
118
126
  calculateSelectedCount() {
119
127
  this.activeCount = this.selectedList.length;
120
128
  }
121
- setInitalList(value) {
129
+ setInitialList(value) {
122
130
  // Pm and truck type don't have id so we need to map names
123
- this._list = value.map((item) => ({
131
+ this._list = value?.map((item) => ({
124
132
  ...item,
125
133
  id: item.id ?? item.name,
126
134
  initials: FilterHelper.getInitials(item.name),
127
135
  }));
128
136
  this.updateLists();
129
137
  this.initialListSize = value.length;
130
- this.previusUnSelectedState = [...this._list];
138
+ this.previousUnSelectedState = [...this._list];
131
139
  this.activeCount = 0;
132
140
  this.selectedCount = 0;
133
141
  }
134
- setInitalType(value) {
142
+ setInitialType(value) {
135
143
  this._type = value;
136
144
  this.config = FilterDropdownIconsConst[this._type];
137
145
  }
@@ -139,7 +147,7 @@ export class CaFilterListDropdownComponent extends NewFilterBaseComponent {
139
147
  this.searchForm.reset();
140
148
  }
141
149
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaFilterListDropdownComponent, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
142
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaFilterListDropdownComponent, isStandalone: true, selector: "app-ca-filter-list-dropdown", inputs: { type: "type", list: "list" }, usesInheritance: true, ngImport: i0, template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [activeCount]=\"activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues(true)\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n (resetFilterState)=\"onResetFilterState()\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > srollLimitSize &&\n config &&\n config.isSearchActive &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > srollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; track $index) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @if (type === 'Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.initials\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n } @else if (type === 'Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n } @else if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "dateTimePopover", "incorrectValue", "selectedDropdownLabelColor", "template"], outputs: ["handleToggleDropdownOptions", "incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaFilterDropdownComponent, selector: "app-ca-filter-dropdown", inputs: ["activeCount", "type", "config", "bodyTemplate", "isFormChanged", "appliedFiltersCount", "customTitle", "customCancelButton"], outputs: ["setFilter", "handleFiltersClear", "resetFilterState", "sorting"] }, { kind: "component", type: CaProfileImageComponent, selector: "app-ca-profile-image", inputs: ["indx", "avatarImg", "avatarColor", "textShortName", "name", "isRound", "size", "height", "fontSize", "isHoverEffect"] }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: DropdownLoadStatusColorPipe, name: "dropdownLoadStatusColor" }, { kind: "pipe", type: FilterSearchPipe, name: "filterSearch" }] }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CaFilterListDropdownComponent, isStandalone: true, selector: "app-ca-filter-list-dropdown", inputs: { type: "type", list: "list" }, usesInheritance: true, ngImport: i0, template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [activeCount]=\"activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues(true)\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n (resetFilterState)=\"onResetFilterState()\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > scrollLimitSize &&\n config &&\n config.isSearchActive &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > scrollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm?.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; let indx = $index; track indx) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @switch (type) {\n @case ('Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.initials\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n }\n @case ('Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n }\n @default {\n @if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n }\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item?.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "dateTimePopover", "incorrectValue", "selectedDropdownLabelColor", "template"], outputs: ["handleToggleDropdownOptions", "incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaFilterDropdownComponent, selector: "app-ca-filter-dropdown", inputs: ["activeCount", "type", "config", "bodyTemplate", "isFormChanged", "appliedFiltersCount", "customTitle", "customCancelButton"], outputs: ["setFilter", "handleFiltersClear", "resetFilterState", "sorting"] }, { kind: "component", type: CaProfileImageComponent, selector: "app-ca-profile-image", inputs: ["indx", "avatarImg", "avatarColor", "textShortName", "name", "isRound", "size", "height", "fontSize", "isHoverEffect"] }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "applyCss", "svgClass", "class", "viewBox", "svgAriaLabel", "svgStyle"] }, { kind: "pipe", type: DropdownLoadStatusColorPipe, name: "dropdownLoadStatusColor" }, { kind: "pipe", type: FilterSearchPipe, name: "filterSearch" }] }); }
143
151
  }
144
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaFilterListDropdownComponent, decorators: [{
145
153
  type: Component,
@@ -154,10 +162,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
154
162
  FilterTruckColorPipe,
155
163
  FilterTrailerColorPipe,
156
164
  FilterSearchPipe,
157
- ], template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [activeCount]=\"activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues(true)\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n (resetFilterState)=\"onResetFilterState()\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > srollLimitSize &&\n config &&\n config.isSearchActive &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > srollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; track $index) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @if (type === 'Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.initials\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n } @else if (type === 'Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n } @else if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n" }]
165
+ ], template: "<app-ca-filter-dropdown\n [type]=\"type\"\n [config]=\"config\"\n [bodyTemplate]=\"bodyTemplate\"\n [isFormChanged]=\"!!activeCount\"\n [activeCount]=\"activeCount\"\n [appliedFiltersCount]=\"selectedCount\"\n (handleFiltersClear)=\"clearValues(true)\"\n (setFilter)=\"passFilterValue()\"\n (sorting)=\"sortValues($event)\"\n (resetFilterState)=\"onResetFilterState()\"\n>\n @let isTruck = type === 'TruckType';\n @let isTrailer = type === 'TrailerType';\n @let isPm = type === 'Pm';\n @let isService = type === 'Service';\n @let isTruckOrTrailer = isTruck || isTrailer;\n @let hasLeftIcon = isPm || isService;\n <ng-template #bodyTemplate>\n @if (\n initialListSize > scrollLimitSize &&\n config &&\n config.isSearchActive &&\n config.formFieldConfig\n ) {\n <div [formGroup]=\"searchForm\">\n <app-ca-input\n formControlName=\"search\"\n [inputConfig]=\"config.formFieldConfig\"\n ></app-ca-input>\n </div>\n }\n <div\n class=\"filter-dropdown-list\"\n [class.ca-scroll-bar]=\"initialListSize > scrollLimitSize\"\n >\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n @let searchString = searchForm?.get('search')?.value;\n\n <!-- Selected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n selectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: unSelectItem,\n selectedList: true,\n }\n \"\n ></ng-container>\n\n <!-- Unselected List -->\n <ng-container\n *ngTemplateOutlet=\"\n listTemplate;\n context: {\n items:\n unselectedList\n | filterSearch\n : searchString\n : 'name'\n : sortKey\n : directionMultiplier,\n clickFn: selectItem,\n selectedList: false,\n }\n \"\n ></ng-container>\n </div>\n </ng-template>\n\n <ng-template\n #listTemplate\n let-items=\"items\"\n let-clickFn=\"clickFn\"\n let-isSelectedList=\"selectedList\"\n >\n @if (items.length) {\n <div class=\"d-flex flex-column gap-xs mb-1 margin-t-4\">\n @for (item of items; let indx = $index; track indx) {\n <div\n class=\"filter-dropdown-list-item padding-4 br-2 d-flex justify-content-between align-items-center c-pointer\"\n [ngClass]=\"{\n 'filter-dropdown-list-item-hover': isSelectedList,\n\n 'svg-hover-grey-4 svg-fill-muted':\n hasLeftIcon && !isSelectedList,\n\n 'svg-hover-blue-19 svg-fill-blue-8':\n hasLeftIcon && isSelectedList,\n }\"\n (click)=\"clickFn(item)\"\n >\n <div\n class=\"d-flex align-items-center w-100 margin-r-4\"\n [class.justify-content-between]=\"isTruckOrTrailer\"\n >\n @switch (type) {\n @case ('Dispatcher') {\n <app-ca-profile-image\n [indx]=\"$index\"\n [textShortName]=\"item.initials\"\n [avatarImg]=\"item.avatar?.url\"\n [size]=\"'small'\"\n class=\"margin-r-4\"\n ></app-ca-profile-image>\n }\n @case ('Status') {\n <div\n [ngStyle]=\"\n loadStatusEnum[item.id!]\n | dropdownLoadStatusColor: true\n \"\n class=\"filter-dropdown-list-item-status-circle br-circle margin-r-4\"\n ></div>\n }\n @default {\n @if (hasLeftIcon) {\n <svg-icon\n [src]=\"item.icon\"\n class=\"margin-r-4 svg-size-18\"\n ></svg-icon>\n }\n }\n }\n\n <div\n class=\"text-color-white text-size-14\"\n [class.ca-font-extra-bold]=\"isSelectedList\"\n [class.text-uppercase]=\"type === 'Status'\"\n >\n {{ item.name }}\n </div>\n\n @if (isTruckOrTrailer) {\n @if (item?.icon) {\n <div\n class=\"filter-dropdown-list-item-icons\"\n [ngStyle]=\"{\n '--svg-fill-color':\n truckOrTrailerIconPipe.transform(\n item.name\n ),\n }\"\n >\n <svg-icon [src]=\"item.icon\"></svg-icon>\n </div>\n }\n }\n </div>\n <ng-container\n *ngTemplateOutlet=\"\n itemTemplate;\n context: {\n count: item.count,\n isSelected: isSelectedList,\n }\n \"\n ></ng-container>\n\n @if (isSelectedList) {\n <svg-icon\n [src]=\"caFiltersSvgRoutes.removeSelectedValue\"\n class=\"svg-size-10 svg-fill-red-10 filter-dropdown-list-item-remove justify-content-center filter-dropdown-list-badge\"\n ></svg-icon>\n }\n </div>\n }\n </div>\n <ng-container *ngTemplateOutlet=\"divider\"></ng-container>\n }\n </ng-template>\n\n <!-- Divider Template -->\n <ng-template #divider>\n <div class=\"background-black br-2 height-1\"></div>\n </ng-template>\n\n <ng-template #itemTemplate let-count=\"count\" let-isSelected=\"isSelected\">\n <!-- Count can be undefined for example on assign dispatch load list, or it can be 0 as well for some dispatchers -->\n @if (count !== undefined) {\n <div\n class=\"br-10 filter-dropdown-list-item-count text-size-11 ca-font-semi-bold padding-y-2 padding-x-5 d-flex align-items-center justify-content-center filter-dropdown-list-badge\"\n [ngClass]=\"\n isSelected\n ? 'background-blue-14 text-color-white'\n : 'background-black text-color-white-4'\n \"\n >\n {{ count }}\n </div>\n }\n </ng-template>\n</app-ca-filter-dropdown>\n" }]
158
166
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }], propDecorators: { type: [{
159
167
  type: Input
160
168
  }], list: [{
161
169
  type: Input
162
170
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbmV3LWZpbHRlci9jb21wb25lbnRzL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLW5ldy1maWx0ZXIvY29tcG9uZW50cy9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEdBS1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLFFBQVE7QUFDUixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBU2hELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxhQUFhO0FBQ2IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1B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QUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIFBpcGVUcmFuc2Zvcm0sXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8vIEVudW1zXG5pbXBvcnQgeyBlRmlsdGVyRHJvcGRvd25FbnVtLCBlRmlsdGVyU29ydGluZ0tleSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IGVMb2FkU3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZW51bXMnO1xuXG4vLyBUeXBlcyAmIEludGVyZmFjZXNcbmltcG9ydCB7IEZpbHRlckRyb3Bkb3duVHlwZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge1xuICAgIElGaWx0ZXJEcm9wZG93bkxpc3QsXG4gICAgSVNvcnRFbWl0LFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2UnO1xuXG4vLyBDb25zdGFudHMgJiBVdGlsc1xuaW1wb3J0IHsgQ2FGaWx0ZXJzU3ZnUm91dGVzIH0gZnJvbSAnLi4vLi4vLi4vY2EtZmlsdGVycy91dGlscy9zdmctcm91dGVzJztcbmltcG9ydCB7IEZpbHRlckRyb3Bkb3duSWNvbnNDb25zdCB9IGZyb20gJy4uLy4uL2NvbnN0YW50JztcblxuLy8gQ29tcG9uZW50c1xuaW1wb3J0IHsgQ2FGaWx0ZXJEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NhLWZpbHRlci1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FQcm9maWxlSW1hZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jYS1wcm9maWxlLWltYWdlL2NhLXByb2ZpbGUtaW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jYS1pbnB1dC9jYS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmV3RmlsdGVyQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL25ldy1maWx0ZXItYmFzZS9uZXctZmlsdGVyLWJhc2UuY29tcG9uZW50JztcblxuLy8gUGlwZXNcbmltcG9ydCB7XG4gICAgRmlsdGVyVHJhaWxlckNvbG9yUGlwZSxcbiAgICBGaWx0ZXJUcnVja0NvbG9yUGlwZSxcbn0gZnJvbSAnLi4vLi4vLi4vY2EtZmlsdGVycy9waXBlcyc7XG5pbXBvcnQgeyBEcm9wZG93bkxvYWRTdGF0dXNDb2xvclBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi9waXBlcyc7XG5pbXBvcnQgeyBGaWx0ZXJTZWFyY2hQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvZmlsdGVyLXNlYXJjaC5waXBlJztcblxuLy8gRXh0ZXJuYWwgTGlicmFyaWVzXG5pbXBvcnQgeyBTdmdJY29uQ29tcG9uZW50IH0gZnJvbSAnYW5ndWxhci1zdmctaWNvbic7XG5cbi8vIEhlbHBlcnNcbmltcG9ydCB7IEZpbHRlckhlbHBlciB9IGZyb20gJy4uLy4uLy4uL2NhLWZpbHRlcnMvdXRpbHMvaGVscGVycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWNhLWZpbHRlci1saXN0LWRyb3Bkb3duJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuXG4gICAgICAgIENhSW5wdXRDb21wb25lbnQsXG4gICAgICAgIENhRmlsdGVyRHJvcGRvd25Db21wb25lbnQsXG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBTdmdJY29uQ29tcG9uZW50LFxuXG4gICAgICAgIERyb3Bkb3duTG9hZFN0YXR1c0NvbG9yUGlwZSxcbiAgICAgICAgRmlsdGVyVHJ1Y2tDb2xvclBpcGUsXG4gICAgICAgIEZpbHRlclRyYWlsZXJDb2xvclBpcGUsXG4gICAgICAgIEZpbHRlclNlYXJjaFBpcGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2FGaWx0ZXJMaXN0RHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBOZXdGaWx0ZXJCYXNlQ29tcG9uZW50ICB7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB0eXBlKHZhbHVlOiBGaWx0ZXJEcm9wZG93blR5cGVzKSB7XG4gICAgICAgIHRoaXMuc2V0SW5pdGFsVHlwZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgbGlzdCh2YWx1ZTogSUZpbHRlckRyb3Bkb3duTGlzdFtdKSB7XG4gICAgICAgIHRoaXMuc2V0SW5pdGFsTGlzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhRmlsdGVyc1N2Z1JvdXRlcyA9IENhRmlsdGVyc1N2Z1JvdXRlcztcbiAgICBwdWJsaWMgbG9hZFN0YXR1c0VudW0gPSBlTG9hZFN0YXR1cztcbiAgICBwdWJsaWMgc3JvbGxMaW1pdFNpemU6IG51bWJlciA9IDg7XG4gICAgcHVibGljIHByZXZpdXNVblNlbGVjdGVkU3RhdGU6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSA9IFtdO1xuICAgIHB1YmxpYyBwcmV2aXVzU2VsZWN0ZWRTdGF0ZTogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRMaXN0OiBJRmlsdGVyRHJvcGRvd25MaXN0W10gPSBbXTtcbiAgICBwdWJsaWMgdW5zZWxlY3RlZExpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSA9IFtdO1xuICAgIHB1YmxpYyBzZWFyY2hGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIHNlYXJjaDogbnVsbCxcbiAgICB9KTtcbiAgICBwdWJsaWMgc29ydEtleToga2V5b2YgSUZpbHRlckRyb3Bkb3duTGlzdCA9IGVGaWx0ZXJTb3J0aW5nS2V5Lk5BTUU7XG4gICAgcHVibGljIGRpcmVjdGlvbk11bHRpcGxpZXI6IG51bWJlciA9IDE7XG4gICAgcHVibGljIGluaXRpYWxMaXN0U2l6ZTogbnVtYmVyID0gMDtcblxuICAgIHB1YmxpYyBzZWxlY3RlZENvdW50OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBhY3RpdmVDb3VudDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgX3R5cGUhOiBGaWx0ZXJEcm9wZG93blR5cGVzO1xuICAgIHByaXZhdGUgX2xpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0dGVyc1xuICAgIGdldCB0eXBlKCk6IEZpbHRlckRyb3Bkb3duVHlwZXMge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICBwdWJsaWMgc2VsZWN0SXRlbSA9IChpdGVtOiBJRmlsdGVyRHJvcGRvd25MaXN0KSA9PiB7XG4gICAgICAgIHRoaXMubW92ZUl0ZW0oaXRlbSwgdGhpcy51bnNlbGVjdGVkTGlzdCwgdGhpcy5zZWxlY3RlZExpc3QpO1xuICAgIH07XG5cbiAgICBwdWJsaWMgdW5TZWxlY3RJdGVtID0gKGl0ZW06IElGaWx0ZXJEcm9wZG93bkxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5tb3ZlSXRlbShpdGVtLCB0aGlzLnNlbGVjdGVkTGlzdCwgdGhpcy51bnNlbGVjdGVkTGlzdCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyBnZXQgdHJ1Y2tPclRyYWlsZXJJY29uUGlwZSgpOiBQaXBlVHJhbnNmb3JtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gZUZpbHRlckRyb3Bkb3duRW51bS5UUlVDS19UWVBFXG4gICAgICAgICAgICA/IG5ldyBGaWx0ZXJUcnVja0NvbG9yUGlwZSgpXG4gICAgICAgICAgICA6IG5ldyBGaWx0ZXJUcmFpbGVyQ29sb3JQaXBlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNsZWFyVmFsdWVzKGlzRW1pdHRpbmdWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvLyBObyBuZWVkIHRvIGVtaXQgdmFsdWVzIHNpbmNlIHRoYXQgaXMgY2hhbmdlZCBhbmQgdmFsdWVzIGFyZSByZXNldCBvbiBtYWluIHByb2plY3RcbiAgICAgICAgaWYoaXNFbWl0dGluZ1ZhbHVlKSB0aGlzLmVtaXREYXRhKFtdKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMuX2xpc3RdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFzc0ZpbHRlclZhbHVlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVtaXREYXRhKHRoaXMuc2VsZWN0ZWRMaXN0Lm1hcCgobGlzdCkgPT4gbGlzdC5pZCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnQgPSB0aGlzLmFjdGl2ZUNvdW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0VmFsdWVzKHNvcnRpbmc6IElTb3J0RW1pdCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNvcnRLZXkgPSBzb3J0aW5nLnNvcnRLZXk7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uTXVsdGlwbGllciA9IHNvcnRpbmcuZGlyZWN0aW9uTXVsdGlwbGllcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25SZXNldEZpbHRlclN0YXRlKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXNldCB0byBwcmV2aXVzIHZhbHVlLCBzaW5jZSB1c2VyIGRpZG4ndCBzYXZlIGl0LCBoZSBjbGljayBvbiBvdXRzaWRlXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucHJldml1c1NlbGVjdGVkU3RhdGVdO1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucHJldml1c1VuU2VsZWN0ZWRTdGF0ZV07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCA9IHRoaXMucHJldml1c1NlbGVjdGVkU3RhdGUubGVuZ3RoO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvdW50ID0gdGhpcy5zZWxlY3RlZExpc3QubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2V0SW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdERhdGEobGlzdDogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXIuZW1pdCh7XG4gICAgICAgICAgICBmaWx0ZXJUeXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBzZWxlY3RlZElkczogbGlzdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcmV2aXVzU2VsZWN0ZWRTdGF0ZSA9IFsuLi50aGlzLnNlbGVjdGVkTGlzdF07XG4gICAgICAgIHRoaXMucHJldml1c1VuU2VsZWN0ZWRTdGF0ZSA9IFsuLi50aGlzLnVuc2VsZWN0ZWRMaXN0XTtcbiAgICAgICAgdGhpcy5yZXNldElucHV0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxpc3RzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMuX2xpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkTGlzdCA9IHRoaXMuX2xpc3QuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtb3ZlSXRlbShcbiAgICAgICAgaXRlbTogSUZpbHRlckRyb3Bkb3duTGlzdCxcbiAgICAgICAgZnJvbUxpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSxcbiAgICAgICAgdG9MaXN0OiBJRmlsdGVyRHJvcGRvd25MaXN0W11cbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBmcm9tTGlzdC5pbmRleE9mKGl0ZW0pO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBmcm9tTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdG9MaXN0LnB1c2goaXRlbSk7XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSByZWZlcmVuY2VzIHNvIGxpc3QgaXMgdXBkYXRlZFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5zZWxlY3RlZExpc3RdO1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnVuc2VsZWN0ZWRMaXN0XTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlU2VsZWN0ZWRDb3VudCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgY2FsY3VsYXRlU2VsZWN0ZWRDb3VudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDb3VudCA9IHRoaXMuc2VsZWN0ZWRMaXN0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEluaXRhbExpc3QodmFsdWU6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSk6IHZvaWQge1xuICAgICAgICAvLyBQbSBhbmQgdHJ1Y2sgdHlwZSBkb24ndCBoYXZlIGlkIHNvIHdlIG5lZWQgdG8gbWFwIG5hbWVzXG4gICAgICAgIHRoaXMuX2xpc3QgPSB2YWx1ZS5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQgPz8gaXRlbS5uYW1lLFxuICAgICAgICAgICAgaW5pdGlhbHM6IEZpbHRlckhlbHBlci5nZXRJbml0aWFscyhpdGVtLm5hbWUpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGlzdHMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsTGlzdFNpemUgPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMucHJldml1c1VuU2VsZWN0ZWRTdGF0ZSA9IFsuLi50aGlzLl9saXN0XTtcbiAgICAgICAgdGhpcy5hY3RpdmVDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbml0YWxUeXBlKHZhbHVlOiBGaWx0ZXJEcm9wZG93blR5cGVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBGaWx0ZXJEcm9wZG93bkljb25zQ29uc3RbdGhpcy5fdHlwZV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldElucHV0VmFsdWUoKSA6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucmVzZXQoKTtcbiAgICB9XG59XG4iLCI8YXBwLWNhLWZpbHRlci1kcm9wZG93blxuICAgIFt0eXBlXT1cInR5cGVcIlxuICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICBbYm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXG4gICAgW2lzRm9ybUNoYW5nZWRdPVwiISFhY3RpdmVDb3VudFwiXG4gICAgW2FjdGl2ZUNvdW50XT1cImFjdGl2ZUNvdW50XCJcbiAgICBbYXBwbGllZEZpbHRlcnNDb3VudF09XCJzZWxlY3RlZENvdW50XCJcbiAgICAoaGFuZGxlRmlsdGVyc0NsZWFyKT1cImNsZWFyVmFsdWVzKHRydWUpXCJcbiAgICAoc2V0RmlsdGVyKT1cInBhc3NGaWx0ZXJWYWx1ZSgpXCJcbiAgICAoc29ydGluZyk9XCJzb3J0VmFsdWVzKCRldmVudClcIlxuICAgIChyZXNldEZpbHRlclN0YXRlKT1cIm9uUmVzZXRGaWx0ZXJTdGF0ZSgpXCJcbj5cbiAgICBAbGV0IGlzVHJ1Y2sgPSB0eXBlID09PSAnVHJ1Y2tUeXBlJztcbiAgICBAbGV0IGlzVHJhaWxlciA9IHR5cGUgPT09ICdUcmFpbGVyVHlwZSc7XG4gICAgQGxldCBpc1BtID0gdHlwZSA9PT0gJ1BtJztcbiAgICBAbGV0IGlzU2VydmljZSA9IHR5cGUgPT09ICdTZXJ2aWNlJztcbiAgICBAbGV0IGlzVHJ1Y2tPclRyYWlsZXIgPSBpc1RydWNrIHx8IGlzVHJhaWxlcjtcbiAgICBAbGV0IGhhc0xlZnRJY29uID0gaXNQbSB8fCBpc1NlcnZpY2U7XG4gICAgPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGU+XG4gICAgICAgIEBpZiAoXG4gICAgICAgICAgICBpbml0aWFsTGlzdFNpemUgPiBzcm9sbExpbWl0U2l6ZSAmJlxuICAgICAgICAgICAgY29uZmlnICYmXG4gICAgICAgICAgICBjb25maWcuaXNTZWFyY2hBY3RpdmUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5mb3JtRmllbGRDb25maWdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImNvbmZpZy5mb3JtRmllbGRDb25maWdcIlxuICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3RcIlxuICAgICAgICAgICAgW2NsYXNzLmNhLXNjcm9sbC1iYXJdPVwiaW5pdGlhbExpc3RTaXplID4gc3JvbGxMaW1pdFNpemVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGl2aWRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgQGxldCBzZWFyY2hTdHJpbmcgPSBzZWFyY2hGb3JtLmdldCgnc2VhcmNoJyk/LnZhbHVlO1xuXG4gICAgICAgICAgICA8IS0tIFNlbGVjdGVkIExpc3QgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgbGlzdFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlclNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlYXJjaFN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICduYW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXJlY3Rpb25NdWx0aXBsaWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tGbjogdW5TZWxlY3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBVbnNlbGVjdGVkIExpc3QgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgbGlzdFRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNlbGVjdGVkTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyU2VhcmNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VhcmNoU3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ25hbWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRpcmVjdGlvbk11bHRpcGxpZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGlja0ZuOiBzZWxlY3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2xpc3RUZW1wbGF0ZVxuICAgICAgICBsZXQtaXRlbXM9XCJpdGVtc1wiXG4gICAgICAgIGxldC1jbGlja0ZuPVwiY2xpY2tGblwiXG4gICAgICAgIGxldC1pc1NlbGVjdGVkTGlzdD1cInNlbGVjdGVkTGlzdFwiXG4gICAgPlxuICAgICAgICBAaWYgKGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAteHMgbWItMSBtYXJnaW4tdC00XCI+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbSBwYWRkaW5nLTQgYnItMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGMtcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0taG92ZXInOiBpc1NlbGVjdGVkTGlzdCxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmctaG92ZXItZ3JleS00IHN2Zy1maWxsLW11dGVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTGVmdEljb24gJiYgIWlzU2VsZWN0ZWRMaXN0LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2Zy1ob3Zlci1ibHVlLTE5IHN2Zy1maWxsLWJsdWUtOCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0xlZnRJY29uICYmIGlzU2VsZWN0ZWRMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tGbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgbWFyZ2luLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmp1c3RpZnktY29udGVudC1iZXR3ZWVuXT1cImlzVHJ1Y2tPclRyYWlsZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodHlwZSA9PT0gJ0Rpc3BhdGNoZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtcHJvZmlsZS1pbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZHhdPVwiJGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0U2hvcnROYW1lXT1cIml0ZW0uaW5pdGlhbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F2YXRhckltZ109XCJpdGVtLmF2YXRhcj8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXJnaW4tci00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLXByb2ZpbGUtaW1hZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAodHlwZSA9PT0gJ1N0YXR1cycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFN0YXR1c0VudW1baXRlbS5pZCFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZHJvcGRvd25Mb2FkU3RhdHVzQ29sb3I6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0tc3RhdHVzLWNpcmNsZSBici1jaXJjbGUgbWFyZ2luLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChoYXNMZWZ0SWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaXRlbS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLXItNCBzdmctc2l6ZS0xOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3N2Zy1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNvbG9yLXdoaXRlIHRleHQtc2l6ZS0xNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jYS1mb250LWV4dHJhLWJvbGRdPVwiaXNTZWxlY3RlZExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC11cHBlcmNhc2VdPVwidHlwZSA9PT0gJ1N0YXR1cydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlzVHJ1Y2tPclRyYWlsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0taWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tc3ZnLWZpbGwtY29sb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1Y2tPclRyYWlsZXJJY29uUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvbiBbc3JjXT1cIml0ZW0uaWNvblwiPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IGl0ZW0uY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3RlZExpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjYUZpbHRlcnNTdmdSb3V0ZXMucmVtb3ZlU2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3ZnLXNpemUtMTAgc3ZnLWZpbGwtcmVkLTEwIGZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0tcmVtb3ZlIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmlsdGVyLWRyb3Bkb3duLWxpc3QtYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3N2Zy1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaXZpZGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBEaXZpZGVyIFRlbXBsYXRlIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGl2aWRlcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJhY2tncm91bmQtYmxhY2sgYnItMiBoZWlnaHQtMVwiPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtY291bnQ9XCJjb3VudFwiIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiPlxuICAgICAgICA8IS0tIENvdW50IGNhbiBiZSB1bmRlZmluZWQgZm9yIGV4YW1wbGUgb24gYXNzaWduIGRpc3BhdGNoIGxvYWQgbGlzdCwgb3IgaXQgY2FuIGJlIDAgYXMgd2VsbCBmb3Igc29tZSBkaXNwYXRjaGVycyAtLT5cbiAgICAgICAgQGlmIChjb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJici0xMCBmaWx0ZXItZHJvcGRvd24tbGlzdC1pdGVtLWNvdW50IHRleHQtc2l6ZS0xMSBjYS1mb250LXNlbWktYm9sZCBwYWRkaW5nLXktMiBwYWRkaW5nLXgtNSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZmlsdGVyLWRyb3Bkb3duLWxpc3QtYmFkZ2VcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdiYWNrZ3JvdW5kLWJsdWUtMTQgdGV4dC1jb2xvci13aGl0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JhY2tncm91bmQtYmxhY2sgdGV4dC1jb2xvci13aGl0ZS00J1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY291bnQgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvYXBwLWNhLWZpbHRlci1kcm9wZG93bj5cbiJdfQ==
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtbmV3LWZpbHRlci9jb21wb25lbnRzL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLW5ldy1maWx0ZXIvY29tcG9uZW50cy9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi9jYS1maWx0ZXItbGlzdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEdBS1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixNQUFNLGdCQUFnQixDQUFDO0FBRXpFLFFBQVE7QUFDUixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTWhELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxhQUFhO0FBQ2IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1B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O2tCQXBCekMsU0FBUzsrQkFDSSw2QkFBNkIsY0FDM0IsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUVuQixnQkFBZ0I7d0JBQ2hCLHlCQUF5Qjt3QkFDekIsdUJBQXVCO3dCQUN2QixnQkFBZ0I7d0JBRWhCLDJCQUEyQjt3QkFDM0Isb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLGdCQUFnQjtxQkFDbkI7dUZBTUcsSUFBSTtzQkFEUCxLQUFLO2dCQU1GLElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vLyBFbnVtc1xuaW1wb3J0IHsgZUZpbHRlckRyb3Bkb3duRW51bSwgZUZpbHRlclNvcnRpbmdLZXkgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBlTG9hZFN0YXR1cyB9IGZyb20gJy4uLy4uLy4uLy4uL2VudW1zJztcblxuLy8gVHlwZXMgJiBJbnRlcmZhY2VzXG5pbXBvcnQgeyBGaWx0ZXJEcm9wZG93blR5cGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSUZpbHRlckRyb3Bkb3duTGlzdCwgSVNvcnRFbWl0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlJztcblxuLy8gQ29uc3RhbnRzICYgVXRpbHNcbmltcG9ydCB7IENhRmlsdGVyc1N2Z1JvdXRlcyB9IGZyb20gJy4uLy4uLy4uL2NhLWZpbHRlcnMvdXRpbHMvc3ZnLXJvdXRlcyc7XG5pbXBvcnQgeyBGaWx0ZXJEcm9wZG93bkljb25zQ29uc3QgfSBmcm9tICcuLi8uLi9jb25zdGFudCc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCB7IENhRmlsdGVyRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jYS1maWx0ZXItZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IENhUHJvZmlsZUltYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2EtcHJvZmlsZS1pbWFnZS9jYS1wcm9maWxlLWltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY2EtaW5wdXQvY2EtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE5ld0ZpbHRlckJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9uZXctZmlsdGVyLWJhc2UvbmV3LWZpbHRlci1iYXNlLmNvbXBvbmVudCc7XG5cbi8vIFBpcGVzXG5pbXBvcnQge1xuICAgIEZpbHRlclRyYWlsZXJDb2xvclBpcGUsXG4gICAgRmlsdGVyVHJ1Y2tDb2xvclBpcGUsXG59IGZyb20gJy4uLy4uLy4uL2NhLWZpbHRlcnMvcGlwZXMnO1xuaW1wb3J0IHsgRHJvcGRvd25Mb2FkU3RhdHVzQ29sb3JQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2ZpbHRlci1zZWFyY2gucGlwZSc7XG5cbi8vIEV4dGVybmFsIExpYnJhcmllc1xuaW1wb3J0IHsgU3ZnSWNvbkNvbXBvbmVudCB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgeyBGaWx0ZXJIZWxwZXIgfSBmcm9tICcuLi8uLi8uLi9jYS1maWx0ZXJzL3V0aWxzL2hlbHBlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1jYS1maWx0ZXItbGlzdC1kcm9wZG93bicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcblxuICAgICAgICBDYUlucHV0Q29tcG9uZW50LFxuICAgICAgICBDYUZpbHRlckRyb3Bkb3duQ29tcG9uZW50LFxuICAgICAgICBDYVByb2ZpbGVJbWFnZUNvbXBvbmVudCxcbiAgICAgICAgU3ZnSWNvbkNvbXBvbmVudCxcblxuICAgICAgICBEcm9wZG93bkxvYWRTdGF0dXNDb2xvclBpcGUsXG4gICAgICAgIEZpbHRlclRydWNrQ29sb3JQaXBlLFxuICAgICAgICBGaWx0ZXJUcmFpbGVyQ29sb3JQaXBlLFxuICAgICAgICBGaWx0ZXJTZWFyY2hQaXBlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhLWZpbHRlci1saXN0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vY2EtZmlsdGVyLWxpc3QtZHJvcGRvd24uY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIENhRmlsdGVyTGlzdERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgTmV3RmlsdGVyQmFzZUNvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBzZXQgdHlwZSh2YWx1ZTogRmlsdGVyRHJvcGRvd25UeXBlcykge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxUeXBlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBsaXN0KHZhbHVlOiBJRmlsdGVyRHJvcGRvd25MaXN0W10pIHtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsTGlzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNhRmlsdGVyc1N2Z1JvdXRlcyA9IENhRmlsdGVyc1N2Z1JvdXRlcztcbiAgICBwdWJsaWMgbG9hZFN0YXR1c0VudW0gPSBlTG9hZFN0YXR1cztcbiAgICBwdWJsaWMgc2Nyb2xsTGltaXRTaXplOiBudW1iZXIgPSA4O1xuICAgIHB1YmxpYyBwcmV2aW91c1VuU2VsZWN0ZWRTdGF0ZTogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG4gICAgcHVibGljIHByZXZpb3VzU2VsZWN0ZWRTdGF0ZTogSUZpbHRlckRyb3Bkb3duTGlzdFtdID0gW107XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRMaXN0OiBJRmlsdGVyRHJvcGRvd25MaXN0W10gPSBbXTtcbiAgICBwdWJsaWMgdW5zZWxlY3RlZExpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSA9IFtdO1xuICAgIHB1YmxpYyBzZWFyY2hGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIHNlYXJjaDogbnVsbCxcbiAgICB9KTtcbiAgICBwdWJsaWMgc29ydEtleToga2V5b2YgSUZpbHRlckRyb3Bkb3duTGlzdCA9IGVGaWx0ZXJTb3J0aW5nS2V5Lk5BTUU7XG4gICAgcHVibGljIGRpcmVjdGlvbk11bHRpcGxpZXI6IG51bWJlciA9IDE7XG4gICAgcHVibGljIGluaXRpYWxMaXN0U2l6ZTogbnVtYmVyID0gMDtcblxuICAgIHB1YmxpYyBzZWxlY3RlZENvdW50OiBudW1iZXIgPSAwO1xuICAgIHB1YmxpYyBhY3RpdmVDb3VudDogbnVtYmVyID0gMDtcblxuICAgIHByaXZhdGUgX3R5cGUhOiBGaWx0ZXJEcm9wZG93blR5cGVzO1xuICAgIHByaXZhdGUgX2xpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLy8gR2V0dGVyc1xuICAgIGdldCB0eXBlKCk6IEZpbHRlckRyb3Bkb3duVHlwZXMge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICBwdWJsaWMgc2VsZWN0SXRlbSA9IChpdGVtOiBJRmlsdGVyRHJvcGRvd25MaXN0KSA9PiB7XG4gICAgICAgIHRoaXMubW92ZUl0ZW0oaXRlbSwgdGhpcy51bnNlbGVjdGVkTGlzdCwgdGhpcy5zZWxlY3RlZExpc3QpO1xuICAgIH07XG5cbiAgICBwdWJsaWMgdW5TZWxlY3RJdGVtID0gKGl0ZW06IElGaWx0ZXJEcm9wZG93bkxpc3QpID0+IHtcbiAgICAgICAgdGhpcy5tb3ZlSXRlbShpdGVtLCB0aGlzLnNlbGVjdGVkTGlzdCwgdGhpcy51bnNlbGVjdGVkTGlzdCk7XG4gICAgfTtcblxuICAgIHB1YmxpYyBnZXQgdHJ1Y2tPclRyYWlsZXJJY29uUGlwZSgpOiBQaXBlVHJhbnNmb3JtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gZUZpbHRlckRyb3Bkb3duRW51bS5UUlVDS19UWVBFXG4gICAgICAgICAgICA/IG5ldyBGaWx0ZXJUcnVja0NvbG9yUGlwZSgpXG4gICAgICAgICAgICA6IG5ldyBGaWx0ZXJUcmFpbGVyQ29sb3JQaXBlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGNsZWFyVmFsdWVzKGlzRW1pdHRpbmdWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvLyBObyBuZWVkIHRvIGVtaXQgdmFsdWVzIHNpbmNlIHRoYXQgaXMgY2hhbmdlZCBhbmQgdmFsdWVzIGFyZSByZXNldCBvbiBtYWluIHByb2plY3RcbiAgICAgICAgaWYgKGlzRW1pdHRpbmdWYWx1ZSkgdGhpcy5lbWl0RGF0YShbXSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkTGlzdCA9IFsuLi50aGlzLl9saXN0XTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb3VudCA9IDA7XG4gICAgfVxuXG4gICAgcHVibGljIHBhc3NGaWx0ZXJWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMaXN0SWRzOiBudW1iZXJbXSA9IHRoaXMuc2VsZWN0ZWRMaXN0Py5tYXAoXG4gICAgICAgICAgICAobGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdCkgPT4gbGlzdC5pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmVtaXREYXRhKHNlbGVjdGVkTGlzdElkcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCA9IHRoaXMuYWN0aXZlQ291bnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnRWYWx1ZXMoc29ydGluZzogSVNvcnRFbWl0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc29ydEtleSA9IHNvcnRpbmcuc29ydEtleTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25NdWx0aXBsaWVyID0gc29ydGluZy5kaXJlY3Rpb25NdWx0aXBsaWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlc2V0RmlsdGVyU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIC8vIFJlc2V0IHRvIHByZXZpb3VzIHZhbHVlLCBzaW5jZSB1c2VyIGRpZG4ndCBzYXZlIGl0LCBoZSBjbGljayBvbiBvdXRzaWRlXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucHJldmlvdXNTZWxlY3RlZFN0YXRlXTtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnByZXZpb3VzVW5TZWxlY3RlZFN0YXRlXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50ID0gdGhpcy5wcmV2aW91c1NlbGVjdGVkU3RhdGUubGVuZ3RoO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvdW50ID0gdGhpcy5zZWxlY3RlZExpc3QubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2V0SW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdERhdGEobGlzdDogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXIuZW1pdCh7XG4gICAgICAgICAgICBmaWx0ZXJUeXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBzZWxlY3RlZElkczogbGlzdCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkU3RhdGUgPSBbLi4udGhpcy5zZWxlY3RlZExpc3RdO1xuICAgICAgICB0aGlzLnByZXZpb3VzVW5TZWxlY3RlZFN0YXRlID0gWy4uLnRoaXMudW5zZWxlY3RlZExpc3RdO1xuICAgICAgICB0aGlzLnJlc2V0SW5wdXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGlzdHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbGlzdCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gW107XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZExpc3QgPSBbXTtcblxuICAgICAgICB0aGlzLl9saXN0Py5mb3JFYWNoKChpdGVtOiBJRmlsdGVyRHJvcGRvd25MaXN0KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgPyAodGhpcy5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5zZWxlY3RlZExpc3QsIGl0ZW1dKVxuICAgICAgICAgICAgICAgIDogKHRoaXMudW5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy51bnNlbGVjdGVkTGlzdCwgaXRlbV0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdmVJdGVtKFxuICAgICAgICBpdGVtOiBJRmlsdGVyRHJvcGRvd25MaXN0LFxuICAgICAgICBmcm9tTGlzdDogSUZpbHRlckRyb3Bkb3duTGlzdFtdLFxuICAgICAgICB0b0xpc3Q6IElGaWx0ZXJEcm9wZG93bkxpc3RbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IGZyb21MaXN0LmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGZyb21MaXN0Py5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdG9MaXN0Py5wdXNoKGl0ZW0pO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgcmVmZXJlbmNlcyBzbyBsaXN0IGlzIHVwZGF0ZWRcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMuc2VsZWN0ZWRMaXN0XTtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZExpc3QgPSBbLi4udGhpcy51bnNlbGVjdGVkTGlzdF07XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVNlbGVjdGVkQ291bnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVNlbGVjdGVkQ291bnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ291bnQgPSB0aGlzLnNlbGVjdGVkTGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRJbml0aWFsTGlzdCh2YWx1ZTogSUZpbHRlckRyb3Bkb3duTGlzdFtdKTogdm9pZCB7XG4gICAgICAgIC8vIFBtIGFuZCB0cnVjayB0eXBlIGRvbid0IGhhdmUgaWQgc28gd2UgbmVlZCB0byBtYXAgbmFtZXNcbiAgICAgICAgdGhpcy5fbGlzdCA9IHZhbHVlPy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQgPz8gaXRlbS5uYW1lLFxuICAgICAgICAgICAgaW5pdGlhbHM6IEZpbHRlckhlbHBlci5nZXRJbml0aWFscyhpdGVtLm5hbWUpLFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGlzdHMoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsTGlzdFNpemUgPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgIHRoaXMucHJldmlvdXNVblNlbGVjdGVkU3RhdGUgPSBbLi4udGhpcy5fbGlzdF07XG4gICAgICAgIHRoaXMuYWN0aXZlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ291bnQgPSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5pdGlhbFR5cGUodmFsdWU6IEZpbHRlckRyb3Bkb3duVHlwZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IEZpbHRlckRyb3Bkb3duSWNvbnNDb25zdFt0aGlzLl90eXBlXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0SW5wdXRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnJlc2V0KCk7XG4gICAgfVxufVxuIiwiPGFwcC1jYS1maWx0ZXItZHJvcGRvd25cbiAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICAgIFtpc0Zvcm1DaGFuZ2VkXT1cIiEhYWN0aXZlQ291bnRcIlxuICAgIFthY3RpdmVDb3VudF09XCJhY3RpdmVDb3VudFwiXG4gICAgW2FwcGxpZWRGaWx0ZXJzQ291bnRdPVwic2VsZWN0ZWRDb3VudFwiXG4gICAgKGhhbmRsZUZpbHRlcnNDbGVhcik9XCJjbGVhclZhbHVlcyh0cnVlKVwiXG4gICAgKHNldEZpbHRlcik9XCJwYXNzRmlsdGVyVmFsdWUoKVwiXG4gICAgKHNvcnRpbmcpPVwic29ydFZhbHVlcygkZXZlbnQpXCJcbiAgICAocmVzZXRGaWx0ZXJTdGF0ZSk9XCJvblJlc2V0RmlsdGVyU3RhdGUoKVwiXG4+XG4gICAgQGxldCBpc1RydWNrID0gdHlwZSA9PT0gJ1RydWNrVHlwZSc7XG4gICAgQGxldCBpc1RyYWlsZXIgPSB0eXBlID09PSAnVHJhaWxlclR5cGUnO1xuICAgIEBsZXQgaXNQbSA9IHR5cGUgPT09ICdQbSc7XG4gICAgQGxldCBpc1NlcnZpY2UgPSB0eXBlID09PSAnU2VydmljZSc7XG4gICAgQGxldCBpc1RydWNrT3JUcmFpbGVyID0gaXNUcnVjayB8fCBpc1RyYWlsZXI7XG4gICAgQGxldCBoYXNMZWZ0SWNvbiA9IGlzUG0gfHwgaXNTZXJ2aWNlO1xuICAgIDxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICAgICAgICBAaWYgKFxuICAgICAgICAgICAgaW5pdGlhbExpc3RTaXplID4gc2Nyb2xsTGltaXRTaXplICYmXG4gICAgICAgICAgICBjb25maWcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5pc1NlYXJjaEFjdGl2ZSAmJlxuICAgICAgICAgICAgY29uZmlnLmZvcm1GaWVsZENvbmZpZ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiY29uZmlnLmZvcm1GaWVsZENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItZHJvcGRvd24tbGlzdFwiXG4gICAgICAgICAgICBbY2xhc3MuY2Etc2Nyb2xsLWJhcl09XCJpbml0aWFsTGlzdFNpemUgPiBzY3JvbGxMaW1pdFNpemVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGl2aWRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgQGxldCBzZWFyY2hTdHJpbmcgPSBzZWFyY2hGb3JtPy5nZXQoJ3NlYXJjaCcpPy52YWx1ZTtcblxuICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCBMaXN0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGxpc3RUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmaWx0ZXJTZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWFyY2hTdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnbmFtZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0S2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZGlyZWN0aW9uTXVsdGlwbGllcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrRm46IHVuU2VsZWN0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gVW5zZWxlY3RlZCBMaXN0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGxpc3RUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zZWxlY3RlZExpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZpbHRlclNlYXJjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNlYXJjaFN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICduYW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkaXJlY3Rpb25NdWx0aXBsaWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tGbjogc2VsZWN0SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICNsaXN0VGVtcGxhdGVcbiAgICAgICAgbGV0LWl0ZW1zPVwiaXRlbXNcIlxuICAgICAgICBsZXQtY2xpY2tGbj1cImNsaWNrRm5cIlxuICAgICAgICBsZXQtaXNTZWxlY3RlZExpc3Q9XCJzZWxlY3RlZExpc3RcIlxuICAgID5cbiAgICAgICAgQGlmIChpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLXhzIG1iLTEgbWFyZ2luLXQtNFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IGxldCBpbmR4ID0gJGluZGV4OyB0cmFjayBpbmR4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbSBwYWRkaW5nLTQgYnItMiBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGMtcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0taG92ZXInOiBpc1NlbGVjdGVkTGlzdCxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmctaG92ZXItZ3JleS00IHN2Zy1maWxsLW11dGVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTGVmdEljb24gJiYgIWlzU2VsZWN0ZWRMaXN0LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2Zy1ob3Zlci1ibHVlLTE5IHN2Zy1maWxsLWJsdWUtOCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0xlZnRJY29uICYmIGlzU2VsZWN0ZWRMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tGbihpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgbWFyZ2luLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmp1c3RpZnktY29udGVudC1iZXR3ZWVuXT1cImlzVHJ1Y2tPclRyYWlsZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdEaXNwYXRjaGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1wcm9maWxlLWltYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZHhdPVwiJGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dFNob3J0TmFtZV09XCJpdGVtLmluaXRpYWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhdGFySW1nXT1cIml0ZW0uYXZhdGFyPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIidzbWFsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtcHJvZmlsZS1pbWFnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ1N0YXR1cycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZFN0YXR1c0VudW1baXRlbS5pZCFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRyb3Bkb3duTG9hZFN0YXR1c0NvbG9yOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0tc3RhdHVzLWNpcmNsZSBici1jaXJjbGUgbWFyZ2luLXItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNMZWZ0SWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLXItNCBzdmctc2l6ZS0xOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jb2xvci13aGl0ZSB0ZXh0LXNpemUtMTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY2EtZm9udC1leHRyYS1ib2xkXT1cImlzU2VsZWN0ZWRMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtdXBwZXJjYXNlXT1cInR5cGUgPT09ICdTdGF0dXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1RydWNrT3JUcmFpbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbT8uaWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbS1pY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1zdmctZmlsbC1jb2xvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVja09yVHJhaWxlckljb25QaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uIFtzcmNdPVwiaXRlbS5pY29uXCI+PC9zdmctaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudDogaXRlbS5jb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzU2VsZWN0ZWRMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGVkTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImNhRmlsdGVyc1N2Z1JvdXRlcy5yZW1vdmVTZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdmctc2l6ZS0xMCBzdmctZmlsbC1yZWQtMTAgZmlsdGVyLWRyb3Bkb3duLWxpc3QtaXRlbS1yZW1vdmUganVzdGlmeS1jb250ZW50LWNlbnRlciBmaWx0ZXItZHJvcGRvd24tbGlzdC1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRpdmlkZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIERpdmlkZXIgVGVtcGxhdGUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNkaXZpZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmFja2dyb3VuZC1ibGFjayBici0yIGhlaWdodC0xXCI+PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVRlbXBsYXRlIGxldC1jb3VudD1cImNvdW50XCIgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCI+XG4gICAgICAgIDwhLS0gQ291bnQgY2FuIGJlIHVuZGVmaW5lZCBmb3IgZXhhbXBsZSBvbiBhc3NpZ24gZGlzcGF0Y2ggbG9hZCBsaXN0LCBvciBpdCBjYW4gYmUgMCBhcyB3ZWxsIGZvciBzb21lIGRpc3BhdGNoZXJzIC0tPlxuICAgICAgICBAaWYgKGNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJyLTEwIGZpbHRlci1kcm9wZG93bi1saXN0LWl0ZW0tY291bnQgdGV4dC1zaXplLTExIGNhLWZvbnQtc2VtaS1ib2xkIHBhZGRpbmcteS0yIHBhZGRpbmcteC01IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmaWx0ZXItZHJvcGRvd24tbGlzdC1iYWRnZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JhY2tncm91bmQtYmx1ZS0xNCB0ZXh0LWNvbG9yLXdoaXRlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmFja2dyb3VuZC1ibGFjayB0ZXh0LWNvbG9yLXdoaXRlLTQnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb3VudCB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9hcHAtY2EtZmlsdGVyLWRyb3Bkb3duPlxuIl19