buildingproduct-library 0.2.7

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 (293) hide show
  1. package/README.md +24 -0
  2. package/assets/fonts/arial-webfont.woff +0 -0
  3. package/assets/fonts/arial-webfont.woff2 +0 -0
  4. package/assets/fonts/arialblack-webfont.woff +0 -0
  5. package/assets/fonts/arialblack-webfont.woff2 +0 -0
  6. package/assets/fonts/arialbold-webfont.woff +0 -0
  7. package/assets/fonts/arialbold-webfont.woff2 +0 -0
  8. package/assets/fonts/helveticaneue.woff +0 -0
  9. package/assets/fonts/helveticaneue.woff2 +0 -0
  10. package/assets/fonts/helveticaneuemedium-webfont.woff +0 -0
  11. package/assets/fonts/helveticaneuemedium-webfont.woff2 +0 -0
  12. package/assets/fonts/helveticaneuethin-webfont.woff +0 -0
  13. package/assets/fonts/helveticaneuethin-webfont.woff2 +0 -0
  14. package/assets/fonts/icomoon.ttf +0 -0
  15. package/assets/fonts/icomoon.woff +0 -0
  16. package/assets/images/ActivateIcon.svg +14 -0
  17. package/assets/images/AlertIcon.svg +3 -0
  18. package/assets/images/DisableIcon.svg +3 -0
  19. package/assets/images/Divider line.svg +3 -0
  20. package/assets/images/EditIconEnabled.svg +6 -0
  21. package/assets/images/EditIcondisabled.svg +6 -0
  22. package/assets/images/Grid-dark.svg +8 -0
  23. package/assets/images/Grid-light.svg +8 -0
  24. package/assets/images/Hamburger_icon_white.png +0 -0
  25. package/assets/images/Icon-awesome-user-alt-white.svg +13 -0
  26. package/assets/images/Icon-ionic-ios-arrow-down.svg +3 -0
  27. package/assets/images/Icon-ionic-ios-help-circle.svg +6 -0
  28. package/assets/images/Icon-ionic-ios-home.svg +6 -0
  29. package/assets/images/Icon-ionic-ios-settings.svg +6 -0
  30. package/assets/images/Icon-material-shopping-cart.svg +7 -0
  31. package/assets/images/Invited.svg +4 -0
  32. package/assets/images/List-dark.svg +3 -0
  33. package/assets/images/List-light.svg +3 -0
  34. package/assets/images/PDP-add-more.svg +3 -0
  35. package/assets/images/PDP-colour-selected.svg +7 -0
  36. package/assets/images/PDP-quote-exists.svg +12 -0
  37. package/assets/images/PDP-remove-icon.svg +3 -0
  38. package/assets/images/Selected icon.svg +3 -0
  39. package/assets/images/Selected-icon.svg +3 -0
  40. package/assets/images/banner-image.png +0 -0
  41. package/assets/images/br_down.png +0 -0
  42. package/assets/images/cart-shopping-fast.svg +6 -0
  43. package/assets/images/check-square.svg +3 -0
  44. package/assets/images/checkmark-circle-outline.svg +4 -0
  45. package/assets/images/closegrey.svg +71 -0
  46. package/assets/images/dashboard.svg +35 -0
  47. package/assets/images/delivery.svg +11 -0
  48. package/assets/images/download-icon.svg +7 -0
  49. package/assets/images/downloads-dark.svg +6 -0
  50. package/assets/images/downloads-light.svg +6 -0
  51. package/assets/images/erroricon.svg +3 -0
  52. package/assets/images/home-icon.svg +6 -0
  53. package/assets/images/home_banner.png +0 -0
  54. package/assets/images/ic_calender.svg +15 -0
  55. package/assets/images/icon-clock-icon.svg +10 -0
  56. package/assets/images/icon-feather-edit.svg +6 -0
  57. package/assets/images/icon-flashing-black.svg +3 -0
  58. package/assets/images/icon-flashing-white.svg +3 -0
  59. package/assets/images/icon-ionic-ios-search.svg +3 -0
  60. package/assets/images/icon-logout.svg +6 -0
  61. package/assets/images/icon-mail-icon.svg +7 -0
  62. package/assets/images/icon-metro-info.svg +3 -0
  63. package/assets/images/ionic-arrow-back.svg +3 -0
  64. package/assets/images/ionic-ios-feather-phone.svg +3 -0
  65. package/assets/images/ionic-ios-help-circle-outline.svg +6 -0
  66. package/assets/images/ionic-ios-location-outline.svg +3 -0
  67. package/assets/images/ionic-ios-my-location.svg +3 -0
  68. package/assets/images/ionic-ios-users-outline.svg +3 -0
  69. package/assets/images/ionic-trash.svg +3 -0
  70. package/assets/images/logo-black.svg +16 -0
  71. package/assets/images/logo-dark.svg +48 -0
  72. package/assets/images/logo.svg +16 -0
  73. package/assets/images/my-account.svg +21 -0
  74. package/assets/images/my-list.svg +43 -0
  75. package/assets/images/my-team.svg +17 -0
  76. package/assets/images/newsfeed-banner.jpg +0 -0
  77. package/assets/images/newtab.svg +11 -0
  78. package/assets/images/no-saved-cart.svg +3 -0
  79. package/assets/images/open-account-logout.png +0 -0
  80. package/assets/images/orders.svg +23 -0
  81. package/assets/images/pdf-icon.svg +45 -0
  82. package/assets/images/pdp-noimage.svg +21 -0
  83. package/assets/images/pickup.svg +8 -0
  84. package/assets/images/plp-grid-noimage.svg +22 -0
  85. package/assets/images/plp-list-noimage.svg +16 -0
  86. package/assets/images/product-banner.png +0 -0
  87. package/assets/images/product-details-dark.svg +10 -0
  88. package/assets/images/product-details-light.svg +10 -0
  89. package/assets/images/products.svg +34 -0
  90. package/assets/images/quotes.svg +12 -0
  91. package/assets/images/related-products-dark.svg +9 -0
  92. package/assets/images/related-products-light.svg +9 -0
  93. package/assets/images/search-noimage.svg +16 -0
  94. package/assets/images/see-more-bg-hover.svg +1 -0
  95. package/assets/images/see-more-bg.svg +1 -0
  96. package/assets/images/shopping-cart-icon.svg +14 -0
  97. package/assets/images/slash-small-white.svg +3 -0
  98. package/assets/images/warningicon.svg +3 -0
  99. package/assets/images/why-dimond.svg +7 -0
  100. package/buildingproduct-library-0.2.7.tgz +0 -0
  101. package/buildingproduct-library.d.ts +5 -0
  102. package/bundles/buildingproduct-library.umd.js +10979 -0
  103. package/bundles/buildingproduct-library.umd.js.map +1 -0
  104. package/esm2015/buildingproduct-library.js +5 -0
  105. package/esm2015/lib/account-dropdown/account-dropdown.component.js +159 -0
  106. package/esm2015/lib/account-dropdown/account-dropdown.module.js +59 -0
  107. package/esm2015/lib/account-dropdown/account-dropdown.service.js +55 -0
  108. package/esm2015/lib/checkout/add-new-address/add-new-address.component.js +442 -0
  109. package/esm2015/lib/checkout/checkout.module.js +149 -0
  110. package/esm2015/lib/checkout/custom-checkout/custom-checkout.component.js +348 -0
  111. package/esm2015/lib/checkout/order-confirmation/order-confirmation.component.js +37 -0
  112. package/esm2015/lib/checkout/order-review/delivery-information/delivery-information.component.js +32 -0
  113. package/esm2015/lib/checkout/order-review/order-review-grid/order-review-grid.component.js +162 -0
  114. package/esm2015/lib/checkout/order-review/order-review-list/order-review-list.component.js +151 -0
  115. package/esm2015/lib/checkout/order-review/order-review.component.js +123 -0
  116. package/esm2015/lib/constants/general.js +57 -0
  117. package/esm2015/lib/contact-us/contact-us.component.js +38 -0
  118. package/esm2015/lib/contact-us/contact-us.module.js +41 -0
  119. package/esm2015/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.js +48 -0
  120. package/esm2015/lib/custom-cart/custom-cart.component.js +70 -0
  121. package/esm2015/lib/custom-cart/custom-cart.module.js +91 -0
  122. package/esm2015/lib/custom-header-logo/custom-header-logo.component.js +27 -0
  123. package/esm2015/lib/custom-header-logo/custom-header-logo.module.js +54 -0
  124. package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.component.js +24 -0
  125. package/esm2015/lib/custom-header-paragraph/custom-header-paragraph.module.js +48 -0
  126. package/esm2015/lib/custom-mini-cart/custom-mini-cart.component.js +239 -0
  127. package/esm2015/lib/custom-mini-cart/custom-mini-cart.module.js +64 -0
  128. package/esm2015/lib/custom-navigation/custom-navigation.component.js +122 -0
  129. package/esm2015/lib/custom-navigation/custom-navigation.module.js +79 -0
  130. package/esm2015/lib/custom-order-details/custom-order-details.component.js +205 -0
  131. package/esm2015/lib/custom-order-details/custom-order-details.module.js +99 -0
  132. package/esm2015/lib/custom-order-details/download-popup/download-popup.component.js +34 -0
  133. package/esm2015/lib/custom-order-details/order-detail-grid/order-detail-grid.component.js +191 -0
  134. package/esm2015/lib/custom-order-details/order-detail-list/order-detail-list.component.js +169 -0
  135. package/esm2015/lib/custom-order-history/custom-order-history.component.js +680 -0
  136. package/esm2015/lib/custom-order-history/custom-order-history.module.js +105 -0
  137. package/esm2015/lib/custom-order-history/slider-progress/slider-progress.component.js +62 -0
  138. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.js +108 -0
  139. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.js +125 -0
  140. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.js +91 -0
  141. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.js +56 -0
  142. package/esm2015/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.js +51 -0
  143. package/esm2015/lib/custom-saved-cart/custom-saved-cart.component.js +114 -0
  144. package/esm2015/lib/custom-saved-cart/custom-saved-cart.module.js +89 -0
  145. package/esm2015/lib/custom-saved-cart/save-cart.service.js +67 -0
  146. package/esm2015/lib/custom-saved-cart/saved-cart-general.js +49 -0
  147. package/esm2015/lib/custom-saved-cart/saved-cart.service.js +48 -0
  148. package/esm2015/lib/custom-search/custom-search.component.js +132 -0
  149. package/esm2015/lib/custom-search/custom-search.module.js +46 -0
  150. package/esm2015/lib/custom-user-account/custom-user-account.component.js +92 -0
  151. package/esm2015/lib/custom-user-account/custom-user-account.module.js +63 -0
  152. package/esm2015/lib/directives/custom-directives.module.js +22 -0
  153. package/esm2015/lib/directives/custom-paginatior.directive.js +197 -0
  154. package/esm2015/lib/environments/environment.js +24 -0
  155. package/esm2015/lib/find-store/find-store.component.js +94 -0
  156. package/esm2015/lib/find-store/find-store.module.js +66 -0
  157. package/esm2015/lib/help-support/help-support.component.js +24 -0
  158. package/esm2015/lib/help-support/help-support.module.js +38 -0
  159. package/esm2015/lib/my-account/account-dashboard/account-dashboard.component.js +133 -0
  160. package/esm2015/lib/my-account/account-statements/account-statements.component.js +57 -0
  161. package/esm2015/lib/my-account/invoice-credit/invoice-credit.component.js +379 -0
  162. package/esm2015/lib/my-account/my-account.component.js +95 -0
  163. package/esm2015/lib/my-account/my-account.module.js +99 -0
  164. package/esm2015/lib/my-team/my-team.component.js +445 -0
  165. package/esm2015/lib/my-team/my-team.module.js +100 -0
  166. package/esm2015/lib/my-team/team-member.service.js +95 -0
  167. package/esm2015/lib/pipes/custom-date-pipe.pipe.js +26 -0
  168. package/esm2015/lib/services/account-dropdown-state.service.js +21 -0
  169. package/esm2015/lib/services/cart.service.js +70 -0
  170. package/esm2015/lib/services/checkout.service.js +69 -0
  171. package/esm2015/lib/services/endPointURL.js +192 -0
  172. package/esm2015/lib/services/find-store.service.js +50 -0
  173. package/esm2015/lib/services/logout.service.js +50 -0
  174. package/esm2015/lib/services/my-account.service.js +68 -0
  175. package/esm2015/lib/services/order-history.service.js +65 -0
  176. package/esm2015/lib/services/order.review.js +38 -0
  177. package/esm2015/lib/services/search.service.js +42 -0
  178. package/esm2015/lib/services/user-account-detail-service.service.js +207 -0
  179. package/esm2015/lib/shared/CustomProduct.js +48 -0
  180. package/esm2015/lib/shared/active-saved-cart/active-saved-cart.component.js +116 -0
  181. package/esm2015/lib/shared/custom-breadcrum/custom-breadcrum.component.js +102 -0
  182. package/esm2015/lib/shared/custom-cart-detail/custom-cart-detail.component.js +95 -0
  183. package/esm2015/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.js +477 -0
  184. package/esm2015/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.js +431 -0
  185. package/esm2015/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.js +622 -0
  186. package/esm2015/lib/shared/custom-cart-detail/split.pipe.js +17 -0
  187. package/esm2015/lib/shared/date-range-picker/date-range-picker.component.js +173 -0
  188. package/esm2015/lib/shared/regEx.validator.js +17 -0
  189. package/esm2015/lib/shared/saved-cart-popup/saved-cart-popup.component.js +83 -0
  190. package/esm2015/lib/shared/shared-components.module.js +119 -0
  191. package/esm2015/lib/shared/shared-download-order/shared-download-order.component.js +220 -0
  192. package/esm2015/lib/spa-custom-header.component.js +26 -0
  193. package/esm2015/lib/spa-custom-header.module.js +145 -0
  194. package/esm2015/lib/spa-custom-header.service.js +14 -0
  195. package/esm2015/lib/utils/utils.js +27 -0
  196. package/esm2015/lib/utils.js +27 -0
  197. package/esm2015/public-api.js +35 -0
  198. package/fesm2015/buildingproduct-library.js +10197 -0
  199. package/fesm2015/buildingproduct-library.js.map +1 -0
  200. package/lib/account-dropdown/account-dropdown.component.d.ts +24 -0
  201. package/lib/account-dropdown/account-dropdown.module.d.ts +11 -0
  202. package/lib/account-dropdown/account-dropdown.service.d.ts +14 -0
  203. package/lib/checkout/add-new-address/add-new-address.component.d.ts +30 -0
  204. package/lib/checkout/checkout.module.d.ts +28 -0
  205. package/lib/checkout/custom-checkout/custom-checkout.component.d.ts +77 -0
  206. package/lib/checkout/order-confirmation/order-confirmation.component.d.ts +23 -0
  207. package/lib/checkout/order-review/delivery-information/delivery-information.component.d.ts +13 -0
  208. package/lib/checkout/order-review/order-review-grid/order-review-grid.component.d.ts +33 -0
  209. package/lib/checkout/order-review/order-review-list/order-review-list.component.d.ts +31 -0
  210. package/lib/checkout/order-review/order-review.component.d.ts +41 -0
  211. package/lib/constants/general.d.ts +50 -0
  212. package/lib/contact-us/contact-us.component.d.ts +13 -0
  213. package/lib/contact-us/contact-us.module.d.ts +9 -0
  214. package/lib/custom-cart/addto-saved-carts/addto-saved-carts.component.d.ts +18 -0
  215. package/lib/custom-cart/custom-cart.component.d.ts +22 -0
  216. package/lib/custom-cart/custom-cart.module.d.ts +15 -0
  217. package/lib/custom-header-logo/custom-header-logo.component.d.ts +11 -0
  218. package/lib/custom-header-logo/custom-header-logo.module.d.ts +11 -0
  219. package/lib/custom-header-paragraph/custom-header-paragraph.component.d.ts +11 -0
  220. package/lib/custom-header-paragraph/custom-header-paragraph.module.d.ts +10 -0
  221. package/lib/custom-mini-cart/custom-mini-cart.component.d.ts +62 -0
  222. package/lib/custom-mini-cart/custom-mini-cart.module.d.ts +13 -0
  223. package/lib/custom-navigation/custom-navigation.component.d.ts +37 -0
  224. package/lib/custom-navigation/custom-navigation.module.d.ts +21 -0
  225. package/lib/custom-order-details/custom-order-details.component.d.ts +63 -0
  226. package/lib/custom-order-details/custom-order-details.module.d.ts +19 -0
  227. package/lib/custom-order-details/download-popup/download-popup.component.d.ts +15 -0
  228. package/lib/custom-order-details/order-detail-grid/order-detail-grid.component.d.ts +40 -0
  229. package/lib/custom-order-details/order-detail-list/order-detail-list.component.d.ts +35 -0
  230. package/lib/custom-order-history/custom-order-history.component.d.ts +99 -0
  231. package/lib/custom-order-history/custom-order-history.module.d.ts +19 -0
  232. package/lib/custom-order-history/slider-progress/slider-progress.component.d.ts +15 -0
  233. package/lib/custom-saved-cart/custom-saved-cart-details/custom-save-cart-dtl/custom-save-cart-dtl.component.d.ts +33 -0
  234. package/lib/custom-saved-cart/custom-saved-cart-details/custom-saved-cart-details.module.d.ts +20 -0
  235. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-action/saved-cart-details-action.component.d.ts +65 -0
  236. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details-overview/saved-cart-details-overview.component.d.ts +31 -0
  237. package/lib/custom-saved-cart/custom-saved-cart-details/saved-cart-details.service.d.ts +19 -0
  238. package/lib/custom-saved-cart/custom-saved-cart.component.d.ts +59 -0
  239. package/lib/custom-saved-cart/custom-saved-cart.module.d.ts +16 -0
  240. package/lib/custom-saved-cart/save-cart.service.d.ts +17 -0
  241. package/lib/custom-saved-cart/saved-cart-general.d.ts +88 -0
  242. package/lib/custom-saved-cart/saved-cart.service.d.ts +12 -0
  243. package/lib/custom-search/custom-search.component.d.ts +35 -0
  244. package/lib/custom-search/custom-search.module.d.ts +10 -0
  245. package/lib/custom-user-account/custom-user-account.component.d.ts +35 -0
  246. package/lib/custom-user-account/custom-user-account.module.d.ts +12 -0
  247. package/lib/directives/custom-directives.module.d.ts +8 -0
  248. package/lib/directives/custom-paginatior.directive.d.ts +29 -0
  249. package/lib/environments/environment.d.ts +12 -0
  250. package/lib/find-store/find-store.component.d.ts +34 -0
  251. package/lib/find-store/find-store.module.d.ts +12 -0
  252. package/lib/help-support/help-support.component.d.ts +11 -0
  253. package/lib/help-support/help-support.module.d.ts +9 -0
  254. package/lib/my-account/account-dashboard/account-dashboard.component.d.ts +34 -0
  255. package/lib/my-account/account-statements/account-statements.component.d.ts +24 -0
  256. package/lib/my-account/invoice-credit/invoice-credit.component.d.ts +66 -0
  257. package/lib/my-account/my-account.component.d.ts +26 -0
  258. package/lib/my-account/my-account.module.d.ts +20 -0
  259. package/lib/my-team/my-team.component.d.ts +103 -0
  260. package/lib/my-team/my-team.module.d.ts +18 -0
  261. package/lib/my-team/team-member.service.d.ts +17 -0
  262. package/lib/pipes/custom-date-pipe.pipe.d.ts +11 -0
  263. package/lib/services/account-dropdown-state.service.d.ts +10 -0
  264. package/lib/services/cart.service.d.ts +15 -0
  265. package/lib/services/checkout.service.d.ts +17 -0
  266. package/lib/services/endPointURL.d.ts +156 -0
  267. package/lib/services/find-store.service.d.ts +14 -0
  268. package/lib/services/logout.service.d.ts +11 -0
  269. package/lib/services/my-account.service.d.ts +16 -0
  270. package/lib/services/order-history.service.d.ts +14 -0
  271. package/lib/services/order.review.d.ts +11 -0
  272. package/lib/services/search.service.d.ts +11 -0
  273. package/lib/services/user-account-detail-service.service.d.ts +40 -0
  274. package/lib/shared/CustomProduct.d.ts +28 -0
  275. package/lib/shared/active-saved-cart/active-saved-cart.component.d.ts +58 -0
  276. package/lib/shared/custom-breadcrum/custom-breadcrum.component.d.ts +30 -0
  277. package/lib/shared/custom-cart-detail/custom-cart-detail.component.d.ts +32 -0
  278. package/lib/shared/custom-cart-detail/custom-cart-grid/custom-cart-grid.component.d.ts +81 -0
  279. package/lib/shared/custom-cart-detail/custom-cart-list/custom-cart-list.component.d.ts +72 -0
  280. package/lib/shared/custom-cart-detail/custom-product-quantity-form/custom-product-quantity-form.component.d.ts +100 -0
  281. package/lib/shared/custom-cart-detail/split.pipe.d.ts +7 -0
  282. package/lib/shared/date-range-picker/date-range-picker.component.d.ts +39 -0
  283. package/lib/shared/regEx.validator.d.ts +10 -0
  284. package/lib/shared/saved-cart-popup/saved-cart-popup.component.d.ts +37 -0
  285. package/lib/shared/shared-components.module.d.ts +26 -0
  286. package/lib/shared/shared-download-order/shared-download-order.component.d.ts +40 -0
  287. package/lib/spa-custom-header.component.d.ts +11 -0
  288. package/lib/spa-custom-header.module.d.ts +27 -0
  289. package/lib/spa-custom-header.service.d.ts +6 -0
  290. package/lib/utils/utils.d.ts +6 -0
  291. package/lib/utils.d.ts +5 -0
  292. package/package.json +92 -0
  293. package/public-api.d.ts +31 -0
@@ -0,0 +1,348 @@
1
+ import { Component, ViewChild, } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/checkout.service";
5
+ import * as i2 from "@spartacus/core";
6
+ import * as i3 from "@ng-bootstrap/ng-bootstrap";
7
+ import * as i4 from "../../shared/custom-breadcrum/custom-breadcrum.component";
8
+ import * as i5 from "@angular/material/card";
9
+ import * as i6 from "@syncfusion/ej2-angular-calendars";
10
+ import * as i7 from "@angular/material/radio";
11
+ import * as i8 from "../add-new-address/add-new-address.component";
12
+ import * as i9 from "@angular/common";
13
+ import * as i10 from "@angular/forms";
14
+ export class CustomCheckoutComponent {
15
+ constructor(checkoutService, cmsService, cd, calendar, activeCartService) {
16
+ this.checkoutService = checkoutService;
17
+ this.cmsService = cmsService;
18
+ this.cd = cd;
19
+ this.calendar = calendar;
20
+ this.activeCartService = activeCartService;
21
+ this.errorInd$ = new BehaviorSubject(false);
22
+ this.infoMessage = '';
23
+ this.previousUrl = '';
24
+ this.cartId = '';
25
+ this.isDeliveryBox = true;
26
+ this.ACTIVE_ITEM = 'active-box';
27
+ this.selectedAddress = 'accountAddress';
28
+ this.ccminTime = new Date(2022, 0, 28, 6, 0, 0);
29
+ this.ccmaxTime = new Date(2022, 0, 28, 22, 0, 0);
30
+ this.checkoutFormData = {};
31
+ this.isSubmitted = false;
32
+ this.startTime = [];
33
+ this.recentAddress = [];
34
+ this.selectedRecentAddress = {};
35
+ this.tempBranchListData = [];
36
+ this.minLeadTime = 3;
37
+ this.specialDayOpeningList = [];
38
+ this.weekDayOpeningList = [];
39
+ this.deliveryAddresses = [];
40
+ this.showMoreAddresses = false;
41
+ this.breadcrumbData = [];
42
+ this.deliveryModes = [];
43
+ this.confirmedNewAddress = '';
44
+ this.showWaitCursor = new BehaviorSubject(false);
45
+ this.isDisabled = (date) => {
46
+ const dat = new Date(date.year, date.month - 1, date.day);
47
+ return (this.getSpecialDays(date) > -1 ||
48
+ this.weekDayOpeningList[5].closed == true ||
49
+ dat.getDay() === 0);
50
+ };
51
+ }
52
+ ngOnInit() {
53
+ var _a;
54
+ this.cmsService.getCurrentPage().subscribe((pagadata) => {
55
+ this.pageTitle = pagadata.title;
56
+ });
57
+ this.breadcrumbData.push({ url: '/', name: 'Home' });
58
+ this.breadcrumbData.push({ url: '/cart', name: 'Cart' });
59
+ this.breadcrumbData.push({ url: '/checkout', name: 'Checkout' });
60
+ let cart = localStorage.getItem('spartacus⚿dimond-spa⚿cart');
61
+ this.cartId = (_a = JSON.parse(cart)) === null || _a === void 0 ? void 0 : _a.active;
62
+ this.checkoutFormData.deliveryPickUpDate = undefined;
63
+ this.checkoutFormData.deliveryPickUpToTime = undefined;
64
+ this.checkoutFormData.deliveryPickUpFromTime = undefined;
65
+ const checkoutData = sessionStorage.getItem('checkoutData');
66
+ if (checkoutData != null) {
67
+ this.checkoutFormData = JSON.parse(checkoutData);
68
+ this.isDeliveryBox = this.checkoutFormData.deliveryMethod == 'clickAndCollect' ? false : true;
69
+ }
70
+ var locAddress = localStorage.getItem('branchDetails');
71
+ this.branchAddress = JSON.parse(locAddress);
72
+ this.checkoutService.getDeliveryModes(this.cartId).subscribe((data) => {
73
+ if (data) {
74
+ this.deliveryModes = data.deliveryModes;
75
+ this.deliveryModes.sort((a, b) => (a.code > b.code ? -1 : 1));
76
+ }
77
+ }, (error) => {
78
+ this.deliveryModes = [{ code: 'standard_delivery' }, { code: 'clickAndCollect' }];
79
+ console.log(error);
80
+ });
81
+ this.checkoutService.getAddressInfo().subscribe((data) => {
82
+ var _a, _b, _c, _d;
83
+ if (data) {
84
+ this.defaultAccountAddress = data.addresses[0];
85
+ this.recentAddress = data.recentAddresses;
86
+ this.showMoreAddresses = data.addresses && data.addresses.length > 1 ? true : false;
87
+ this.deliveryAddresses = data.addresses && data.addresses.length > 0 ? data.addresses : [];
88
+ this.selectedAddress = this.checkoutFormData.selectedAddress != undefined ? this.checkoutFormData.selectedAddress : 'accountAddress';
89
+ this.selectedRecentAddress.id = this.checkoutFormData && ((_a = this.checkoutFormData) === null || _a === void 0 ? void 0 : _a.deliveryAddressPK) ? (_b = this.checkoutFormData) === null || _b === void 0 ? void 0 : _b.deliveryAddressPK : (_c = this.defaultAccountAddress) === null || _c === void 0 ? void 0 : _c.id;
90
+ this.confirmedNewAddress = this.checkoutFormData.selectedAddress != undefined && this.checkoutFormData.selectedAddress == 'addNewAddress' ? (_d = this.checkoutFormData.newAddress) === null || _d === void 0 ? void 0 : _d.selectedAddress : '';
91
+ if (this.deliveryAddresses.length == 0 && this.selectedAddress != 'addNewAddress') {
92
+ this.selectedAddress = 'recentAddress';
93
+ this.selectedRecentAddress = this.recentAddress[0];
94
+ }
95
+ if (!this.defaultAccountAddress && this.deliveryAddresses.length < 1 && this.recentAddress.length < 1)
96
+ this.selectedAddress = 'addNewAddress';
97
+ this.cd.markForCheck();
98
+ }
99
+ });
100
+ this.checkoutService.getCheckOutValues(this.cartId).subscribe((data) => {
101
+ var _a, _b, _c, _d, _e, _f, _g, _h;
102
+ if (data) {
103
+ this.responseData = data;
104
+ this.weekDayOpeningList = this.isDeliveryBox
105
+ ? (_b = (_a = data.pointOfService) === null || _a === void 0 ? void 0 : _a.deliverySchedule) === null || _b === void 0 ? void 0 : _b.weekDayOpeningList
106
+ : (_d = (_c = data.pointOfService) === null || _c === void 0 ? void 0 : _c.pickupSchedule) === null || _d === void 0 ? void 0 : _d.weekDayOpeningList;
107
+ this.specialDayOpeningList = this.isDeliveryBox
108
+ ? (_f = (_e = data.pointOfService) === null || _e === void 0 ? void 0 : _e.deliverySchedule) === null || _f === void 0 ? void 0 : _f.specialDayOpeningList
109
+ : (_h = (_g = data.pointOfService) === null || _g === void 0 ? void 0 : _g.pickupSchedule) === null || _h === void 0 ? void 0 : _h.specialDayOpeningList;
110
+ this.getDetailResponse();
111
+ }
112
+ }, (error) => {
113
+ console.log(error);
114
+ });
115
+ //code for Delivery Site Delivery Requirements tooltip
116
+ this.cmsService
117
+ .getComponentData('SiteDeliveryRequirementsComponent')
118
+ .subscribe((data) => {
119
+ if (data) {
120
+ this.siteDeliveryRequirements = data.content;
121
+ }
122
+ });
123
+ //code for Click And Collect Comments tooltip
124
+ this.cmsService
125
+ .getComponentData('CommentsClickAndCollectComponent')
126
+ .subscribe((data) => {
127
+ if (data) {
128
+ this.clickandCollectComments = data.content;
129
+ }
130
+ });
131
+ //code for header content
132
+ this.cmsService
133
+ .getComponentData('checkoutHeaderContentComponent')
134
+ .subscribe((data) => {
135
+ if (data) {
136
+ this.checkoutHeaderContent = data.content;
137
+ }
138
+ });
139
+ }
140
+ getDetailResponse() {
141
+ var _a, _b, _c, _d, _e;
142
+ this.tempBranchListData = (_c = (_b = (_a = this.responseData) === null || _a === void 0 ? void 0 : _a.pointOfService) === null || _b === void 0 ? void 0 : _b.pickupSchedule) === null || _c === void 0 ? void 0 : _c.weekDayOpeningList;
143
+ this.branchAddress = (_e = (_d = this.responseData) === null || _d === void 0 ? void 0 : _d.pointOfService) === null || _e === void 0 ? void 0 : _e.address;
144
+ var checkoutDateValue = new Date();
145
+ let i = 0;
146
+ let j = 0;
147
+ if (this.responseData.deliveryMinLeadTime || this.responseData.pickUpMinLeadTime)
148
+ this.minLeadTime = this.isDeliveryBox ? this.responseData.deliveryMinLeadTime : this.responseData.pickUpMinLeadTime;
149
+ let date = new Date();
150
+ while (i < this.minLeadTime) {
151
+ j = j + 1;
152
+ date.setDate(checkoutDateValue.getDate() + j);
153
+ if (date.getDay() == 6 || this.weekDayOpeningList[5].closed == true) {
154
+ continue;
155
+ }
156
+ else {
157
+ i = i + 1;
158
+ }
159
+ }
160
+ j = date.getDay() == 0 ? j + 1 : j;
161
+ this.ngbMinDate = {
162
+ day: (checkoutDateValue.getDate() + j > 30) ? checkoutDateValue.getDate() + j - 30 : checkoutDateValue.getDate() + j,
163
+ month: (checkoutDateValue.getDate() + j) > 30 ? checkoutDateValue.getMonth() == 11 ? 1 : checkoutDateValue.getMonth() + 2 : checkoutDateValue.getMonth() + 1,
164
+ year: (checkoutDateValue.getDate() + j) > 30 && checkoutDateValue.getMonth() == 11 ? checkoutDateValue.getFullYear() + 1 : checkoutDateValue.getFullYear(),
165
+ };
166
+ this.updateMinMaxTime(checkoutDateValue);
167
+ this.cd.markForCheck();
168
+ }
169
+ updateMinMaxTime(date) {
170
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
171
+ const todayDay = this.weekDayOpeningList[date.getDay() - 1];
172
+ this.minTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), ((_a = todayDay === null || todayDay === void 0 ? void 0 : todayDay.openingTime) === null || _a === void 0 ? void 0 : _a.hour) || 9, ((_b = todayDay === null || todayDay === void 0 ? void 0 : todayDay.openingTime) === null || _b === void 0 ? void 0 : _b.minute) || 0, 0);
173
+ this.minToTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), ((_c = todayDay === null || todayDay === void 0 ? void 0 : todayDay.openingTime) === null || _c === void 0 ? void 0 : _c.hour) || 11, ((_d = todayDay === null || todayDay === void 0 ? void 0 : todayDay.openingTime) === null || _d === void 0 ? void 0 : _d.minute) || 0, 0);
174
+ this.fromMaxTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), (todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime.formattedHour.split(' ')[1]) == 'pm'
175
+ ? ((_e = todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime) === null || _e === void 0 ? void 0 : _e.hour) + 10
176
+ : ((_f = todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime) === null || _f === void 0 ? void 0 : _f.hour) || 15, ((_g = todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime) === null || _g === void 0 ? void 0 : _g.minute) || 0, 0);
177
+ this.maxTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), (todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime.formattedHour.split(' ')[1]) == 'pm'
178
+ ? ((_h = todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime) === null || _h === void 0 ? void 0 : _h.hour) + 12
179
+ : ((_j = todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime) === null || _j === void 0 ? void 0 : _j.hour) || 17, ((_k = todayDay === null || todayDay === void 0 ? void 0 : todayDay.closingTime) === null || _k === void 0 ? void 0 : _k.minute) || 0, 0);
180
+ this.updateRequestedTime();
181
+ }
182
+ updateRequestedTime() {
183
+ this.minTime = this.getRoundMinTime(this.minTime);
184
+ this.minToTime = this.getRoundMinTime(this.minToTime);
185
+ this.checkoutFormData.deliveryPickUpToTime = this.maxTime;
186
+ this.checkoutFormData.deliveryPickUpFromTime = this.minToTime;
187
+ }
188
+ getSpecialDays(date) {
189
+ var _a;
190
+ const ind = (_a = this.specialDayOpeningList) === null || _a === void 0 ? void 0 : _a.findIndex((element) => {
191
+ const dateObj = element.formattedDate.split('/');
192
+ return dateObj[0] == date.day && dateObj[1] == date.month;
193
+ });
194
+ return ind;
195
+ }
196
+ getRoundMinTime(minTime) {
197
+ var coff = 1000 * 60 * 30;
198
+ return new Date(Math.ceil(minTime.getTime() / coff) * coff);
199
+ }
200
+ timeClick(event, timeObj) {
201
+ if (timeObj && timeObj.inputWrapper) {
202
+ timeObj.inputWrapper.container &&
203
+ timeObj.inputWrapper.container.classList.remove('e-disabled');
204
+ timeObj.inputWrapper.buttons &&
205
+ timeObj.inputWrapper.buttons[0] &&
206
+ timeObj.inputWrapper.buttons[0].classList.remove('e-disabled');
207
+ timeObj.show();
208
+ }
209
+ }
210
+ timeToClick(event, timeObj) {
211
+ if (timeObj && timeObj.inputWrapper) {
212
+ timeObj.inputWrapper.container &&
213
+ timeObj.inputWrapper.container.classList.remove('e-disabled');
214
+ timeObj.inputWrapper.buttons &&
215
+ timeObj.inputWrapper.buttons[0] &&
216
+ timeObj.inputWrapper.buttons[0].classList.remove('e-disabled');
217
+ timeObj.show();
218
+ }
219
+ }
220
+ updateStaticTime(hours, minutes) {
221
+ if (this.checkoutFormData.deliveryPickUpDate == undefined) {
222
+ const today = new Date();
223
+ this.minToTime = new Date(today.getFullYear(), today.getMonth(), today.getDate(), hours, minutes, 0);
224
+ }
225
+ else {
226
+ const date = this.checkoutFormData.deliveryPickUpDate;
227
+ this.minToTime = new Date(date.year, date.month, date.day, hours, minutes, 0);
228
+ }
229
+ this.minToTime = this.getRoundMinTime(this.minToTime);
230
+ }
231
+ getNewAddress(event) {
232
+ this.newAddress = event;
233
+ }
234
+ reviewOrder() {
235
+ var _a, _b, _c, _d, _e, _f, _g, _h;
236
+ this.isSubmitted = true;
237
+ this.checkoutForm.form.markAsPristine();
238
+ if (this.checkoutForm.valid &&
239
+ this.checkoutFormData.deliveryPickUpDate != undefined &&
240
+ this.checkoutFormData.deliveryPickUpToTime != undefined &&
241
+ this.checkoutFormData.deliveryPickUpDate.day != undefined &&
242
+ this.checkoutFormData.deliveryPickUpFromTime != undefined) {
243
+ if (this.isDeliveryBox && ((_a = this.selectedRecentAddress) === null || _a === void 0 ? void 0 : _a.id) == '') {
244
+ return;
245
+ }
246
+ if (this.isDeliveryBox && this.selectedAddress == 'addNewAddress' && !this.newAddress) {
247
+ this.errorInd$.next(true);
248
+ this.infoMessage = 'Please Select and Confirm Address from Map';
249
+ return;
250
+ }
251
+ this.checkoutFormData.cartID = this.cartId;
252
+ this.checkoutFormData.deliveryAddressPK = this.isDeliveryBox == false ? (_b = this.branchAddress) === null || _b === void 0 ? void 0 : _b.id : (_c = this.selectedRecentAddress) === null || _c === void 0 ? void 0 : _c.id;
253
+ this.checkoutFormData.deliveryMethod = this.isDeliveryBox ? this.deliveryModes[0].code : this.deliveryModes[1].code;
254
+ if (this.selectedAddress == 'addNewAddress') {
255
+ this.checkoutFormData.newAddress = this.newAddress;
256
+ }
257
+ else {
258
+ delete this.checkoutFormData.newAddress;
259
+ }
260
+ this.checkoutFormData.selectedAddress = this.selectedAddress;
261
+ let sessionData = this.checkoutFormData;
262
+ this.checkoutFormData.deliveryPickUpFromTime = (_d = this.collectTimeObj) === null || _d === void 0 ? void 0 : _d.getText();
263
+ this.checkoutFormData.deliveryPickUpToTime = (_e = this.checkoutToTime) === null || _e === void 0 ? void 0 : _e.getText();
264
+ let deliveryPickUpDate = this.checkoutFormData.deliveryPickUpDate;
265
+ this.checkoutFormData.deliveryPickUpDate = ((_f = this.checkoutFormData.deliveryPickUpDate) === null || _f === void 0 ? void 0 : _f.day) + '/' + ((_g = this.checkoutFormData.deliveryPickUpDate) === null || _g === void 0 ? void 0 : _g.month) + '/' + ((_h = this.checkoutFormData.deliveryPickUpDate) === null || _h === void 0 ? void 0 : _h.year);
266
+ const reviewData = JSON.parse(JSON.stringify(this.checkoutFormData));
267
+ this.checkoutService
268
+ .ValidateCheckoutDateTime(this.checkoutFormData)
269
+ .subscribe((response) => {
270
+ if (response && response.status == 'SUCCESS') {
271
+ this.checkoutService.checkoutReviewAndOrder(reviewData).subscribe((data) => {
272
+ this.showWaitCursor.next(true);
273
+ this.checkoutFormData.deliveryPickUpDate = deliveryPickUpDate;
274
+ if (data && data.status == 'SUCCESS') {
275
+ sessionStorage.setItem('checkoutData', JSON.stringify(sessionData));
276
+ window.location.href = '/review-order';
277
+ }
278
+ else {
279
+ this.errorInd$.next(true);
280
+ this.checkoutFormData.deliveryPickUpDate =
281
+ deliveryPickUpDate;
282
+ this.infoMessage = data.messages[0];
283
+ }
284
+ this.cd.markForCheck();
285
+ }, (eror) => {
286
+ this.checkoutFormData.deliveryPickUpDate = deliveryPickUpDate;
287
+ this.cd.markForCheck();
288
+ this.showWaitCursor.next(false);
289
+ });
290
+ }
291
+ else {
292
+ this.errorInd$.next(true);
293
+ this.checkoutFormData.deliveryPickUpDate = deliveryPickUpDate;
294
+ this.infoMessage = response.messages[0];
295
+ this.cd.markForCheck();
296
+ this.showWaitCursor.next(false);
297
+ }
298
+ }, (error) => {
299
+ var _a;
300
+ this.checkoutFormData.deliveryPickUpDate = deliveryPickUpDate;
301
+ this.errorInd$.next(true);
302
+ this.infoMessage = (_a = error === null || error === void 0 ? void 0 : error.error) === null || _a === void 0 ? void 0 : _a.errors[0].message;
303
+ this.cd.markForCheck();
304
+ });
305
+ }
306
+ }
307
+ onFromTimeChanged(obj) {
308
+ const value = obj === null || obj === void 0 ? void 0 : obj.getText();
309
+ let hours = Number(value.split(':')[0]);
310
+ let minutes = Number(value.split(' ')[0].split(':')[1]);
311
+ if (value.split(' ')[1] == 'PM')
312
+ hours = hours == 12 ? hours : hours + 12;
313
+ this.updateStaticTime(hours + 2, minutes);
314
+ if (this.checkoutFormData.deliveryPickUpToTime <= this.getRoundMinTime(this.minToTime))
315
+ this.checkoutFormData.deliveryPickUpToTime = this.getRoundMinTime(this.minToTime);
316
+ }
317
+ datechange(event) {
318
+ const date = new Date(event.month + '/' + event.day + '/' + event.year);
319
+ this.updateMinMaxTime(date);
320
+ }
321
+ addNewAddress() {
322
+ this.selectedAddress = 'addNewAddress';
323
+ this.selectedRecentAddress = '';
324
+ }
325
+ }
326
+ CustomCheckoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCheckoutComponent, deps: [{ token: i1.CustomCheckoutService }, { token: i2.CmsService }, { token: i0.ChangeDetectorRef }, { token: i3.NgbCalendar }, { token: i2.ActiveCartService }], target: i0.ɵɵFactoryTarget.Component });
327
+ CustomCheckoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomCheckoutComponent, selector: "app-custom-checkout", viewQueries: [{ propertyName: "checkoutForm", first: true, predicate: ["checkoutForm"], descendants: true }, { propertyName: "checkoutToTime", first: true, predicate: ["checkoutToTime"], descendants: true }, { propertyName: "collectTimeObj", first: true, predicate: ["collectTimeObj"], descendants: true }, { propertyName: "mapViewEl", first: true, predicate: ["mapViewNode"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"loading\" *ngIf=\"showWaitCursor | async \">Loading&#8230;</div>\r\n<app-custom-breadcrum [customCrumbData]=\"breadcrumbData\" class=\"products-breadcums\"></app-custom-breadcrum>\r\n<div class=\"container mb-120\">\r\n <div class=\"top-checkout col-sm-9\">\r\n <h1 class=\"pageTitle\">{{pageTitle}}</h1>\r\n <p class=\"checkout-header-paragraph\">{{checkoutHeaderContent}}</p>\r\n </div>\r\n <div class=\"row content-row\">\r\n <div class=\"col-sm-12 col-lg-7 offset-lg-3\">\r\n <form #checkoutForm=\"ngForm\">\r\n <mat-card-header class=\"line-step-navigation first-step\">\r\n <div class=\"card-title cus-title-margin-card\">\r\n <mat-card-title class=\"font-bold\"> <span class=\"card-number\"> 1 </span> Choose Your Delivery Method</mat-card-title>\r\n </div>\r\n </mat-card-header>\r\n <mat-card class=\"custom-mat-card line-step-navigation\">\r\n <mat-card-content>\r\n <div class=\"card-container d-sm-inline-flex d-md-flex align-content-center justify-content-between \">\r\n <mat-card class=\"matlft\">\r\n <mat-card-content class=\"box-container\">\r\n <div (click)=\"isDeliveryBox = true;\" class=\"delivery-box d-sm-inline-flex align-items-sm-center justify-content-sm-around\" [ngClass]=\"isDeliveryBox ? ACTIVE_ITEM : ''\">\r\n <img class=\"delivery-img\" src=\"../../../../assets/images/delivery.svg\" />\r\n <ng-template [ngIf]=\"isDeliveryBox\">\r\n <img class=\"check-square-del\" src=\"../../../../assets/images/check-square.svg\" />\r\n </ng-template>\r\n </div>\r\n <div class=\"delivery-heading-text\">\r\n <mat-card-title>{{deliveryModes[0]?.name || 'Delivery'}} </mat-card-title>\r\n <mat-card-subtitle> {{deliveryModes[0]?.description || 'We deliver right to your door.'}} </mat-card-subtitle>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <mat-card class=\"matright\">\r\n <mat-card-content class=\"box-container\">\r\n <div (click)=\"isDeliveryBox = false;\" class=\"collect-box d-sm-inline-flex align-items-sm-center justify-content-sm-around\" [ngClass]=\"isDeliveryBox ? '' : ACTIVE_ITEM\">\r\n <img class=\"pickup-img\" src=\"../../../../assets/images/pickup.svg\" />\r\n <ng-template [ngIf]=\"!isDeliveryBox\">\r\n <img class=\"check-square-cc\" src=\"../../../../assets/images/check-square.svg\" />\r\n </ng-template>\r\n </div>\r\n <div class=\"delivery-heading-text\">\r\n <mat-card-title> {{deliveryModes[1]?.name || 'Click & Collect'}}</mat-card-title>\r\n <mat-card-subtitle> {{deliveryModes[1]?.description || 'Collect from your nearest branch.' }}</mat-card-subtitle>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card-header class=\"line-step-navigation\">\r\n <div class=\"card-title cus-title-margin-card\">\r\n <mat-card-title class=\"font-bold\"> <span class=\"card-number\"> 2 </span> Purchase Order Number</mat-card-title>\r\n </div>\r\n </mat-card-header>\r\n <mat-card class=\"custom-mat-card line-step-navigation\">\r\n <mat-card-content>\r\n <div class=\"form-container for-mob col-sm-6 pl-0\">\r\n <label class=\"form-label\">Purchase Order Number <span class=\"marker\">*</span></label>\r\n <input #poNumber=\"ngModel\" name=\"poNumber\" id=\"poNumber\" type=\"text\" maxlength=\"15\" [(ngModel)]=\"checkoutFormData.poNumber\" class=\"form-control joborder-input\" required>\r\n </div>\r\n <p *ngIf=\"isSubmitted\" [hidden]=\"poNumber.valid\" class=\"error-message\">\r\n Purchase Order Number is required\r\n </p>\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <mat-card-header class=\"line-step-navigation\">\r\n <div class=\"card-title cus-title-margin-card\">\r\n\r\n <mat-card-title class=\"font-bold\"> <span class=\"card-number\"> 3 </span> {{isDeliveryBox ? 'Delivery': 'Pickup '}} Date and Time</mat-card-title>\r\n </div>\r\n </mat-card-header>\r\n\r\n <mat-card class=\"custom-mat-card line-step-navigation\">\r\n <mat-card-content>\r\n <div class=\"form-container for-mob col-sm-6 pl-0\">\r\n <label for=\"date\" class=\"form-label\">Date <span class=\"marker\">*</span></label>\r\n <form class=\"ngb-date-form\">\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <input [firstDayOfWeek]=\"7\" #deliveryPickUpDate=\"ngModel\" class=\"form-control cus-width date-input\" [(ngModel)]=\"checkoutFormData.deliveryPickUpDate\" id=\"date\" name=\"txtDate\" tabindex=\"-1\" onkeydown=\"return false\" placeholder=\"DD-MM-YYYY\" ngbDatepicker #ngDate=\"ngbDatepicker\"\r\n [minDate]=\"ngbMinDate\" (dateSelect)=\"datechange($event)\" container=\"body\" required [markDisabled]=\"isDisabled\" />\r\n <div class=\"input-group-append custom-date-button\">\r\n <button class=\"btn btn-outline-secondary calendar\" (click)=\"ngDate.toggle()\" type=\"button\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n <p *ngIf=\"isSubmitted && !checkoutFormData.deliveryPickUpDate\" class=\"error-message\">\r\n Date is required\r\n </p>\r\n <div class=\"form-container for-mob col-sm-6 pl-0\">\r\n <label for=\"time\" class=\"form-label pt-4\">Time <span class=\"marker\">*</span></label>\r\n <div class=\"d-flex align-items-center\">\r\n <form class=\"form-job\">\r\n <div class=\"selectdiv\">\r\n <label class=\"jobinput\">\r\n <ejs-timepicker format=\"hh:mm a\" id='timepicker' [showClearButton]=\"false\"\r\n (click)=\"timeClick($event, collectTimeObj)\" #collectTimeObj\r\n [(value)]='checkoutFormData.deliveryPickUpFromTime' [min]=\"minTime\" [allowEdit]=\"false\" [max]=\"fromMaxTime\"\r\n (change)=\"onFromTimeChanged(collectTimeObj)\"\r\n ></ejs-timepicker> \r\n </label>\r\n </div>\r\n </form>\r\n <label for=\"time\" class=\"form-label p-3\">to</label>\r\n\r\n <form class=\"form-job\">\r\n <div class=\"selectdiv\">\r\n <label class=\"jobinput\">\r\n <ejs-timepicker format=\"hh:mm a\" id='totTmepicker' [showClearButton]=\"false\"\r\n (click)=\"timeClick($event, checkoutToTime)\" #checkoutToTime\r\n [(value)]='checkoutFormData.deliveryPickUpToTime' [min]=\"minToTime\" [allowEdit]=\"false\" [max]=\"maxTime\"\r\n ></ejs-timepicker>\r\n \r\n </label>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <!-- <p *ngIf=\"isSubmitted\" [hidden]=\"checkoutFormData.deliveryPickUpFromTime != undefined\" class=\"error-message\">\r\n From time is required\r\n </p>\r\n <p *ngIf=\"isSubmitted\" [hidden]=\"checkoutFormData.deliveryPickUpToTime != undefined\" class=\"error-message\">\r\n To time is required\r\n </p> -->\r\n </mat-card-content>\r\n </mat-card>\r\n\r\n <mat-card-header class=\"line-step-navigation\" *ngIf=\"!isDeliveryBox\">\r\n <div class=\"card-title cus-title-margin-card\">\r\n <mat-card-title class=\"font-bold\"> <span class=\"card-number\"> 4 </span> Pickup Location</mat-card-title>\r\n </div>\r\n </mat-card-header>\r\n <mat-card *ngIf=\"!isDeliveryBox\" class=\"custom-mat-card line-step-navigation\">\r\n <mat-card-content>\r\n <div class=\"branch-container\">\r\n <mat-card-title class='address-title'>\r\n {{branchAddress?.town}}</mat-card-title>\r\n <mat-card-subtitle> {{branchAddress?.formattedAddress}}</mat-card-subtitle>\r\n <mat-card-subtitle> <span class=\"form-label\">Phone: </span> {{branchAddress?.phone}}</mat-card-subtitle>\r\n <div class=\"branch-hour-container\">\r\n <mat-card-title class='address-title'>Opening Hours</mat-card-title>\r\n <mat-card-subtitle *ngFor=\"let data of tempBranchListData\">\r\n <span class=\"hour-label-left\">{{ data?.weekDay }}</span>\r\n <span *ngIf=\"data?.openingTime?.formattedHour || data?.closingTime?.formattedHour\">{{data?.openingTime?.formattedHour}}\r\n - {{data?.closingTime?.formattedHour}}</span>\r\n <span class=\"error-message\" *ngIf=\"!data?.openingTime?.formattedHour && !data?.closingTime?.formattedHour\">Closed</span>\r\n </mat-card-subtitle>\r\n </div>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card-header class=\"line-step-navigation\" *ngIf=\"isDeliveryBox\">\r\n <div class=\"card-title cus-title-margin-card\">\r\n <mat-card-title class=\"font-bold\"> <span class=\"card-number\"> 4 </span> {{isDeliveryBox ? 'Select your Delivery Address Preference': 'Pickup Location '}}\r\n\r\n </mat-card-title>\r\n </div>\r\n </mat-card-header>\r\n <mat-card [hidden]=\"!isDeliveryBox\" class=\"custom-mat-card line-step-navigation\">\r\n <mat-card-content>\r\n <div class=\"d-flex mat-inner-container radio-btn-container\">\r\n <mat-radio-group aria-label=\"Select an option\">\r\n <mat-radio-button *ngIf=\"defaultAccountAddress?.formattedAddress || (deliveryAddresses && deliveryAddresses.length > 0)\" [checked]=\"selectedAddress == 'accountAddress'\" (change)=\"selectedAddress = 'accountAddress';selectedRecentAddress= deliveryAddresses[0]\"\r\n [value]=\"'accountAddress'\" class=\"pl-0 pr-md-4\">Account Address</mat-radio-button>\r\n <mat-radio-button *ngIf=\"deliveryAddresses && recentAddress.length> 0\" [checked]=\"selectedAddress == 'recentAddress'\" (change)=\"selectedAddress = 'recentAddress'; selectedRecentAddress= recentAddress[0]\" [value]=\"'recentAddress'\" class=\"pl-0 pr-md-4\">Recent Address</mat-radio-button>\r\n <mat-radio-button [checked]=\"selectedAddress == 'addNewAddress'\" (change)=\"addNewAddress()\" [value]=\"'addNewAddress'\">Add New Address</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n <div class=\"py-2 address-inner-container\" *ngIf=\"selectedAddress == 'accountAddress' && deliveryAddresses.length > 0 \">\r\n <label *ngIf=\"!showMoreAddresses\" class=\"form-label\">Confirmed Delivery Address </label>\r\n\r\n <div *ngIf=\"!showMoreAddresses\" class=\"form-container\">\r\n <div class=\"map-selected-address\" id=\"address\" required #isAddrSelectedOrNot>\r\n {{defaultAccountAddress?.formattedAddress}}</div>\r\n </div>\r\n <div *ngIf=\"showMoreAddresses\">\r\n <mat-radio-group aria-labelledby=\"example-radio-group-label\" class=\"example-radio-group radio-btn-size\">\r\n <mat-radio-button class=\"py-1\" [checked]=\"selectedRecentAddress?.id == address.id\" *ngFor=\"let address of deliveryAddresses\" [value]=\"address.id\" (change)=\"selectedRecentAddress=address\">\r\n {{address.formattedAddress}}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n <div class=\"py-2 address-inner-container\" *ngIf=\"selectedAddress == 'recentAddress' && recentAddress.length > 0\">\r\n <mat-radio-group aria-labelledby=\"example-radio-group-label\" class=\"example-radio-group radio-btn-size\">\r\n <mat-radio-button class=\"py-1\" [checked]=\"selectedRecentAddress?.id == address.id\" *ngFor=\"let address of recentAddress \" [value]=\"address.id\" (change)=\"selectedRecentAddress=address\">\r\n {{address.formattedAddress}}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n <div *ngIf=\"selectedAddress == 'addNewAddress'\">\r\n <!-- Map Div -->\r\n <app-add-new-address [confirmedAddress]=\"confirmedNewAddress\" (updateNewAddress)=\"getNewAddress($event)\"></app-add-new-address>\r\n </div>\r\n </mat-card-content>\r\n </mat-card>\r\n <mat-card-header class=\"line-step-navigation last-step\">\r\n <div class=\"card-title cus-title-margin-card\">\r\n <mat-card-title>\r\n <span class=\"card-number\"> 5 </span> {{isDeliveryBox ? 'Site Delivery Requirements': 'Comments '}}\r\n <span class=\"info-icon pl-2\" [ngbTooltip]=\"isDeliveryBox ? siteDeliveryRequirements : clickandCollectComments\" placement=\"bottom\"></span>\r\n </mat-card-title>\r\n </div>\r\n </mat-card-header>\r\n <mat-card class=\"custom-mat-card line-step-navigation\">\r\n <mat-card-content>\r\n <textarea class=\"form-control\" [(ngModel)]=\"checkoutFormData.deliveryPickUpNotes\" rows=\"3\" name=\"Instructions\" id=\"Instructions\" [placeholder]=\"isDeliveryBox ? 'Provide any specific delivery instructions':'Provide any specific pickup instructions'\" maxlength=\"250\"></textarea>\r\n </mat-card-content>\r\n </mat-card>\r\n </form>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"cart-page-footer\">\r\n <div class=\"container\">\r\n <div class=\"sticky-footer row\">\r\n <div class=\"col-sm-12\">\r\n <p class=\" float-md-right m-0 checkout-footer-btns\">\r\n <a title=\"Back to Cart\" href=\"/cart\" class=\"mr-3 font-weight-bold\">\r\n <img src=\"../../../../assets/images/ionic-arrow-back.svg\" alt=\"back-arrow\" class=\"mr-2\" /> BACK\r\n </a>\r\n <button type=\"button\" (click)=\"reviewOrder()\" class=\"btn primary-button\">Review And Order</button>\r\n </p>\r\n </div>\r\n <div class=\" col-sm-12 alert alert-danger justify-content-start mt-3\" role=\"alert\" *ngIf=\"errorInd$ | async\">\r\n <img class=\"mr-3\" src=\"../../../../assets/images/erroricon.svg\" alt=\"alert\"> {{infoMessage}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";@media screen and (min-width: 1366px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: 1.063rem;--fontsize17-5: 1.1rem;--fontsize18: 1.125rem;--fontsize18-4: 1.5rem;--fontsize20: 1.25rem;--fontsize21: 1.313rem;--fontsize22: 1.375rem;--fontsize23: 1.438rem;--fontsize24: 1.5rem;--fontsize26: 1.625rem;--fontsize28: 1.75rem;--fontsize30: 1.625rem;--fontsize32: 2rem;--fontsize34: 2.125rem;--fontsize36: 2rem;--fontsize40: 2.25rem;--fontsize46: 2.875rem;--fontsize80: 5rem}}@media screen and (max-width: 1365px) and (min-width: 768px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2.875rem;--fontsize80: 3.5rem}}@media screen and (max-width: 767px){:root{--fontsize12: .75rem;--fontsize14: .875rem;--fontsize16: 1rem;--fontsize16-5: .77rem;--fontsize17: .9rem;--fontsize17-5: 1rem;--fontsize18: .875rem;--fontsize19: .938rem;--fontsize20: 1rem;--fontsize21: 1.063rem;--fontsize22: 1.125rem;--fontsize23: 1.188rem;--fontsize24: 1rem;--fontsize26: 1.25rem;--fontsize28: 1.5rem;--fontsize30: 1.25rem;--fontsize32: 1.75rem;--fontsize34: 1.875rem;--fontsize36: 1.625rem;--fontsize40: 2.5rem;--fontsize46: 2rem;--fontsize80: 2.5rem}}@font-face{font-family:icomoon;font-weight:400;src:url(../assets/fonts/icomoon.ttf) format(\"ttf\"),url(../assets/fonts/icomoon.woff) format(\"woff\");font-weight:normal;font-style:normal;font-display:swap}@font-face{font-family:\"Arial Regular\";src:url(../assets/fonts/arial-webfont.woff) format(\"woff\"),url(../assets/fonts/arial-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Bold\";src:url(../assets/fonts/arialbold-webfont.woff) format(\"woff\"),url(../assets/fonts/arialbold-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Arial Black\";src:url(../assets/fonts/arialblack-webfont.woff) format(\"woff\"),url(../assets/fonts/arialblack-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Reqular\";src:url(../assets/fonts/helveticaneue.woff) format(\"woff\"),url(../assets/fonts/helveticaneue.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Thin\";src:url(../assets/fonts/helveticaneuethin-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuethin-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}@font-face{font-family:\"Helvetica Neue Medium\";src:url(../assets/fonts/helveticaneuemedium-webfont.woff) format(\"woff\"),url(../assets/fonts/helveticaneuemedium-webfont.woff2) format(\"woff2\");font-weight:normal;font-style:normal}[class*=\" icon-\"],[class^=icon-]{font-family:icomoon!important;font-feature-settings:normal;font-variant:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;text-transform:none;font-display:swap}.icon-right:before{content:\"\\e902\"}.icon-materials:before{content:\"\\e900\"}.icon-natural-lighting:before{content:\"\\e90a\"}.icon-rainwater:before{content:\"\\e901\"}.icon-roofing:before{content:\"\\e90b\"}.icon-flashing{position:relative;display:inline-block;height:32px;text-align:center;width:32px}.icon-flashing:before,.mainnav-link-level-2.show .navTagChild .icon-flashing:before{content:url(../assets/images/icon-flashing-white.svg);height:20px;width:20px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);line-height:15px}li.megamenuSubChild:hover .icon-flashing:before{content:url(../assets/images/icon-flashing-black.svg)}.icon-structural:before{content:\"\\e90c\"}.icon-accessories-old .path1:before{content:\"\\e903\"}.icon-accessories-old .path2:before{margin-left:-1em;content:\"\\e904\"}.icon-accessories-old .path3:before{margin-left:-1em;content:\"\\e905\"}.icon-cladding-old .path1:before{content:\"\\e90d\"}.icon-cladding-old .path2:before{margin-left:-1em;content:\"\\e90e\"}.icon-close:before{content:\"\\e90f\"}.icon-message:before{content:\"\\e910\"}.icon-search .path1:before{content:\"\\e906\"}.icon-search .path2:before{content:\"\\e907\"}.icon-search .path3:before{margin-left:-1.0156em;content:\"\\e908\"}.icon-summary:before{content:\"\\e911\"}.icon-branch:before{content:\"\\e912\"}.icon-delivery:before{content:\"\\e913\"}.icon-downloads:before{content:\"\\e909\"}.icon-drawings:before{content:\"\\e914\"}.icon-full:before{content:\"\\e915\"}.icon-manual:before{content:\"\\e916\"}.icon-payment:before{content:\"\\e917\"}.icon-empty .path1:before{content:\"\\e918\"}.icon-empty .path2:before{margin-left:-1em;content:\"\\e919\"}.icon-empty .path3:before{margin-left:-1em;content:\"\\e91a\"}.icon-product-overview:before{content:\"\\e91b\"}.icon-arrows:before{content:\"\\e91c\"}.icon-selected:before{content:\"\\e91d\"}.icon-accessories:before{content:\"\\e91b\"}.icon-cladding:before{content:\"\\e91e\"}.icon-Triangle:before{content:\"\\e91f\"}.icon-home:before{content:\"\\e920\"}.icon-faq:before{content:\"\\e921\"}.icon-temperature:before{content:\"\\e922\"}body header{font-family:\"Arial Regular\",sans-serif}header{background-color:#1d1d1b;position:sticky;top:0;background-size:100% 25%!important;background-repeat:no-repeat;z-index:10}header .header{max-width:100%;padding:0}header cx-banner cx-media img{margin-top:.7rem;margin-bottom:0}header label{display:inline-flex}header .SiteLinks{height:52px;display:flex;align-items:center;justify-content:space-between;padding-top:5px;padding-bottom:5px}header .SiteLinks cx-paragraph p{color:#fff;font-size:var(--fontsize16);line-height:var(--fontsize16);margin-bottom:0}header .SiteLinks cx-paragraph{font-size:var(--fontsize16)}header .SiteLinks app-account-dropdown,header .SiteLinks app-find-store{width:calc(25% - 25px);max-width:328px;margin-right:25px}header .SiteLinks app-contact-us{width:calc(20% - 25px);max-width:100px;margin-left:auto}header .SiteLinks app-custom-mini-cart{width:10%}header .SiteLinks .preferenceLink{margin-left:auto}header .SiteLinks .preferenceLink cx-generic-link{margin:0}header .SiteLinks .preferenceLink cx-generic-link cx-media img{height:22px;margin:0}header .SiteLogo .storeLogo{position:absolute;z-index:99;left:40px;bottom:10px}header .SiteLogo .homeLogo{max-width:28px;height:28px;position:absolute;z-index:99;bottom:47px}header .NavigationBar{flex:70%;background-color:#b61828;min-height:40px;display:flex;align-items:center;position:relative}header .logoutMenu{margin-top:0!important}header .logoutMenu li{cursor:pointer;background-color:#4c4c4c;color:#fff}header .logoutMenu li:hover{text-decoration:underline;background-color:#4c4c4c}header .MarketingContext{width:100%;margin:auto}.customer-service-icon{cursor:pointer}.helpSupport{width:20rem;border:0;margin-top:.5rem!important;transform:translate(-42%,36px)!important;padding:1rem 1rem 0;background-color:#393939;color:#fff;top:0}.helpSupport .arrow-up{position:absolute;top:-8px;right:44%;width:0;height:0;border-left:15px solid rgba(0,0,0,0);border-right:15px solid rgba(0,0,0,0);border-bottom:15px solid #393939}.helpSupport .contact-us-info .heading{font-family:\"Arial Bold\",sans-serif}.helpSupport .contact-us-info .detail{font-size:var(--fontsize14);line-height:2rem}.helpSupport .contact-us-info .detail .service-icon{height:20px;width:20px;margin-right:10px}.helpSupport .contact-us-info .contactLink a{font-size:var(--fontsize14);text-decoration:underline;text-transform:uppercase}.helpSupport .contact-us-info a{color:#fff;text-decoration:none}.helpSupport .contact-us-info a:hover{text-decoration:underline}.pageTitle{font-family:\"Helvetica Neue Regular\",sans-serif;font-size:var(--fontsize54)}#visualization-container{text-align:center;margin:0 auto}#cds-viewer-container-3d{width:320px;height:200px}#cds-viewer-container-2d{width:320px;height:200px}[aria-label=Close]{cursor:pointer}cx-media.is-missing{background:url(./assets/images/search-noimage.svg);background-size:cover;background-position:center;background-repeat:no-repeat}cx-global-message{position:fixed;top:9rem;width:100%;z-index:13}@media screen and (max-width: 991px){cx-global-message{top:3.75rem}cx-storefront header{background-color:#b61828}cx-storefront header cx-banner cx-media img{margin:auto}cx-storefront header .SiteLogo{width:100%;max-width:211px;margin:auto;padding-left:30px;box-sizing:border-box}cx-storefront header .SiteLogo .storeLogo{position:unset}cx-storefront header .SearchBox{margin:14px 0 10px;width:30px}cx-storefront header .SiteLinks{background-color:transparent;width:110px;margin:auto 25px auto 0}cx-storefront header .SiteLinks app-account-dropdown,cx-storefront header .SiteLinks app-find-store,cx-storefront header .SiteLinks app-contact-us,cx-storefront header .SiteLinks cx-paragraph,cx-storefront header .SiteLinks .preferenceLink{display:none}cx-storefront header .SiteLinks app-custom-mini-cart,cx-storefront header .SiteLinks app-custom-user-account{width:35px}cx-storefront header.is-expanded{overflow-y:auto;position:fixed;bottom:0;top:0;width:calc(100% - 99px)}cx-storefront header.is-expanded .header{background-color:#b61828;margin-left:0}cx-storefront header.is-expanded .PreHeader{position:absolute;right:15px;top:15px}cx-storefront header.is-expanded .SearchBox{display:none}cx-storefront header.is-expanded .SiteLogo{position:absolute;top:25px;z-index:9}cx-storefront header.is-expanded .SiteLinks{background-color:#1d1d1b;width:100%;margin:15px auto 15px 0;height:unset;padding:15px;max-width:100%;position:relative;z-index:9;top:60px}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-account-dropdown{width:100%;max-width:100%}cx-storefront header.is-expanded .SiteLinks app-find-store{width:50%;max-width:328px;min-width:328px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-right:15px;margin-left:auto;width:115px;max-width:unset}cx-storefront header.is-expanded .navigation{position:relative;top:45px}cx-storefront header.is-expanded:before{background-color:#0000004d;right:0;content:\"\";position:fixed;z-index:2;top:0;bottom:0;height:100vh;width:99px}cx-storefront header.is-expanded:after{background-color:transparent}}@media screen and (max-width: 576px){cx-storefront header .SiteLogo{max-width:80px}cx-storefront header .SiteLogo .storeLogo{display:none}cx-storefront header .searchBox{height:45px}cx-storefront header.is-expanded{width:100%}cx-storefront header.is-expanded .header,cx-storefront header.is-expanded .navigation{width:100%}cx-storefront header.is-expanded .SiteLogo{max-width:211px!important}cx-storefront header.is-expanded .SiteLogo .storeLogo{display:block}cx-storefront header.is-expanded .SiteLinks{max-width:100%;width:100%}cx-storefront header.is-expanded .SiteLinks app-account-dropdown,cx-storefront header.is-expanded .SiteLinks app-find-store,cx-storefront header.is-expanded .SiteLinks app-contact-us,cx-storefront header.is-expanded .SiteLinks cx-paragraph,cx-storefront header.is-expanded .SiteLinks .preferenceLink{display:block}cx-storefront header.is-expanded .SiteLinks app-custom-mini-cart,cx-storefront header.is-expanded .SiteLinks app-custom-user-account{display:none}cx-storefront header.is-expanded .SiteLinks app-find-store{width:100%;max-width:100%;margin-bottom:10px}cx-storefront header.is-expanded .SiteLinks app-contact-us{margin-left:0}cx-storefront header.is-expanded .SiteLinks cx-paragraph{margin-left:auto}cx-storefront header.is-expanded:before{display:none}.pageTitle{font-size:28px}}.mb-120{margin-bottom:120px}::ng-deep .OrderCheckoutTemplate header{display:none!important}::ng-deep cx-storefront.stop-navigating:before,::ng-deep cx-storefront.stop-navigating:after{height:0}.custom-arrow{position:absolute;right:15px;top:18px;z-index:1}.esri-view{padding:0;margin:0;height:100%;width:100%}#mapViewNode{padding:0;margin:0;height:100%;width:100%}::ng-deep .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#b61828!important}::ng-deep .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background:#B61828!important}::ng-deep ejs-timepicker .e-input-group{padding:8px}.e-input-group.e-control-wrapper.e-time-wrapper.e-lib.e-keyboard.e-valid-input.e-non-edit{font-size:var(--fontsize16);margin-right:1rem}button.calendar,button.calendar:active{opacity:1;display:block;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 width%3D%2219.785%22 height%3D%2222%22 viewBox%3D%220 0 19.785 22%22%3E%0D %3Cdefs%3E%0D %3CclipPath id%3D%22clip-path%22%3E%0D %3Cpath id%3D%22Mask%22 d%3D%22M17.569%2C22H2.215a2.143%2C2.143%2C0%2C0%2C1-1.571-.644A2.147%2C2.147%2C0%2C0%2C1%2C0%2C19.785V4.431A2.147%2C2.147%2C0%2C0%2C1%2C.644%2C2.859a2.147%2C2.147%2C0%2C0%2C1%2C1.571-.644H3.3V0H5.513V2.215h8.759V0h2.215V2.215h1.082a2.2%2C2.2%2C0%2C0%2C1%2C2.215%2C2.215V19.785A2.2%2C2.2%2C0%2C0%2C1%2C17.569%2C22ZM2.215%2C7.728V19.785H17.569V7.728Zm13.19%2C9.893H9.893V12.108h5.513v5.513Z%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3C%2FclipPath%3E%0D %3C%2Fdefs%3E%0D %3Cg id%3D%22Group%22 transform%3D%22translate(0)%22%3E%0D %3Cpath id%3D%22Mask-2%22 data-name%3D%22Mask%22 d%3D%22M17.569%2C22H2.215a2.143%2C2.143%2C0%2C0%2C1-1.571-.644A2.147%2C2.147%2C0%2C0%2C1%2C0%2C19.785V4.431A2.147%2C2.147%2C0%2C0%2C1%2C.644%2C2.859a2.147%2C2.147%2C0%2C0%2C1%2C1.571-.644H3.3V0H5.513V2.215h8.759V0h2.215V2.215h1.082a2.2%2C2.2%2C0%2C0%2C1%2C2.215%2C2.215V19.785A2.2%2C2.2%2C0%2C0%2C1%2C17.569%2C22ZM2.215%2C7.728V19.785H17.569V7.728Zm13.19%2C9.893H9.893V12.108h5.513v5.513Z%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3Cg id%3D%22Group-2%22 data-name%3D%22Group%22 clip-path%3D%22url(%23clip-path)%22%3E%0D %3Cg id%3D%22_icon-color%22 data-name%3D%22%E2%86%B3%F0%9F%8E%A8icon-color%22 transform%3D%22translate(-49.463 -47.247)%22%3E%0D %3Crect id%3D%22Icon-Shade%22 width%3D%22118.71%22 height%3D%22118.71%22 fill%3D%22%231d1d1b%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\") no-repeat;background-size:20px 20px;background-position:center;border-width:thin;align-items:center;position:relative;text-align:center;justify-content:center;padding:0;border-radius:0;border:1px solid #d3d6db;border-left-width:0px}.form-label{font-size:var(--fontsize16);font-family:\"Arial Bold\",sans-serif}.mat-card:not([class*=mat-elevation-z]){padding:1.5rem}.delivery-box,.collect-box{border:1px solid #A6A6A5;border-radius:10px;opacity:1;align-items:center;justify-content:center;background-color:#eee3;display:inline-flex;padding:36px;height:160px;width:219px;cursor:pointer;position:relative}.delivery-box .delivery-img,.collect-box .delivery-img{width:6.25em;height:3.688em}.delivery-box .pickup-img,.collect-box .pickup-img{width:5em;height:5em}.delivery-box.active-box,.collect-box.active-box{background-color:#eee3;border:2px solid #B61828;opacity:1}.delivery-box .mat-checkbox.active-checkbox,.collect-box .mat-checkbox.active-checkbox{right:25px;position:absolute;top:10%}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#b61828}.box-container .mat-card-title{text-align:center;font-family:\"Arial Bold\",sans-serif;opacity:1;margin:0;font-size:var(--fontsize16)}.box-container .mat-card-title{margin:5px!important}.box-container .mat-card-subtitle{opacity:1;font-size:var(--fontsize16);margin-bottom:0;color:#1d1d1b}.marker{color:#973937;font-family:\"Arial Bold\",sans-serif}.branch-container .mat-card-subtitle{margin-bottom:6px;font-size:var(--fontsize16);color:#1d1d1b}.branch-container .mat-card-subtitle .branch-hour-container span:not(.error-message):last-child{text-transform:uppercase}.branch-container .mat-card-title{font-family:\"Arial Bold\",sans-serif;margin-bottom:4px;font-size:var(--fontsize16)}.branch-container .branch-link{font-size:var(--fontsize18)}.branch-container .hour-label-left{width:15%;position:relative;display:inline-block}input[type=time]::-webkit-calendar-picker-indicator{background:none}.check-square-del,.check-square-cc{position:absolute;top:-1px;right:0}.selectdiv{position:relative}.selectdiv select{height:50px;width:100%;line-height:35px;border:1px solid #d3d6db;font-size:var(--fontsize16);color:#1d1d1b;padding-left:13px;-webkit-appearance:none;appearance:none;position:relative;z-index:1}::ng-deep .OrderCheckoutTemplate .mat-card-header-text{margin:0!important}::ng-deep .OrderCheckoutTemplate mat-radio-button{padding-left:10px}::ng-deep .OrderCheckoutTemplate mat-radio-button .mat-radio-label{white-space:pre-line}::ng-deep .OrderCheckoutTemplate .card-number{background-color:#1d1d1b;border-radius:50%;width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:16px;font-family:\"Arial Bold\",sans-serif;margin-right:1rem}::ng-deep .OrderCheckoutTemplate .mat-card-content .mat-inner-container .mat-radio-label-content{font-family:\"Arial Bold\",sans-serif;font-size:var(--fontsize16)}::ng-deep .OrderCheckoutTemplate .mat-card-content .mat-radio-label-content{font-family:\"Arial Regular\",sans-serif;font-size:var(--fontsize16)}::ng-deep .OrderCheckoutTemplate .form-control{color:#1d1d1b;font-family:\"Arial Regular\",sans-serif}::ng-deep .OrderCheckoutTemplate #Instructions{resize:none}::ng-deep .OrderCheckoutTemplate #Instructions::placeholder{font-family:\"Arial Regular\",sans-serif;font-size:var(--fontsize16);color:#c6c6c6}::ng-deep .OrderCheckoutTemplate .info-icon{position:relative;background:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22%3E%0D %3Cpath id%3D%22Icon_metro-info%22 data-name%3D%22Icon metro-info%22 d%3D%22M9.571%2C6.678a.752.752%2C0%2C0%2C1%2C.75-.75h.5a.752.752%2C0%2C0%2C1%2C.75.75v.5a.752.752%2C0%2C0%2C1-.75.75h-.5a.752.752%2C0%2C0%2C1-.75-.75Zm3%2C7.25h-4v-1h1v-3h-1v-1h3v4h1Zm-2-12a8%2C8%2C0%2C1%2C0%2C8%2C8%2C8%2C8%2C0%2C0%2C0-8-8Zm0%2C14.5a6.5%2C6.5%2C0%2C1%2C1%2C6.5-6.5A6.5%2C6.5%2C0%2C0%2C1%2C10.571%2C16.428Z%22 transform%3D%22translate(-2.571 -1.928)%22 fill%3D%22%23c6c6c6%22%2F%3E%0D%3C%2Fsvg%3E%0D\") no-repeat center;width:16px;height:16px;display:inline-block;top:1px;left:15px}::ng-deep .OrderCheckoutTemplate .cart-page-footer{background-color:#fff;border-top:1px solid #E0E0E0;padding:24px 0;position:fixed;bottom:0;left:0;right:0;width:100%;z-index:9;transition:transform .3s ease-in-out}::ng-deep .OrderCheckoutTemplate .error-message{color:#da1e28}::ng-deep .OrderCheckoutTemplate .example-radio-group .mat-radio-button{display:block}::ng-deep .OrderCheckoutTemplate .content-row{margin-bottom:3rem}::ng-deep .OrderCheckoutTemplate mat-card.line-step-navigation{box-shadow:none;border:1px solid #E0E0E0}::ng-deep .OrderCheckoutTemplate .card-container mat-card{box-shadow:none}::ng-deep .OrderCheckoutTemplate .line-step-navigation{position:relative}::ng-deep .OrderCheckoutTemplate .line-step-navigation:before{display:inline-block;content:\"\";position:absolute;top:0;left:-35px;width:10px;height:100%;border-left:2px dashed #C6C6C6}::ng-deep .OrderCheckoutTemplate .line-step-navigation:last-child:before{border-left:none}::ng-deep .OrderCheckoutTemplate .line-step-navigation .cus-title-margin-card{position:relative;left:-50px;margin-bottom:0}::ng-deep .OrderCheckoutTemplate .line-step-navigation.last-step:before{height:75%}::ng-deep .OrderCheckoutTemplate .line-step-navigation.first-step:before{height:75%;top:15%}::ng-deep .OrderCheckoutTemplate .mat-card-header .card-title .mat-card-title{margin:1rem 0;font-size:1.5rem;display:inline-flex;align-items:center}::ng-deep .OrderCheckoutTemplate .map-selected-address{background-color:#e8e8e8;border:1px solid #d3d6db;padding:.75rem;align-self:flex-start;width:100%;min-height:50px;font-size:var(--fontsize16)}::ng-deep .OrderCheckoutTemplate .box-container{text-align:center}@media (max-width: 992px){::ng-deep .OrderCheckoutTemplate .radio-btn-container .mat-radio-group{display:inline-flex;flex-direction:row;align-items:flex-start}::ng-deep .OrderCheckoutTemplate .radio-btn-container .mat-radio-group .mat-radio-button .mat-radio-label{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}::ng-deep .OrderCheckoutTemplate .radio-btn-container .mat-radio-group .mat-radio-button .mat-radio-label .mat-radio-label-content{margin-top:5px}::ng-deep .OrderCheckoutTemplate .line-step-navigation{background:transparent;box-shadow:none!important;border:none!important}::ng-deep .OrderCheckoutTemplate .line-step-navigation:before{left:15px}::ng-deep .OrderCheckoutTemplate .line-step-navigation .cus-title-margin-card{left:0}::ng-deep .OrderCheckoutTemplate .card-container mat-card{background:transparent;box-shadow:none!important}::ng-deep .OrderCheckoutTemplate .checkout-footer-btns{display:flex;justify-content:space-around;align-items:center}::ng-deep .OrderCheckoutTemplate .mat-card:not([class*=mat-elevation-z]){padding:1rem .25rem 1rem 1.5rem}::ng-deep .OrderCheckoutTemplate .mat-card-header .card-title .mat-card-title{font-size:1.25rem;align-items:center;margin:0}::ng-deep .OrderCheckoutTemplate .mat-card-content.box-container{display:flex}::ng-deep .OrderCheckoutTemplate .mat-card-content mat-card .mat-card{align-items:center;justify-content:center}::ng-deep .OrderCheckoutTemplate .delivery-box,::ng-deep .OrderCheckoutTemplate .collect-box{height:102px;width:140px}::ng-deep .OrderCheckoutTemplate .box-container{text-align:left}::ng-deep .OrderCheckoutTemplate .box-container .delivery-heading-text{padding-left:1rem}::ng-deep .OrderCheckoutTemplate .box-container .delivery-heading-text .mat-card-title{text-align:left;margin-left:0!important}::ng-deep .OrderCheckoutTemplate .address-inner-container{padding-left:15px}}\n"], components: [{ type: i4.CustomBreadcrumComponent, selector: "app-custom-breadcrum", inputs: ["customCrumbData"] }, { type: i5.MatCardHeader, selector: "mat-card-header" }, { type: i5.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i6.TimePickerComponent, selector: "ejs-timepicker", inputs: ["allowEdit", "cssClass", "enableMask", "enablePersistence", "enableRtl", "enabled", "floatLabelType", "format", "htmlAttributes", "keyConfigs", "locale", "maskPlaceholder", "max", "min", "openOnFocus", "placeholder", "readonly", "scrollTo", "showClearButton", "step", "strictMode", "value", "width", "zIndex"], outputs: ["blur", "change", "cleared", "close", "created", "destroyed", "focus", "itemRender", "open", "valueChange"] }, { type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i8.AddNewAddressComponent, selector: "app-add-new-address", inputs: ["confirmedAddress"], outputs: ["updateNewAddress"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i5.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["disabled", "autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i3.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], pipes: { "async": i9.AsyncPipe } });
328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomCheckoutComponent, decorators: [{
329
+ type: Component,
330
+ args: [{
331
+ selector: 'app-custom-checkout',
332
+ templateUrl: './custom-checkout.component.html',
333
+ styleUrls: ['./custom-checkout.component.scss'],
334
+ }]
335
+ }], ctorParameters: function () { return [{ type: i1.CustomCheckoutService }, { type: i2.CmsService }, { type: i0.ChangeDetectorRef }, { type: i3.NgbCalendar }, { type: i2.ActiveCartService }]; }, propDecorators: { checkoutForm: [{
336
+ type: ViewChild,
337
+ args: ['checkoutForm']
338
+ }], checkoutToTime: [{
339
+ type: ViewChild,
340
+ args: ['checkoutToTime', { static: false }]
341
+ }], collectTimeObj: [{
342
+ type: ViewChild,
343
+ args: ['collectTimeObj', { static: false }]
344
+ }], mapViewEl: [{
345
+ type: ViewChild,
346
+ args: ['mapViewNode', { static: true }]
347
+ }] } });
348
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNoZWNrb3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J1aWxkaW5ncHJvZHVjdF9saWJyYXJ5L3NyYy9saWIvY2hlY2tvdXQvY3VzdG9tLWNoZWNrb3V0L2N1c3RvbS1jaGVja291dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWlsZGluZ3Byb2R1Y3RfbGlicmFyeS9zcmMvbGliL2NoZWNrb3V0L2N1c3RvbS1jaGVja291dC9jdXN0b20tY2hlY2tvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFJVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBU3ZDLE1BQU0sT0FBTyx1QkFBdUI7SUE4Q2xDLFlBQ1MsZUFBc0MsRUFDckMsVUFBc0IsRUFDdkIsRUFBcUIsRUFDckIsUUFBcUIsRUFDckIsaUJBQW9DO1FBSnBDLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQUNyQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3ZCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWxEN0MsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2hELGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsZ0JBQVcsR0FBVyxZQUFZLENBQUM7UUFFbkMsb0JBQWUsR0FBVyxnQkFBZ0IsQ0FBQztRQUczQyxjQUFTLEdBQUcsSUFBSSxJQUFJ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Uzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0UsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ00sU0FBUztzQkFBNUQsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQ2FsZW5kYXIsIE5nYkRhdGVTdHJ1Y3QgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFjdGl2ZUNhcnRTZXJ2aWNlIH0gZnJvbSAnQHNwYXJ0YWN1cy9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEN1c3RvbUNoZWNrb3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoZWNrb3V0LnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQ21zU2VydmljZSB9IGZyb20gJ0BzcGFydGFjdXMvY29yZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1jaGVja291dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1jaGVja291dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLWNoZWNrb3V0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21DaGVja291dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgZXJyb3JJbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgaW5mb01lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIHByZXZpb3VzVXJsOiBzdHJpbmcgPSAnJztcclxuICBjYXJ0SWQ6IHN0cmluZyA9ICcnO1xyXG4gIGlzRGVsaXZlcnlCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEFDVElWRV9JVEVNOiBzdHJpbmcgPSAnYWN0aXZlLWJveCc7XHJcbiAgbmdiTWluRGF0ZTogYW55O1xyXG4gIHNlbGVjdGVkQWRkcmVzczogc3RyaW5nID0gJ2FjY291bnRBZGRyZXNzJztcclxuICBwdWJsaWMgbWF4VGltZTogYW55O1xyXG4gIHB1YmxpYyBmcm9tTWF4VGltZTogYW55O1xyXG4gIGNjbWluVGltZSA9IG5ldyBEYXRlKDIwMjIsIDAsIDI4LCA2LCAwLCAwKTtcclxuICBjY21heFRpbWUgPSBuZXcgRGF0ZSgyMDIyLCAwLCAyOCwgMjIsIDAsIDApO1xyXG4gIHB1YmxpYyBtaW5UaW1lOiBhbnk7XHJcbiAgcHVibGljIG1pblRvVGltZTogYW55O1xyXG4gIGNoZWNrb3V0Rm9ybURhdGE6IGFueSA9IHt9O1xyXG4gIGlzU3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3RhcnRUaW1lOiBhbnkgPSBbXTtcclxuICByZWNlbnRBZGRyZXNzOiBhbnkgPSBbXTtcclxuICBkZWxpdmVyVGltZTogYW55O1xyXG4gIGRlZmF1bHRBY2NvdW50QWRkcmVzczogYW55O1xyXG4gIGJyYW5jaEFkZHJlc3M6IGFueTtcclxuICBAVmlld0NoaWxkKCdjaGVja291dEZvcm0nKSBjaGVja291dEZvcm06IGFueTtcclxuICBzZWxlY3RlZFJlY2VudEFkZHJlc3M6IGFueSA9IHt9O1xyXG4gIHRlbXBCcmFuY2hMaXN0RGF0YTogYW55ID0gW107XHJcbiAgcHVibGljIGRlbGl2ZXJ5RGlzYWJsZURhdGVzOiBhbnk7XHJcbiAgY29sbGVjdFRpbWU6IGFueTtcclxuICBtaW5MZWFkVGltZTogbnVtYmVyID0gMztcclxuICByZXNwb25zZURhdGE6IGFueTtcclxuICBAVmlld0NoaWxkKCdjaGVja291dFRvVGltZScsIHsgc3RhdGljOiBmYWxzZSB9KSBjaGVja291dFRvVGltZTogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbGxlY3RUaW1lT2JqJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbGxlY3RUaW1lT2JqOiBhbnk7XHJcbiAgQFZpZXdDaGlsZCgnbWFwVmlld05vZGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIG1hcFZpZXdFbCE6IEVsZW1lbnRSZWY7XHJcbiAgc3BlY2lhbERheU9wZW5pbmdMaXN0OiBhbnkgPSBbXTtcclxuICB3ZWVrRGF5T3BlbmluZ0xpc3Q6IGFueSA9IFtdO1xyXG4gIGRlbGl2ZXJ5QWRkcmVzc2VzOiBhbnkgPSBbXTtcclxuICBzaG93TW9yZUFkZHJlc3NlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNpdGVEZWxpdmVyeVJlcXVpcmVtZW50czogYW55O1xyXG4gIGNsaWNrYW5kQ29sbGVjdENvbW1lbnRzOiBhbnk7XHJcbiAgY2hlY2tvdXRIZWFkZXJDb250ZW50OiBhbnk7XHJcbiAgYnJlYWRjcnVtYkRhdGE6IGFueSA9IFtdO1xyXG4gIGRlbGl2ZXJ5TW9kZXM6IGFueSA9IFtdO1xyXG4gIHZpZXc6IGFueTtcclxuICBwYWdlVGl0bGU6IGFueTtcclxuICBuZXdBZGRyZXNzOiBhbnk7XHJcbiAgY29uZmlybWVkTmV3QWRkcmVzczogc3RyaW5nID0gJyc7XHJcbiAgc2hvd1dhaXRDdXJzb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjaGVja291dFNlcnZpY2U6IEN1c3RvbUNoZWNrb3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY21zU2VydmljZTogQ21zU2VydmljZSxcclxuICAgIHB1YmxpYyBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLFxyXG4gICAgcHVibGljIGFjdGl2ZUNhcnRTZXJ2aWNlOiBBY3RpdmVDYXJ0U2VydmljZVxyXG4gICkgeyB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNtc1NlcnZpY2UuZ2V0Q3VycmVudFBhZ2UoKS5zdWJzY3JpYmUoKHBhZ2FkYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5wYWdlVGl0bGUgPSBwYWdhZGF0YS50aXRsZTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmJyZWFkY3J1bWJEYXRhLnB1c2goeyB1cmw6ICcvJywgbmFtZTogJ0hvbWUnIH0pO1xyXG4gICAgdGhpcy5icmVhZGNydW1iRGF0YS5wdXNoKHsgdXJsOiAnL2NhcnQnLCBuYW1lOiAnQ2FydCcgfSk7XHJcbiAgICB0aGlzLmJyZWFkY3J1bWJEYXRhLnB1c2goeyB1cmw6ICcvY2hlY2tvdXQnLCBuYW1lOiAnQ2hlY2tvdXQnIH0pO1xyXG4gICAgbGV0IGNhcnQ6IGFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzcGFydGFjdXPimr9kaW1vbmQtc3Bh4pq/Y2FydCcpO1xyXG4gICAgdGhpcy5jYXJ0SWQgPSBKU09OLnBhcnNlKGNhcnQpPy5hY3RpdmU7XHJcbiAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBEYXRlID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwVG9UaW1lID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRnJvbVRpbWUgPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBjaGVja291dERhdGE6IGFueSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2NoZWNrb3V0RGF0YScpO1xyXG4gICAgaWYgKGNoZWNrb3V0RGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRGF0YSA9IEpTT04ucGFyc2UoY2hlY2tvdXREYXRhKTtcclxuICAgICAgdGhpcy5pc0RlbGl2ZXJ5Qm94ID0gdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5TWV0aG9kID09ICdjbGlja0FuZENvbGxlY3QnID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdmFyIGxvY0FkZHJlc3M6IGFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdicmFuY2hEZXRhaWxzJyk7XHJcbiAgICB0aGlzLmJyYW5jaEFkZHJlc3MgPSBKU09OLnBhcnNlKGxvY0FkZHJlc3MpO1xyXG5cclxuICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldERlbGl2ZXJ5TW9kZXModGhpcy5jYXJ0SWQpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGVsaXZlcnlNb2RlcyA9IGRhdGEuZGVsaXZlcnlNb2RlcztcclxuICAgICAgICB0aGlzLmRlbGl2ZXJ5TW9kZXMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IChhLmNvZGUgPiBiLmNvZGUgPyAtMSA6IDEpKVxyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgdGhpcy5kZWxpdmVyeU1vZGVzID0gW3sgY29kZTogJ3N0YW5kYXJkX2RlbGl2ZXJ5JyB9LCB7IGNvZGU6ICdjbGlja0FuZENvbGxlY3QnIH1dXHJcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0QWRkcmVzc0luZm8oKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRlZmF1bHRBY2NvdW50QWRkcmVzcyA9IGRhdGEuYWRkcmVzc2VzWzBdO1xyXG4gICAgICAgIHRoaXMucmVjZW50QWRkcmVzcyA9IGRhdGEucmVjZW50QWRkcmVzc2VzO1xyXG4gICAgICAgIHRoaXMuc2hvd01vcmVBZGRyZXNzZXMgPSBkYXRhLmFkZHJlc3NlcyAmJiBkYXRhLmFkZHJlc3Nlcy5sZW5ndGggPiAxID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVsaXZlcnlBZGRyZXNzZXMgPSBkYXRhLmFkZHJlc3NlcyAmJiBkYXRhLmFkZHJlc3Nlcy5sZW5ndGggPiAwID8gZGF0YS5hZGRyZXNzZXMgOiBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9IHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5zZWxlY3RlZEFkZHJlc3MgIT0gdW5kZWZpbmVkID8gdGhpcy5jaGVja291dEZvcm1EYXRhLnNlbGVjdGVkQWRkcmVzcyA6ICdhY2NvdW50QWRkcmVzcyc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJlY2VudEFkZHJlc3MuaWQgPSB0aGlzLmNoZWNrb3V0Rm9ybURhdGEgJiYgdGhpcy5jaGVja291dEZvcm1EYXRhPy5kZWxpdmVyeUFkZHJlc3NQSyA/IHRoaXMuY2hlY2tvdXRGb3JtRGF0YT8uZGVsaXZlcnlBZGRyZXNzUEsgOiB0aGlzLmRlZmF1bHRBY2NvdW50QWRkcmVzcz8uaWQ7XHJcbiAgICAgICAgdGhpcy5jb25maXJtZWROZXdBZGRyZXNzID0gdGhpcy5jaGVja291dEZvcm1EYXRhLnNlbGVjdGVkQWRkcmVzcyAhPSB1bmRlZmluZWQgJiYgdGhpcy5jaGVja291dEZvcm1EYXRhLnNlbGVjdGVkQWRkcmVzcyA9PSAnYWRkTmV3QWRkcmVzcycgPyB0aGlzLmNoZWNrb3V0Rm9ybURhdGEubmV3QWRkcmVzcz8uc2VsZWN0ZWRBZGRyZXNzIDogJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuZGVsaXZlcnlBZGRyZXNzZXMubGVuZ3RoID09IDAgJiYgdGhpcy5zZWxlY3RlZEFkZHJlc3MgIT0gJ2FkZE5ld0FkZHJlc3MnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQWRkcmVzcyA9ICdyZWNlbnRBZGRyZXNzJztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSZWNlbnRBZGRyZXNzID0gdGhpcy5yZWNlbnRBZGRyZXNzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdEFjY291bnRBZGRyZXNzICYmIHRoaXMuZGVsaXZlcnlBZGRyZXNzZXMubGVuZ3RoIDwgMSAmJiB0aGlzLnJlY2VudEFkZHJlc3MubGVuZ3RoIDwgMSkgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSAnYWRkTmV3QWRkcmVzcyc7XHJcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja091dFZhbHVlcyh0aGlzLmNhcnRJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLndlZWtEYXlPcGVuaW5nTGlzdCA9IHRoaXMuaXNEZWxpdmVyeUJveFxyXG4gICAgICAgICAgICA/IGRhdGEucG9pbnRPZlNlcnZpY2U/LmRlbGl2ZXJ5U2NoZWR1bGU/LndlZWtEYXlPcGVuaW5nTGlzdFxyXG4gICAgICAgICAgICA6IGRhdGEucG9pbnRPZlNlcnZpY2U/LnBpY2t1cFNjaGVkdWxlPy53ZWVrRGF5T3BlbmluZ0xpc3Q7XHJcbiAgICAgICAgICB0aGlzLnNwZWNpYWxEYXlPcGVuaW5nTGlzdCA9IHRoaXMuaXNEZWxpdmVyeUJveFxyXG4gICAgICAgICAgICA/IGRhdGEucG9pbnRPZlNlcnZpY2U/LmRlbGl2ZXJ5U2NoZWR1bGU/LnNwZWNpYWxEYXlPcGVuaW5nTGlzdFxyXG4gICAgICAgICAgICA6IGRhdGEucG9pbnRPZlNlcnZpY2U/LnBpY2t1cFNjaGVkdWxlPy5zcGVjaWFsRGF5T3BlbmluZ0xpc3Q7XHJcbiAgICAgICAgICB0aGlzLmdldERldGFpbFJlc3BvbnNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgLy9jb2RlIGZvciBEZWxpdmVyeSBTaXRlIERlbGl2ZXJ5IFJlcXVpcmVtZW50cyB0b29sdGlwXHJcbiAgICB0aGlzLmNtc1NlcnZpY2VcclxuICAgICAgLmdldENvbXBvbmVudERhdGEoJ1NpdGVEZWxpdmVyeVJlcXVpcmVtZW50c0NvbXBvbmVudCcpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLnNpdGVEZWxpdmVyeVJlcXVpcmVtZW50cyA9IGRhdGEuY29udGVudDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgLy9jb2RlIGZvciBDbGljayBBbmQgQ29sbGVjdCBDb21tZW50cyB0b29sdGlwXHJcbiAgICB0aGlzLmNtc1NlcnZpY2VcclxuICAgICAgLmdldENvbXBvbmVudERhdGEoJ0NvbW1lbnRzQ2xpY2tBbmRDb2xsZWN0Q29tcG9uZW50JylcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuY2xpY2thbmRDb2xsZWN0Q29tbWVudHMgPSBkYXRhLmNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIC8vY29kZSBmb3IgaGVhZGVyIGNvbnRlbnRcclxuICAgIHRoaXMuY21zU2VydmljZVxyXG4gICAgICAuZ2V0Q29tcG9uZW50RGF0YSgnY2hlY2tvdXRIZWFkZXJDb250ZW50Q29tcG9uZW50JylcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuY2hlY2tvdXRIZWFkZXJDb250ZW50ID0gZGF0YS5jb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0RGV0YWlsUmVzcG9uc2UoKSB7XHJcbiAgICB0aGlzLnRlbXBCcmFuY2hMaXN0RGF0YSA9IHRoaXMucmVzcG9uc2VEYXRhPy5wb2ludE9mU2VydmljZT8ucGlja3VwU2NoZWR1bGU/LndlZWtEYXlPcGVuaW5nTGlzdDtcclxuICAgIHRoaXMuYnJhbmNoQWRkcmVzcyA9IHRoaXMucmVzcG9uc2VEYXRhPy5wb2ludE9mU2VydmljZT8uYWRkcmVzcztcclxuICAgIHZhciBjaGVja291dERhdGVWYWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgaiA9IDA7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zZURhdGEuZGVsaXZlcnlNaW5MZWFkVGltZSB8fCB0aGlzLnJlc3BvbnNlRGF0YS5waWNrVXBNaW5MZWFkVGltZSlcclxuICAgICAgdGhpcy5taW5MZWFkVGltZSA9IHRoaXMuaXNEZWxpdmVyeUJveCA/IHRoaXMucmVzcG9uc2VEYXRhLmRlbGl2ZXJ5TWluTGVhZFRpbWUgOiB0aGlzLnJlc3BvbnNlRGF0YS5waWNrVXBNaW5MZWFkVGltZTtcclxuICAgIGxldCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHdoaWxlIChpIDwgdGhpcy5taW5MZWFkVGltZSkge1xyXG4gICAgICBqID0gaiArIDE7XHJcbiAgICAgIGRhdGUuc2V0RGF0ZShjaGVja291dERhdGVWYWx1ZS5nZXREYXRlKCkgKyBqKTtcclxuICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgPT0gNiB8fCB0aGlzLndlZWtEYXlPcGVuaW5nTGlzdFs1XS5jbG9zZWQgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSBpICsgMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaiA9IGRhdGUuZ2V0RGF5KCkgPT0gMCA/IGogKyAxIDogajtcclxuICAgIHRoaXMubmdiTWluRGF0ZSA9IHtcclxuICAgICAgZGF5OiAoY2hlY2tvdXREYXRlVmFsdWUuZ2V0RGF0ZSgpICsgaiA+IDMwKSA/IGNoZWNrb3V0RGF0ZVZhbHVlLmdldERhdGUoKSArIGogLSAzMCA6IGNoZWNrb3V0RGF0ZVZhbHVlLmdldERhdGUoKSArIGosXHJcbiAgICAgIG1vbnRoOiAoY2hlY2tvdXREYXRlVmFsdWUuZ2V0RGF0ZSgpICsgaikgPiAzMCA/IGNoZWNrb3V0RGF0ZVZhbHVlLmdldE1vbnRoKCkgPT0gMTEgPyAxIDogY2hlY2tvdXREYXRlVmFsdWUuZ2V0TW9udGgoKSArIDIgOiBjaGVja291dERhdGVWYWx1ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgeWVhcjogKGNoZWNrb3V0RGF0ZVZhbHVlLmdldERhdGUoKSArIGopID4gMzAgJiYgY2hlY2tvdXREYXRlVmFsdWUuZ2V0TW9udGgoKSA9PSAxMSA/IGNoZWNrb3V0RGF0ZVZhbHVlLmdldEZ1bGxZZWFyKCkgKyAxIDogY2hlY2tvdXREYXRlVmFsdWUuZ2V0RnVsbFllYXIoKSxcclxuICAgIH07XHJcbiAgICB0aGlzLnVwZGF0ZU1pbk1heFRpbWUoY2hlY2tvdXREYXRlVmFsdWUpO1xyXG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcbiAgdXBkYXRlTWluTWF4VGltZShkYXRlOiBEYXRlKSB7XHJcbiAgICBjb25zdCB0b2RheURheTogYW55ID0gdGhpcy53ZWVrRGF5T3BlbmluZ0xpc3RbZGF0ZS5nZXREYXkoKSAtIDFdO1xyXG4gICAgdGhpcy5taW5UaW1lID0gbmV3IERhdGUoXHJcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgZGF0ZS5nZXRNb250aCgpLFxyXG4gICAgICBkYXRlLmdldERhdGUoKSxcclxuICAgICAgdG9kYXlEYXk/Lm9wZW5pbmdUaW1lPy5ob3VyIHx8IDksXHJcbiAgICAgIHRvZGF5RGF5Py5vcGVuaW5nVGltZT8ubWludXRlIHx8IDAsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICB0aGlzLm1pblRvVGltZSA9IG5ldyBEYXRlKFxyXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSxcclxuICAgICAgZGF0ZS5nZXREYXRlKCksXHJcbiAgICAgIHRvZGF5RGF5Py5vcGVuaW5nVGltZT8uaG91ciB8fCAxMSxcclxuICAgICAgdG9kYXlEYXk/Lm9wZW5pbmdUaW1lPy5taW51dGUgfHwgMCxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIHRoaXMuZnJvbU1heFRpbWUgPSBuZXcgRGF0ZShcclxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBkYXRlLmdldE1vbnRoKCksXHJcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICB0b2RheURheT8uY2xvc2luZ1RpbWUuZm9ybWF0dGVkSG91ci5zcGxpdCgnICcpWzFdID09ICdwbSdcclxuICAgICAgICA/IHRvZGF5RGF5Py5jbG9zaW5nVGltZT8uaG91ciArIDEwXHJcbiAgICAgICAgOiB0b2RheURheT8uY2xvc2luZ1RpbWU/LmhvdXIgfHwgMTUsXHJcbiAgICAgIHRvZGF5RGF5Py5jbG9zaW5nVGltZT8ubWludXRlIHx8IDAsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICB0aGlzLm1heFRpbWUgPSBuZXcgRGF0ZShcclxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBkYXRlLmdldE1vbnRoKCksXHJcbiAgICAgIGRhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgICB0b2RheURheT8uY2xvc2luZ1RpbWUuZm9ybWF0dGVkSG91ci5zcGxpdCgnICcpWzFdID09ICdwbSdcclxuICAgICAgICA/IHRvZGF5RGF5Py5jbG9zaW5nVGltZT8uaG91ciArIDEyXHJcbiAgICAgICAgOiB0b2RheURheT8uY2xvc2luZ1RpbWU/LmhvdXIgfHwgMTcsXHJcbiAgICAgIHRvZGF5RGF5Py5jbG9zaW5nVGltZT8ubWludXRlIHx8IDAsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZVJlcXVlc3RlZFRpbWUoKTtcclxuICB9XHJcbiAgdXBkYXRlUmVxdWVzdGVkVGltZSgpIHtcclxuICAgIHRoaXMubWluVGltZSA9IHRoaXMuZ2V0Um91bmRNaW5UaW1lKHRoaXMubWluVGltZSk7XHJcbiAgICB0aGlzLm1pblRvVGltZSA9IHRoaXMuZ2V0Um91bmRNaW5UaW1lKHRoaXMubWluVG9UaW1lKTtcclxuICAgIHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcFRvVGltZSA9IHRoaXMubWF4VGltZTtcclxuICAgIHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcEZyb21UaW1lID0gdGhpcy5taW5Ub1RpbWU7XHJcbiAgfVxyXG5cclxuICBpc0Rpc2FibGVkID0gKGRhdGU6IE5nYkRhdGVTdHJ1Y3QpID0+IHtcclxuICAgIGNvbnN0IGRhdCA9IG5ldyBEYXRlKGRhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5KTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZ2V0U3BlY2lhbERheXMoZGF0ZSkgPiAtMSB8fFxyXG4gICAgICB0aGlzLndlZWtEYXlPcGVuaW5nTGlzdFs1XS5jbG9zZWQgPT0gdHJ1ZSB8fFxyXG4gICAgICBkYXQuZ2V0RGF5KCkgPT09IDBcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0U3BlY2lhbERheXMoZGF0ZTogTmdiRGF0ZVN0cnVjdCkge1xyXG4gICAgY29uc3QgaW5kID0gdGhpcy5zcGVjaWFsRGF5T3BlbmluZ0xpc3Q/LmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRhdGVPYmogPSBlbGVtZW50LmZvcm1hdHRlZERhdGUuc3BsaXQoJy8nKTtcclxuICAgICAgcmV0dXJuIGRhdGVPYmpbMF0gPT0gZGF0ZS5kYXkgJiYgZGF0ZU9ialsxXSA9PSBkYXRlLm1vbnRoO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaW5kO1xyXG4gIH1cclxuXHJcbiAgZ2V0Um91bmRNaW5UaW1lKG1pblRpbWU6IGFueSkge1xyXG4gICAgdmFyIGNvZmYgPSAxMDAwICogNjAgKiAzMDtcclxuICAgIHJldHVybiBuZXcgRGF0ZShNYXRoLmNlaWwobWluVGltZS5nZXRUaW1lKCkgLyBjb2ZmKSAqIGNvZmYpO1xyXG4gIH1cclxuXHJcbiAgdGltZUNsaWNrKGV2ZW50OiBFdmVudCwgdGltZU9iajogYW55KSB7XHJcbiAgICBpZiAodGltZU9iaiAmJiB0aW1lT2JqLmlucHV0V3JhcHBlcikge1xyXG4gICAgICB0aW1lT2JqLmlucHV0V3JhcHBlci5jb250YWluZXIgJiZcclxuICAgICAgICB0aW1lT2JqLmlucHV0V3JhcHBlci5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnZS1kaXNhYmxlZCcpO1xyXG4gICAgICB0aW1lT2JqLmlucHV0V3JhcHBlci5idXR0b25zICYmXHJcbiAgICAgICAgdGltZU9iai5pbnB1dFdyYXBwZXIuYnV0dG9uc1swXSAmJlxyXG4gICAgICAgIHRpbWVPYmouaW5wdXRXcmFwcGVyLmJ1dHRvbnNbMF0uY2xhc3NMaXN0LnJlbW92ZSgnZS1kaXNhYmxlZCcpO1xyXG4gICAgICB0aW1lT2JqLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRpbWVUb0NsaWNrKGV2ZW50OiBFdmVudCwgdGltZU9iajogYW55KSB7XHJcbiAgICBpZiAodGltZU9iaiAmJiB0aW1lT2JqLmlucHV0V3JhcHBlcikge1xyXG4gICAgICB0aW1lT2JqLmlucHV0V3JhcHBlci5jb250YWluZXIgJiZcclxuICAgICAgICB0aW1lT2JqLmlucHV0V3JhcHBlci5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnZS1kaXNhYmxlZCcpO1xyXG4gICAgICB0aW1lT2JqLmlucHV0V3JhcHBlci5idXR0b25zICYmXHJcbiAgICAgICAgdGltZU9iai5pbnB1dFdyYXBwZXIuYnV0dG9uc1swXSAmJlxyXG4gICAgICAgIHRpbWVPYmouaW5wdXRXcmFwcGVyLmJ1dHRvbnNbMF0uY2xhc3NMaXN0LnJlbW92ZSgnZS1kaXNhYmxlZCcpO1xyXG4gICAgICB0aW1lT2JqLnNob3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXRpY1RpbWUoaG91cnM6IG51bWJlciwgbWludXRlczogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICB0aGlzLm1pblRvVGltZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgIHRvZGF5LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgdG9kYXkuZ2V0TW9udGgoKSxcclxuICAgICAgICB0b2RheS5nZXREYXRlKCksXHJcbiAgICAgICAgaG91cnMsXHJcbiAgICAgICAgbWludXRlcyxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkYXRlID0gdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZTtcclxuICAgICAgdGhpcy5taW5Ub1RpbWUgPSBuZXcgRGF0ZShcclxuICAgICAgICBkYXRlLnllYXIsXHJcbiAgICAgICAgZGF0ZS5tb250aCxcclxuICAgICAgICBkYXRlLmRheSxcclxuICAgICAgICBob3VycyxcclxuICAgICAgICBtaW51dGVzLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMubWluVG9UaW1lID0gdGhpcy5nZXRSb3VuZE1pblRpbWUodGhpcy5taW5Ub1RpbWUpO1xyXG4gIH1cclxuICBnZXROZXdBZGRyZXNzKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMubmV3QWRkcmVzcyA9IGV2ZW50O1xyXG4gIH1cclxuICByZXZpZXdPcmRlcigpIHtcclxuICAgIHRoaXMuaXNTdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGVja291dEZvcm0uZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybS52YWxpZCAmJlxyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBEYXRlICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBUb1RpbWUgIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcERhdGUuZGF5ICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBGcm9tVGltZSAhPSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5pc0RlbGl2ZXJ5Qm94ICYmIHRoaXMuc2VsZWN0ZWRSZWNlbnRBZGRyZXNzPy5pZCA9PSAnJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pc0RlbGl2ZXJ5Qm94ICYmIHRoaXMuc2VsZWN0ZWRBZGRyZXNzID09ICdhZGROZXdBZGRyZXNzJyAmJiAhdGhpcy5uZXdBZGRyZXNzKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvckluZCQubmV4dCh0cnVlKTtcclxuICAgICAgICB0aGlzLmluZm9NZXNzYWdlID0gJ1BsZWFzZSBTZWxlY3QgYW5kIENvbmZpcm0gQWRkcmVzcyBmcm9tIE1hcCc7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGVja291dEZvcm1EYXRhLmNhcnRJRCA9IHRoaXMuY2FydElkO1xyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlBZGRyZXNzUEsgPSB0aGlzLmlzRGVsaXZlcnlCb3ggPT0gZmFsc2UgPyB0aGlzLmJyYW5jaEFkZHJlc3M/LmlkIDogdGhpcy5zZWxlY3RlZFJlY2VudEFkZHJlc3M/LmlkO1xyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlNZXRob2QgPSB0aGlzLmlzRGVsaXZlcnlCb3ggPyB0aGlzLmRlbGl2ZXJ5TW9kZXNbMF0uY29kZSA6IHRoaXMuZGVsaXZlcnlNb2Rlc1sxXS5jb2RlO1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEFkZHJlc3MgPT0gJ2FkZE5ld0FkZHJlc3MnKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja291dEZvcm1EYXRhLm5ld0FkZHJlc3MgPSB0aGlzLm5ld0FkZHJlc3M7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5uZXdBZGRyZXNzO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5zZWxlY3RlZEFkZHJlc3MgPSB0aGlzLnNlbGVjdGVkQWRkcmVzcztcclxuICAgICAgbGV0IHNlc3Npb25EYXRhID0gdGhpcy5jaGVja291dEZvcm1EYXRhO1xyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBGcm9tVGltZSA9IHRoaXMuY29sbGVjdFRpbWVPYmo/LmdldFRleHQoKTtcclxuICAgICAgdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwVG9UaW1lID0gdGhpcy5jaGVja291dFRvVGltZT8uZ2V0VGV4dCgpO1xyXG4gICAgICBsZXQgZGVsaXZlcnlQaWNrVXBEYXRlID0gdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZTtcclxuICAgICAgdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZSA9IHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcERhdGU/LmRheSArICcvJyArIHRoaXMuY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcERhdGU/Lm1vbnRoICsgJy8nICsgdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZT8ueWVhcjtcclxuICAgICAgY29uc3QgcmV2aWV3RGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jaGVja291dEZvcm1EYXRhKSk7XHJcbiAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlXHJcbiAgICAgICAgLlZhbGlkYXRlQ2hlY2tvdXREYXRlVGltZSh0aGlzLmNoZWNrb3V0Rm9ybURhdGEpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmNoZWNrb3V0UmV2aWV3QW5kT3JkZXIocmV2aWV3RGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93V2FpdEN1cnNvci5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBEYXRlID0gZGVsaXZlcnlQaWNrVXBEYXRlO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2NoZWNrb3V0RGF0YScsXHJcbiAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzZXNzaW9uRGF0YSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9yZXZpZXctb3JkZXInO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JJbmQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeVBpY2tVcERhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmZvTWVzc2FnZSA9IGRhdGEubWVzc2FnZXNbMF07XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBEYXRlID0gZGVsaXZlcnlQaWNrVXBEYXRlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dXYWl0Q3Vyc29yLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvckluZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBEYXRlID0gZGVsaXZlcnlQaWNrVXBEYXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5mb01lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlc1swXTtcclxuICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd1dhaXRDdXJzb3IubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZSA9IGRlbGl2ZXJ5UGlja1VwRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckluZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5pbmZvTWVzc2FnZSA9IGVycm9yPy5lcnJvcj8uZXJyb3JzWzBdLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRnJvbVRpbWVDaGFuZ2VkKG9iajogYW55KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IG9iaj8uZ2V0VGV4dCgpO1xyXG4gICAgbGV0IGhvdXJzID0gTnVtYmVyKHZhbHVlLnNwbGl0KCc6JylbMF0pO1xyXG4gICAgbGV0IG1pbnV0ZXMgPSBOdW1iZXIodmFsdWUuc3BsaXQoJyAnKVswXS5zcGxpdCgnOicpWzFdKTtcclxuICAgIGlmICh2YWx1ZS5zcGxpdCgnICcpWzFdID09ICdQTScpIGhvdXJzID0gaG91cnMgPT0gMTIgPyBob3VycyA6IGhvdXJzICsgMTI7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRpY1RpbWUoaG91cnMgKyAyLCBtaW51dGVzKTtcclxuICAgIGlmICh0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBUb1RpbWUgPD0gdGhpcy5nZXRSb3VuZE1pblRpbWUodGhpcy5taW5Ub1RpbWUpKVxyXG4gICAgICB0aGlzLmNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBUb1RpbWUgPSB0aGlzLmdldFJvdW5kTWluVGltZSh0aGlzLm1pblRvVGltZSlcclxuICB9XHJcblxyXG4gIGRhdGVjaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGV2ZW50Lm1vbnRoICsgJy8nICsgZXZlbnQuZGF5ICsgJy8nICsgZXZlbnQueWVhcik7XHJcbiAgICB0aGlzLnVwZGF0ZU1pbk1heFRpbWUoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdBZGRyZXNzKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEFkZHJlc3MgPSAnYWRkTmV3QWRkcmVzcyc7XHJcbiAgICB0aGlzLnNlbGVjdGVkUmVjZW50QWRkcmVzcyA9ICcnO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsb2FkaW5nXCIgKm5nSWY9XCJzaG93V2FpdEN1cnNvciB8IGFzeW5jIFwiPkxvYWRpbmcmIzgyMzA7PC9kaXY+XHJcbjxhcHAtY3VzdG9tLWJyZWFkY3J1bSBbY3VzdG9tQ3J1bWJEYXRhXT1cImJyZWFkY3J1bWJEYXRhXCIgY2xhc3M9XCJwcm9kdWN0cy1icmVhZGN1bXNcIj48L2FwcC1jdXN0b20tYnJlYWRjcnVtPlxyXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyIG1iLTEyMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvcC1jaGVja291dCBjb2wtc20tOVwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cInBhZ2VUaXRsZVwiPnt7cGFnZVRpdGxlfX08L2gxPlxyXG4gICAgICAgIDxwIGNsYXNzPVwiY2hlY2tvdXQtaGVhZGVyLXBhcmFncmFwaFwiPnt7Y2hlY2tvdXRIZWFkZXJDb250ZW50fX08L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGVudC1yb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIGNvbC1sZy03IG9mZnNldC1sZy0zXCI+XHJcbiAgICAgICAgICAgIDxmb3JtICNjaGVja291dEZvcm09XCJuZ0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1oZWFkZXIgY2xhc3M9XCJsaW5lLXN0ZXAtbmF2aWdhdGlvbiBmaXJzdC1zdGVwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgY3VzLXRpdGxlLW1hcmdpbi1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZSBjbGFzcz1cImZvbnQtYm9sZFwiPiA8c3BhbiBjbGFzcz1cImNhcmQtbnVtYmVyXCI+IDEgPC9zcGFuPiBDaG9vc2UgWW91ciBEZWxpdmVyeSBNZXRob2Q8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJjdXN0b20tbWF0LWNhcmQgbGluZS1zdGVwLW5hdmlnYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGFpbmVyIGQtc20taW5saW5lLWZsZXggZC1tZC1mbGV4IGFsaWduLWNvbnRlbnQtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwibWF0bGZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJib3gtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImlzRGVsaXZlcnlCb3ggPSB0cnVlO1wiIGNsYXNzPVwiZGVsaXZlcnktYm94IGQtc20taW5saW5lLWZsZXggYWxpZ24taXRlbXMtc20tY2VudGVyIGp1c3RpZnktY29udGVudC1zbS1hcm91bmRcIiBbbmdDbGFzc109XCJpc0RlbGl2ZXJ5Qm94ID8gQUNUSVZFX0lURU0gOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImRlbGl2ZXJ5LWltZ1wiIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvZGVsaXZlcnkuc3ZnXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc0RlbGl2ZXJ5Qm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNoZWNrLXNxdWFyZS1kZWxcIiBzcmM9XCIuLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2NoZWNrLXNxdWFyZS5zdmdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxpdmVyeS1oZWFkaW5nLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZT57e2RlbGl2ZXJ5TW9kZXNbMF0/Lm5hbWUgfHwgJ0RlbGl2ZXJ5J319IDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtc3VidGl0bGU+IHt7ZGVsaXZlcnlNb2Rlc1swXT8uZGVzY3JpcHRpb24gfHwgJ1dlIGRlbGl2ZXIgcmlnaHQgdG8geW91ciBkb29yLid9fSA8L21hdC1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cIm1hdHJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJib3gtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImlzRGVsaXZlcnlCb3ggPSBmYWxzZTtcIiBjbGFzcz1cImNvbGxlY3QtYm94IGQtc20taW5saW5lLWZsZXggYWxpZ24taXRlbXMtc20tY2VudGVyIGp1c3RpZnktY29udGVudC1zbS1hcm91bmRcIiBbbmdDbGFzc109XCJpc0RlbGl2ZXJ5Qm94ID8gJycgOiBBQ1RJVkVfSVRFTVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cInBpY2t1cC1pbWdcIiBzcmM9XCIuLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL3BpY2t1cC5zdmdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0RlbGl2ZXJ5Qm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNoZWNrLXNxdWFyZS1jY1wiIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvY2hlY2stc3F1YXJlLnN2Z1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlbGl2ZXJ5LWhlYWRpbmctdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPiB7e2RlbGl2ZXJ5TW9kZXNbMV0/Lm5hbWUgfHwgJ0NsaWNrICYgQ29sbGVjdCd9fTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtc3VidGl0bGU+IHt7ZGVsaXZlcnlNb2Rlc1sxXT8uZGVzY3JpcHRpb24gfHwgJ0NvbGxlY3QgZnJvbSB5b3VyIG5lYXJlc3QgYnJhbmNoLicgfX08L21hdC1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImxpbmUtc3RlcC1uYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgY3VzLXRpdGxlLW1hcmdpbi1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZSBjbGFzcz1cImZvbnQtYm9sZFwiPiA8c3BhbiBjbGFzcz1cImNhcmQtbnVtYmVyXCI+IDIgPC9zcGFuPiBQdXJjaGFzZSBPcmRlciBOdW1iZXI8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJjdXN0b20tbWF0LWNhcmQgbGluZS1zdGVwLW5hdmlnYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyIGZvci1tb2IgY29sLXNtLTYgcGwtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlB1cmNoYXNlIE9yZGVyIE51bWJlciAgPHNwYW4gY2xhc3M9XCJtYXJrZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI3BvTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJwb051bWJlclwiIGlkPVwicG9OdW1iZXJcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjE1XCIgWyhuZ01vZGVsKV09XCJjaGVja291dEZvcm1EYXRhLnBvTnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgam9ib3JkZXItaW5wdXRcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXNTdWJtaXR0ZWRcIiBbaGlkZGVuXT1cInBvTnVtYmVyLnZhbGlkXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdXJjaGFzZSBPcmRlciBOdW1iZXIgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkLWhlYWRlciBjbGFzcz1cImxpbmUtc3RlcC1uYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgY3VzLXRpdGxlLW1hcmdpbi1jYXJkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGUgY2xhc3M9XCJmb250LWJvbGRcIj4gPHNwYW4gY2xhc3M9XCJjYXJkLW51bWJlclwiPiAzIDwvc3Bhbj4ge3tpc0RlbGl2ZXJ5Qm94ID8gJ0RlbGl2ZXJ5JzogJ1BpY2t1cCAnfX0gRGF0ZSBhbmQgVGltZTwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJjdXN0b20tbWF0LWNhcmQgbGluZS1zdGVwLW5hdmlnYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyIGZvci1tb2IgY29sLXNtLTYgcGwtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRhdGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5EYXRlIDxzcGFuIGNsYXNzPVwibWFya2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJuZ2ItZGF0ZS1mb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2ZpcnN0RGF5T2ZXZWVrXT1cIjdcIiAjZGVsaXZlcnlQaWNrVXBEYXRlPVwibmdNb2RlbFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGN1cy13aWR0aCBkYXRlLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjaGVja291dEZvcm1EYXRhLmRlbGl2ZXJ5UGlja1VwRGF0ZVwiIGlkPVwiZGF0ZVwiIG5hbWU9XCJ0eHREYXRlXCIgdGFiaW5kZXg9XCItMVwiIG9ua2V5ZG93bj1cInJldHVybiBmYWxzZVwiIHBsYWNlaG9sZGVyPVwiREQtTU0tWVlZWVwiIG5nYkRhdGVwaWNrZXIgI25nRGF0ZT1cIm5nYkRhdGVwaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cIm5nYk1pbkRhdGVcIiAoZGF0ZVNlbGVjdCk9XCJkYXRlY2hhbmdlKCRldmVudClcIiBjb250YWluZXI9XCJib2R5XCIgcmVxdWlyZWQgW21hcmtEaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmQgY3VzdG9tLWRhdGUtYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgY2FsZW5kYXJcIiAoY2xpY2spPVwibmdEYXRlLnRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpc1N1Ym1pdHRlZCAmJiAhY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcERhdGVcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGUgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250YWluZXIgZm9yLW1vYiBjb2wtc20tNiBwbC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGltZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBwdC00XCI+VGltZSA8c3BhbiBjbGFzcz1cIm1hcmtlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWpvYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZGl2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJqb2JpbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWpzLXRpbWVwaWNrZXIgZm9ybWF0PVwiaGg6bW0gYVwiIGlkPSd0aW1lcGlja2VyJyAgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0aW1lQ2xpY2soJGV2ZW50LCBjb2xsZWN0VGltZU9iailcIiAgI2NvbGxlY3RUaW1lT2JqXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT0nY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcEZyb21UaW1lJyBbbWluXT1cIm1pblRpbWVcIiBbYWxsb3dFZGl0XT1cImZhbHNlXCIgW21heF09XCJmcm9tTWF4VGltZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Gcm9tVGltZUNoYW5nZWQoY29sbGVjdFRpbWVPYmopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZWpzLXRpbWVwaWNrZXI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGltZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBwLTNcIj50bzwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1qb2JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGRpdlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiam9iaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVqcy10aW1lcGlja2VyIGZvcm1hdD1cImhoOm1tIGFcIiBpZD0ndG90VG1lcGlja2VyJyAgW3Nob3dDbGVhckJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0aW1lQ2xpY2soJGV2ZW50LCBjaGVja291dFRvVGltZSlcIiAgI2NoZWNrb3V0VG9UaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsodmFsdWUpXT0nY2hlY2tvdXRGb3JtRGF0YS5kZWxpdmVyeVBpY2tVcFRvVGltZScgW21pbl09XCJtaW5Ub1RpbWVcIiBbYWxsb3dFZGl0XT1cImZhbHNlXCIgW21heF09XCJtYXhUaW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9lanMtdGltZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxwICpuZ0lmPVwiaXNTdWJtaXR0ZWRcIiBbaGlkZGVuXT1cImNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBGcm9tVGltZSAhPSB1bmRlZmluZWRcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb20gdGltZSBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaXNTdWJtaXR0ZWRcIiBbaGlkZGVuXT1cImNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBUb1RpbWUgIT0gdW5kZWZpbmVkXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyB0aW1lIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cclxuXHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwibGluZS1zdGVwLW5hdmlnYXRpb25cIiAqbmdJZj1cIiFpc0RlbGl2ZXJ5Qm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgY3VzLXRpdGxlLW1hcmdpbi1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZSBjbGFzcz1cImZvbnQtYm9sZFwiPiA8c3BhbiBjbGFzcz1cImNhcmQtbnVtYmVyXCI+IDQgPC9zcGFuPiBQaWNrdXAgTG9jYXRpb248L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQgKm5nSWY9XCIhaXNEZWxpdmVyeUJveFwiIGNsYXNzPVwiY3VzdG9tLW1hdC1jYXJkIGxpbmUtc3RlcC1uYXZpZ2F0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmFuY2gtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGUgY2xhc3M9J2FkZHJlc3MtdGl0bGUnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YnJhbmNoQWRkcmVzcz8udG93bn19PC9tYXQtY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1zdWJ0aXRsZT4ge3ticmFuY2hBZGRyZXNzPy5mb3JtYXR0ZWRBZGRyZXNzfX08L21hdC1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLXN1YnRpdGxlPiA8c3BhbiBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaG9uZTogPC9zcGFuPiB7e2JyYW5jaEFkZHJlc3M/LnBob25lfX08L21hdC1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJyYW5jaC1ob3VyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZSBjbGFzcz0nYWRkcmVzcy10aXRsZSc+T3BlbmluZyBIb3VyczwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLXN1YnRpdGxlICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRlbXBCcmFuY2hMaXN0RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhvdXItbGFiZWwtbGVmdFwiPnt7IGRhdGE/LndlZWtEYXkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YT8ub3BlbmluZ1RpbWU/LmZvcm1hdHRlZEhvdXIgfHwgZGF0YT8uY2xvc2luZ1RpbWU/LmZvcm1hdHRlZEhvdXJcIj57e2RhdGE/Lm9wZW5pbmdUaW1lPy5mb3JtYXR0ZWRIb3VyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB7e2RhdGE/LmNsb3NpbmdUaW1lPy5mb3JtYXR0ZWRIb3VyfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiIWRhdGE/Lm9wZW5pbmdUaW1lPy5mb3JtYXR0ZWRIb3VyICYmICFkYXRhPy5jbG9zaW5nVGltZT8uZm9ybWF0dGVkSG91clwiPkNsb3NlZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwibGluZS1zdGVwLW5hdmlnYXRpb25cIiAqbmdJZj1cImlzRGVsaXZlcnlCb3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBjdXMtdGl0bGUtbWFyZ2luLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlIGNsYXNzPVwiZm9udC1ib2xkXCI+IDxzcGFuIGNsYXNzPVwiY2FyZC1udW1iZXJcIj4gNCA8L3NwYW4+IHt7aXNEZWxpdmVyeUJveCA/ICdTZWxlY3QgeW91ciBEZWxpdmVyeSBBZGRyZXNzIFByZWZlcmVuY2UnOiAnUGlja3VwIExvY2F0aW9uICd9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkIFtoaWRkZW5dPVwiIWlzRGVsaXZlcnlCb3hcIiBjbGFzcz1cImN1c3RvbS1tYXQtY2FyZCBsaW5lLXN0ZXAtbmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1hdC1pbm5lci1jb250YWluZXIgcmFkaW8tYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBhcmlhLWxhYmVsPVwiU2VsZWN0IGFuIG9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwiZGVmYXVsdEFjY291bnRBZGRyZXNzPy5mb3JtYXR0ZWRBZGRyZXNzIHx8IChkZWxpdmVyeUFkZHJlc3NlcyAmJiBkZWxpdmVyeUFkZHJlc3Nlcy5sZW5ndGggPiAwKVwiIFtjaGVja2VkXT1cInNlbGVjdGVkQWRkcmVzcyA9PSAnYWNjb3VudEFkZHJlc3MnXCIgKGNoYW5nZSk9XCJzZWxlY3RlZEFkZHJlc3MgPSAnYWNjb3VudEFkZHJlc3MnO3NlbGVjdGVkUmVjZW50QWRkcmVzcz0gZGVsaXZlcnlBZGRyZXNzZXNbMF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiJ2FjY291bnRBZGRyZXNzJ1wiIGNsYXNzPVwicGwtMCBwci1tZC00XCI+QWNjb3VudCBBZGRyZXNzPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwiZGVsaXZlcnlBZGRyZXNzZXMgJiYgcmVjZW50QWRkcmVzcy5sZW5ndGg+IDBcIiBbY2hlY2tlZF09XCJzZWxlY3RlZEFkZHJlc3MgPT0gJ3JlY2VudEFkZHJlc3MnXCIgKGNoYW5nZSk9XCJzZWxlY3RlZEFkZHJlc3MgPSAncmVjZW50QWRkcmVzcyc7IHNlbGVjdGVkUmVjZW50QWRkcmVzcz0gcmVjZW50QWRkcmVzc1swXVwiIFt2YWx1ZV09XCIncmVjZW50QWRkcmVzcydcIiBjbGFzcz1cInBsLTAgcHItbWQtNFwiPlJlY2VudCBBZGRyZXNzPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFtjaGVja2VkXT1cInNlbGVjdGVkQWRkcmVzcyA9PSAnYWRkTmV3QWRkcmVzcydcIiAoY2hhbmdlKT1cImFkZE5ld0FkZHJlc3MoKVwiIFt2YWx1ZV09XCInYWRkTmV3QWRkcmVzcydcIj5BZGQgTmV3IEFkZHJlc3M8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yIGFkZHJlc3MtaW5uZXItY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZEFkZHJlc3MgPT0gJ2FjY291bnRBZGRyZXNzJyAmJiBkZWxpdmVyeUFkZHJlc3Nlcy5sZW5ndGggPiAwIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwiIXNob3dNb3JlQWRkcmVzc2VzXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q29uZmlybWVkIERlbGl2ZXJ5IEFkZHJlc3MgPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dNb3JlQWRkcmVzc2VzXCIgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXAtc2VsZWN0ZWQtYWRkcmVzc1wiIGlkPVwiYWRkcmVzc1wiIHJlcXVpcmVkICNpc0FkZHJTZWxlY3RlZE9yTm90PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RlZmF1bHRBY2NvdW50QWRkcmVzcz8uZm9ybWF0dGVkQWRkcmVzc319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93TW9yZUFkZHJlc3Nlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgYXJpYS1sYWJlbGxlZGJ5PVwiZXhhbXBsZS1yYWRpby1ncm91cC1sYWJlbFwiIGNsYXNzPVwiZXhhbXBsZS1yYWRpby1ncm91cCByYWRpby1idG4tc2l6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiBjbGFzcz1cInB5LTFcIiBbY2hlY2tlZF09XCJzZWxlY3RlZFJlY2VudEFkZHJlc3M/LmlkID09IGFkZHJlc3MuaWRcIiAqbmdGb3I9XCJsZXQgYWRkcmVzcyBvZiBkZWxpdmVyeUFkZHJlc3Nlc1wiIFt2YWx1ZV09XCJhZGRyZXNzLmlkXCIgKGNoYW5nZSk9XCJzZWxlY3RlZFJlY2VudEFkZHJlc3M9YWRkcmVzc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thZGRyZXNzLmZvcm1hdHRlZEFkZHJlc3N9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yIGFkZHJlc3MtaW5uZXItY29udGFpbmVyXCIgKm5nSWY9XCJzZWxlY3RlZEFkZHJlc3MgPT0gJ3JlY2VudEFkZHJlc3MnICYmIHJlY2VudEFkZHJlc3MubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBhcmlhLWxhYmVsbGVkYnk9XCJleGFtcGxlLXJhZGlvLWdyb3VwLWxhYmVsXCIgY2xhc3M9XCJleGFtcGxlLXJhZGlvLWdyb3VwIHJhZGlvLWJ0bi1zaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gY2xhc3M9XCJweS0xXCIgW2NoZWNrZWRdPVwic2VsZWN0ZWRSZWNlbnRBZGRyZXNzPy5pZCA9PSBhZGRyZXNzLmlkXCIgKm5nRm9yPVwibGV0IGFkZHJlc3Mgb2YgcmVjZW50QWRkcmVzcyBcIiBbdmFsdWVdPVwiYWRkcmVzcy5pZFwiIChjaGFuZ2UpPVwic2VsZWN0ZWRSZWNlbnRBZGRyZXNzPWFkZHJlc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thZGRyZXNzLmZvcm1hdHRlZEFkZHJlc3N9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQWRkcmVzcyA9PSAnYWRkTmV3QWRkcmVzcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTWFwIERpdiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYWRkLW5ldy1hZGRyZXNzIFtjb25maXJtZWRBZGRyZXNzXT1cImNvbmZpcm1lZE5ld0FkZHJlc3NcIiAodXBkYXRlTmV3QWRkcmVzcyk9XCJnZXROZXdBZGRyZXNzKCRldmVudClcIj48L2FwcC1hZGQtbmV3LWFkZHJlc3M+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwibGluZS1zdGVwLW5hdmlnYXRpb24gbGFzdC1zdGVwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgY3VzLXRpdGxlLW1hcmdpbi1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1udW1iZXJcIj4gNSA8L3NwYW4+IHt7aXNEZWxpdmVyeUJveCA/ICdTaXRlIERlbGl2ZXJ5IFJlcXVpcmVtZW50cyc6ICdDb21tZW50cyAnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby1pY29uIHBsLTJcIiBbbmdiVG9vbHRpcF09XCJpc0RlbGl2ZXJ5Qm94ID8gc2l0ZURlbGl2ZXJ5UmVxdWlyZW1lbnRzIDogY2xpY2thbmRDb2xsZWN0Q29tbWVudHNcIiBwbGFjZW1lbnQ9XCJib3R0b21cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz1cImN1c3RvbS1tYXQtY2FyZCBsaW5lLXN0ZXAtbmF2aWdhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImNoZWNrb3V0Rm9ybURhdGEuZGVsaXZlcnlQaWNrVXBOb3Rlc1wiIHJvd3M9XCIzXCIgbmFtZT1cIkluc3RydWN0aW9uc1wiIGlkPVwiSW5zdHJ1Y3Rpb25zXCIgW3BsYWNlaG9sZGVyXT1cImlzRGVsaXZlcnlCb3ggPyAnUHJvdmlkZSBhbnkgc3BlY2lmaWMgZGVsaXZlcnkgaW5zdHJ1Y3Rpb25zJzonUHJvdmlkZSBhbnkgc3BlY2lmaWMgcGlja3VwIGluc3RydWN0aW9ucydcIiBtYXhsZW5ndGg9XCIyNTBcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImNhcnQtcGFnZS1mb290ZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LWZvb3RlciByb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCIgZmxvYXQtbWQtcmlnaHQgbS0wIGNoZWNrb3V0LWZvb3Rlci1idG5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJCYWNrIHRvIENhcnRcIiBocmVmPVwiL2NhcnRcIiBjbGFzcz1cIm1yLTMgZm9udC13ZWlnaHQtYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uLy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvaW9uaWMtYXJyb3ctYmFjay5zdmdcIiBhbHQ9XCJiYWNrLWFycm93XCIgY2xhc3M9XCJtci0yXCIgLz4gQkFDS1xyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmV2aWV3T3JkZXIoKVwiIGNsYXNzPVwiYnRuIHByaW1hcnktYnV0dG9uXCI+UmV2aWV3IEFuZCBPcmRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBjb2wtc20tMTIgYWxlcnQgYWxlcnQtZGFuZ2VyIGp1c3RpZnktY29udGVudC1zdGFydCBtdC0zXCIgcm9sZT1cImFsZXJ0XCIgKm5nSWY9XCJlcnJvckluZCQgfCBhc3luY1wiPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1yLTNcIiBzcmM9XCIuLi8uLi8uLi8uLi9hc3NldHMvaW1hZ2VzL2Vycm9yaWNvbi5zdmdcIiBhbHQ9XCJhbGVydFwiPiB7e2luZm9NZXNzYWdlfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==