ably-ui 8.7.0.dev.6053fb4 → 8.7.0.dev.7072b07

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +6 -6
  3. data/README.md +7 -3
  4. data/lib/ably_ui/core/code/component.css +2 -0
  5. data/lib/ably_ui/core/code/component.js +739 -1
  6. data/lib/ably_ui/core/company_autocomplete/component.css +2 -0
  7. data/lib/ably_ui/core/company_autocomplete/component.js +1161 -1
  8. data/lib/ably_ui/core/connect_state_wrapper/component.js +22 -1
  9. data/lib/ably_ui/core/contact_footer/component.css +2 -0
  10. data/lib/ably_ui/core/contact_footer/component.js +211 -1
  11. data/lib/ably_ui/core/cookie_message/component.css +2 -0
  12. data/lib/ably_ui/core/cookie_message/component.js +82 -1
  13. data/lib/ably_ui/core/core.rb +8 -4
  14. data/lib/ably_ui/core/customer_logos/component.js +22 -1
  15. data/lib/ably_ui/core/dropdown_menu/component.js +22 -1
  16. data/lib/ably_ui/core/feature_footer/component.css +2 -0
  17. data/lib/ably_ui/core/feature_footer/component.js +211 -1
  18. data/lib/ably_ui/core/featured_link/component.css +2 -0
  19. data/lib/ably_ui/core/featured_link/component.js +82 -1
  20. data/lib/ably_ui/core/flash/component.css +2 -0
  21. data/lib/ably_ui/core/flash/component.js +82 -1
  22. data/lib/ably_ui/core/footer/component.css +3 -1
  23. data/lib/ably_ui/core/footer/component.js +82 -1
  24. data/lib/ably_ui/core/footer/footer.html.erb +18 -23
  25. data/lib/ably_ui/core/icon/component.js +22 -1
  26. data/lib/ably_ui/core/images/best-support-2023.svg +1 -0
  27. data/lib/ably_ui/core/images/fastest-implementation-2023.svg +1 -0
  28. data/lib/ably_ui/core/images/high-performer-2023.svg +1 -0
  29. data/lib/ably_ui/core/images/highest-user-adoption-2023.svg +1 -0
  30. data/lib/ably_ui/core/loader/component.js +22 -1
  31. data/lib/ably_ui/core/logo/component.js +22 -1
  32. data/lib/ably_ui/core/meganav/component.css +3 -3
  33. data/lib/ably_ui/core/meganav/component.js +992 -1
  34. data/lib/ably_ui/core/meganav/component.json +1 -1
  35. data/lib/ably_ui/core/meganav/meganav.rb +4 -4
  36. data/lib/ably_ui/core/meganav_blog_posts_list/component.js +1159 -1
  37. data/lib/ably_ui/core/meganav_content_company/component.js +22 -1
  38. data/lib/ably_ui/core/meganav_content_company/meganav_content_company.html.erb +9 -0
  39. data/lib/ably_ui/core/meganav_content_developers/component.js +22 -1
  40. data/lib/ably_ui/core/meganav_content_developers/meganav_content_developers.html.erb +18 -2
  41. data/lib/ably_ui/core/meganav_content_products/component.js +22 -0
  42. data/lib/ably_ui/core/{meganav_content_platform/meganav_content_platform.html.erb → meganav_content_products/meganav_content_products.html.erb} +15 -33
  43. data/lib/ably_ui/core/{meganav_content_platform/meganav_content_platform.rb → meganav_content_products/meganav_content_products.rb} +1 -1
  44. data/lib/ably_ui/core/meganav_content_use_cases/component.js +22 -1
  45. data/lib/ably_ui/core/meganav_content_use_cases/meganav_content_use_cases.html.erb +42 -38
  46. data/lib/ably_ui/core/meganav_control/component.js +241 -1
  47. data/lib/ably_ui/core/meganav_control_mobile_dropdown/component.js +180 -1
  48. data/lib/ably_ui/core/meganav_control_mobile_panel_close/component.js +142 -1
  49. data/lib/ably_ui/core/meganav_control_mobile_panel_open/component.js +170 -1
  50. data/lib/ably_ui/core/meganav_items_desktop/component.js +22 -1
  51. data/lib/ably_ui/core/meganav_items_desktop/meganav_items_desktop.rb +1 -1
  52. data/lib/ably_ui/core/meganav_items_mobile/component.js +22 -1
  53. data/lib/ably_ui/core/meganav_items_signed_in/component.js +22 -1
  54. data/lib/ably_ui/core/meganav_search/component.js +22 -1
  55. data/lib/ably_ui/core/meganav_search_autocomplete/component.js +295 -1
  56. data/lib/ably_ui/core/meganav_search_panel/component.js +22 -1
  57. data/lib/ably_ui/core/meganav_search_suggestions/component.js +258 -1
  58. data/lib/ably_ui/core/notice/component.css +2 -0
  59. data/lib/ably_ui/core/notice/component.js +872 -1
  60. data/lib/ably_ui/core/scripts.js +1465 -1
  61. data/lib/ably_ui/core/showcase/component.css +2 -0
  62. data/lib/ably_ui/core/showcase/component.js +343 -1
  63. data/lib/ably_ui/core/sign_out_link/component.js +22 -1
  64. data/lib/ably_ui/core/slider/component.css +2 -0
  65. data/lib/ably_ui/core/slider/component.js +255 -1
  66. data/lib/ably_ui/core/sprites.svg +93 -0
  67. data/lib/ably_ui/core/styles.css +3 -7
  68. data/lib/ably_ui/core/uptime/component.css +2 -0
  69. data/lib/ably_ui/core/uptime/component.js +82 -1
  70. data/lib/ably_ui/reset/scripts.js +1 -1
  71. data/lib/ably_ui/reset/styles.css +1 -11
  72. data/lib/ably_ui/version.rb +1 -1
  73. metadata +9 -5
  74. data/lib/ably_ui/core/meganav_content_platform/component.js +0 -1
@@ -1 +1,992 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("addsearch-js-client"),require("lodash.throttle"),require("scroll-lock")):"function"==typeof define&&define.amd?define([,,],t):"object"==typeof exports?exports.AblyUi=t(require("addsearch-js-client"),require("lodash.throttle"),require("scroll-lock")):(e.AblyUi=e.AblyUi||{},e.AblyUi.Core=e.AblyUi.Core||{},e.AblyUi.Core.Meganav=t(e[void 0],e[void 0],e[void 0]))}(this,(function(e,t,n){return(()=>{"use strict";var r={2498:(e,t,n)=>{n.d(t,{default:()=>o});var r=n(9581);function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}const o=function(){var e=Array.from((0,r.n)("meganav-control")),t=Array.from((0,r.n)("meganav-panel")),n=getComputedStyle(document.documentElement).getPropertyValue("--bp-md"),o=function(e){return"search"===e.dataset.control},i=function(t,r,o){if(window.matchMedia("(hover: hover) and (pointer: fine) and (min-width: ".concat(n,")")).matches&&!e.some((function(e){return e===document.activeElement}))&&!function(){var e=document.querySelector('[data-id="meganav-panel"]#panel-search');if(e)return!e.classList.contains("invisible")}()){var i,c=["invisible","visible"];(i=r.classList).replace.apply(i,function(e){if(Array.isArray(e))return a(e)}(l=o?c:c.reverse())||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),t.setAttribute("aria-expanded",o),t.dataset.hover=o}var l};return e.map((function(n){var a,c,l=n.parentNode,u=document.querySelector("#".concat(n.getAttribute("aria-controls"))),s=function(n,a){return function(){e.forEach((function(e){return e!==n&&e.setAttribute("aria-expanded",!1)})),t.forEach((function(e){return e!==a&&e.classList.replace("visible","invisible")}));var i=n.getAttribute("aria-expanded"),c="true"===n.dataset.hover;if("true"!==i||c?(n.setAttribute("aria-expanded",!0),a.classList.replace("invisible","visible")):(n.setAttribute("aria-expanded",!1),a.classList.replace("visible","invisible")),c&&(n.dataset.hover=!1),o(n)){var l=(0,r.A)("meganav-search-input",a);if(!l)return;l.focus()}else n.focus()}}(n,u);return n.addEventListener("click",s),o(n)||(a=function(e,t){return function(){return i(e,t,!0)}}(n,u),c=function(e,t){return function(){return i(e,t,!1)}}(n,u),l.addEventListener("mouseenter",a),l.addEventListener("mouseleave",c)),[{teardown:function(){a&&c&&(l.removeEventListener("mouseenter",a),l.removeEventListener("mouseleave",c)),n.removeEventListener("click",s)},clear:function(){n.setAttribute("aria-expanded",!1),u.classList.replace("visible","invisible")}}]})).flat()}},1792:(e,t,n)=>{n.d(t,{default:()=>i});var r=n(6833),a=n.n(r),o=n(9581);const i=function(e){var t=e.clearPanels,n=(0,o.A)("meganav-control-mobile-dropdown"),r=(0,o.A)("meganav-mobile-dropdown"),i=(0,o.A)("meganav-control-mobile-dropdown-menu"),c=(0,o.A)("meganav-control-mobile-dropdown-close"),l=function(){"false"===n.getAttribute("aria-expanded")?(r.classList.replace("invisible","visible"),n.setAttribute("aria-expanded",!0),a().disablePageScroll()):(r.classList.replace("visible","invisible"),n.setAttribute("aria-expanded",!1),a().enablePageScroll(),t()),i.classList.toggle("hidden"),c.classList.toggle("hidden")};return n.addEventListener("click",l),{teardown:function(){n.removeEventListener("click",l),a().enablePageScroll()},clear:function(){r.classList.replace("visible","invisible"),n.setAttribute("aria-expanded",!1),i.classList.remove("hidden"),c.classList.add("hidden"),a().enablePageScroll()}}}},7359:(e,t,n)=>{n.d(t,{default:()=>a});var r=n(9581);const a=function(){var e=Array.from((0,r.n)("meganav-control-mobile-panel-close")),t=Array.from((0,r.n)("meganav-control-mobile-panel-open"));return e.map((function(e){var n=t.find((function(t){return t.getAttribute("aria-controls")===e.getAttribute("aria-controls")})),r=document.querySelector("#".concat(e.getAttribute("aria-controls"))),a=function(e,t,n){return function(){e.setAttribute("aria-expanded",!1),t.setAttribute("aria-expanded",!1),n.classList.replace("block","hidden"),n.style.height=null}}(e,n,r);return e.addEventListener("click",a),{teardown:function(){return e.removeEventListener("click",a)},clear:function(){return e.setAttribute("aria-expanded",!1)}}}))}},9552:(e,t,n)=>{n.d(t,{default:()=>a});var r=n(9581);const a=function(){var e,t=Array.from((0,r.n)("meganav-control-mobile-panel-close")),n=Array.from((0,r.n)("meganav-control-mobile-panel-open")),a=(0,r.A)("meganav-mobile-dropdown"),o=(e=getComputedStyle(document.documentElement).getPropertyValue("--ui-meganav-height"),parseFloat(e)*parseFloat(getComputedStyle(document.documentElement).fontSize));return n.map((function(e){var n=t.find((function(t){return t.getAttribute("aria-controls")===e.getAttribute("aria-controls")})),r=document.querySelector("#".concat(e.getAttribute("aria-controls"))),i=function(e,t,n){return function(){e.setAttribute("aria-expanded",!0),t.setAttribute("aria-expanded",!0),n.classList.replace("hidden","block"),n.style.height="".concat(window.innerHeight-o>n.offsetHeight?n.offsetHeight:window.innerHeight-o,"px")}}(e,n,r);return e.addEventListener("click",i),{teardown:function(){return e.removeEventListener("click",i)},clear:function(){r.classList.replace("block","hidden"),a.classList.remove("ui-meganav-mobile-dropdown-expand"),e.setAttribute("aria-expanded",!1),r.style.height=null}}}))}},6364:(e,t,n)=>{n.d(t,{default:()=>i});var r=n(9581),a=n(5090),o=n.n(a);const i=function(e){if(!e)return console.log("No AddSearch API key provided, skipping search suggestions."),[];var t=new(o())(e);return[(0,r.A)("meganav-search-input"),(0,r.A)("meganav-mobile-search-input")].filter((function(e){return e})).map((function(e){var n=e.parentNode,a=(0,r.A)("meganav-search-autocomplete-container",n),o=(0,r.A)("meganav-search-autocomplete-list",n),i=(0,r.A)("meganav-search-input-clear",n);return function(e){var t=e.input,n=e.container,r=e.listContainer,a=e.clear,o=e.client;o.setAnalyticsTag("Meganav autocomplete"),o.setThrottleTime(400);var i,c=function(){n.classList.add("hidden"),r.innerHTML=""},l=function(e){(e||"").length>0&&a?a.classList.remove("invisible"):a&&a.classList.add("invisible")},u=function(e,t){return e.replace(t.toLowerCase(),'<span class="font-light">'.concat(t,"</span>"))},s=function(e){return window.location="/search?q=".concat(e)},d=function(e){var t=r.querySelector('[data-suggestion-index="'.concat(e+1,'"]'));t&&t.focus()},f=function(e){var t=e-1,n=r.querySelector('[data-suggestion-index="'.concat(t,'"]'));n&&n.focus()},v=function(e){var a=e.target.value;"ArrowDown"!==e.key?a?o.suggestions(a,function(e){return function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(l(e),Array.isArray(a.suggestions))if(0!==a.suggestions.length){var o=a.suggestions.map((function(n,r){var a=document.createElement("li"),o=document.createElement("button");return o.type="button",o.classList.add("ui-text-menu2","font-medium","p-8","w-full","text-left","rounded","hover:text-gui-hover","focus:outline-gui-focus","hover:bg-light-grey"),o.innerHTML=u(n.value,e),o.dataset.suggestionIndex=r,o.addEventListener("click",(function(){s(n.value)})),o.addEventListener("keydown",(function(e){var a=e.key;"ArrowDown"===a?d(r):"ArrowUp"===a&&r-1<0?t.focus():"ArrowUp"===a&&r-1>=0?f(r):"Enter"!==a&&"Space"!==a||s(n.value)})),a.appendChild(o),a}));r.innerHTML="",o.forEach((function(e){return r.appendChild(e)})),n.classList.remove("hidden")}else c();else c()}}(a)):c():d(0)};return a&&(i=function(){t.value="",a.classList.add("invisible"),c()},a.addEventListener("click",i)),t.addEventListener("keyup",v),{teardown:function(){t.removeEventListener("keyup",v),a&&a.removeEventListener("click",i)},clear:function(){t.value="",c()}}}({input:e,container:a,listContainer:o,client:t,clear:i})}))}},3169:(e,t,n)=>{n.d(t,{default:()=>d});var r=n(9581),a=function(e){return new DOMMatrix(window.getComputedStyle(e).transform).e},o=function(e,t){return e.style.transform="translateX(".concat(t,"px)")},i=function(e,t){return e>=t},c=function(e,t,n,r){return Math.abs(e-n+r)>t},l=function(e,t){var n;return(null===(n=e.changedTouches[0])||void 0===n?void 0:n.clientX)-t},u=function(e){return Math.abs(e)<5},s=function(e){return e.map((function(e){return e.getBoundingClientRect().width})).reduce((function(e,t){return e+t}),0)};const d=function(){var e,t=(0,r.A)("meganav-mobile-search-input"),n=(0,r.A)("meganav-mobile-search-suggestions"),d=n.querySelector("ul"),f=Array.from(d.querySelectorAll("li")),v=function(e,t){var n=a(d),r=Math.round(n+e);i(r,t)&&(r=0),o(d,r)},m=function(e,t){var n=d.getBoundingClientRect().width,r=a(d),i=s(f),l=Math.round(r+e);c(l,i,n,t)&&(l=-(i-n+t)),o(d,l)},p=function(t){var n;e=null===(n=t.touches[0])||void 0===n?void 0:n.clientX},g=function(t){var n=l(t,e);u(n)||(n>0?function(e,t){var n=a(d),r=Math.round(n+e);i(r,24)||o(d,r)}(n):function(e,t){var n=d.getBoundingClientRect().width,r=a(d),i=Math.round(r+e),l=s(f);c(i,l,n,96)||o(d,i)}(n))},b=function(t){var n=l(t,e);u(n)||(n>0?v(n,24):m(n,48))},h=function(){n.classList.add("max-h-96")},y=function(e){e.relatedTarget!==n.querySelectorAll("a")[0]&&n.classList.remove("max-h-96")};return t.addEventListener("focus",h),t.addEventListener("blur",y),n.addEventListener("touchstart",p),n.addEventListener("touchmove",g),n.addEventListener("touchend",b),n.addEventListener("wheel",(function(e){var t=4*e.deltaY;u(t)||(t>0?v(t,24):m(t,48))})),{teardown:function(){t.removeEventListener("focus",h),t.removeEventListener("blur",y),n.removeEventListener("touchstart",p),n.removeEventListener("touchmove",g),n.removeEventListener("touchend",b)},clear:function(){n.classList.remove("max-h-96"),d.style.transform="translateX(0px)"}}}},9581:(e,t,n)=>{n.d(t,{A:()=>r,n:()=>a});var r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;return t.querySelector("[data-id=".concat(e,"]"))},a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;return t.querySelectorAll("[data-id=".concat(e,"]"))}},5090:t=>{t.exports=e},2040:e=>{e.exports=t},6833:e=>{e.exports=n}},a={};function o(e){var t=a[e];if(void 0!==t)return t.exports;var n=a[e]={exports:{}};return r[e](n,n.exports,o),n.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var i={};return(()=>{o.d(i,{default:()=>g});var e=o(2040),t=o.n(e),n=o(9581),r=o(2498),a=o(1792),c=o(9552),l=o(7359),u=o(6364),s=o(3169);function d(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var v=function(e){return window.onblur=function(){return e()},{teardown:function(){return window.onblur=null}}},m=function(e){var t=(0,n.A)("meganav"),r=function(n){t.contains(n.target)||e()};return document.addEventListener("click",r),{teardown:function(){return document.removeEventListener("click",r)}}},p=function(e){if("transparentToWhite"!==e)return{teardown:function(){}};var r=(0,n.A)("meganav"),a=(0,n.n)("meganav-link"),o=(0,n.A)("meganav-control-mobile-dropdown-menu"),i=(0,n.A)("meganav-control-mobile-dropdown-close"),c=(0,n.n)("meganav-control"),l=(0,n.A)("meganav-sign-up-btn"),u=[].concat(d(Array.from(c)),d(Array.from(a)),[(0,n.A)("meganav-logo")]),s=function(e){var t,n,r,a,c=["ui-icon-white","ui-icon-cool-black"],l=[].concat(c).reverse();e?(null==o||(t=o.classList).replace.apply(t,c),null==i||(n=i.classList).replace.apply(n,c)):(null==o||(r=o.classList).replace.apply(r,d(l)),null==i||(a=i.classList).replace.apply(a,d(l)))},f=function(e){e?(null==l||l.classList.replace("bg-white","bg-cool-black"),null==l||l.classList.replace("text-cool-black","text-white")):(null==l||l.classList.replace("bg-cool-black","bg-white"),null==l||l.classList.replace("text-white","text-cool-black"))},v=t()((function(){window.scrollY>5?(r.classList.replace("bg-transparent","bg-white"),f(!0),s(!0),u.forEach((function(e){return e.classList.replace("text-white","text-cool-black")}))):(r.classList.replace("bg-white","bg-transparent"),f(!1),s(!1),u.forEach((function(e){return e.classList.replace("text-cool-black","text-white")})))}),150);return document.addEventListener("scroll",v),{teardown:function(){return document.removeEventListener("scroll",v)}}};function g(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{themeName:null},t=e.themeName,n=e.addSearchApiKey,o=(0,r.default)(),i=(0,c.default)(),f=(0,l.default)(),g=(0,u.default)(n),b=(0,s.default)(),h=(0,a.default)({clearPanels:function(){return[].concat(d(i),d(f)).forEach((function(e){return e.clear()}))}}),y=function(){return[h,b].concat(d(i),d(f),d(o),d(g)).forEach((function(e){return e.clear()}))},A=[p(t),m(y),v(y),h,b].concat(d(o),d(i),d(f),d(g)).map((function(e){return e.teardown}));return function(){return A.forEach((function(e){return e()}))}}})(),i.default})()}));
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory(require("addsearch-js-client"), require("lodash.throttle"), require("scroll-lock"));
4
+ else if(typeof define === 'function' && define.amd)
5
+ define([, , ], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["AblyUi"] = factory(require("addsearch-js-client"), require("lodash.throttle"), require("scroll-lock"));
8
+ else
9
+ root["AblyUi"] = root["AblyUi"] || {}, root["AblyUi"]["Core"] = root["AblyUi"]["Core"] || {}, root["AblyUi"]["Core"]["Meganav"] = factory(root[undefined], root[undefined], root[undefined]);
10
+ })(this, (__WEBPACK_EXTERNAL_MODULE_addsearch_js_client__, __WEBPACK_EXTERNAL_MODULE_lodash_throttle__, __WEBPACK_EXTERNAL_MODULE_scroll_lock__) => {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ "./src/core/MeganavControl/component.js":
16
+ /*!**********************************************!*\
17
+ !*** ./src/core/MeganavControl/component.js ***!
18
+ \**********************************************/
19
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
20
+
21
+ __webpack_require__.r(__webpack_exports__);
22
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
24
+ /* harmony export */ });
25
+ /* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
26
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
27
+
28
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
29
+
30
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
31
+
32
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
33
+
34
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
35
+
36
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
37
+
38
+
39
+
40
+ var MeganavControl = function MeganavControl() {
41
+ var controls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control"));
42
+ var panels = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-panel"));
43
+ var mdBreakpoint = getComputedStyle(document.documentElement).getPropertyValue("--bp-md");
44
+
45
+ var hoverEnabled = function hoverEnabled() {
46
+ return window.matchMedia("(hover: hover) and (pointer: fine) and (min-width: ".concat(mdBreakpoint, ")")).matches;
47
+ };
48
+
49
+ var isSearchControl = function isSearchControl(node) {
50
+ return node.dataset.control === "search";
51
+ };
52
+
53
+ var isSearchPanelOpen = function isSearchPanelOpen() {
54
+ var searchPanel = document.querySelector('[data-id="meganav-panel"]#panel-search');
55
+ if (!searchPanel) return;
56
+ return !searchPanel.classList.contains("invisible");
57
+ };
58
+
59
+ var controlsHaveFocus = function controlsHaveFocus() {
60
+ return controls.some(function (control) {
61
+ return control === document.activeElement;
62
+ });
63
+ };
64
+
65
+ var hover = function hover(control, panel, open) {
66
+ if (hoverEnabled() && !controlsHaveFocus() && !isSearchPanelOpen()) {
67
+ var _panel$classList;
68
+
69
+ var classes = ["invisible", "visible"];
70
+
71
+ (_panel$classList = panel.classList).replace.apply(_panel$classList, _toConsumableArray(open ? classes : classes.reverse()));
72
+
73
+ control.setAttribute("aria-expanded", open);
74
+ control.dataset.hover = open;
75
+ }
76
+ };
77
+
78
+ var mouseenterHandler = function mouseenterHandler(control, panel) {
79
+ return function () {
80
+ return hover(control, panel, true);
81
+ };
82
+ };
83
+
84
+ var mouseleaveHandler = function mouseleaveHandler(control, panel) {
85
+ return function () {
86
+ return hover(control, panel, false);
87
+ };
88
+ };
89
+
90
+ var clickHandler = function clickHandler(control, panel) {
91
+ return function () {
92
+ controls.forEach(function (node) {
93
+ return node !== control && node.setAttribute("aria-expanded", false);
94
+ });
95
+ panels.forEach(function (node) {
96
+ return node !== panel && node.classList.replace("visible", "invisible");
97
+ });
98
+ var ariaExpanded = control.getAttribute("aria-expanded"); // Prevent closing of the panel if it was already opened by hovering
99
+
100
+ var openedByHover = control.dataset.hover === "true";
101
+
102
+ if (ariaExpanded === "true" && !openedByHover) {
103
+ control.setAttribute("aria-expanded", false);
104
+ panel.classList.replace("visible", "invisible");
105
+ } else {
106
+ control.setAttribute("aria-expanded", true);
107
+ panel.classList.replace("invisible", "visible");
108
+ }
109
+
110
+ if (openedByHover) {
111
+ control.dataset.hover = false;
112
+ }
113
+
114
+ if (isSearchControl(control)) {
115
+ var searchInput = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-input", panel);
116
+ if (!searchInput) return;
117
+ searchInput.focus();
118
+ } else {
119
+ control.focus();
120
+ }
121
+ };
122
+ };
123
+
124
+ return controls.map(function (control) {
125
+ var item = control.parentNode;
126
+ var panel = document.querySelector("#".concat(control.getAttribute("aria-controls")));
127
+ var click = clickHandler(control, panel);
128
+ control.addEventListener("click", click);
129
+ var mouseenter, mouseleave;
130
+
131
+ if (!isSearchControl(control)) {
132
+ mouseenter = mouseenterHandler(control, panel);
133
+ mouseleave = mouseleaveHandler(control, panel);
134
+ item.addEventListener("mouseenter", mouseenter);
135
+ item.addEventListener("mouseleave", mouseleave);
136
+ }
137
+
138
+ return [{
139
+ teardown: function teardown() {
140
+ if (mouseenter && mouseleave) {
141
+ item.removeEventListener("mouseenter", mouseenter);
142
+ item.removeEventListener("mouseleave", mouseleave);
143
+ }
144
+
145
+ control.removeEventListener("click", click);
146
+ },
147
+ clear: function clear() {
148
+ control.setAttribute("aria-expanded", false);
149
+ panel.classList.replace("visible", "invisible");
150
+ }
151
+ }];
152
+ }).flat();
153
+ };
154
+
155
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MeganavControl);
156
+
157
+ /***/ }),
158
+
159
+ /***/ "./src/core/MeganavControlMobileDropdown/component.js":
160
+ /*!************************************************************!*\
161
+ !*** ./src/core/MeganavControlMobileDropdown/component.js ***!
162
+ \************************************************************/
163
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
164
+
165
+ __webpack_require__.r(__webpack_exports__);
166
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
167
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
168
+ /* harmony export */ });
169
+ /* harmony import */ var scroll_lock__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! scroll-lock */ "scroll-lock");
170
+ /* harmony import */ var scroll_lock__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(scroll_lock__WEBPACK_IMPORTED_MODULE_0__);
171
+ /* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
172
+
173
+
174
+
175
+ var MeganavControlMobileDropdown = function MeganavControlMobileDropdown(_ref) {
176
+ var clearPanels = _ref.clearPanels;
177
+ var control = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-control-mobile-dropdown");
178
+ var dropdown = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-mobile-dropdown");
179
+ var menuIcon = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-control-mobile-dropdown-menu");
180
+ var closeIcon = (0,_dom_query__WEBPACK_IMPORTED_MODULE_1__.queryId)("meganav-control-mobile-dropdown-close");
181
+
182
+ var clickHandler = function clickHandler() {
183
+ var ariaExpanded = control.getAttribute("aria-expanded");
184
+
185
+ if (ariaExpanded === "false") {
186
+ dropdown.classList.replace("invisible", "visible");
187
+ control.setAttribute("aria-expanded", true);
188
+ scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().disablePageScroll();
189
+ } else {
190
+ dropdown.classList.replace("visible", "invisible");
191
+ control.setAttribute("aria-expanded", false);
192
+ scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().enablePageScroll();
193
+ clearPanels();
194
+ }
195
+
196
+ menuIcon.classList.toggle("hidden");
197
+ closeIcon.classList.toggle("hidden");
198
+ };
199
+
200
+ control.addEventListener("click", clickHandler);
201
+ return {
202
+ teardown: function teardown() {
203
+ control.removeEventListener("click", clickHandler);
204
+ scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().enablePageScroll();
205
+ },
206
+ clear: function clear() {
207
+ dropdown.classList.replace("visible", "invisible");
208
+ control.setAttribute("aria-expanded", false);
209
+ menuIcon.classList.remove("hidden");
210
+ closeIcon.classList.add("hidden");
211
+ scroll_lock__WEBPACK_IMPORTED_MODULE_0___default().enablePageScroll();
212
+ }
213
+ };
214
+ };
215
+
216
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MeganavControlMobileDropdown);
217
+
218
+ /***/ }),
219
+
220
+ /***/ "./src/core/MeganavControlMobilePanelClose/component.js":
221
+ /*!**************************************************************!*\
222
+ !*** ./src/core/MeganavControlMobilePanelClose/component.js ***!
223
+ \**************************************************************/
224
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
225
+
226
+ __webpack_require__.r(__webpack_exports__);
227
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
228
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
229
+ /* harmony export */ });
230
+ /* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
231
+
232
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
233
+ var closeControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-close"));
234
+ var openControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-open"));
235
+
236
+ var clickHandler = function clickHandler(btn, openBtn, panel) {
237
+ return function () {
238
+ btn.setAttribute("aria-expanded", false);
239
+ openBtn.setAttribute("aria-expanded", false);
240
+ panel.classList.replace("block", "hidden");
241
+ panel.style.height = null;
242
+ };
243
+ };
244
+
245
+ return closeControls.map(function (btn) {
246
+ var openBtn = openControls.find(function (open) {
247
+ return open.getAttribute("aria-controls") === btn.getAttribute("aria-controls");
248
+ });
249
+ var panel = document.querySelector("#".concat(btn.getAttribute("aria-controls")));
250
+ var handler = clickHandler(btn, openBtn, panel);
251
+ btn.addEventListener("click", handler);
252
+ return {
253
+ teardown: function teardown() {
254
+ return btn.removeEventListener("click", handler);
255
+ },
256
+ clear: function clear() {
257
+ return btn.setAttribute("aria-expanded", false);
258
+ }
259
+ };
260
+ });
261
+ });
262
+
263
+ /***/ }),
264
+
265
+ /***/ "./src/core/MeganavControlMobilePanelOpen/component.js":
266
+ /*!*************************************************************!*\
267
+ !*** ./src/core/MeganavControlMobilePanelOpen/component.js ***!
268
+ \*************************************************************/
269
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
270
+
271
+ __webpack_require__.r(__webpack_exports__);
272
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
273
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
274
+ /* harmony export */ });
275
+ /* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
276
+ /* harmony import */ var _css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css */ "./src/core/css.js");
277
+
278
+
279
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
280
+ var closeControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-close"));
281
+ var openControls = Array.from((0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryIdAll)("meganav-control-mobile-panel-open"));
282
+ var dropdown = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-dropdown"); // Height is defined in rem's so to get the pixel value we need to find the fontSize on root
283
+
284
+ var meganavHeight = (0,_css__WEBPACK_IMPORTED_MODULE_1__.remsToPixelValue)(getComputedStyle(document.documentElement).getPropertyValue("--ui-meganav-height"));
285
+
286
+ var clickHandler = function clickHandler(btn, closeBtn, panel) {
287
+ return function () {
288
+ btn.setAttribute("aria-expanded", true);
289
+ closeBtn.setAttribute("aria-expanded", true);
290
+ panel.classList.replace("hidden", "block"); // On devices where we don't have enough space for the panel, set it's height to
291
+ // the height of the viewport (minus the meganav height) - this will trigger a scroll.
292
+ // Otherwise just set it to the panel height. This handles the case where the ratio of vertical
293
+ // space to horizontal is especially high (think tablets, but not only).
294
+
295
+ panel.style.height = "".concat(window.innerHeight - meganavHeight > panel.offsetHeight ? panel.offsetHeight : window.innerHeight - meganavHeight, "px");
296
+ };
297
+ };
298
+
299
+ return openControls.map(function (btn) {
300
+ var closeBtn = closeControls.find(function (node) {
301
+ return node.getAttribute("aria-controls") === btn.getAttribute("aria-controls");
302
+ });
303
+ var panel = document.querySelector("#".concat(btn.getAttribute("aria-controls")));
304
+ var handler = clickHandler(btn, closeBtn, panel);
305
+ btn.addEventListener("click", handler);
306
+ return {
307
+ teardown: function teardown() {
308
+ return btn.removeEventListener("click", handler);
309
+ },
310
+ clear: function clear() {
311
+ panel.classList.replace("block", "hidden");
312
+ dropdown.classList.remove("ui-meganav-mobile-dropdown-expand");
313
+ btn.setAttribute("aria-expanded", false);
314
+ panel.style.height = null;
315
+ }
316
+ };
317
+ });
318
+ });
319
+
320
+ /***/ }),
321
+
322
+ /***/ "./src/core/MeganavSearchAutocomplete/component.js":
323
+ /*!*********************************************************!*\
324
+ !*** ./src/core/MeganavSearchAutocomplete/component.js ***!
325
+ \*********************************************************/
326
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
327
+
328
+ __webpack_require__.r(__webpack_exports__);
329
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
330
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
331
+ /* harmony export */ });
332
+ /* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
333
+ /* harmony import */ var addsearch_js_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! addsearch-js-client */ "addsearch-js-client");
334
+ /* harmony import */ var addsearch_js_client__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(addsearch_js_client__WEBPACK_IMPORTED_MODULE_1__);
335
+
336
+
337
+
338
+ var init = function init(_ref) {
339
+ var input = _ref.input,
340
+ container = _ref.container,
341
+ listContainer = _ref.listContainer,
342
+ clear = _ref.clear,
343
+ client = _ref.client;
344
+ client.setAnalyticsTag("Meganav autocomplete");
345
+ client.setThrottleTime(400);
346
+
347
+ var clearResults = function clearResults() {
348
+ container.classList.add("hidden");
349
+ listContainer.innerHTML = "";
350
+ };
351
+
352
+ var toggleClearBtn = function toggleClearBtn(query) {
353
+ if ((query || "").length > 0 && clear) {
354
+ clear.classList.remove("invisible");
355
+ } else if (clear) {
356
+ clear.classList.add("invisible");
357
+ }
358
+ };
359
+
360
+ var markQueryInSuggestion = function markQueryInSuggestion(suggestionValue, query) {
361
+ return suggestionValue.replace(query.toLowerCase(), "<span class=\"font-light\">".concat(query, "</span>"));
362
+ };
363
+
364
+ var navigateToUrl = function navigateToUrl(q) {
365
+ return window.location = "/search?q=".concat(q);
366
+ };
367
+
368
+ var focusNext = function focusNext(index) {
369
+ var nextSuggestion = listContainer.querySelector("[data-suggestion-index=\"".concat(index + 1, "\"]"));
370
+ if (!nextSuggestion) return;
371
+ nextSuggestion.focus();
372
+ };
373
+
374
+ var focusPrevious = function focusPrevious(index) {
375
+ var previousIndex = index - 1;
376
+ var previousSuggestion = listContainer.querySelector("[data-suggestion-index=\"".concat(previousIndex, "\"]"));
377
+ if (!previousSuggestion) return;
378
+ previousSuggestion.focus();
379
+ };
380
+
381
+ var renderResults = function renderResults(query) {
382
+ return function () {
383
+ var results = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
384
+ toggleClearBtn(query); // Prevent invalid access error when key is invalid
385
+
386
+ if (!Array.isArray(results.suggestions)) {
387
+ clearResults();
388
+ return;
389
+ } // Prevent key error from invalid key
390
+
391
+
392
+ if (results.suggestions.length === 0) {
393
+ clearResults();
394
+ return;
395
+ }
396
+
397
+ var items = results.suggestions.map(function (suggestion, index) {
398
+ var li = document.createElement("li");
399
+ var button = document.createElement("button");
400
+ button.type = "button";
401
+ button.classList.add("ui-text-menu2", "font-medium", "p-8", "w-full", "text-left", "rounded", "hover:text-gui-hover", "focus:outline-gui-focus", "hover:bg-light-grey");
402
+ button.innerHTML = markQueryInSuggestion(suggestion.value, query);
403
+ button.dataset.suggestionIndex = index;
404
+ button.addEventListener("click", function () {
405
+ navigateToUrl(suggestion.value);
406
+ });
407
+ button.addEventListener("keydown", function (e) {
408
+ var key = e.key;
409
+
410
+ if (key === "ArrowDown") {
411
+ focusNext(index);
412
+ } else if (key === "ArrowUp" && index - 1 < 0) {
413
+ input.focus();
414
+ } else if (key === "ArrowUp" && index - 1 >= 0) {
415
+ focusPrevious(index);
416
+ } else if (key === "Enter" || key === "Space") {
417
+ navigateToUrl(suggestion.value);
418
+ }
419
+ });
420
+ li.appendChild(button);
421
+ return li;
422
+ });
423
+ listContainer.innerHTML = "";
424
+ items.forEach(function (item) {
425
+ return listContainer.appendChild(item);
426
+ });
427
+ container.classList.remove("hidden");
428
+ };
429
+ };
430
+
431
+ var keyupHandler = function keyupHandler(e) {
432
+ var query = e.target.value;
433
+ var key = e.key;
434
+
435
+ if (key === "ArrowDown") {
436
+ focusNext(0);
437
+ return;
438
+ }
439
+
440
+ if (!query) {
441
+ clearResults();
442
+ } else {
443
+ client.suggestions(query, renderResults(query));
444
+ }
445
+ };
446
+
447
+ var clearHandler;
448
+
449
+ if (clear) {
450
+ clearHandler = function clearHandler() {
451
+ input.value = "";
452
+ clear.classList.add("invisible");
453
+ clearResults();
454
+ };
455
+
456
+ clear.addEventListener("click", clearHandler);
457
+ }
458
+
459
+ input.addEventListener("keyup", keyupHandler);
460
+ return {
461
+ teardown: function teardown() {
462
+ input.removeEventListener("keyup", keyupHandler);
463
+ if (clear) clear.removeEventListener("click", clearHandler);
464
+ },
465
+ clear: function clear() {
466
+ input.value = "";
467
+ clearResults();
468
+ }
469
+ };
470
+ };
471
+
472
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (apiKey) {
473
+ if (!apiKey) {
474
+ console.log("No AddSearch API key provided, skipping search suggestions.");
475
+ return [];
476
+ }
477
+
478
+ var client = new (addsearch_js_client__WEBPACK_IMPORTED_MODULE_1___default())(apiKey);
479
+ return [(0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-input"), (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-search-input")].filter(function (i) {
480
+ return i;
481
+ }).map(function (input) {
482
+ var parent = input.parentNode;
483
+ var container = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-autocomplete-container", parent);
484
+ var listContainer = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-autocomplete-list", parent);
485
+ var clear = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-search-input-clear", parent);
486
+ return init({
487
+ input: input,
488
+ container: container,
489
+ listContainer: listContainer,
490
+ client: client,
491
+ clear: clear
492
+ });
493
+ });
494
+ });
495
+
496
+ /***/ }),
497
+
498
+ /***/ "./src/core/MeganavSearchSuggestions/component.js":
499
+ /*!********************************************************!*\
500
+ !*** ./src/core/MeganavSearchSuggestions/component.js ***!
501
+ \********************************************************/
502
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
503
+
504
+ __webpack_require__.r(__webpack_exports__);
505
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
506
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
507
+ /* harmony export */ });
508
+ /* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
509
+
510
+ var DRAG_BUFFER = 5;
511
+
512
+ var getTranslateX = function getTranslateX(node) {
513
+ return new DOMMatrix(window.getComputedStyle(node).transform).e;
514
+ };
515
+
516
+ var updateTranslateX = function updateTranslateX(node, value) {
517
+ return node.style.transform = "translateX(".concat(value, "px)");
518
+ };
519
+
520
+ var dragLeftBoundary = function dragLeftBoundary(translateX, threshold) {
521
+ return translateX >= threshold;
522
+ };
523
+
524
+ var dragRightBoundary = function dragRightBoundary(translateX, itemsWidth, windowWidth, threshold) {
525
+ return Math.abs(translateX - windowWidth + threshold) > itemsWidth;
526
+ };
527
+
528
+ var getDistance = function getDistance(e, touchStartX) {
529
+ var _e$changedTouches$;
530
+
531
+ return ((_e$changedTouches$ = e.changedTouches[0]) === null || _e$changedTouches$ === void 0 ? void 0 : _e$changedTouches$.clientX) - touchStartX;
532
+ };
533
+
534
+ var withinBuffer = function withinBuffer(distance) {
535
+ return Math.abs(distance) < DRAG_BUFFER;
536
+ };
537
+
538
+ var getItemsTotalWidth = function getItemsTotalWidth(nodes) {
539
+ return nodes.map(function (item) {
540
+ return item.getBoundingClientRect().width;
541
+ }).reduce(function (acc, val) {
542
+ return acc + val;
543
+ }, 0);
544
+ };
545
+
546
+ var MeganavSearchSuggestions = function MeganavSearchSuggestions() {
547
+ var suggestionsToggle = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-search-input");
548
+ var suggestions = (0,_dom_query__WEBPACK_IMPORTED_MODULE_0__.queryId)("meganav-mobile-search-suggestions");
549
+ var list = suggestions.querySelector("ul");
550
+ var listItems = Array.from(list.querySelectorAll("li"));
551
+
552
+ var dragLeft = function dragLeft(distance, threshold) {
553
+ var currentTranslateX = getTranslateX(list);
554
+ var translateX = Math.round(currentTranslateX + distance);
555
+ if (dragLeftBoundary(translateX, threshold)) return;
556
+ updateTranslateX(list, translateX);
557
+ };
558
+
559
+ var dragLeftEnd = function dragLeftEnd(distance, threshold) {
560
+ var currentTranslateX = getTranslateX(list);
561
+ var translateX = Math.round(currentTranslateX + distance);
562
+
563
+ if (dragLeftBoundary(translateX, threshold)) {
564
+ translateX = 0;
565
+ }
566
+
567
+ updateTranslateX(list, translateX);
568
+ };
569
+
570
+ var dragRight = function dragRight(distance, threshold) {
571
+ var listWidth = list.getBoundingClientRect().width;
572
+ var currentTranslateX = getTranslateX(list);
573
+ var translateX = Math.round(currentTranslateX + distance);
574
+ var itemsTotalWidth = getItemsTotalWidth(listItems);
575
+
576
+ if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {
577
+ return;
578
+ }
579
+
580
+ updateTranslateX(list, translateX);
581
+ };
582
+
583
+ var dragRightEnd = function dragRightEnd(distance, threshold) {
584
+ var listWidth = list.getBoundingClientRect().width;
585
+ var currentTranslateX = getTranslateX(list);
586
+ var itemsTotalWidth = getItemsTotalWidth(listItems);
587
+ var translateX = Math.round(currentTranslateX + distance);
588
+
589
+ if (dragRightBoundary(translateX, itemsTotalWidth, listWidth, threshold)) {
590
+ translateX = -(itemsTotalWidth - listWidth + threshold);
591
+ }
592
+
593
+ updateTranslateX(list, translateX);
594
+ };
595
+
596
+ var touchStartX;
597
+
598
+ var touchstartHandler = function touchstartHandler(e) {
599
+ var _e$touches$;
600
+
601
+ touchStartX = (_e$touches$ = e.touches[0]) === null || _e$touches$ === void 0 ? void 0 : _e$touches$.clientX;
602
+ };
603
+
604
+ var touchmoveHandler = function touchmoveHandler(e) {
605
+ var distance = getDistance(e, touchStartX);
606
+ if (withinBuffer(distance)) return;
607
+ distance > 0 ? dragLeft(distance, 24) : dragRight(distance, 96);
608
+ };
609
+
610
+ var touchendHandler = function touchendHandler(e) {
611
+ var distance = getDistance(e, touchStartX);
612
+ if (withinBuffer(distance)) return;
613
+ distance > 0 ? dragLeftEnd(distance, 24) : dragRightEnd(distance, 48);
614
+ };
615
+
616
+ var focusSuggestionsHandler = function focusSuggestionsHandler() {
617
+ suggestions.classList.add("max-h-96");
618
+ };
619
+
620
+ var blurSuggestionsHandler = function blurSuggestionsHandler(e) {
621
+ if (e.relatedTarget === suggestions.querySelectorAll("a")[0]) {
622
+ return;
623
+ }
624
+
625
+ suggestions.classList.remove("max-h-96");
626
+ };
627
+
628
+ var wheelHandler = function wheelHandler(e) {
629
+ var distance = e.deltaY * 4;
630
+ if (withinBuffer(distance)) return;
631
+ distance > 0 ? dragLeftEnd(distance, 24) : dragRightEnd(distance, 48);
632
+ };
633
+
634
+ suggestionsToggle.addEventListener("focus", focusSuggestionsHandler);
635
+ suggestionsToggle.addEventListener("blur", blurSuggestionsHandler);
636
+ suggestions.addEventListener("touchstart", touchstartHandler);
637
+ suggestions.addEventListener("touchmove", touchmoveHandler);
638
+ suggestions.addEventListener("touchend", touchendHandler);
639
+ suggestions.addEventListener("wheel", wheelHandler);
640
+ return {
641
+ teardown: function teardown() {
642
+ suggestionsToggle.removeEventListener("focus", focusSuggestionsHandler);
643
+ suggestionsToggle.removeEventListener("blur", blurSuggestionsHandler);
644
+ suggestions.removeEventListener("touchstart", touchstartHandler);
645
+ suggestions.removeEventListener("touchmove", touchmoveHandler);
646
+ suggestions.removeEventListener("touchend", touchendHandler);
647
+ },
648
+ clear: function clear() {
649
+ suggestions.classList.remove("max-h-96");
650
+ list.style.transform = "translateX(0px)";
651
+ }
652
+ };
653
+ };
654
+
655
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MeganavSearchSuggestions);
656
+
657
+ /***/ }),
658
+
659
+ /***/ "./src/core/css.js":
660
+ /*!*************************!*\
661
+ !*** ./src/core/css.js ***!
662
+ \*************************/
663
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
664
+
665
+ __webpack_require__.r(__webpack_exports__);
666
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
667
+ /* harmony export */ "remsToPixelValue": () => (/* binding */ remsToPixelValue)
668
+ /* harmony export */ });
669
+ var remsToPixelValue = function remsToPixelValue(remString) {
670
+ return parseFloat(remString) * parseFloat(getComputedStyle(document.documentElement).fontSize);
671
+ };
672
+
673
+ /***/ }),
674
+
675
+ /***/ "./src/core/dom-query.js":
676
+ /*!*******************************!*\
677
+ !*** ./src/core/dom-query.js ***!
678
+ \*******************************/
679
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
680
+
681
+ __webpack_require__.r(__webpack_exports__);
682
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
683
+ /* harmony export */ "queryId": () => (/* binding */ queryId),
684
+ /* harmony export */ "queryIdAll": () => (/* binding */ queryIdAll)
685
+ /* harmony export */ });
686
+ var queryId = function queryId(val) {
687
+ var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
688
+ return root.querySelector("[data-id=".concat(val, "]"));
689
+ };
690
+ var queryIdAll = function queryIdAll(val) {
691
+ var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
692
+ return root.querySelectorAll("[data-id=".concat(val, "]"));
693
+ };
694
+
695
+ /***/ }),
696
+
697
+ /***/ "./src/core/Meganav/component.css":
698
+ /*!****************************************!*\
699
+ !*** ./src/core/Meganav/component.css ***!
700
+ \****************************************/
701
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
702
+
703
+ __webpack_require__.r(__webpack_exports__);
704
+ // extracted by mini-css-extract-plugin
705
+
706
+
707
+ /***/ }),
708
+
709
+ /***/ "addsearch-js-client":
710
+ /*!*************************************************************************************!*\
711
+ !*** external {"commonjs":"addsearch-js-client","commonjs2":"addsearch-js-client"} ***!
712
+ \*************************************************************************************/
713
+ /***/ ((module) => {
714
+
715
+ module.exports = __WEBPACK_EXTERNAL_MODULE_addsearch_js_client__;
716
+
717
+ /***/ }),
718
+
719
+ /***/ "lodash.throttle":
720
+ /*!*****************************************************************************!*\
721
+ !*** external {"commonjs":"lodash.throttle","commonjs2":"lodash.throttle"} ***!
722
+ \*****************************************************************************/
723
+ /***/ ((module) => {
724
+
725
+ module.exports = __WEBPACK_EXTERNAL_MODULE_lodash_throttle__;
726
+
727
+ /***/ }),
728
+
729
+ /***/ "scroll-lock":
730
+ /*!*********************************************************************!*\
731
+ !*** external {"commonjs":"scroll-lock","commonjs2":"scroll-lock"} ***!
732
+ \*********************************************************************/
733
+ /***/ ((module) => {
734
+
735
+ module.exports = __WEBPACK_EXTERNAL_MODULE_scroll_lock__;
736
+
737
+ /***/ })
738
+
739
+ /******/ });
740
+ /************************************************************************/
741
+ /******/ // The module cache
742
+ /******/ var __webpack_module_cache__ = {};
743
+ /******/
744
+ /******/ // The require function
745
+ /******/ function __webpack_require__(moduleId) {
746
+ /******/ // Check if module is in cache
747
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
748
+ /******/ if (cachedModule !== undefined) {
749
+ /******/ return cachedModule.exports;
750
+ /******/ }
751
+ /******/ // Create a new module (and put it into the cache)
752
+ /******/ var module = __webpack_module_cache__[moduleId] = {
753
+ /******/ // no module.id needed
754
+ /******/ // no module.loaded needed
755
+ /******/ exports: {}
756
+ /******/ };
757
+ /******/
758
+ /******/ // Execute the module function
759
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
760
+ /******/
761
+ /******/ // Return the exports of the module
762
+ /******/ return module.exports;
763
+ /******/ }
764
+ /******/
765
+ /************************************************************************/
766
+ /******/ /* webpack/runtime/compat get default export */
767
+ /******/ (() => {
768
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
769
+ /******/ __webpack_require__.n = (module) => {
770
+ /******/ var getter = module && module.__esModule ?
771
+ /******/ () => (module['default']) :
772
+ /******/ () => (module);
773
+ /******/ __webpack_require__.d(getter, { a: getter });
774
+ /******/ return getter;
775
+ /******/ };
776
+ /******/ })();
777
+ /******/
778
+ /******/ /* webpack/runtime/define property getters */
779
+ /******/ (() => {
780
+ /******/ // define getter functions for harmony exports
781
+ /******/ __webpack_require__.d = (exports, definition) => {
782
+ /******/ for(var key in definition) {
783
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
784
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
785
+ /******/ }
786
+ /******/ }
787
+ /******/ };
788
+ /******/ })();
789
+ /******/
790
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
791
+ /******/ (() => {
792
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
793
+ /******/ })();
794
+ /******/
795
+ /******/ /* webpack/runtime/make namespace object */
796
+ /******/ (() => {
797
+ /******/ // define __esModule on exports
798
+ /******/ __webpack_require__.r = (exports) => {
799
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
800
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
801
+ /******/ }
802
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
803
+ /******/ };
804
+ /******/ })();
805
+ /******/
806
+ /************************************************************************/
807
+ var __webpack_exports__ = {};
808
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
809
+ (() => {
810
+ /*!***************************************!*\
811
+ !*** ./src/core/Meganav/component.js ***!
812
+ \***************************************/
813
+ __webpack_require__.r(__webpack_exports__);
814
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
815
+ /* harmony export */ "default": () => (/* binding */ Meganav)
816
+ /* harmony export */ });
817
+ /* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash.throttle */ "lodash.throttle");
818
+ /* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_throttle__WEBPACK_IMPORTED_MODULE_0__);
819
+ /* harmony import */ var _component_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./component.css */ "./src/core/Meganav/component.css");
820
+ /* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
821
+ /* harmony import */ var _MeganavControl_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../MeganavControl/component */ "./src/core/MeganavControl/component.js");
822
+ /* harmony import */ var _MeganavControlMobileDropdown_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../MeganavControlMobileDropdown/component */ "./src/core/MeganavControlMobileDropdown/component.js");
823
+ /* harmony import */ var _MeganavControlMobilePanelOpen_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../MeganavControlMobilePanelOpen/component */ "./src/core/MeganavControlMobilePanelOpen/component.js");
824
+ /* harmony import */ var _MeganavControlMobilePanelClose_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MeganavControlMobilePanelClose/component */ "./src/core/MeganavControlMobilePanelClose/component.js");
825
+ /* harmony import */ var _MeganavSearchAutocomplete_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../MeganavSearchAutocomplete/component */ "./src/core/MeganavSearchAutocomplete/component.js");
826
+ /* harmony import */ var _MeganavSearchSuggestions_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../MeganavSearchSuggestions/component */ "./src/core/MeganavSearchSuggestions/component.js");
827
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
828
+
829
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
830
+
831
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
832
+
833
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
834
+
835
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
836
+
837
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
838
+
839
+
840
+ // Glossary:
841
+ // item - is the element which contains both the control and the panel - these are adjacent
842
+ // control - interactive element that controls showing and hiding of dropdown or panel
843
+ // panel - container for meganav content
844
+ // dropdown - container for top level items on mobile
845
+ // clear - return to initial state
846
+ // teardown - remove all event listeners (for example when removing nodes)
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+ // Close menu when user clicks outside of viewport
855
+
856
+ var windowOnBlur = function windowOnBlur(closeAll) {
857
+ window.onblur = function () {
858
+ return closeAll();
859
+ };
860
+
861
+ return {
862
+ teardown: function teardown() {
863
+ return window.onblur = null;
864
+ }
865
+ };
866
+ }; // Close menu when click/tap outside of nav
867
+
868
+
869
+ var documentClick = function documentClick(closeAll) {
870
+ var meganav = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav");
871
+
872
+ var clickHandler = function clickHandler(e) {
873
+ if (meganav.contains(e.target)) return;
874
+ closeAll();
875
+ };
876
+
877
+ document.addEventListener("click", clickHandler);
878
+ return {
879
+ teardown: function teardown() {
880
+ return document.removeEventListener("click", clickHandler);
881
+ }
882
+ };
883
+ }; // Invert from transparent to white
884
+
885
+
886
+ var documentScroll = function documentScroll(themeName) {
887
+ if (themeName !== "transparentToWhite") return {
888
+ teardown: function teardown() {}
889
+ };
890
+ var meganav = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav");
891
+ var navItems = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryIdAll)("meganav-link");
892
+ var controlMobileDropdownMenu = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-control-mobile-dropdown-menu");
893
+ var controlMobileDropdownClose = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-control-mobile-dropdown-close");
894
+ var controls = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryIdAll)("meganav-control");
895
+ var signUpBtn = (0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-sign-up-btn");
896
+ var invertTextCollection = [].concat(_toConsumableArray(Array.from(controls)), _toConsumableArray(Array.from(navItems)), [(0,_dom_query__WEBPACK_IMPORTED_MODULE_2__.queryId)("meganav-logo")]);
897
+
898
+ var invertMobleDropdownColor = function invertMobleDropdownColor(invert) {
899
+ var whiteToBlack = ["ui-icon-white", "ui-icon-cool-black"];
900
+ var blackToWhite = [].concat(whiteToBlack).reverse();
901
+
902
+ if (invert) {
903
+ var _controlMobileDropdow, _controlMobileDropdow2;
904
+
905
+ controlMobileDropdownMenu === null || controlMobileDropdownMenu === void 0 ? void 0 : (_controlMobileDropdow = controlMobileDropdownMenu.classList).replace.apply(_controlMobileDropdow, whiteToBlack);
906
+ controlMobileDropdownClose === null || controlMobileDropdownClose === void 0 ? void 0 : (_controlMobileDropdow2 = controlMobileDropdownClose.classList).replace.apply(_controlMobileDropdow2, whiteToBlack);
907
+ } else {
908
+ var _controlMobileDropdow3, _controlMobileDropdow4;
909
+
910
+ controlMobileDropdownMenu === null || controlMobileDropdownMenu === void 0 ? void 0 : (_controlMobileDropdow3 = controlMobileDropdownMenu.classList).replace.apply(_controlMobileDropdow3, _toConsumableArray(blackToWhite));
911
+ controlMobileDropdownClose === null || controlMobileDropdownClose === void 0 ? void 0 : (_controlMobileDropdow4 = controlMobileDropdownClose.classList).replace.apply(_controlMobileDropdow4, _toConsumableArray(blackToWhite));
912
+ }
913
+ };
914
+
915
+ var inverSignupBtnColors = function inverSignupBtnColors(invert) {
916
+ if (invert) {
917
+ signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("bg-white", "bg-cool-black");
918
+ signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("text-cool-black", "text-white");
919
+ } else {
920
+ signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("bg-cool-black", "bg-white");
921
+ signUpBtn === null || signUpBtn === void 0 ? void 0 : signUpBtn.classList.replace("text-white", "text-cool-black");
922
+ }
923
+ };
924
+
925
+ var scrollHandler = lodash_throttle__WEBPACK_IMPORTED_MODULE_0___default()(function () {
926
+ if (window.scrollY > 5) {
927
+ meganav.classList.replace("bg-transparent", "bg-white");
928
+ inverSignupBtnColors(true);
929
+ invertMobleDropdownColor(true);
930
+ invertTextCollection.forEach(function (n) {
931
+ return n.classList.replace("text-white", "text-cool-black");
932
+ });
933
+ } else {
934
+ meganav.classList.replace("bg-white", "bg-transparent");
935
+ inverSignupBtnColors(false);
936
+ invertMobleDropdownColor(false);
937
+ invertTextCollection.forEach(function (n) {
938
+ return n.classList.replace("text-cool-black", "text-white");
939
+ });
940
+ }
941
+ }, 150);
942
+ document.addEventListener("scroll", scrollHandler);
943
+ return {
944
+ teardown: function teardown() {
945
+ return document.removeEventListener("scroll", scrollHandler);
946
+ }
947
+ };
948
+ };
949
+
950
+ function Meganav() {
951
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
952
+ themeName: null
953
+ },
954
+ themeName = _ref.themeName,
955
+ addSearchApiKey = _ref.addSearchApiKey;
956
+
957
+ var controls = (0,_MeganavControl_component__WEBPACK_IMPORTED_MODULE_3__["default"])();
958
+ var panelOpenControls = (0,_MeganavControlMobilePanelOpen_component__WEBPACK_IMPORTED_MODULE_5__["default"])();
959
+ var panelCloseControls = (0,_MeganavControlMobilePanelClose_component__WEBPACK_IMPORTED_MODULE_6__["default"])();
960
+ var search = (0,_MeganavSearchAutocomplete_component__WEBPACK_IMPORTED_MODULE_7__["default"])(addSearchApiKey);
961
+ var searchSuggestions = (0,_MeganavSearchSuggestions_component__WEBPACK_IMPORTED_MODULE_8__["default"])();
962
+ var mobileDropdownControl = (0,_MeganavControlMobileDropdown_component__WEBPACK_IMPORTED_MODULE_4__["default"])({
963
+ clearPanels: function clearPanels() {
964
+ return [].concat(_toConsumableArray(panelOpenControls), _toConsumableArray(panelCloseControls)).forEach(function (i) {
965
+ return i.clear();
966
+ });
967
+ }
968
+ });
969
+
970
+ var closeAll = function closeAll() {
971
+ return [mobileDropdownControl, searchSuggestions].concat(_toConsumableArray(panelOpenControls), _toConsumableArray(panelCloseControls), _toConsumableArray(controls), _toConsumableArray(search)).forEach(function (i) {
972
+ return i.clear();
973
+ });
974
+ };
975
+
976
+ var teardowns = [documentScroll(themeName), documentClick(closeAll), windowOnBlur(closeAll), mobileDropdownControl, searchSuggestions].concat(_toConsumableArray(controls), _toConsumableArray(panelOpenControls), _toConsumableArray(panelCloseControls), _toConsumableArray(search)).map(function (i) {
977
+ return i.teardown;
978
+ });
979
+ return function () {
980
+ return teardowns.forEach(function (teardown) {
981
+ return teardown();
982
+ });
983
+ };
984
+ }
985
+ })();
986
+
987
+ __webpack_exports__ = __webpack_exports__["default"];
988
+ /******/ return __webpack_exports__;
989
+ /******/ })()
990
+ ;
991
+ });
992
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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bHlVaS5Db3JlL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZDb250cm9sL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd24vY29tcG9uZW50LmpzIiwid2VicGFjazovL0FibHlVaS5Db3JlLy4vc3JjL2NvcmUvTWVnYW5hdkNvbnRyb2xNb2JpbGVQYW5lbENsb3NlL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZDb250cm9sTW9iaWxlUGFuZWxPcGVuL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXZTZWFyY2hBdXRvY29tcGxldGUvY29tcG9uZW50LmpzIiwid2VicGFjazovL0FibHlVaS5Db3JlLy4vc3JjL2NvcmUvTWVnYW5hdlNlYXJjaFN1Z2dlc3Rpb25zL2NvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL2Nzcy5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL2RvbS1xdWVyeS5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL01lZ2FuYXYvY29tcG9uZW50LmNzcz8wYzY1Iiwid2VicGFjazovL0FibHlVaS5Db3JlL2V4dGVybmFsIHVtZCB7XCJjb21tb25qc1wiOlwiYWRkc2VhcmNoLWpzLWNsaWVudFwiLFwiY29tbW9uanMyXCI6XCJhZGRzZWFyY2gtanMtY2xpZW50XCJ9Iiwid2VicGFjazovL0FibHlVaS5Db3JlL2V4dGVybmFsIHVtZCB7XCJjb21tb25qc1wiOlwibG9kYXNoLnRocm90dGxlXCIsXCJjb21tb25qczJcIjpcImxvZGFzaC50aHJvdHRsZVwifSIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS9leHRlcm5hbCB1bWQge1wiY29tbW9uanNcIjpcInNjcm9sbC1sb2NrXCIsXCJjb21tb25qczJcIjpcInNjcm9sbC1sb2NrXCJ9Iiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvLi9zcmMvY29yZS9NZWdhbmF2L2NvbXBvbmVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJhZGRzZWFyY2gtanMtY2xpZW50XCIpLCByZXF1aXJlKFwibG9kYXNoLnRocm90dGxlXCIpLCByZXF1aXJlKFwic2Nyb2xsLWxvY2tcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoWywgLCBdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkFibHlVaVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImFkZHNlYXJjaC1qcy1jbGllbnRcIiksIHJlcXVpcmUoXCJsb2Rhc2gudGhyb3R0bGVcIiksIHJlcXVpcmUoXCJzY3JvbGwtbG9ja1wiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiQWJseVVpXCJdID0gcm9vdFtcIkFibHlVaVwiXSB8fCB7fSwgcm9vdFtcIkFibHlVaVwiXVtcIkNvcmVcIl0gPSByb290W1wiQWJseVVpXCJdW1wiQ29yZVwiXSB8fCB7fSwgcm9vdFtcIkFibHlVaVwiXVtcIkNvcmVcIl1bXCJNZWdhbmF2XCJdID0gZmFjdG9yeShyb290W3VuZGVmaW5lZF0sIHJvb3RbdW5kZWZpbmVkXSwgcm9vdFt1bmRlZmluZWRdKTtcbn0pKHRoaXMsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2FkZHNlYXJjaF9qc19jbGllbnRfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9sb2Rhc2hfdGhyb3R0bGVfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9zY3JvbGxfbG9ja19fKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgcXVlcnlJZCwgcXVlcnlJZEFsbCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcblxuY29uc3QgTWVnYW5hdkNvbnRyb2wgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRyb2xzID0gQXJyYXkuZnJvbShxdWVyeUlkQWxsKFwibWVnYW5hdi1jb250cm9sXCIpKTtcbiAgY29uc3QgcGFuZWxzID0gQXJyYXkuZnJvbShxdWVyeUlkQWxsKFwibWVnYW5hdi1wYW5lbFwiKSk7XG4gIGNvbnN0IG1kQnJlYWtwb2ludCA9IGdldENvbXB1dGVkU3R5bGUoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tYnAtbWRcIik7XG5cbiAgY29uc3QgaG92ZXJFbmFibGVkID0gKCkgPT5cbiAgICB3aW5kb3cubWF0Y2hNZWRpYShcbiAgICAgIGAoaG92ZXI6IGhvdmVyKSBhbmQgKHBvaW50ZXI6IGZpbmUpIGFuZCAobWluLXdpZHRoOiAke21kQnJlYWtwb2ludH0pYFxuICAgICkubWF0Y2hlcztcblxuICBjb25zdCBpc1NlYXJjaENvbnRyb2wgPSAobm9kZSkgPT4gbm9kZS5kYXRhc2V0LmNvbnRyb2wgPT09IFwic2VhcmNoXCI7XG5cbiAgY29uc3QgaXNTZWFyY2hQYW5lbE9wZW4gPSAoKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoUGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ1tkYXRhLWlkPVwibWVnYW5hdi1wYW5lbFwiXSNwYW5lbC1zZWFyY2gnXG4gICAgKTtcbiAgICBpZiAoIXNlYXJjaFBhbmVsKSByZXR1cm47XG4gICAgcmV0dXJuICFzZWFyY2hQYW5lbC5jbGFzc0xpc3QuY29udGFpbnMoXCJpbnZpc2libGVcIik7XG4gIH07XG5cbiAgY29uc3QgY29udHJvbHNIYXZlRm9jdXMgPSAoKSA9PlxuICAgIGNvbnRyb2xzLnNvbWUoKGNvbnRyb2wpID0+IGNvbnRyb2wgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gIGNvbnN0IGhvdmVyID0gKGNvbnRyb2wsIHBhbmVsLCBvcGVuKSA9PiB7XG4gICAgaWYgKGhvdmVyRW5hYmxlZCgpICYmICFjb250cm9sc0hhdmVGb2N1cygpICYmICFpc1NlYXJjaFBhbmVsT3BlbigpKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0gW1wiaW52aXNpYmxlXCIsIFwidmlzaWJsZVwiXTtcbiAgICAgIHBhbmVsLmNsYXNzTGlzdC5yZXBsYWNlKC4uLihvcGVuID8gY2xhc3NlcyA6IGNsYXNzZXMucmV2ZXJzZSgpKSk7XG4gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgb3Blbik7XG4gICAgICBjb250cm9sLmRhdGFzZXQuaG92ZXIgPSBvcGVuO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBtb3VzZWVudGVySGFuZGxlciA9IChjb250cm9sLCBwYW5lbCkgPT4gKCkgPT5cbiAgICBob3Zlcihjb250cm9sLCBwYW5lbCwgdHJ1ZSk7XG5cbiAgY29uc3QgbW91c2VsZWF2ZUhhbmRsZXIgPSAoY29udHJvbCwgcGFuZWwpID0+ICgpID0+XG4gICAgaG92ZXIoY29udHJvbCwgcGFuZWwsIGZhbHNlKTtcblxuICBjb25zdCBjbGlja0hhbmRsZXIgPSAoY29udHJvbCwgcGFuZWwpID0+ICgpID0+IHtcbiAgICBjb250cm9scy5mb3JFYWNoKFxuICAgICAgKG5vZGUpID0+IG5vZGUgIT09IGNvbnRyb2wgJiYgbm9kZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsIGZhbHNlKVxuICAgICk7XG5cbiAgICBwYW5lbHMuZm9yRWFjaChcbiAgICAgIChub2RlKSA9PiBub2RlICE9PSBwYW5lbCAmJiBub2RlLmNsYXNzTGlzdC5yZXBsYWNlKFwidmlzaWJsZVwiLCBcImludmlzaWJsZVwiKVxuICAgICk7XG5cbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBjb250cm9sLmdldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIik7XG5cbiAgICAvLyBQcmV2ZW50IGNsb3Npbmcgb2YgdGhlIHBhbmVsIGlmIGl0IHdhcyBhbHJlYWR5IG9wZW5lZCBieSBob3ZlcmluZ1xuICAgIGNvbnN0IG9wZW5lZEJ5SG92ZXIgPSBjb250cm9sLmRhdGFzZXQuaG92ZXIgPT09IFwidHJ1ZVwiO1xuXG4gICAgaWYgKGFyaWFFeHBhbmRlZCA9PT0gXCJ0cnVlXCIgJiYgIW9wZW5lZEJ5SG92ZXIpIHtcbiAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcInZpc2libGVcIiwgXCJpbnZpc2libGVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCB0cnVlKTtcbiAgICAgIHBhbmVsLmNsYXNzTGlzdC5yZXBsYWNlKFwiaW52aXNpYmxlXCIsIFwidmlzaWJsZVwiKTtcbiAgICB9XG5cbiAgICBpZiAob3BlbmVkQnlIb3Zlcikge1xuICAgICAgY29udHJvbC5kYXRhc2V0LmhvdmVyID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlzU2VhcmNoQ29udHJvbChjb250cm9sKSkge1xuICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPSBxdWVyeUlkKFwibWVnYW5hdi1zZWFyY2gtaW5wdXRcIiwgcGFuZWwpO1xuICAgICAgaWYgKCFzZWFyY2hJbnB1dCkgcmV0dXJuO1xuICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udHJvbC5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gY29udHJvbHNcbiAgICAubWFwKChjb250cm9sKSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gY29udHJvbC5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICBgIyR7Y29udHJvbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbnRyb2xzXCIpfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBjbGljayA9IGNsaWNrSGFuZGxlcihjb250cm9sLCBwYW5lbCk7XG4gICAgICBjb250cm9sLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGljayk7XG4gICAgICBsZXQgbW91c2VlbnRlciwgbW91c2VsZWF2ZTtcblxuICAgICAgaWYgKCFpc1NlYXJjaENvbnRyb2woY29udHJvbCkpIHtcbiAgICAgICAgbW91c2VlbnRlciA9IG1vdXNlZW50ZXJIYW5kbGVyKGNvbnRyb2wsIHBhbmVsKTtcbiAgICAgICAgbW91c2VsZWF2ZSA9IG1vdXNlbGVhdmVIYW5kbGVyKGNvbnRyb2wsIHBhbmVsKTtcblxuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIG1vdXNlZW50ZXIpO1xuICAgICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsIG1vdXNlbGVhdmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGVhcmRvd246ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChtb3VzZWVudGVyICYmIG1vdXNlbGVhdmUpIHtcbiAgICAgICAgICAgICAgaXRlbS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCBtb3VzZWVudGVyKTtcbiAgICAgICAgICAgICAgaXRlbS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCBtb3VzZWxlYXZlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udHJvbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2xpY2spO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xlYXI6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICAgICAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcInZpc2libGVcIiwgXCJpbnZpc2libGVcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgICAuZmxhdCgpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTWVnYW5hdkNvbnRyb2w7XG4iLCJpbXBvcnQgc2Nyb2xsTG9jayBmcm9tIFwic2Nyb2xsLWxvY2tcIjtcblxuaW1wb3J0IHsgcXVlcnlJZCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcblxuY29uc3QgTWVnYW5hdkNvbnRyb2xNb2JpbGVEcm9wZG93biA9ICh7IGNsZWFyUGFuZWxzIH0pID0+IHtcbiAgY29uc3QgY29udHJvbCA9IHF1ZXJ5SWQoXCJtZWdhbmF2LWNvbnRyb2wtbW9iaWxlLWRyb3Bkb3duXCIpO1xuICBjb25zdCBkcm9wZG93biA9IHF1ZXJ5SWQoXCJtZWdhbmF2LW1vYmlsZS1kcm9wZG93blwiKTtcbiAgY29uc3QgbWVudUljb24gPSBxdWVyeUlkKFwibWVnYW5hdi1jb250cm9sLW1vYmlsZS1kcm9wZG93bi1tZW51XCIpO1xuICBjb25zdCBjbG9zZUljb24gPSBxdWVyeUlkKFwibWVnYW5hdi1jb250cm9sLW1vYmlsZS1kcm9wZG93bi1jbG9zZVwiKTtcblxuICBjb25zdCBjbGlja0hhbmRsZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYXJpYUV4cGFuZGVkID0gY29udHJvbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIpO1xuXG4gICAgaWYgKGFyaWFFeHBhbmRlZCA9PT0gXCJmYWxzZVwiKSB7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVwbGFjZShcImludmlzaWJsZVwiLCBcInZpc2libGVcIik7XG4gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgdHJ1ZSk7XG4gICAgICBzY3JvbGxMb2NrLmRpc2FibGVQYWdlU2Nyb2xsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZXBsYWNlKFwidmlzaWJsZVwiLCBcImludmlzaWJsZVwiKTtcbiAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICBzY3JvbGxMb2NrLmVuYWJsZVBhZ2VTY3JvbGwoKTtcbiAgICAgIGNsZWFyUGFuZWxzKCk7XG4gICAgfVxuXG4gICAgbWVudUljb24uY2xhc3NMaXN0LnRvZ2dsZShcImhpZGRlblwiKTtcbiAgICBjbG9zZUljb24uY2xhc3NMaXN0LnRvZ2dsZShcImhpZGRlblwiKTtcbiAgfTtcblxuICBjb250cm9sLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGlja0hhbmRsZXIpO1xuXG4gIHJldHVybiB7XG4gICAgdGVhcmRvd246ICgpID0+IHtcbiAgICAgIGNvbnRyb2wucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlcik7XG4gICAgICBzY3JvbGxMb2NrLmVuYWJsZVBhZ2VTY3JvbGwoKTtcbiAgICB9LFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVwbGFjZShcInZpc2libGVcIiwgXCJpbnZpc2libGVcIik7XG4gICAgICBjb250cm9sLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgZmFsc2UpO1xuICAgICAgbWVudUljb24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbiAgICAgIGNsb3NlSWNvbi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuICAgICAgc2Nyb2xsTG9jay5lbmFibGVQYWdlU2Nyb2xsKCk7XG4gICAgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd247XG4iLCJpbXBvcnQgeyBxdWVyeUlkQWxsIH0gZnJvbSBcIi4uL2RvbS1xdWVyeVwiO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0IGNsb3NlQ29udHJvbHMgPSBBcnJheS5mcm9tKFxuICAgIHF1ZXJ5SWRBbGwoXCJtZWdhbmF2LWNvbnRyb2wtbW9iaWxlLXBhbmVsLWNsb3NlXCIpXG4gICk7XG4gIGNvbnN0IG9wZW5Db250cm9scyA9IEFycmF5LmZyb20oXG4gICAgcXVlcnlJZEFsbChcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtcGFuZWwtb3BlblwiKVxuICApO1xuXG4gIGNvbnN0IGNsaWNrSGFuZGxlciA9IChidG4sIG9wZW5CdG4sIHBhbmVsKSA9PiAoKSA9PiB7XG4gICAgYnRuLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgZmFsc2UpO1xuICAgIG9wZW5CdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgcGFuZWwuY2xhc3NMaXN0LnJlcGxhY2UoXCJibG9ja1wiLCBcImhpZGRlblwiKTtcbiAgICBwYW5lbC5zdHlsZS5oZWlnaHQgPSBudWxsO1xuICB9O1xuXG4gIHJldHVybiBjbG9zZUNvbnRyb2xzLm1hcCgoYnRuKSA9PiB7XG4gICAgY29uc3Qgb3BlbkJ0biA9IG9wZW5Db250cm9scy5maW5kKFxuICAgICAgKG9wZW4pID0+XG4gICAgICAgIG9wZW4uZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKSA9PT0gYnRuLmdldEF0dHJpYnV0ZShcImFyaWEtY29udHJvbHNcIilcbiAgICApO1xuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAjJHtidG4uZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKX1gXG4gICAgKTtcbiAgICBjb25zdCBoYW5kbGVyID0gY2xpY2tIYW5kbGVyKGJ0biwgb3BlbkJ0biwgcGFuZWwpO1xuXG4gICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZWFyZG93bjogKCkgPT4gYnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVyKSxcbiAgICAgIGNsZWFyOiAoKSA9PiBidG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSksXG4gICAgfTtcbiAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcXVlcnlJZCwgcXVlcnlJZEFsbCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcbmltcG9ydCB7IHJlbXNUb1BpeGVsVmFsdWUgfSBmcm9tIFwiLi4vY3NzXCI7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgY2xvc2VDb250cm9scyA9IEFycmF5LmZyb20oXG4gICAgcXVlcnlJZEFsbChcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtcGFuZWwtY2xvc2VcIilcbiAgKTtcbiAgY29uc3Qgb3BlbkNvbnRyb2xzID0gQXJyYXkuZnJvbShcbiAgICBxdWVyeUlkQWxsKFwibWVnYW5hdi1jb250cm9sLW1vYmlsZS1wYW5lbC1vcGVuXCIpXG4gICk7XG4gIGNvbnN0IGRyb3Bkb3duID0gcXVlcnlJZChcIm1lZ2FuYXYtbW9iaWxlLWRyb3Bkb3duXCIpO1xuXG4gIC8vIEhlaWdodCBpcyBkZWZpbmVkIGluIHJlbSdzIHNvIHRvIGdldCB0aGUgcGl4ZWwgdmFsdWUgd2UgbmVlZCB0byBmaW5kIHRoZSBmb250U2l6ZSBvbiByb290XG4gIGNvbnN0IG1lZ2FuYXZIZWlnaHQgPSByZW1zVG9QaXhlbFZhbHVlKFxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKFxuICAgICAgXCItLXVpLW1lZ2FuYXYtaGVpZ2h0XCJcbiAgICApXG4gICk7XG5cbiAgY29uc3QgY2xpY2tIYW5kbGVyID0gKGJ0biwgY2xvc2VCdG4sIHBhbmVsKSA9PiAoKSA9PiB7XG4gICAgYnRuLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwgdHJ1ZSk7XG4gICAgY2xvc2VCdG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCB0cnVlKTtcbiAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcImhpZGRlblwiLCBcImJsb2NrXCIpO1xuXG4gICAgLy8gT24gZGV2aWNlcyB3aGVyZSB3ZSBkb24ndCBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHBhbmVsLCBzZXQgaXQncyBoZWlnaHQgdG9cbiAgICAvLyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCAobWludXMgdGhlIG1lZ2FuYXYgaGVpZ2h0KSAtIHRoaXMgd2lsbCB0cmlnZ2VyIGEgc2Nyb2xsLlxuICAgIC8vIE90aGVyd2lzZSBqdXN0IHNldCBpdCB0byB0aGUgcGFuZWwgaGVpZ2h0LiBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIHJhdGlvIG9mIHZlcnRpY2FsXG4gICAgLy8gc3BhY2UgdG8gaG9yaXpvbnRhbCBpcyBlc3BlY2lhbGx5IGhpZ2ggKHRoaW5rIHRhYmxldHMsIGJ1dCBub3Qgb25seSkuXG4gICAgcGFuZWwuc3R5bGUuaGVpZ2h0ID0gYCR7XG4gICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgLSBtZWdhbmF2SGVpZ2h0ID4gcGFuZWwub2Zmc2V0SGVpZ2h0XG4gICAgICAgID8gcGFuZWwub2Zmc2V0SGVpZ2h0XG4gICAgICAgIDogd2luZG93LmlubmVySGVpZ2h0IC0gbWVnYW5hdkhlaWdodFxuICAgIH1weGA7XG4gIH07XG5cbiAgcmV0dXJuIG9wZW5Db250cm9scy5tYXAoKGJ0bikgPT4ge1xuICAgIGNvbnN0IGNsb3NlQnRuID0gY2xvc2VDb250cm9scy5maW5kKFxuICAgICAgKG5vZGUpID0+XG4gICAgICAgIG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKSA9PT0gYnRuLmdldEF0dHJpYnV0ZShcImFyaWEtY29udHJvbHNcIilcbiAgICApO1xuICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgIGAjJHtidG4uZ2V0QXR0cmlidXRlKFwiYXJpYS1jb250cm9sc1wiKX1gXG4gICAgKTtcbiAgICBjb25zdCBoYW5kbGVyID0gY2xpY2tIYW5kbGVyKGJ0biwgY2xvc2VCdG4sIHBhbmVsKTtcblxuICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVhcmRvd246ICgpID0+IGJ0bi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlciksXG4gICAgICBjbGVhcjogKCkgPT4ge1xuICAgICAgICBwYW5lbC5jbGFzc0xpc3QucmVwbGFjZShcImJsb2NrXCIsIFwiaGlkZGVuXCIpO1xuICAgICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKFwidWktbWVnYW5hdi1tb2JpbGUtZHJvcGRvd24tZXhwYW5kXCIpO1xuICAgICAgICBidG4uc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCBmYWxzZSk7XG4gICAgICAgIHBhbmVsLnN0eWxlLmhlaWdodCA9IG51bGw7XG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xufTtcbiIsImltcG9ydCB7IHF1ZXJ5SWQgfSBmcm9tIFwiLi4vZG9tLXF1ZXJ5XCI7XG5pbXBvcnQgQWRkU2VhcmNoQ2xpZW50IGZyb20gXCJhZGRzZWFyY2gtanMtY2xpZW50XCI7XG5cbmNvbnN0IGluaXQgPSAoeyBpbnB1dCwgY29udGFpbmVyLCBsaXN0Q29udGFpbmVyLCBjbGVhciwgY2xpZW50IH0pID0+IHtcbiAgY2xpZW50LnNldEFuYWx5dGljc1RhZyhcIk1lZ2FuYXYgYXV0b2NvbXBsZXRlXCIpO1xuICBjbGllbnQuc2V0VGhyb3R0bGVUaW1lKDQwMCk7XG5cbiAgY29uc3QgY2xlYXJSZXN1bHRzID0gKCkgPT4ge1xuICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuICAgIGxpc3RDb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgfTtcblxuICBjb25zdCB0b2dnbGVDbGVhckJ0biA9IChxdWVyeSkgPT4ge1xuICAgIGlmICgocXVlcnkgfHwgXCJcIikubGVuZ3RoID4gMCAmJiBjbGVhcikge1xuICAgICAgY2xlYXIuY2xhc3NMaXN0LnJlbW92ZShcImludmlzaWJsZVwiKTtcbiAgICB9IGVsc2UgaWYgKGNsZWFyKSB7XG4gICAgICBjbGVhci5jbGFzc0xpc3QuYWRkKFwiaW52aXNpYmxlXCIpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBtYXJrUXVlcnlJblN1Z2dlc3Rpb24gPSAoc3VnZ2VzdGlvblZhbHVlLCBxdWVyeSkgPT4ge1xuICAgIHJldHVybiBzdWdnZXN0aW9uVmFsdWUucmVwbGFjZShcbiAgICAgIHF1ZXJ5LnRvTG93ZXJDYXNlKCksXG4gICAgICBgPHNwYW4gY2xhc3M9XCJmb250LWxpZ2h0XCI+JHtxdWVyeX08L3NwYW4+YFxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgbmF2aWdhdGVUb1VybCA9IChxKSA9PiAod2luZG93LmxvY2F0aW9uID0gYC9zZWFyY2g/cT0ke3F9YCk7XG5cbiAgY29uc3QgZm9jdXNOZXh0ID0gKGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmV4dFN1Z2dlc3Rpb24gPSBsaXN0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgW2RhdGEtc3VnZ2VzdGlvbi1pbmRleD1cIiR7aW5kZXggKyAxfVwiXWBcbiAgICApO1xuICAgIGlmICghbmV4dFN1Z2dlc3Rpb24pIHJldHVybjtcbiAgICBuZXh0U3VnZ2VzdGlvbi5mb2N1cygpO1xuICB9O1xuXG4gIGNvbnN0IGZvY3VzUHJldmlvdXMgPSAoaW5kZXgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0luZGV4ID0gaW5kZXggLSAxO1xuXG4gICAgY29uc3QgcHJldmlvdXNTdWdnZXN0aW9uID0gbGlzdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxuICAgICAgYFtkYXRhLXN1Z2dlc3Rpb24taW5kZXg9XCIke3ByZXZpb3VzSW5kZXh9XCJdYFxuICAgICk7XG4gICAgaWYgKCFwcmV2aW91c1N1Z2dlc3Rpb24pIHJldHVybjtcbiAgICBwcmV2aW91c1N1Z2dlc3Rpb24uZm9jdXMoKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJSZXN1bHRzID1cbiAgICAocXVlcnkpID0+XG4gICAgKHJlc3VsdHMgPSB7fSkgPT4ge1xuICAgICAgdG9nZ2xlQ2xlYXJCdG4ocXVlcnkpO1xuXG4gICAgICAvLyBQcmV2ZW50IGludmFsaWQgYWNjZXNzIGVycm9yIHdoZW4ga2V5IGlzIGludmFsaWRcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICBjbGVhclJlc3VsdHMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBQcmV2ZW50IGtleSBlcnJvciBmcm9tIGludmFsaWQga2V5XG4gICAgICBpZiAocmVzdWx0cy5zdWdnZXN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYXJSZXN1bHRzKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXRlbXMgPSByZXN1bHRzLnN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlcIik7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XG4gICAgICAgIGJ1dHRvbi50eXBlID0gXCJidXR0b25cIjtcblxuICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZChcbiAgICAgICAgICBcInVpLXRleHQtbWVudTJcIixcbiAgICAgICAgICBcImZvbnQtbWVkaXVtXCIsXG4gICAgICAgICAgXCJwLThcIixcbiAgICAgICAgICBcInctZnVsbFwiLFxuICAgICAgICAgIFwidGV4dC1sZWZ0XCIsXG4gICAgICAgICAgXCJyb3VuZGVkXCIsXG4gICAgICAgICAgXCJob3Zlcjp0ZXh0LWd1aS1ob3ZlclwiLFxuICAgICAgICAgIFwiZm9jdXM6b3V0bGluZS1ndWktZm9jdXNcIixcbiAgICAgICAgICBcImhvdmVyOmJnLWxpZ2h0LWdyZXlcIlxuICAgICAgICApO1xuXG4gICAgICAgIGJ1dHRvbi5pbm5lckhUTUwgPSBtYXJrUXVlcnlJblN1Z2dlc3Rpb24oc3VnZ2VzdGlvbi52YWx1ZSwgcXVlcnkpO1xuXG4gICAgICAgIGJ1dHRvbi5kYXRhc2V0LnN1Z2dlc3Rpb25JbmRleCA9IGluZGV4O1xuXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgIG5hdmlnYXRlVG9Vcmwoc3VnZ2VzdGlvbi52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGUua2V5O1xuXG4gICAgICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikge1xuICAgICAgICAgICAgZm9jdXNOZXh0KGluZGV4KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgJiYgaW5kZXggLSAxIDwgMCkge1xuICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgJiYgaW5kZXggLSAxID49IDApIHtcbiAgICAgICAgICAgIGZvY3VzUHJldmlvdXMoaW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcIkVudGVyXCIgfHwga2V5ID09PSBcIlNwYWNlXCIpIHtcbiAgICAgICAgICAgIG5hdmlnYXRlVG9Vcmwoc3VnZ2VzdGlvbi52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsaS5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgICAgICByZXR1cm4gbGk7XG4gICAgICB9KTtcblxuICAgICAgbGlzdENvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gbGlzdENvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKSk7XG4gICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbiAgICB9O1xuXG4gIGNvbnN0IGtleXVwSGFuZGxlciA9IChlKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBlLmtleTtcblxuICAgIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcbiAgICAgIGZvY3VzTmV4dCgwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICBjbGVhclJlc3VsdHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xpZW50LnN1Z2dlc3Rpb25zKHF1ZXJ5LCByZW5kZXJSZXN1bHRzKHF1ZXJ5KSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCBjbGVhckhhbmRsZXI7XG4gIGlmIChjbGVhcikge1xuICAgIGNsZWFySGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgIGNsZWFyLmNsYXNzTGlzdC5hZGQoXCJpbnZpc2libGVcIik7XG4gICAgICBjbGVhclJlc3VsdHMoKTtcbiAgICB9O1xuICAgIGNsZWFyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGVhckhhbmRsZXIpO1xuICB9XG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGtleXVwSGFuZGxlcik7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZWFyZG93bjogKCkgPT4ge1xuICAgICAgaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGtleXVwSGFuZGxlcik7XG4gICAgICBpZiAoY2xlYXIpIGNsZWFyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbGVhckhhbmRsZXIpO1xuICAgIH0sXG4gICAgY2xlYXI6ICgpID0+IHtcbiAgICAgIGlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgIGNsZWFyUmVzdWx0cygpO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCAoYXBpS2V5KSA9PiB7XG4gIGlmICghYXBpS2V5KSB7XG4gICAgY29uc29sZS5sb2coYE5vIEFkZFNlYXJjaCBBUEkga2V5IHByb3ZpZGVkLCBza2lwcGluZyBzZWFyY2ggc3VnZ2VzdGlvbnMuYCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IEFkZFNlYXJjaENsaWVudChhcGlLZXkpO1xuXG4gIHJldHVybiBbXG4gICAgcXVlcnlJZChcIm1lZ2FuYXYtc2VhcmNoLWlucHV0XCIpLFxuICAgIHF1ZXJ5SWQoXCJtZWdhbmF2LW1vYmlsZS1zZWFyY2gtaW5wdXRcIiksXG4gIF1cbiAgICAuZmlsdGVyKChpKSA9PiBpKVxuICAgIC5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBpbnB1dC5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgY29udGFpbmVyID0gcXVlcnlJZChcbiAgICAgICAgXCJtZWdhbmF2LXNlYXJjaC1hdXRvY29tcGxldGUtY29udGFpbmVyXCIsXG4gICAgICAgIHBhcmVudFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGxpc3RDb250YWluZXIgPSBxdWVyeUlkKFwibWVnYW5hdi1zZWFyY2gtYXV0b2NvbXBsZXRlLWxpc3RcIiwgcGFyZW50KTtcbiAgICAgIGNvbnN0IGNsZWFyID0gcXVlcnlJZChcIm1lZ2FuYXYtc2VhcmNoLWlucHV0LWNsZWFyXCIsIHBhcmVudCk7XG5cbiAgICAgIHJldHVybiBpbml0KHsgaW5wdXQsIGNvbnRhaW5lciwgbGlzdENvbnRhaW5lciwgY2xpZW50LCBjbGVhciB9KTtcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBxdWVyeUlkIH0gZnJvbSBcIi4uL2RvbS1xdWVyeVwiO1xuXG5jb25zdCBEUkFHX0JVRkZFUiA9IDU7XG5cbmNvbnN0IGdldFRyYW5zbGF0ZVggPSAobm9kZSkgPT5cbiAgbmV3IERPTU1hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS50cmFuc2Zvcm0pLmU7XG5cbmNvbnN0IHVwZGF0ZVRyYW5zbGF0ZVggPSAobm9kZSwgdmFsdWUpID0+XG4gIChub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKCR7dmFsdWV9cHgpYCk7XG5cbmNvbnN0IGRyYWdMZWZ0Qm91bmRhcnkgPSAodHJhbnNsYXRlWCwgdGhyZXNob2xkKSA9PiB0cmFuc2xhdGVYID49IHRocmVzaG9sZDtcblxuY29uc3QgZHJhZ1JpZ2h0Qm91bmRhcnkgPSAodHJhbnNsYXRlWCwgaXRlbXNXaWR0aCwgd2luZG93V2lkdGgsIHRocmVzaG9sZCkgPT5cbiAgTWF0aC5hYnModHJhbnNsYXRlWCAtIHdpbmRvd1dpZHRoICsgdGhyZXNob2xkKSA+IGl0ZW1zV2lkdGg7XG5cbmNvbnN0IGdldERpc3RhbmNlID0gKGUsIHRvdWNoU3RhcnRYKSA9PlxuICBlLmNoYW5nZWRUb3VjaGVzWzBdPy5jbGllbnRYIC0gdG91Y2hTdGFydFg7XG5cbmNvbnN0IHdpdGhpbkJ1ZmZlciA9IChkaXN0YW5jZSkgPT4gTWF0aC5hYnMoZGlzdGFuY2UpIDwgRFJBR19CVUZGRVI7XG5cbmNvbnN0IGdldEl0ZW1zVG90YWxXaWR0aCA9IChub2RlcykgPT5cbiAgbm9kZXNcbiAgICAubWFwKChpdGVtKSA9PiBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxuICAgIC5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApO1xuXG5jb25zdCBNZWdhbmF2U2VhcmNoU3VnZ2VzdGlvbnMgPSAoKSA9PiB7XG4gIGNvbnN0IHN1Z2dlc3Rpb25zVG9nZ2xlID0gcXVlcnlJZChcIm1lZ2FuYXYtbW9iaWxlLXNlYXJjaC1pbnB1dFwiKTtcbiAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBxdWVyeUlkKFwibWVnYW5hdi1tb2JpbGUtc2VhcmNoLXN1Z2dlc3Rpb25zXCIpO1xuICBjb25zdCBsaXN0ID0gc3VnZ2VzdGlvbnMucXVlcnlTZWxlY3RvcihcInVsXCIpO1xuICBjb25zdCBsaXN0SXRlbXMgPSBBcnJheS5mcm9tKGxpc3QucXVlcnlTZWxlY3RvckFsbChcImxpXCIpKTtcblxuICBjb25zdCBkcmFnTGVmdCA9IChkaXN0YW5jZSwgdGhyZXNob2xkKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSBnZXRUcmFuc2xhdGVYKGxpc3QpO1xuICAgIGNvbnN0IHRyYW5zbGF0ZVggPSBNYXRoLnJvdW5kKGN1cnJlbnRUcmFuc2xhdGVYICsgZGlzdGFuY2UpO1xuICAgIGlmIChkcmFnTGVmdEJvdW5kYXJ5KHRyYW5zbGF0ZVgsIHRocmVzaG9sZCkpIHJldHVybjtcbiAgICB1cGRhdGVUcmFuc2xhdGVYKGxpc3QsIHRyYW5zbGF0ZVgpO1xuICB9O1xuXG4gIGNvbnN0IGRyYWdMZWZ0RW5kID0gKGRpc3RhbmNlLCB0aHJlc2hvbGQpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRlWCA9IGdldFRyYW5zbGF0ZVgobGlzdCk7XG4gICAgbGV0IHRyYW5zbGF0ZVggPSBNYXRoLnJvdW5kKGN1cnJlbnRUcmFuc2xhdGVYICsgZGlzdGFuY2UpO1xuXG4gICAgaWYgKGRyYWdMZWZ0Qm91bmRhcnkodHJhbnNsYXRlWCwgdGhyZXNob2xkKSkge1xuICAgICAgdHJhbnNsYXRlWCA9IDA7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNsYXRlWChsaXN0LCB0cmFuc2xhdGVYKTtcbiAgfTtcblxuICBjb25zdCBkcmFnUmlnaHQgPSAoZGlzdGFuY2UsIHRocmVzaG9sZCkgPT4ge1xuICAgIGNvbnN0IGxpc3RXaWR0aCA9IGxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSBnZXRUcmFuc2xhdGVYKGxpc3QpO1xuICAgIGNvbnN0IHRyYW5zbGF0ZVggPSBNYXRoLnJvdW5kKGN1cnJlbnRUcmFuc2xhdGVYICsgZGlzdGFuY2UpO1xuICAgIGNvbnN0IGl0ZW1zVG90YWxXaWR0aCA9IGdldEl0ZW1zVG90YWxXaWR0aChsaXN0SXRlbXMpO1xuXG4gICAgaWYgKGRyYWdSaWdodEJvdW5kYXJ5KHRyYW5zbGF0ZVgsIGl0ZW1zVG90YWxXaWR0aCwgbGlzdFdpZHRoLCB0aHJlc2hvbGQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNsYXRlWChsaXN0LCB0cmFuc2xhdGVYKTtcbiAgfTtcblxuICBjb25zdCBkcmFnUmlnaHRFbmQgPSAoZGlzdGFuY2UsIHRocmVzaG9sZCkgPT4ge1xuICAgIGNvbnN0IGxpc3RXaWR0aCA9IGxpc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSBnZXRUcmFuc2xhdGVYKGxpc3QpO1xuICAgIGNvbnN0IGl0ZW1zVG90YWxXaWR0aCA9IGdldEl0ZW1zVG90YWxXaWR0aChsaXN0SXRlbXMpO1xuICAgIGxldCB0cmFuc2xhdGVYID0gTWF0aC5yb3VuZChjdXJyZW50VHJhbnNsYXRlWCArIGRpc3RhbmNlKTtcblxuICAgIGlmIChkcmFnUmlnaHRCb3VuZGFyeSh0cmFuc2xhdGVYLCBpdGVtc1RvdGFsV2lkdGgsIGxpc3RXaWR0aCwgdGhyZXNob2xkKSkge1xuICAgICAgdHJhbnNsYXRlWCA9IC0oaXRlbXNUb3RhbFdpZHRoIC0gbGlzdFdpZHRoICsgdGhyZXNob2xkKTtcbiAgICB9XG5cbiAgICB1cGRhdGVUcmFuc2xhdGVYKGxpc3QsIHRyYW5zbGF0ZVgpO1xuICB9O1xuXG4gIGxldCB0b3VjaFN0YXJ0WDtcblxuICBjb25zdCB0b3VjaHN0YXJ0SGFuZGxlciA9IChlKSA9PiB7XG4gICAgdG91Y2hTdGFydFggPSBlLnRvdWNoZXNbMF0/LmNsaWVudFg7XG4gIH07XG5cbiAgY29uc3QgdG91Y2htb3ZlSGFuZGxlciA9IChlKSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBnZXREaXN0YW5jZShlLCB0b3VjaFN0YXJ0WCk7XG4gICAgaWYgKHdpdGhpbkJ1ZmZlcihkaXN0YW5jZSkpIHJldHVybjtcbiAgICBkaXN0YW5jZSA+IDAgPyBkcmFnTGVmdChkaXN0YW5jZSwgMjQpIDogZHJhZ1JpZ2h0KGRpc3RhbmNlLCA5Nik7XG4gIH07XG5cbiAgY29uc3QgdG91Y2hlbmRIYW5kbGVyID0gKGUpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlKGUsIHRvdWNoU3RhcnRYKTtcbiAgICBpZiAod2l0aGluQnVmZmVyKGRpc3RhbmNlKSkgcmV0dXJuO1xuICAgIGRpc3RhbmNlID4gMCA/IGRyYWdMZWZ0RW5kKGRpc3RhbmNlLCAyNCkgOiBkcmFnUmlnaHRFbmQoZGlzdGFuY2UsIDQ4KTtcbiAgfTtcblxuICBjb25zdCBmb2N1c1N1Z2dlc3Rpb25zSGFuZGxlciA9ICgpID0+IHtcbiAgICBzdWdnZXN0aW9ucy5jbGFzc0xpc3QuYWRkKFwibWF4LWgtOTZcIik7XG4gIH07XG5cbiAgY29uc3QgYmx1clN1Z2dlc3Rpb25zSGFuZGxlciA9IChlKSA9PiB7XG4gICAgaWYgKGUucmVsYXRlZFRhcmdldCA9PT0gc3VnZ2VzdGlvbnMucXVlcnlTZWxlY3RvckFsbChcImFcIilbMF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VnZ2VzdGlvbnMuY2xhc3NMaXN0LnJlbW92ZShcIm1heC1oLTk2XCIpO1xuICB9O1xuXG4gIGNvbnN0IHdoZWVsSGFuZGxlciA9IChlKSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBlLmRlbHRhWSAqIDQ7XG4gICAgaWYgKHdpdGhpbkJ1ZmZlcihkaXN0YW5jZSkpIHJldHVybjtcbiAgICBkaXN0YW5jZSA+IDAgPyBkcmFnTGVmdEVuZChkaXN0YW5jZSwgMjQpIDogZHJhZ1JpZ2h0RW5kKGRpc3RhbmNlLCA0OCk7XG4gIH07XG5cbiAgc3VnZ2VzdGlvbnNUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZvY3VzU3VnZ2VzdGlvbnNIYW5kbGVyKTtcbiAgc3VnZ2VzdGlvbnNUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgYmx1clN1Z2dlc3Rpb25zSGFuZGxlcik7XG4gIHN1Z2dlc3Rpb25zLmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRvdWNoc3RhcnRIYW5kbGVyKTtcbiAgc3VnZ2VzdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCB0b3VjaG1vdmVIYW5kbGVyKTtcbiAgc3VnZ2VzdGlvbnMuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRvdWNoZW5kSGFuZGxlcik7XG4gIHN1Z2dlc3Rpb25zLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCB3aGVlbEhhbmRsZXIpO1xuXG4gIHJldHVybiB7XG4gICAgdGVhcmRvd246ICgpID0+IHtcbiAgICAgIHN1Z2dlc3Rpb25zVG9nZ2xlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c1N1Z2dlc3Rpb25zSGFuZGxlcik7XG4gICAgICBzdWdnZXN0aW9uc1RvZ2dsZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyU3VnZ2VzdGlvbnNIYW5kbGVyKTtcbiAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsIHRvdWNoc3RhcnRIYW5kbGVyKTtcbiAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgdG91Y2htb3ZlSGFuZGxlcik7XG4gICAgICBzdWdnZXN0aW9ucy5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgdG91Y2hlbmRIYW5kbGVyKTtcbiAgICB9LFxuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBzdWdnZXN0aW9ucy5jbGFzc0xpc3QucmVtb3ZlKFwibWF4LWgtOTZcIik7XG4gICAgICBsaXN0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKDBweClgO1xuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNZWdhbmF2U2VhcmNoU3VnZ2VzdGlvbnM7XG4iLCJleHBvcnQgY29uc3QgcmVtc1RvUGl4ZWxWYWx1ZSA9IChyZW1TdHJpbmcpID0+XG4gIHBhcnNlRmxvYXQocmVtU3RyaW5nKSAqXG4gIHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmZvbnRTaXplKTtcbiIsImV4cG9ydCBjb25zdCBxdWVyeUlkID0gKHZhbCwgcm9vdCA9IGRvY3VtZW50KSA9PlxuICByb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWlkPSR7dmFsfV1gKTtcblxuZXhwb3J0IGNvbnN0IHF1ZXJ5SWRBbGwgPSAodmFsLCByb290ID0gZG9jdW1lbnQpID0+XG4gIHJvb3QucXVlcnlTZWxlY3RvckFsbChgW2RhdGEtaWQ9JHt2YWx9XWApO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2FkZHNlYXJjaF9qc19jbGllbnRfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfbG9kYXNoX3Rocm90dGxlX187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Njcm9sbF9sb2NrX187IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCB0aHJvdHRsZSBmcm9tIFwibG9kYXNoLnRocm90dGxlXCI7XG5cbmltcG9ydCBcIi4vY29tcG9uZW50LmNzc1wiO1xuXG4vLyBHbG9zc2FyeTpcbi8vIGl0ZW0gLSBpcyB0aGUgZWxlbWVudCB3aGljaCBjb250YWlucyBib3RoIHRoZSBjb250cm9sIGFuZCB0aGUgcGFuZWwgLSB0aGVzZSBhcmUgYWRqYWNlbnRcbi8vIGNvbnRyb2wgLSBpbnRlcmFjdGl2ZSBlbGVtZW50IHRoYXQgY29udHJvbHMgc2hvd2luZyBhbmQgaGlkaW5nIG9mIGRyb3Bkb3duIG9yIHBhbmVsXG4vLyBwYW5lbCAtIGNvbnRhaW5lciBmb3IgbWVnYW5hdiBjb250ZW50XG4vLyBkcm9wZG93biAtIGNvbnRhaW5lciBmb3IgdG9wIGxldmVsIGl0ZW1zIG9uIG1vYmlsZVxuLy8gY2xlYXIgLSByZXR1cm4gdG8gaW5pdGlhbCBzdGF0ZVxuLy8gdGVhcmRvd24gLSByZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyAoZm9yIGV4YW1wbGUgd2hlbiByZW1vdmluZyBub2RlcylcblxuaW1wb3J0IHsgcXVlcnlJZCwgcXVlcnlJZEFsbCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcblxuaW1wb3J0IE1lZ2FuYXZDb250cm9sIGZyb20gXCIuLi9NZWdhbmF2Q29udHJvbC9jb21wb25lbnRcIjtcblxuaW1wb3J0IE1lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd24gZnJvbSBcIi4uL01lZ2FuYXZDb250cm9sTW9iaWxlRHJvcGRvd24vY29tcG9uZW50XCI7XG5pbXBvcnQgTW9iaWxlUGFuZWxPcGVuQ2xpY2sgZnJvbSBcIi4uL01lZ2FuYXZDb250cm9sTW9iaWxlUGFuZWxPcGVuL2NvbXBvbmVudFwiO1xuaW1wb3J0IE1vYmlsZVBhbmVsQ2xvc2VDbGljayBmcm9tIFwiLi4vTWVnYW5hdkNvbnRyb2xNb2JpbGVQYW5lbENsb3NlL2NvbXBvbmVudFwiO1xuaW1wb3J0IE1lZ2FuYXZTZWFyY2hBdXRvY29tcGxldGUgZnJvbSBcIi4uL01lZ2FuYXZTZWFyY2hBdXRvY29tcGxldGUvY29tcG9uZW50XCI7XG5pbXBvcnQgTWVnYW5hdlNlYXJjaFN1Z2dlc3Rpb25zIGZyb20gXCIuLi9NZWdhbmF2U2VhcmNoU3VnZ2VzdGlvbnMvY29tcG9uZW50XCI7XG5cbi8vIENsb3NlIG1lbnUgd2hlbiB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHZpZXdwb3J0XG5jb25zdCB3aW5kb3dPbkJsdXIgPSAoY2xvc2VBbGwpID0+IHtcbiAgd2luZG93Lm9uYmx1ciA9ICgpID0+IGNsb3NlQWxsKCk7XG4gIHJldHVybiB7IHRlYXJkb3duOiAoKSA9PiAod2luZG93Lm9uYmx1ciA9IG51bGwpIH07XG59O1xuXG4vLyBDbG9zZSBtZW51IHdoZW4gY2xpY2svdGFwIG91dHNpZGUgb2YgbmF2XG5jb25zdCBkb2N1bWVudENsaWNrID0gKGNsb3NlQWxsKSA9PiB7XG4gIGNvbnN0IG1lZ2FuYXYgPSBxdWVyeUlkKFwibWVnYW5hdlwiKTtcblxuICBjb25zdCBjbGlja0hhbmRsZXIgPSAoZSkgPT4ge1xuICAgIGlmIChtZWdhbmF2LmNvbnRhaW5zKGUudGFyZ2V0KSkgcmV0dXJuO1xuICAgIGNsb3NlQWxsKCk7XG4gIH07XG5cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlcik7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZWFyZG93bjogKCkgPT4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrSGFuZGxlciksXG4gIH07XG59O1xuXG4vLyBJbnZlcnQgZnJvbSB0cmFuc3BhcmVudCB0byB3aGl0ZVxuY29uc3QgZG9jdW1lbnRTY3JvbGwgPSAodGhlbWVOYW1lKSA9PiB7XG4gIGlmICh0aGVtZU5hbWUgIT09IFwidHJhbnNwYXJlbnRUb1doaXRlXCIpIHJldHVybiB7IHRlYXJkb3duOiAoKSA9PiB7fSB9O1xuXG4gIGNvbnN0IG1lZ2FuYXYgPSBxdWVyeUlkKFwibWVnYW5hdlwiKTtcbiAgY29uc3QgbmF2SXRlbXMgPSBxdWVyeUlkQWxsKFwibWVnYW5hdi1saW5rXCIpO1xuICBjb25zdCBjb250cm9sTW9iaWxlRHJvcGRvd25NZW51ID0gcXVlcnlJZChcbiAgICBcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtZHJvcGRvd24tbWVudVwiXG4gICk7XG4gIGNvbnN0IGNvbnRyb2xNb2JpbGVEcm9wZG93bkNsb3NlID0gcXVlcnlJZChcbiAgICBcIm1lZ2FuYXYtY29udHJvbC1tb2JpbGUtZHJvcGRvd24tY2xvc2VcIlxuICApO1xuICBjb25zdCBjb250cm9scyA9IHF1ZXJ5SWRBbGwoXCJtZWdhbmF2LWNvbnRyb2xcIik7XG4gIGNvbnN0IHNpZ25VcEJ0biA9IHF1ZXJ5SWQoXCJtZWdhbmF2LXNpZ24tdXAtYnRuXCIpO1xuXG4gIGNvbnN0IGludmVydFRleHRDb2xsZWN0aW9uID0gW1xuICAgIC4uLkFycmF5LmZyb20oY29udHJvbHMpLFxuICAgIC4uLkFycmF5LmZyb20obmF2SXRlbXMpLFxuICAgIHF1ZXJ5SWQoXCJtZWdhbmF2LWxvZ29cIiksXG4gIF07XG5cbiAgY29uc3QgaW52ZXJ0TW9ibGVEcm9wZG93bkNvbG9yID0gKGludmVydCkgPT4ge1xuICAgIGNvbnN0IHdoaXRlVG9CbGFjayA9IFtcInVpLWljb24td2hpdGVcIiwgXCJ1aS1pY29uLWNvb2wtYmxhY2tcIl07XG4gICAgY29uc3QgYmxhY2tUb1doaXRlID0gWy4uLndoaXRlVG9CbGFja10ucmV2ZXJzZSgpO1xuXG4gICAgaWYgKGludmVydCkge1xuICAgICAgY29udHJvbE1vYmlsZURyb3Bkb3duTWVudT8uY2xhc3NMaXN0LnJlcGxhY2UoLi4ud2hpdGVUb0JsYWNrKTtcbiAgICAgIGNvbnRyb2xNb2JpbGVEcm9wZG93bkNsb3NlPy5jbGFzc0xpc3QucmVwbGFjZSguLi53aGl0ZVRvQmxhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sTW9iaWxlRHJvcGRvd25NZW51Py5jbGFzc0xpc3QucmVwbGFjZSguLi5ibGFja1RvV2hpdGUpO1xuICAgICAgY29udHJvbE1vYmlsZURyb3Bkb3duQ2xvc2U/LmNsYXNzTGlzdC5yZXBsYWNlKC4uLmJsYWNrVG9XaGl0ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGludmVyU2lnbnVwQnRuQ29sb3JzID0gKGludmVydCkgPT4ge1xuICAgIGlmIChpbnZlcnQpIHtcbiAgICAgIHNpZ25VcEJ0bj8uY2xhc3NMaXN0LnJlcGxhY2UoXCJiZy13aGl0ZVwiLCBcImJnLWNvb2wtYmxhY2tcIik7XG4gICAgICBzaWduVXBCdG4/LmNsYXNzTGlzdC5yZXBsYWNlKFwidGV4dC1jb29sLWJsYWNrXCIsIFwidGV4dC13aGl0ZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2lnblVwQnRuPy5jbGFzc0xpc3QucmVwbGFjZShcImJnLWNvb2wtYmxhY2tcIiwgXCJiZy13aGl0ZVwiKTtcbiAgICAgIHNpZ25VcEJ0bj8uY2xhc3NMaXN0LnJlcGxhY2UoXCJ0ZXh0LXdoaXRlXCIsIFwidGV4dC1jb29sLWJsYWNrXCIpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzY3JvbGxIYW5kbGVyID0gdGhyb3R0bGUoKCkgPT4ge1xuICAgIGlmICh3aW5kb3cuc2Nyb2xsWSA+IDUpIHtcbiAgICAgIG1lZ2FuYXYuY2xhc3NMaXN0LnJlcGxhY2UoXCJiZy10cmFuc3BhcmVudFwiLCBcImJnLXdoaXRlXCIpO1xuICAgICAgaW52ZXJTaWdudXBCdG5Db2xvcnModHJ1ZSk7XG4gICAgICBpbnZlcnRNb2JsZURyb3Bkb3duQ29sb3IodHJ1ZSk7XG5cbiAgICAgIGludmVydFRleHRDb2xsZWN0aW9uLmZvckVhY2goKG4pID0+XG4gICAgICAgIG4uY2xhc3NMaXN0LnJlcGxhY2UoXCJ0ZXh0LXdoaXRlXCIsIFwidGV4dC1jb29sLWJsYWNrXCIpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZWdhbmF2LmNsYXNzTGlzdC5yZXBsYWNlKFwiYmctd2hpdGVcIiwgXCJiZy10cmFuc3BhcmVudFwiKTtcbiAgICAgIGludmVyU2lnbnVwQnRuQ29sb3JzKGZhbHNlKTtcbiAgICAgIGludmVydE1vYmxlRHJvcGRvd25Db2xvcihmYWxzZSk7XG5cbiAgICAgIGludmVydFRleHRDb2xsZWN0aW9uLmZvckVhY2goKG4pID0+XG4gICAgICAgIG4uY2xhc3NMaXN0LnJlcGxhY2UoXCJ0ZXh0LWNvb2wtYmxhY2tcIiwgXCJ0ZXh0LXdoaXRlXCIpXG4gICAgICApO1xuICAgIH1cbiAgfSwgMTUwKTtcblxuICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHNjcm9sbEhhbmRsZXIpO1xuXG4gIHJldHVybiB7XG4gICAgdGVhcmRvd246ICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgc2Nyb2xsSGFuZGxlciksXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZWdhbmF2KFxuICB7IHRoZW1lTmFtZSwgYWRkU2VhcmNoQXBpS2V5IH0gPSB7IHRoZW1lTmFtZTogbnVsbCB9XG4pIHtcbiAgY29uc3QgY29udHJvbHMgPSBNZWdhbmF2Q29udHJvbCgpO1xuICBjb25zdCBwYW5lbE9wZW5Db250cm9scyA9IE1vYmlsZVBhbmVsT3BlbkNsaWNrKCk7XG4gIGNvbnN0IHBhbmVsQ2xvc2VDb250cm9scyA9IE1vYmlsZVBhbmVsQ2xvc2VDbGljaygpO1xuICBjb25zdCBzZWFyY2ggPSBNZWdhbmF2U2VhcmNoQXV0b2NvbXBsZXRlKGFkZFNlYXJjaEFwaUtleSk7XG4gIGNvbnN0IHNlYXJjaFN1Z2dlc3Rpb25zID0gTWVnYW5hdlNlYXJjaFN1Z2dlc3Rpb25zKCk7XG5cbiAgY29uc3QgbW9iaWxlRHJvcGRvd25Db250cm9sID0gTWVnYW5hdkNvbnRyb2xNb2JpbGVEcm9wZG93bih7XG4gICAgY2xlYXJQYW5lbHM6ICgpID0+XG4gICAgICBbLi4ucGFuZWxPcGVuQ29udHJvbHMsIC4uLnBhbmVsQ2xvc2VDb250cm9sc10uZm9yRWFjaCgoaSkgPT4gaS5jbGVhcigpKSxcbiAgfSk7XG5cbiAgY29uc3QgY2xvc2VBbGwgPSAoKSA9PlxuICAgIFtcbiAgICAgIG1vYmlsZURyb3Bkb3duQ29udHJvbCxcbiAgICAgIHNlYXJjaFN1Z2dlc3Rpb25zLFxuICAgICAgLi4ucGFuZWxPcGVuQ29udHJvbHMsXG4gICAgICAuLi5wYW5lbENsb3NlQ29udHJvbHMsXG4gICAgICAuLi5jb250cm9scyxcbiAgICAgIC4uLnNlYXJjaCxcbiAgICBdLmZvckVhY2goKGkpID0+IGkuY2xlYXIoKSk7XG5cbiAgY29uc3QgdGVhcmRvd25zID0gW1xuICAgIGRvY3VtZW50U2Nyb2xsKHRoZW1lTmFtZSksXG4gICAgZG9jdW1lbnRDbGljayhjbG9zZUFsbCksXG4gICAgd2luZG93T25CbHVyKGNsb3NlQWxsKSxcbiAgICBtb2JpbGVEcm9wZG93bkNvbnRyb2wsXG4gICAgc2VhcmNoU3VnZ2VzdGlvbnMsXG4gICAgLi4uY29udHJvbHMsXG4gICAgLi4ucGFuZWxPcGVuQ29udHJvbHMsXG4gICAgLi4ucGFuZWxDbG9zZUNvbnRyb2xzLFxuICAgIC4uLnNlYXJjaCxcbiAgXS5tYXAoKGkpID0+IGkudGVhcmRvd24pO1xuXG4gIHJldHVybiAoKSA9PiB0ZWFyZG93bnMuZm9yRWFjaCgodGVhcmRvd24pID0+IHRlYXJkb3duKCkpO1xufVxuIl0sIm5hbWVzIjpbInF1ZXJ5SWQiLCJxdWVyeUlkQWxsIiwiTWVnYW5hdkNvbnRyb2wiLCJjb250cm9scyIsIkFycmF5IiwiZnJvbSIsInBhbmVscyIsIm1kQnJlYWtwb2ludCIsImdldENvbXB1dGVkU3R5bGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldFByb3BlcnR5VmFsdWUiLCJob3ZlckVuYWJsZWQiLCJ3aW5kb3ciLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImlzU2VhcmNoQ29udHJvbCIsIm5vZGUiLCJkYXRhc2V0IiwiY29udHJvbCIsImlzU2VhcmNoUGFuZWxPcGVuIiwic2VhcmNoUGFuZWwiLCJxdWVyeVNlbGVjdG9yIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjb250cm9sc0hhdmVGb2N1cyIsInNvbWUiLCJhY3RpdmVFbGVtZW50IiwiaG92ZXIiLCJwYW5lbCIsIm9wZW4iLCJjbGFzc2VzIiwicmVwbGFjZSIsInJldmVyc2UiLCJzZXRBdHRyaWJ1dGUiLCJtb3VzZWVudGVySGFuZGxlciIsIm1vdXNlbGVhdmVIYW5kbGVyIiwiY2xpY2tIYW5kbGVyIiwiZm9yRWFjaCIsImFyaWFFeHBhbmRlZCIsImdldEF0dHJpYnV0ZSIsIm9wZW5lZEJ5SG92ZXIiLCJzZWFyY2hJbnB1dCIsImZvY3VzIiwibWFwIiwiaXRlbSIsInBhcmVudE5vZGUiLCJjbGljayIsImFkZEV2ZW50TGlzdGVuZXIiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNsZWFyIiwiZmxhdCIsInNjcm9sbExvY2siLCJNZWdhbmF2Q29udHJvbE1vYmlsZURyb3Bkb3duIiwiY2xlYXJQYW5lbHMiLCJkcm9wZG93biIsIm1lbnVJY29uIiwiY2xvc2VJY29uIiwiZGlzYWJsZVBhZ2VTY3JvbGwiLCJlbmFibGVQYWdlU2Nyb2xsIiwidG9nZ2xlIiwicmVtb3ZlIiwiYWRkIiwiY2xvc2VDb250cm9scyIsIm9wZW5Db250cm9scyIsImJ0biIsIm9wZW5CdG4iLCJzdHlsZSIsImhlaWdodCIsImZpbmQiLCJoYW5kbGVyIiwicmVtc1RvUGl4ZWxWYWx1ZSIsIm1lZ2FuYXZIZWlnaHQiLCJjbG9zZUJ0biIsImlubmVySGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0IiwiQWRkU2VhcmNoQ2xpZW50IiwiaW5pdCIsImlucHV0IiwiY29udGFpbmVyIiwibGlzdENvbnRhaW5lciIsImNsaWVudCIsInNldEFuYWx5dGljc1RhZyIsInNldFRocm90dGxlVGltZSIsImNsZWFyUmVzdWx0cyIsImlubmVySFRNTCIsInRvZ2dsZUNsZWFyQnRuIiwicXVlcnkiLCJsZW5ndGgiLCJtYXJrUXVlcnlJblN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uVmFsdWUiLCJ0b0xvd2VyQ2FzZSIsIm5hdmlnYXRlVG9VcmwiLCJxIiwibG9jYXRpb24iLCJmb2N1c05leHQiLCJpbmRleCIsIm5leHRTdWdnZXN0aW9uIiwiZm9jdXNQcmV2aW91cyIsInByZXZpb3VzSW5kZXgiLCJwcmV2aW91c1N1Z2dlc3Rpb24iLCJyZW5kZXJSZXN1bHRzIiwicmVzdWx0cyIsImlzQXJyYXkiLCJzdWdnZXN0aW9ucyIsIml0ZW1zIiwic3VnZ2VzdGlvbiIsImxpIiwiY3JlYXRlRWxlbWVudCIsImJ1dHRvbiIsInR5cGUiLCJ2YWx1ZSIsInN1Z2dlc3Rpb25JbmRleCIsImUiLCJrZXkiLCJhcHBlbmRDaGlsZCIsImtleXVwSGFuZGxlciIsInRhcmdldCIsImNsZWFySGFuZGxlciIsImFwaUtleSIsImNvbnNvbGUiLCJsb2ciLCJmaWx0ZXIiLCJpIiwicGFyZW50IiwiRFJBR19CVUZGRVIiLCJnZXRUcmFuc2xhdGVYIiwiRE9NTWF0cml4IiwidHJhbnNmb3JtIiwidXBkYXRlVHJhbnNsYXRlWCIsImRyYWdMZWZ0Qm91bmRhcnkiLCJ0cmFuc2xhdGVYIiwidGhyZXNob2xkIiwiZHJhZ1JpZ2h0Qm91bmRhcnkiLCJpdGVtc1dpZHRoIiwid2luZG93V2lkdGgiLCJNYXRoIiwiYWJzIiwiZ2V0RGlzdGFuY2UiLCJ0b3VjaFN0YXJ0WCIsImNoYW5nZWRUb3VjaGVzIiwiY2xpZW50WCIsIndpdGhpbkJ1ZmZlciIsImRpc3RhbmNlIiwiZ2V0SXRlbXNUb3RhbFdpZHRoIiwibm9kZXMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsInJlZHVjZSIsImFjYyIsInZhbCIsIk1lZ2FuYXZTZWFyY2hTdWdnZXN0aW9ucyIsInN1Z2dlc3Rpb25zVG9nZ2xlIiwibGlzdCIsImxpc3RJdGVtcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJkcmFnTGVmdCIsImN1cnJlbnRUcmFuc2xhdGVYIiwicm91bmQiLCJkcmFnTGVmdEVuZCIsImRyYWdSaWdodCIsImxpc3RXaWR0aCIsIml0ZW1zVG90YWxXaWR0aCIsImRyYWdSaWdodEVuZCIsInRvdWNoc3RhcnRIYW5kbGVyIiwidG91Y2hlcyIsInRvdWNobW92ZUhhbmRsZXIiLCJ0b3VjaGVuZEhhbmRsZXIiLCJmb2N1c1N1Z2dlc3Rpb25zSGFuZGxlciIsImJsdXJTdWdnZXN0aW9uc0hhbmRsZXIiLCJyZWxhdGVkVGFyZ2V0Iiwid2hlZWxIYW5kbGVyIiwiZGVsdGFZIiwicmVtU3RyaW5nIiwicGFyc2VGbG9hdCIsImZvbnRTaXplIiwicm9vdCIsInRocm90dGxlIiwiTW9iaWxlUGFuZWxPcGVuQ2xpY2siLCJNb2JpbGVQYW5lbENsb3NlQ2xpY2siLCJNZWdhbmF2U2VhcmNoQXV0b2NvbXBsZXRlIiwid2luZG93T25CbHVyIiwiY2xvc2VBbGwiLCJvbmJsdXIiLCJkb2N1bWVudENsaWNrIiwibWVnYW5hdiIsImRvY3VtZW50U2Nyb2xsIiwidGhlbWVOYW1lIiwibmF2SXRlbXMiLCJjb250cm9sTW9iaWxlRHJvcGRvd25NZW51IiwiY29udHJvbE1vYmlsZURyb3Bkb3duQ2xvc2UiLCJzaWduVXBCdG4iLCJpbnZlcnRUZXh0Q29sbGVjdGlvbiIsImludmVydE1vYmxlRHJvcGRvd25Db2xvciIsImludmVydCIsIndoaXRlVG9CbGFjayIsImJsYWNrVG9XaGl0ZSIsImludmVyU2lnbnVwQnRuQ29sb3JzIiwic2Nyb2xsSGFuZGxlciIsInNjcm9sbFkiLCJuIiwiTWVnYW5hdiIsImFkZFNlYXJjaEFwaUtleSIsInBhbmVsT3BlbkNvbnRyb2xzIiwicGFuZWxDbG9zZUNvbnRyb2xzIiwic2VhcmNoIiwic2VhcmNoU3VnZ2VzdGlvbnMiLCJtb2JpbGVEcm9wZG93bkNvbnRyb2wiLCJ0ZWFyZG93bnMiXSwic291cmNlUm9vdCI6IiJ9