PageSourceSearch

https://www.anti.com/static/build/anti.build.js

js anti.com collected 2026-10-02 04:11:12 UTC 181,463 bytes, 1 lines download raw bytes

1(()=>{"use strict";var __webpack_modules__={456:()=>{eval("\n;// CONCATENATED MODULE: ./anti/static/js/search/customSearchbox.js\n// Create a render function\nvar renderSearchBox = function renderSearchBox(renderOptions, isFirstRender) {\n  var query = renderOptions.query,\n    refine = renderOptions.refine,\n    clear = renderOptions.clear,\n    isSearchStalled = renderOptions.isSearchStalled,\n    widgetParams = renderOptions.widgetParams;\n  var container = document.querySelector(widgetParams.container);\n  if (isFirstRender) {\n    var _widgetParams$placeho;\n    var form = document.createElement('form');\n    form.classList.add('ais-SearchBox-form');\n    form.action = \"/search/\";\n    var input = document.createElement('input');\n    input.classList.add('ais-SearchBox-input');\n    input.name = \"query\";\n    input.placeholder = (_widgetParams$placeho = widgetParams.placeholder) !== null && _widgetParams$placeho !== void 0 ? _widgetParams$placeho : 'Search';\n    var loadingIndicator = document.createElement('span');\n    loadingIndicator.textContent = 'Loading...';\n    var button = document.createElement('button');\n    button.type = 'submit';\n    button.classList.add('ais-SearchBox-submit');\n    var resetButton = document.createElement('button');\n    resetButton.type = 'reset';\n    resetButton.classList.add('ais-SearchBox-reset');\n    input.addEventListener('input', function (event) {\n      // filter searchbot traffic\n      if (/[\\u3131-\\uD79D]+$/.test(event.target.value) == true || event.target.value.length > 20) {\n        console.log(\"skipped search \".concat(event.target.value));\n      } else {\n        refine(event.target.value);\n      }\n    });\n    button.addEventListener('click', function () {\n      form.submit();\n    });\n    form.appendChild(input);\n    form.appendChild(loadingIndicator);\n    form.appendChild(button);\n    container.appendChild(form);\n  }\n  container.querySelector('input').value = query;\n  container.querySelector('span').hidden = !isSearchStalled;\n};\n\n// create custom widget\nvar customSearchBox = instantsearch.connectors.connectSearchBox(renderSearchBox);\n;// CONCATENATED MODULE: ./anti/static/js/search/quickSearch.js\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\nfunction _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.\"); }\nfunction _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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\nfunction _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; }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
1 i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n\n\nvar quickSearch = function quickSearch(algoliaClient) {\n  return _objectSpread(_objectSpread({}, algoliaClient), {}, {\n    search: function search(requests) {\n      var searchBox = document.querySelector('#anti-search');\n      if (requests.every(function (_ref) {\n        var params = _ref.params;\n        return !params.query;\n      })) {\n        searchBox.classList.remove('searching');\n        return Promise.resolve({\n          results: requests.map(function () {\n            return {\n              hits: [],\n              nbHits: 0,\n              nbPages: 0,\n              page: 0,\n              processingTimeMS: 0\n            };\n          })\n        });\n      }\n      searchBox.classList.add('searching');\n      return algoliaClient.search(requests);\n    }\n  });\n};\nvar autocomplete = instantsearch.connectors.connectAutocomplete(function (_ref2, isFirstRendering) {\n  var indices = _ref2.indices,\n    refine = _ref2.refine,\n    widgetParams = _ref2.widgetParams;\n  var container = widgetParams.container,\n    onSelectChange = widgetParams.onSelectChange;\n  var containerEl = document.querySelector(container);\n  containerEl.innerHTML = \"\";\n  var ul = document.createElement('ul');\n  var seeAll = document.createElement('a');\n  if (indices.length && indices[0].hits.length) {\n    // if there are results, create the 'see all' link\n    seeAll.innerHTML = \"See all \".concat(indices[0].results.nbHits, \" results\");\n    seeAll.href = \"/search/?query=\".concat(indices[0].results.query);\n    seeAll.classList.add('see-all');\n    containerEl.appendChild(seeAll);\n    containerEl.appendChild(ul);\n  }\n  if (isFirstRendering) {\n    //  Here is where you attach jquery or 3rd library or click events\n  }\n  var list = containerEl.querySelector('ul');\n  indices.forEach(function (index) {\n    // for each set of results, create a list\n    if (index.results.hits.length == 0) return;\n    var li = document.createElement('li');\n    var urlParams = new URLSearchParams(index.results.params);\n    var filters = urlParams.get('filters');\n    // find the category name from the filter\n    var category = filters && filters.split(':').length && filters.split(':').pop();\n    li.innerHTML = \"<span class=\\\"lf\\\">\".concat(category ? category : 'Top Hit', \"</span>\");\n    index.results.hits.forEach(function (hit) {\n      var link = document.createElement('a');\n      link.href = hit.url;\n      link.innerHTML = hit.title;\n      // console.log(link)\n      li.appendChild(link);\n    });\n    // console.log(li)\n    list.appendChild(li);\n  });\n});\nvar getCategoryWidgetList = function getCategoryWidgetList() {\n  var widgets = [];\n  categoryList.map(function (loopCategory, i) {\n    widgets.push(instantsearch.widgets.index({\n      indexName: \"anti\"\n    }).addWidgets([instantsearch.widgets.configure({\n      filters: \"category:\".concat(loopCategory),\n      hitsPerPage: 2\n    })]));\n  });\n  return widgets;\n};\nvar getWidgetList = function getWidgetList() {\n  var widgetList = [customSearchBox({\n    container: '#quickSearch-input'\n  }), instantsearch.widgets.configure({\n    hitsPerPage: 1\n  }), autocomplete({\n    container: '#quickSearch-hits'\n  })];\n  var catWidgets = getCategoryWidgetList();\n  // console.log(catWidgets)\n  return [].concat(widgetList, _toConsumableArray(catWidgets));\n};\n;// CONCATENATED MODULE: ./anti/static/js/search/siteSearch.js\nfunction siteSearch_typeof(obj) { \"@babel/helpers - typeof\"; return siteSearch_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, siteSearch_typeof(obj); }\nfunction siteSearch_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction siteSearch_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
1 i % 2 ? siteSearch_ownKeys(Object(source), !0).forEach(function (key) { siteSearch_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : siteSearch_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction siteSearch_defineProperty(obj, key, value) { key = siteSearch_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction siteSearch_toPropertyKey(arg) { var key = siteSearch_toPrimitive(arg, \"string\"); return siteSearch_typeof(key) === \"symbol\" ? key : String(key); }\nfunction siteSearch_toPrimitive(input, hint) { if (siteSearch_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (siteSearch_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction siteSearch_toConsumableArray(arr) { return siteSearch_arrayWithoutHoles(arr) || siteSearch_iterableToArray(arr) || siteSearch_unsupportedIterableToArray(arr) || siteSearch_nonIterableSpread(); }\nfunction siteSearch_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.\"); }\nfunction siteSearch_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return siteSearch_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 siteSearch_arrayLikeToArray(o, minLen); }\nfunction siteSearch_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction siteSearch_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return siteSearch_arrayLikeToArray(arr); }\nfunction siteSearch_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; }\n\n\nvar itemTemplates = {\n  artist: \"\\n          <a href=\\\"{{ url }}\\\"><img src=\\\"{{ image_url }}\\\" width=\\\"228\\\" height=\\\"127\\\" alt=\\\"{{ title }}\\\"></a>\\n          <h4><a href=\\\"{{ url }}\\\">{{ title }}</a></h4>\\n      \",\n  release: \"\\n          {{^is_hidden}}<a href=\\\"{{ url }}\\\">{{/is_hidden}}<img src=\\\"{{image_url}}\\\" width=\\\"138\\\" height=\\\"138\\\" alt=\\\"{{ name }}\\\">{{^is_hidden}}</a>{{/is_hidden}}\\n          <h4>{{^is_hidden}}<a href=\\\"{{ url }}\\\">{{/is_hidden}}{{ title }}{{^is_hidden}}</a>{{/is_hidden}}</h4>\\n          <h5><a href=\\\"{{ artist_url }}\\\">{{ artist }}</a></h5>\\n      \",\n  news: \"\\n        <a href=\\\"{{ url }}\\\">{{ title }}</a>\\n      \",\n  video: \"\\n        {{#duration}}<span class=\\\"num\\\">{{ duration }}</span>{{/duration}}\\n        <a href=\\\"{{ url }}\\\"><img src=\\\"{{image_url}}\\\" width=\\\"228\\\" height=\\\"127\\\" alt=\\\"{{ title }}\\\"></a>\\n        <h4><a href=\\\"{{ url }}\\\">{{ title }}</a></h4>\\n      \",\n  track: \"\\n        <span class=\\\"rf length\\\">{{ nice_duration }}</span>\\n        {{#content}}<span class=\\\"rf\\\"><a href=\\\"{{ url }}#lyrics\\\">Lyrics</a></span>{{/content}}\\n        <span class=\\\"rf\\\"><a href=\\\"{{ url }}\\\">Track Details</a></span>\\n        <a href=\\\"{{ url }}\\\">{{ artist }} - {{ title }}</a>    \\n     \",\n  show: \"\\n    <div class=\\\"date-item clearfix\\\">\\n        <h4>{{ date_formatted }} - {{ month_formatted }}</h4>\\n        <table>\\n            <tr>\\n                <td class=\\\"art\\\"><a href=\\\"{{ artist_url }}\\\">{{ title }}</a></td>\\n                <td class=\\\"loc\\\">{{ location }}</td>\\n                <td class=\\\"ven\\\">{{#url}}<a href=\\\"{{ url }}\\\" target=\\\"_blank\\\">{{/url}}{{ content }}{{#url}}</a>{{/url}}</td>\\n                <td class=\\\"tim\\\">{{ time }}</td>\\n                <td class=\\\"link\\\">{{#facebook_rsvp_url}}<a href=\\\"{{ facebook_rsvp_url }}\\\" target=\\\"_blank\\\">RSVP</a>{{/facebook_rsvp_url}}&nbsp;</td>\\n                <td class=\\\"link\\\">{{#ticket_url}}<a href=\\\"{{ ticket_url }}\\\" target=\\\"_blank\\\">Tickets</a>{{/ticket_url}}&nbsp;</td>\\n            </tr>\\n        </table>\\n    </div>\\n      \",\n  press: \"\\n        <a href=\\\"{{ url }}\\\">{{ title }}</a>\\n      \"\n};\nfunction siteSearch_getWidgetList(category, siteSearchParams) {\n  var widgetList = [instantsearch.widgets.configure(siteSearchParams), customSearchBox({\n    container: '#quickSearch-input'\n  }), instantsearch.widgets.stats({\n    container: 'h1.botborder',\n    templates: {\n      text: function text(stats) {\n        var catLabel = category ? \"In '\".concat(category, \"'\") : \"\";\n        return \"<span class=\\\"sml\\\">\".concat(stats.nbHits, \" search results \").concat(catLabel, \" for </span>&ldquo;\").concat(stats.query, \"&rdquo;\");\n      }\n    }\n  }), instantsearch.widgets.hits({\n    container: '.no-results',\n    templates: {\n      empty: \"\\n              <article class=\\\"art-stnd art-stnd-white no-search-results\\\">\\n                  <header>\\n                      <h3>Sorry!</h3>\\n                      <p>No search results were found for \\\"{{ query }}\\\".<br>please try again ...</p>\\n                  </header>\\n              </article>\\n              \",\n      item: ''\n    }\n  })];\n  if (category) {\n    var singleCatList = [instantsearch.widgets.stats({\n      container: \".filter-stnd .all .num\",\n      templates: {\n        text: function text(stats) {\n          return \"&larr;\";\n        }\n      }\n    }), instantsearch.widgets.configure({\n      filters: \"category:\".concat(category)\n    }), instantsearch.widgets.stats({\n      container: \"#\".concat(category, \" .mini-func\"),\n      templates: {\n        text: function text(stats) {\n          return \"\\n                  Displaying <b>\".concat(stats.nbHits, \"</b> of <b>\").concat(stats.nbHits, \"</b> results | <a href=\\\"/search//?query=\").concat(stats.query, \"\\\">Back to\\n                  All Results</a>                \");\n        }\n      }\n    }), instantsearch.widgets.infiniteHits({\n      container: \"#\".concat(category, \" .result-items\"),\n      escapeHTML: fal
1se,\n      templates: {\n        item: itemTemplates[category]\n      }\n    })];\n    widgetList = [].concat(siteSearch_toConsumableArray(widgetList), singleCatList);\n  } else {\n    widgetList.push(instantsearch.widgets.stats({\n      container: \".filter-stnd .all .num\",\n      templates: {\n        text: function text(stats) {\n          return stats.nbHits || '0';\n        }\n      }\n    }));\n    categoryList.map(function (loopCategory, i) {\n      widgetList.push(instantsearch.widgets.index({\n        indexName: 'anti'\n      }).addWidgets([instantsearch.widgets.configure({\n        filters: \"category:\".concat(loopCategory)\n      }), instantsearch.widgets.stats({\n        container: \"#\".concat(loopCategory, \" .mini-func\"),\n        templates: {\n          text: function text(stats) {\n            return \"\\n                    <p class=\\\"_menu-header\\\">\\n                        Displaying \\n                        <span class=\\\"_count\\\">\".concat(Math.min(stats.nbHits, stats.hitsPerPage), \"</span> \\n                        of <span class=\\\"_count\\\">\").concat(stats.nbHits, \"</span>\\n                        <a href=\\\"/search/\").concat(loopCategory, \"?query=\").concat(stats.query, \"\\\" class=\\\"_search-all\\\">See All</a>\\n                    </p>\\n                    \");\n          }\n        }\n      }), instantsearch.widgets.stats({\n        container: \".filter-stnd .\".concat(loopCategory, \" .num\"),\n        templates: {\n          text: function text(stats) {\n            return stats.nbHits || '0';\n          }\n        }\n      }), instantsearch.widgets.hits({\n        container: \"#\".concat(loopCategory, \" .result-items\"),\n        escapeHTML: false,\n        templates: {\n          item: itemTemplates[loopCategory]\n        }\n      })]));\n    });\n  }\n  return widgetList;\n}\nvar siteSearch = function siteSearch(algoliaClient) {\n  return siteSearch_objectSpread(siteSearch_objectSpread({}, algoliaClient), {}, {\n    search: function search(requests) {\n      var searchBox = document.querySelector('#anti-search');\n      // filter searchbot traffic\n      if (requests.every(function (_ref) {\n        var params = _ref.params;\n        return !params.query || /[\\u3131-\\uD79D]+$/.test(params.query) == true || params.query.length > 20;\n      })) {\n        searchBox.classList.remove('searching');\n        return Promise.resolve({\n          results: requests.map(function (i, el) {\n            return {\n              hits: [],\n              nbHits: 0,\n              nbPages: 0,\n              page: 0,\n              processingTimeMS: 0,\n              query: i.params.query\n            };\n          })\n        });\n      }\n      searchBox.classList.add('searching');\n      return algoliaClient.search(requests);\n    }\n  });\n};\n;// CONCATENATED MODULE: ./anti/static/js/search/searchClient.js\nfunction searchClient_toConsumableArray(arr) { return searchClient_arrayWithoutHoles(arr) || searchClient_iterableToArray(arr) || searchClient_unsupportedIterableToArray(arr) || searchClient_nonIterableSpread(); }\nfunction searchClient_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.\"); }\nfunction searchClient_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return searchClient_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 searchClient_arrayLikeToArray(o, minLen); }\nfunction searchClient_iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction searchClient_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return searchClient_arrayLikeToArray(arr); }\nfunction searchClient_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; }\n/* global algoliasearch instantsearch */\n\n\nvar categoryList = ['artist', 'release', 'show', 'video', 'track', 'news', 'press'];\nvar matches = /(?:^\\/search\\/)(\\w+)/g.exec(window.location.pathname);\nvar category = matches && matches.length > 1 && matches[1];
1\nvar urlParams = new URLSearchParams(window.location.search);\nvar query = urlParams.get('query') || urlParams.get('q');\nvar siteSearchParams = {\n  hitsPerPage: 6,\n  query: query\n};\nvar algoliaClient = algoliasearch(window.AntiData.ALGOLIA_APPLICATION_ID, window.AntiData.ALGOLIA_API_KEY_SEARCH);\nvar isQuickSearch = !window.location.pathname.startsWith('/search/');\nvar searchClient = isQuickSearch ? quickSearch(algoliaClient) : siteSearch(algoliaClient);\nvar search = instantsearch({\n  indexName: category == \"news\" ? \"anti\" : \"anti\",\n  searchClient: searchClient,\n  initialUiState: {\n    anti: siteSearchParams\n  }\n});\nvar widgetList = isQuickSearch ? getWidgetList() : siteSearch_getWidgetList(category, siteSearchParams);\nsearch.addWidgets(searchClient_toConsumableArray(widgetList));\nsearch.on('render', function () {\n  var searchBox = document.querySelector('.algolia-search');\n  for (var i = 0; i < categoryList.length; i++) {\n    if ($(\"#\".concat(categoryList[i], \" .result-items li\")).length < 1) {\n      var resultList = document.querySelector(\"#\".concat(categoryList[i]));\n      if (resultList) resultList.classList.add('hidden');\n      var resultFilter = document.querySelector(\".filter-stnd .\".concat(categoryList[i]));\n      if (resultFilter) resultFilter.classList.add('hidden');\n    } else {\n      var _resultList = document.querySelector(\"#\".concat(categoryList[i]));\n      if (_resultList) _resultList.classList.remove('hidden');\n      var _resultFilter = document.querySelector(\".filter-stnd .\".concat(categoryList[i]));\n      if (_resultFilter) _resultFilter.classList.remove('hidden');\n    }\n  }\n});\n;// CONCATENATED MODULE: ./anti/static/js/global.js\nfunction global_defineProperty(obj, key, value) { key = global_toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction global_toPropertyKey(arg) { var key = global_toPrimitive(arg, \"string\"); return global_typeof(key) === \"symbol\" ? key : String(key); }\nfunction global_toPrimitive(input, hint) { if (global_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (global_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction global_typeof(obj) { \"@babel/helpers - typeof\"; return global_typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, global_typeof(obj); }\n/**\n *  ANTI-\n *  Handles all global behaviors and properties for ANTI-\n *\n *  Dependencies:\n *      jQuery 1.7.1\n *      jquery.infinitescroll.js\n */\n\n(function ($) {\n  var _AntiMailingList;\n  var Anti = {\n    init: function init() {\n      // crappy safari custom fonts in text input handling\n      if (AntiUtil.detect_safari()) {\n        $('[placeholder]').each(function (e) {\n          var phVal = $(this).attr('placeholder');\n          $(this).attr('value', phVal);\n          $(this).attr('placeholder', '');\n          $(this).focus(function () {\n            if ($(this).val() == $(this)[0].defaultValue) {\n              $(this).val('');\n            }\n          }).blur(function () {\n            if ($(this).val().trim() === '') {\n              $(this).val($(this)[0].defaultValue);\n            }\n          });\n        });\n      }\n\n      // crappy windows font handling\n      if (AntiUtil.detect_winfont()) {\n        $('html').addClass('winfonts');\n      }\n\n      // global nav\n      if ($('html').hasClass('ie6') || $('html').hasClass('ie7') || $('html').hasClass('ie8')) {\n        Anti.sticky_nav_ie();\n      } else {\n        Anti.sticky_nav();\n      }\n\n      // global last child handler\n      AntiUtil.list_lastchild();\n\n      // global sidebar accordion handler\n      AntiUtil.sidebar_accordion();\n\n      // global filter accordion handler\n      AntiUtil.filter_accordion();\n\n      // global social icons (this is due to IE bugs)\n      Anti.stnd_social();
1\n\n      // global mailing list\n      AntiMailingList.init();\n    },\n    webfont_active: function webfont_active() {\n      Anti.article_resizer();\n      Anti.album_carousel_setheight();\n    },\n    webfont_inactive: function webfont_inactive() {\n      Anti.article_resizer();\n      Anti.album_carousel_setheight();\n    },\n    sticky_nav: function sticky_nav() {\n      var sNav = $('nav');\n      var sNavAnimating = false;\n      $(window).bind('scroll', function (e) {\n        if ($(window).scrollTop() >= 100 && !sNav.hasClass('stickynav')) {\n          sNav.addClass('stickynav');\n          sNav.css('top', '-50px');\n          sNav.animate({\n            'top': 0,\n            avoidTransforms: true\n          }, 200, 'swing');\n        } else if ($(window).scrollTop() < 30 && sNav.hasClass('stickynav') & !sNavAnimating) {\n          sNavAnimating = true;\n          sNav.animate({\n            'top': '-50px',\n            avoidTransforms: true\n          }, 150, 'swing', function () {\n            sNavAnimating = false;\n            sNav.removeClass('stickynav');\n            sNav.css({\n              'top': '49px',\n              'opacity': 0\n            });\n            sNav.animate({\n              'opacity': 1,\n              avoidTransforms: true\n            }, 300);\n          });\n        }\n      });\n      AntiGlobalSearch.init();\n    },\n    sticky_nav_ie: function sticky_nav_ie() {\n      var sNav = $('nav');\n      $(window).bind('scroll', function (e) {\n        if ($(window).scrollTop() >= 48 && !sNav.hasClass('stickynav')) {\n          sNav.addClass('stickynav');\n        } else if ($(window).scrollTop() < 48 && sNav.hasClass('stickynav')) {\n          sNav.removeClass('stickynav');\n        }\n      });\n    },\n    album_carousel: function album_carousel() {\n      if ($('.album-carousel').length > 0) {\n        // multiple carousels\n        $('.album-carousel').each(function (e) {\n          var el = this;\n          var elBox = $(el).find('.album-items');\n          var elBoxHeight = 0;\n          var elBoxShown = 5;\n          var elBoxSlideLength = 200;\n          var elBoxSel = 0;\n          var elBoxLength = $(elBox).children('div').length;\n          var elBoxAni = false;\n          var elBoxOffset = 0;\n          var elBoxSlideLengthTotal, elBoxSlideSpeed;\n          if ($(el).hasClass('album-carousel-lrg')) {\n            elBoxShown = 4;\n            elBoxSlideLength = 250;\n          }\n\n          // update arrow\n          $(el).find('.arr-l').addClass('arr-disabled');\n\n          // bind arrows\n          if ($(elBox).children('div').length > elBoxShown) {\n            $(el).find('.arr-l').click(function (e) {\n              e.preventDefault();\n              if (!$(this).hasClass('arr-disabled') && !elBoxAni) {\
1n                elBoxAni = true;\n                elBoxSlideLengthTotal = elBoxSlideLength * elBoxShown;\n                elBoxSlideSpeed = elBoxShown * 120;\n                $(el).find('.arr-r').removeClass('arr-disabled');\n                if (elBoxSel - 1 === 0) {\n                  $(el).find('.arr-l').addClass('arr-disabled');\n                  // need to compensate for an uneven number of items\n                  if (elBoxOffset > 0) {\n                    elBoxSlideLengthTotal = elBoxOffset * elBoxSlideLength;\n                    elBoxSlideSpeed = elBoxOffset * 120;\n                    elBoxOffset = 0;\n                  }\n                }\n                elBox.stop(true).animate({\n                  left: '+=' + elBoxSlideLengthTotal + 'px',\n                  avoidTransforms: true\n                }, elBoxSlideSpeed, 'easeInOutQuad', function () {\n                  elBoxSel--;\n                  elBoxAni = false;\n                });\n              }\n            });\n            $(el).find('.arr-r').click(function (e) {\n              e.preventDefault();\n              if (!$(this).hasClass('arr-disabled') && !elBoxAni) {\
1n                elBoxAni = true;\n                elBoxSlideLengthTotal = elBoxSlideLength * elBoxShown;\n                elBoxSlideSpeed = elBoxShown * 120;\n                $(el).find('.arr-l').removeClass('arr-disabled');\n                if (1 + elBoxSel == Math.ceil(elBoxLength / elBoxShown) - 1) {\n                  $(el).find('.arr-r').addClass('arr-disabled');\n                  // need to compensate for an uneven number of items\n                  if (elBoxLength % elBoxShown > 0) {\n                    elBoxOffset = elBoxLength % elBoxShown;\n                    elBoxSlideLengthTotal = elBoxOffset * elBoxSlideLength;\n                    elBoxSlideSpeed = elBoxOffset * 120;\n                  }\n                }\n                elBox.stop(true).animate({\n                  left: '-=' + elBoxSlideLengthTotal + 'px',\n                  avoidTransforms: true\n                }, elBoxSlideSpeed, 'easeInOutQuad', function () {\n                  elBoxSel++;\n                  elBoxAni = false;\n                });\n              }\n            });\n          } else {\n            // no elements to slide\n            $(el).find('.arr-r').addClass('arr-disabled');\n          }\n        });\n      }\n    },\n    album_carousel_setheight: function album_carousel_setheight() {\n      if ($('.album-carousel').length > 0) {\n        $('.album-carousel').each(function (e) {\n          var el = this;\n          var elBox = $(el).find('.album-items');\n          var elBoxHeight = 0;\n          $(elBox).children('div').each(function () {\n            if ($(this).height() > elBoxHeight) {\n              elBoxHeight = $(this).height();\n            }\n          });\n          $(el).find('.in').css('height', elBoxHeight + 'px');\n          $(elBox).css('height', elBoxHeight + 'px');\n          $(elBox).children('div').css('height', elBoxHeight + 'px');\n        });\n      }\n    },\n    article_resizer: function article_resizer() {\n      if ($('#home-articles').length > 0) {\n        var pSizeChangeFinal = function pSizeChangeFinal(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH) {\n          var sizeDiff = boxHeight - textBoxHeight;\n          if (sizeDiff > textBoxLH) {\n            // increase font size, don't increase line-height\n            var textBoxFSNew = textBoxFS + 1;\n            $(textBox).css('font-size', textBoxFSNew + 'px');\n            var textBoxHeightNew = $(textBox).height();\n            pSizeChangeFinal(textBox, textBoxHeightNew, boxHeight, textBoxFSNew, textBoxLH);\n          } else if (sizeDiff > 0) {\n            // increase line-height, don't increase font size\n            var textBoxLinesTotal = Math.floor(textBoxHeight / textBoxLH);\n            var textBoxLHNew = textBoxLH + Math.floor(sizeDiff / textBoxLinesTotal);\n            $(textBox).css('line-height', textBoxLHNew + 'px');\n          }\n        };\n        var pSizeChange = function pSizeChange(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH, dir) {\n          if (dir == 'inc') {\n            // text too small\n            var textBoxFSNew = textBoxFS + 1;\n            var textBoxLHNew = textBoxLH + 1;\n          }\n          if (dir == 'dec') {\n            // text too large\n            var textBoxFSNew = textBoxFS - 1;\n            var textBoxLHNew = textBoxLH - 1;\n          }\n\n          // update text field\n          $(textBox).css('font-size', textBoxFSNew + 'px');\n          $(textBox).css('line-height', textBoxLHNew + 'px');\n          var textBoxHeightNew = $(textBox).height();\n          var sizeDiff = boxHeight - textBoxHeightNew;\n\n          // check new size\n          if (dir == 'inc') {\n            if (boxHeight > textBoxHeightNew) {\n              // text still too small\n              pSizeChange(textBox, textBoxHeightNew, boxHeight, textBoxFSNew, textBoxLHNew, dir);\n            } else {\n              if (textBoxHeightNew > boxHeight && textBoxHeight < boxHeight) {\n                // we went too far, decrease by one\n                var textBoxFSNew = textBoxFSNew - 1;\n                var textBoxLHNew = textBoxLHNew - 1;\n                $(textBox).css('font-size', textBoxFSNew + 'px');\n                $(textBox).css('line-height', textBoxLHNew + 'px');\n                var textBoxHeightNew = $(textBox).height();\n                var sizeDiff = boxHeight - textBoxHeightNew;\n              }\n              if (sizeDiff > 0) {\n                // final adjustment\n                // pSizeChangeFinal(textBox,textBoxHeightNew,boxHeight,textBoxFSNew,textBoxLHNew);\n              }\n            }\n          } else if (dir == 'dec') {\n            if (textBoxHeightNew > boxHeight) {\n              // text still too large\n              pSizeChange(textBox, textBoxHeightNew, boxHeight, textBoxFSNew, textBoxLHNew, dir);\n            } else {\n              if (boxHeight > textBoxHeightNew && boxHeight > textBoxHeight) {\n                // we went too far, increase by one\n                var textBoxFSNew = textBoxFSNew + 1;\n                var textBoxLHNew = textBoxLHNew + 1;\n                $(textBox).css('font-size', textBoxFSNew + 'px');\n                $(textBox).css('line-height', textBoxLHNew + 'px');\n                var textBoxHeightNew = $(textBox).height();\n                var sizeDiff = boxHeight - textBoxHeightNew;\n              }\n              if (sizeDiff > 0) {\n                // final adjustment\n                // pSizeChangeFinal(textBox,textBoxHeightNew,boxHeight,textBoxFSNew,textBoxLHNew);\n              }\n            }\n          }\n        };\n        $('#home-articles article').each(function () {\n          var box = this;\n          var boxHeight = $(box).height() - 21; // to compensate for the read more link\n          var textBox = $(this).children('p');\n          var textBoxHeight = $(textBox).height();\n          var textBoxFS = parseInt($(textBox).css('font-size'));\n          var textBoxLH = parseInt($(textBox).css('line-height'));\n          var textBoxLinesTotal = Math.floor(textBoxHeight / textBoxLH);\n          if (boxHeight > textBoxHeight) {\n            // text is too small\n            pSizeChange(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH, 'inc');\n          } else if (textBoxHeight > boxHeight) {\n            // text is too large\n            pSizeChange(textBox, textBoxHeight, boxHeight, textBoxFS, textBoxLH, 'dec');\n          }\n          // lock p height\n          $(textBox).css('height', boxHeight + 'px');\n        });\n\n        // show articles\n        $('#home-articles article').hide();\n        $('#home-articles article').css('visibility', 'visible');\n        $('#home-articles .loader').fadeOut('fast');\n        $('#home-articles article').fadeIn('fast');\n      }\n    },\n    stnd_social: function stnd_social() {\n      if ($('.stnd-social').length > 0) {\n        if ($('html').hasClass('ie')) {\n          $('.stnd-social').children('.icns-exp').hide();\n          $('.stnd-social').mouseenter(function () {\n            $(this).children('.icns-exp').show();\n          }).mouseleave(function () {\n            $(this).children('.icns-exp').hide();\n          });\n        } else {\n          $('.stnd-social').mouseenter(function () {\n            $(this).children('.icns-exp').css('opacity', '1');\n          }).mouseleave(function () {\n            $(this).children('.icns-exp').css('opacity', '0');\n          });\n        }\n      }\n    },\n    /**\n     * Make anchor links smoothly animate to their content on the page, taking the nav height into account\n     *\n     *      linkSelector    (string)    Selector for links to apply smooth scroll to\n     *      extraOffset     (integer)   (optional) Number of pixels for extra padding/offset for scroll target\n     *\n     */\n    smoothScroll: function smoothScroll(linkSelector, extraOffset) {\n      extraOffset = typeof extraOffset == 'number' ? extraOffset : 18;\n      var navHeight = $('nav').height();\n      $(linkSelector).each(function (index, el) {\n        var anchor = $(el).attr('href');\n        if (anchor && anchor[0] == '#') {\n          $(el).click(function (e) {\n            e.preventDefault();\n            var offset = $(anchor).offset();\n            var top = offset.top - navHeight - extraOffset;\n            var winHeight = $(window).height();\n            var docHeight = $(document).height();\n            $('html, body').stop(true).animate({\n              'scrollTop': Math.min(top, docHeight - winHeight)\n            }, 1000, 'easeInOutExpo');\n          });\n        }\n      });\n    },\n    /**\n     * Apply 'Load More' functionality that fetches paginated content via AJAX and appends it to the page\
1n     *\n     *      contentSelector     (string)    Selector for main content wrapper. Infinite scroll plugin is implemented \n     *                                      onto this element and content is appended to it\n     *      itemSelector        (string)    Selector passed to infinitescroll plugin, used on AJAX call to extract \n     *                                      content to be appended\n     *      buttonSelector      (string)    Selector for 'Load More' button, on which click events and such are applied\n     *      options             (object)    (optional) Options to pass directly into infinitescroll()\n     *      callback            (function)  (optional) Optional callback to be run at the end of page content load\n     */\n    setLoadMore: function setLoadMore(contentSelector, itemSelector, buttonSelector, options, callback) {\n      options = global_typeof(options) == 'object' ? options : {};\n      var content = $(contentSelector);\n      var loadMoreButton = $(buttonSelector);\n      if (content.length && loadMoreButton.length) {\n        var originalButtonText = loadMoreButton.text();\n\n        // Bind load more event to button\n\n        var bindLoadMore = function bindLoadMore(instance) {\n          loadMoreButton.click(function (e) {\n            e.preventDefault();\n            instance.retrieve();\n          });\n        };\n\n        // Init infinite scroll\n\n        var defaultOptions = {\n          'navSelector': buttonSelector,\n          'nextSelector': buttonSelector,\n          'itemSelector': itemSelector,\n          'pathParse': function pathParse(path, page) {\n            var pattern = /^(.*(\\?|&)page=)(\\d+)(.*)$/;\n            var check = path.match(pattern);\n            if (check) {\n              return [check[1], check[4]];\n            }\n            return [];\n          },\n          'loading': {\n            'loading': null,\n            'start': function start(options) {\n              // Call this from infinitescroll plugin\n\n              beginAjax(options);\n\n              // Set load text and unbind click events\n\n              loadMoreButton.text('Loading...').unbind('click').click(function (e) {\n                e.preventDefault();\n              });\n\n              // Fade up/down while loading\n\n              fadeOut = function fadeOut() {\n                loadMoreButton.fadeTo(500, 0.25, function () {\n                  fadeUp();\n                });\n              };\n              fadeUp = function fadeUp() {\n                loadMoreButton.fadeIn(500, function () {\n                  fadeOut();\n                });\n              };\n              fadeOut();\n            },\n            'finished': function finished(options) {\n              // Stop animation and reset text\n\n              loadMoreButton.stop(true).css('opacity', 1).text(originalButtonText);\n\n              // Update href with new page number\n\n              href = loadMoreButton.attr('href');\n              href = href.replace(/(\\?|&)page=(\\d+).*/, '$1page=' + (options.state.currPage + 1));\n              loadMoreButton.attr('href', href);\n\n              // Re-bind load more click event\n\n              bindLoadMore($(this).data('infinitescroll'));\n              if (typeof callback == 'function') callback();\n            }\n          },\n          'errorCallback': function errorCallback() {\n            loadMoreButton.fadeOut(500);\n          }\n        };\n        content.infinitescroll($.extend(true, defaultOptions, options));\n\n        // Unbind infinitescroll scroll events and bind retrieval to the button\n\n        var instance = content.data('infinitescroll');\n        $(window).unbind('smartscroll.infscr.' + instance.options.infid);\n        bindLoadMore(instance);\n        return instance;\n      }\n      return false;\n    }\n  };\n  var AntiUtil = {\n    detect_winfont: function detect_winfont() {\n      if (navigator.platform.indexOf('Win') > -1) {\n        if (typeof screen.fontSmoothingEnabled != \"undefined\") {\n          return screen.fontSmoothingEnabled;\n        } else {\n          try {\n            var canvasNode = document.createElement(\"canvas\");\n            canvasNode.width = \"35\";\n            canvasNode.height = \"35\";\n            canvasNode.style.display = \"none\";\n            document.body.appendChild(canvasNode);\n            var ctx = canvasNode.getContext(\"2d\");\n            ctx.textBaseline = \"top\";\n            ctx.font = \"32px Arial\";\n            ctx.fillStyle = \"black\";\n            ctx.strokeStyle = \"black\";\n            ctx.fillText(\"O\", 0, 0);\n            for (var j = 8; j <= 32;
1 j++) {\n              for (var i = 1; i <= 32; i++) {\n                var imageData = ctx.getImageData(i, j, 1, 1).data;\n                var alpha = imageData[3];\n                if (alpha != 255 && alpha !== 0) {\n                  return true; // windows font-smoothing must be on.\n                }\n              }\n            }\n\n            return false;\n          } catch (ex) {\n            return false;\n          }\n        }\n      } else {\n        return false;\n      }\n    },\n    detect_safari: function detect_safari() {\n      if (window.devicePixelRatio) {\n        if (escape(navigator.javaEnabled.toString()) == 'function%20javaEnabled%28%29%20%7B%20%5Bnative%20code%5D%20%7D') {\n          return false;\n        } else if (escape(navigator.javaEnabled.toString()) != 'function%20javaEnabled%28%29%20%7B%20%5Bnative%20code%5D%20%7D') {\n          return true;\n        }\n      }\n    },\n    list_lastchild: function list_lastchild() {\n      $('.list-withlast-2-u li:nth-child(2n)').addClass('list-last');\n      $('.list-withlast-2-d div:nth-child(2n)').addClass('list-last');\n      $('.list-withlast-3-u li:nth-child(3n)').addClass('list-last');\n      $('.list-withlast-3-d div:nth-child(3n)').addClass('list-last');\n    },\n    sidebar_accordion: function sidebar_accordion() {\n      if ($('.sbar-accordion').length > 0) {\n        $('.sbar-accordion h4 a').click(function (e) {\n          e.preventDefault();\n          $(this).toggleClass('sel');\n          $(this).parents('.sbar-accordion').children('.accordion-expanded').toggle('fast');\n        });\n      }\n    },\n    filter_accordion: function filter_accordion() {\n      if ($('.filter-accordion').length > 0) {\n        $('.filter-accordion .read-more').data('open', false).click(function (e) {\n          e.preventDefault();\n          var linkText;\n          if ($(this).data('open') === true) {\n            $(this).data('open', false);\n            linkText = 'See Full List-';\n          } else {\n            $(this).data('open', true);\n            linkText = 'Collapse List-';\n          }\n          $(this).html(linkText).parents('.filter-accordion').children('.accordion-expanded').toggle('fast');\n        });\n      }\n    }\n  };\n\n  /**\n   * ANTI global AJAX search input behavior\n   */\n  var AntiGlobalSearch = {\n    // State\n\n    active: false,\n    // Whether the field is 'active' or not\n    mouseInside: false,\n    // Whether the mouse is inside of the form or not\n    currentQuery: false,\n    // false if no search is running, otherwise it's the term being searched\n    currentRequest: null,\n    // If a search is running, the current XHR object\n    currentTimeout: null,\n    // If a search is running, the timeout for current search request\n    hasContent: false,\n    // Whether the resultsElement has been filled with content from an AJAX request or not\n\n    // Elements\n\n    searchFormElement: null,\n    inputElement: null,\n    resultsElement: null,\n    // Insert search result HTML from AJAX request here\n\n    // Settings\n\n    minimumCharacters: 2,\n    // The minimum amount of characters to be typed before a search is sent to the server\n    deactivatedWidth: null,\n    // Input width when deactivated, get this from the element itself on init\n    activatedWidth: 260,\n    // Input width when activated\n    resultsWidthOffset: 8,\n    // Pixels above activated/deactivated widths to add to result window\n\n    init: function init() {\n      var self = this;\n\n      // Elements\n\n      this.searchFormElement = $('#anti-search');\n      this.inputElement = $('input[name=q]', this.searchFormElement);\n      this.resultsElement = $('<div />').addClass('search-expanded');\n      this.inputElement.after(this.resultsElement);\n\n      // Settings\n\n      this.deactivatedWidth = this.inputElement.width();\n\n      // Events\n\n      this.searchFormElement.hover(function () {\n        self.mouseInside = true;\n      }, function () {\n        self.mouseInside = false;\n      });\n      this.inputElement.focusin(function () {\n        self.activateField();\n      });\n      this.inputElement.on('keyup search', function (e) {\n        self.handleInput($(this).val());\n      });\n      this.inputElement.on('keydown', function (e) {\n        // Cancel search when 'return' is hit\n        if (e.keyCode == 13) {\n          self.abortSearch();\n        }\n      });\n      $('body').mouseup(function () {\n        if (self.active && !self.mouseInside) {\n          self.deactivateField();\n        }\n      });\n\n      // Initial\n\n      this.resultsElement.hide();\n    },\n    /**\n     * Expand input and apply active state on interaction\n     */\n    activateField: function activateField() {\
1n      var self = this;\n      this.active = true;\n      if (this.hasContent) this.searchFormElement.addClass('searching');\n      this.inputElement.addClass('active').animate({\n        'width': this.activatedWidth\n      }, 200, function () {\n        self.resultsElement.show().css('height', 'auto');\n      });\n    },\n    /**\n     * Slim down input and remove active state\n     */\n    deactivateField: function deactivateField() {\n      var self = this;\n      this.active = false;\n      this.searchFormElement.removeClass('searching');\n      this.resultsElement.hide();\n      this.inputElement.removeClass('active').animate({\n        'width': this.deactivatedWidth\n      }, 200);\n    },\n    /**\n     * Handle keyup event from search input field\n     *\n     *      text    (string)    Text value from search input\n     */\n    handleInput: function handleInput(text) {\n      text = $.trim(text);\n      if (text.length >= this.minimumCharacters) {\n        this.executeSearch(text);\n      }\n    },\n    /**\n     * Pass text off for AJAX search and handle results\n     *\n     *      text    (string)    Text to search against\n     */\n    executeSearch: function executeSearch(text) {\n      var self = this;\n      if (this.currentQuery) {\n        if (this.currentQuery == text) {\n          return;\n        } else {\n          this.abortSearch();\n        }\n      }\n      this._setLoadingState();\n      this.hasContent = false;\n      this.searchFormElement.addClass('searching');\n      this.currentQuery = text;\n      function run() {\n        self.currentRequest = $.ajax(self.searchFormElement.attr('action'), {\n          'cache': false,\n          'data': {\n            'q': text\n          },\n          'dataType': 'html',\n          'complete': function complete(jqXHR, textStatus) {\n            self.handleResults(jqXHR, textStatus);\n          }\n        });\n      }\n\n      // Delay this a tad so that requests aren't being sent with every keystroke\n\n      this.currentTimeout = window.setTimeout(function () {\n        run();\n      }, 500);\n    },\n    /**\n     * Handle AJAX search response\n     *\n     *      jqXHR       (object)    jQuery XMLHTTPRequest object from search response\n     *      textStatus  (string)    Status for AJAX search response\n     */\n    handleResults: function handleResults(jqXHR, textStatus) {\n      this._unsetLoadingState();\n      this.currentRequest = false;\n      this.currentTimeout = null;\n      this.hasContent = true;\n      if (textStatus == 'success') {\n        this.resultsElement.html(jqXHR.responseText);\n        // @todo Highlight matched text with <span class=\"sel\">...</span>\n      } else {\n        this.resultsElement.append($('<h3 />').addClass('empty').text('There was an error with your search, please try again'));\n      }\n    },\n    /**\n     * Cancel search request\n     */\n    abortSearch: function abortSearch() {\n      if (this.currentTimeout) {\n        clearTimeout(this.currentTimeout);\n        this.currentTimeout = null;\n      }\n      if (this.currentRequest) {\n        this.currentRequest.abort();\n        this.currentRequest = false;\n      }\n      this.currentQuery = false;\n      this._unsetLoadingState();\n    },\n    /**\n     * Set search form to 'loading' state\n     */\n    _setLoadingState: function _setLoadingState() {\n      this.resultsElement.empty().addClass('loading').append($('<img />').attr({\n        'src': AntiData.images.loading,\n        'alt': 'Loading'\n      }).addClass('loading'));\n    },\n    /**\n     * Remove 'loading' state from search form\n     */\n    _unsetLoadingState: function _unsetLoadingState() {\n      if (this.resultsElement.hasClass('loading')) {\n        this.resultsElement.removeClass('loading').empty();\n      }\n    }\n  };\n  var AntiMailingList = (_AntiMailingList = {\n    // Elements\n\n    overlayBox: null,\n    overlayHider: null,\n    closeButton: null,\n    openButton: null\n  }, global_defineProperty(_AntiMailingList, \"overlayBox\", null), global_defineProperty(_AntiMailingList, \"form\", null), global_defineProperty(_AntiMailingList, \"loadingIndicator\", null), global_defineProperty(_AntiMailingList, \"init\", function init(
1) {\n    return;\n    var self = this;\n\n    // Elements\n\n    this.overlayBox = $('#mailing-list');\n    this.overlayHider = $('.box-signup-hider');\n    this.closeButton = $('#mailing-list .btn-ml-close, .box-signup-hider');\n    this.openButton = $('.btn-ml-open');\n    this.loadingIndicator = $('<img />').attr({\n      'src': AntiData.images.loading,\n      'alt': 'Loading',\n      'class': 'loading'\n    }).hide();\n    this.closeButton.before(this.loadingIndicator);\n\n    // Events\n\n    this.openButton.click(function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      self.openOverlay();\n    });\n    this.closeButton.click(function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      self.closeOverlay();\n    });\n    this.overlayHider.click(function (e) {\n      e.preventDefault();\n      self.closeOverlay();\n    });\n    this.bindForm();\n  }), global_defineProperty(_AntiMailingList, \"openOverlay\", function openOverlay() {\n    this.overlayHider.stop(true).fadeIn(200);\n    this.overlayBox.stop(true).fadeIn(200);\n  }), global_defineProperty(_AntiMailingList, \"closeOverlay\", function closeOverlay() {\n    this.overlayBox.stop(true).fadeOut(200);\n    this.overlayHider.stop(true).fadeOut(150);\n  }), global_defineProperty(_AntiMailingList, \"bindForm\", function bindForm() {\n    var self = this;\n    this.form = this.overlayBox.find('form');\n    if (this.form) {\n      this.form.submit(function (e) {\n        e.preventDefault();\n        self.handleSubmit();\n      });\n    }\n  }), global_defineProperty(_AntiMailingList, \"handleSubmit\", function handleSubmit() {\n    var self = this;\n    this._setLoadingState();\n    $.post(this.form.attr('action'), this.form.serialize(), function (data, textStatus, jqXHR) {\n      setTimeout(function () {\n        self._unsetLoadingState();\n        self.form.replaceWith(data);\n        self.bindForm();\n      }, 300);\n    });\n  }), global_defineProperty(_AntiMailingList, \"_setLoadingState\", function _setLoadingState() {\n    this.form.css('opacity', 0.3);\n    this.closeButton.filter('.btn-ml-close').hide();\n    this.loadingIndicator.show();\n  }), global_defineProperty(_AntiMailingList, \"_unsetLoadingState\", function _unsetLoadingState() {\n    this.form.css('opacity', 1);\n    this.closeButton.show();\n    this.loadingIndicator.hide();\n  }), _AntiMailingList);\n  window.Anti = Anti;\n  window.AntiUtil = AntiUtil;\n  window.AntiGlobalSearch = AntiGlobalSearch;\n  window.AntiMailingList = AntiMailingList;\n  $(document).ready(function () {\n    Anti.init();\n    search.start();\n  });\n})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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0FBQ1ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDbkksSUFBSSxFQUFFO0lBQy9DLElBQUksQ0FBQ2xNLGdCQUFnQixDQUFDc0YsSUFBSSxFQUFFO0VBQ2hDLENBQUMsR0FBQXFPLHFCQUFBLENBQUFqTSxnQkFBQSx3QkFFbU
1IsU0FBQXNMLG1CQUFBLEVBQVc7SUFDM0IsSUFBSSxDQUFDeFQsSUFBSSxDQUFDa0ssR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDK0osV0FBVyxDQUFDbk8sSUFBSSxFQUFFO0lBQ3ZCLElBQUksQ0FBQ3RGLGdCQUFnQixDQUFDa00sSUFBSSxFQUFFO0VBQ2hDLENBQUMsR0FBQXhFLGdCQUFBLENBRUo7RUFFRGhCLE1BQU0sQ0FBQ2lCLElBQUksR0FBR0EsSUFBSTtFQUNsQmpCLE1BQU0sQ0FBQ21CLFFBQVEsR0FBR0EsUUFBUTtFQUMxQm5CLE1BQU0sQ0FBQ29ELGdCQUFnQixHQUFHQSxnQkFBZ0I7RUFDMUNwRCxNQUFNLENBQUN1QyxlQUFlLEdBQUdBLGVBQWU7RUFFeEMxQixDQUFDLENBQUNsSSxRQUFRLENBQUMsQ0FBQ2lWLEtBQUssQ0FBQyxZQUFXO0lBQ3pCM00sSUFBSSxDQUFDQyxJQUFJLEVBQUU7SUFDWG5HLFlBQVksRUFBRTtFQUNsQixDQUFDLENBQUM7QUFFTixDQUFDLEVBQUU4UyxNQUFNLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hbnRpLy4vYW50aS9zdGF0aWMvanMvc2VhcmNoL2N1c3RvbVNlYXJjaGJveC5qcz8yMjExIiwid2VicGFjazovL2FudGkvLi9hbnRpL3N0YXRpYy9qcy9zZWFyY2gvcXVpY2tTZWFyY2guanM/MWZkMSIsIndlYnBhY2s6Ly9hbnRpLy4vYW50aS9zdGF0aWMvanMvc2VhcmNoL3NpdGVTZWFyY2guanM/ZGQ5ZiIsIndlYnBhY2s6Ly9hbnRpLy4vYW50aS9zdGF0aWMvanMvc2VhcmNoL3NlYXJjaENsaWVudC5qcz84ZmM2Iiwid2VicGFjazovL2FudGkvLi9hbnRpL3N0YXRpYy9qcy9nbG9iYWwuanM/OTMzNiJdLCJzb3VyY2VzQ29udGVudCI6WyJcbi8vIENyZWF0ZSBhIHJlbmRlciBmdW5jdGlvblxuY29uc3QgcmVuZGVyU2VhcmNoQm94ID0gKHJlbmRlck9wdGlvbnMsIGlzRmlyc3RSZW5kZXIpID0+IHtcbiAgICBjb25zdCB7IHF1ZXJ5LCByZWZpbmUsIGNsZWFyLCBpc1NlYXJjaFN0YWxsZWQsIHdpZGdldFBhcmFtcyB9ID0gcmVuZGVyT3B0aW9ucztcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHdpZGdldFBhcmFtcy5jb250YWluZXIpXG5cbiAgICBpZiAoaXNGaXJzdFJlbmRlcikge1xuICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpXG4gICAgICAgIGZvcm0uY2xhc3NMaXN0LmFkZCgnYWlzLVNlYXJjaEJveC1mb3JtJylcbiAgICAgICAgZm9ybS5hY3Rpb24gPSBcIi9zZWFyY2gvXCJcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnYWlzLVNlYXJjaEJveC1pbnB1dCcpXG4gICAgICAgIGlucHV0Lm5hbWUgPSBcInF1ZXJ5XCI7XG4gICAgICAgIGlucHV0LnBsYWNlaG9sZGVyID0gd2lkZ2V0UGFyYW1zLnBsYWNlaG9sZGVyID8/ICdTZWFyY2gnXG5cbiAgICAgICAgY29uc3QgbG9hZGluZ0luZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbG9hZGluZ0luZGljYXRvci50ZXh0Q29udGVudCA9ICdMb2FkaW5nLi4uJztcblxuICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgYnV0dG9uLnR5cGUgPSAnc3VibWl0J1xuICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnYWlzLVNlYXJjaEJveC1zdWJtaXQnKVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIHJlc2V0QnV0dG9uLnR5cGUgPSAncmVzZXQnXG4gICAgICAgIHJlc2V0QnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2Fpcy1TZWFyY2hCb3gtcmVzZXQnKVxuXG4gICAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgLy8gZmlsdGVyIHNlYXJjaGJvdCB0cmFmZmljXG4gICAgICAgICAgICBpZiAoL1tcXHUzMTMxLVxcdUQ3OURdKyQvLnRlc3QoZXZlbnQudGFyZ2V0LnZhbHVlKSA9PSB0cnVlIHx8IGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGggPiAyMCl7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYHNraXBwZWQgc2VhcmNoICR7ZXZlbnQudGFyZ2V0LnZhbHVlfWApXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICByZWZpbmUoZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgZm9ybS5zdWJtaXQoKVxuICAgICAgICB9KTtcblxuICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChsb2FkaW5nSW5kaWNhdG9yKTtcbiAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChidXR0b24pO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZm9ybSlcbiAgICB9XG5cbiAgICBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZSA9IHF1ZXJ5O1xuICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzcGFuJykuaGlkZGVuID0gIWlzU2VhcmNoU3RhbGxlZDtcbn07XG5cbiAgICAgIC8vIGNyZWF0ZSBjdXN0b20gd2lkZ2V0XG5leHBvcnQgY29uc3QgY3VzdG9tU2VhcmNoQm94ID0gaW5zdGFudHNlYXJjaC5jb25uZWN0b3JzLmNvbm5lY3RTZWFyY2hCb3goIHJlbmRlclNlYXJjaEJveCApOyIsImltcG9ydCB7IGNhdGVnb3J5TGlzdCB9IGZyb20gJy4vc2VhcmNoQ2xpZW50J1xuaW1wb3J0IHsgY3VzdG9tU2VhcmNoQm94IH0gZnJvbSAnLi9jdXN0b21TZWFyY2hib3gnXG5cbmV4cG9ydCBjb25zdCBxdWlja1NlYXJjaCA9IGZ1bmN0aW9uKGFsZ29saWFDbGllbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5hbGdvbGlhQ2xpZW50LFxuICAgICAgICBzZWFyY2gocmVxdWVzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaEJveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNhbnRpLXNlYXJjaCcpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0cy5ldmVyeSgoeyBwYXJhbXMgfSkgPT4gIXBhcmFtcy5xdWVyeSkpIHtcbiAgICAgICAgICAgICAgICBzZWFyY2hCb3guY2xhc3NMaXN0LnJlbW92ZSgnc2VhcmNoaW5nJylcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0czogcmVxdWVzdHMubWFwKCgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iSGl0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iUGFnZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1RpbWVNUzogMCxcbiAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgI
1H0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBzZWFyY2hCb3guY2xhc3NMaXN0LmFkZCgnc2VhcmNoaW5nJylcbiAgICAgICAgICAgIHJldHVybiBhbGdvbGlhQ2xpZW50LnNlYXJjaChyZXF1ZXN0cylcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbmNvbnN0IGF1dG9jb21wbGV0ZSA9IGluc3RhbnRzZWFyY2guY29ubmVjdG9ycy5jb25uZWN0QXV0b2NvbXBsZXRlKFxuKHsgaW5kaWNlcywgcmVmaW5lLCB3aWRnZXRQYXJhbXMgfSwgaXNGaXJzdFJlbmRlcmluZykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lciwgb25TZWxlY3RDaGFuZ2UgfSA9IHdpZGdldFBhcmFtcztcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lcik7XG4gICAgICAgIGNvbnRhaW5lckVsLmlubmVySFRNTCA9IFwiXCJcbiAgICAgICAgY29uc3QgdWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd1bCcpO1xuICAgICAgICBjb25zdCBzZWVBbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgICAgICAgaWYoIGluZGljZXMubGVuZ3RoICYmIGluZGljZXNbMF0uaGl0cy5sZW5ndGggKXtcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSByZXN1bHRzLCBjcmVhdGUgdGhlICdzZWUgYWxsJyBsaW5rXG4gICAgICAgICAgICBzZWVBbGwuaW5uZXJIVE1MID0gYFNlZSBhbGwgJHtpbmRpY2VzWzBdLnJlc3VsdHMubmJIaXRzfSByZXN1bHRzYDtcbiAgICAgICAgICAgIHNlZUFsbC5ocmVmID0gYC9zZWFyY2gvP3F1ZXJ5PSR7aW5kaWNlc1swXS5yZXN1bHRzLnF1ZXJ5fWBcbiAgICAgICAgICAgIHNlZUFsbC5jbGFzc0xpc3QuYWRkKCdzZWUtYWxsJylcbiAgICAgICAgICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHNlZUFsbClcbiAgICAgICAgICAgIGNvbnRhaW5lckVsLmFwcGVuZENoaWxkKHVsKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRmlyc3RSZW5kZXJpbmcpIHtcbiAgICAgICAgICAgIC8vICBIZXJlIGlzIHdoZXJlIHlvdSBhdHRhY2gganF1ZXJ5IG9yIDNyZCBsaWJyYXJ5IG9yIGNsaWNrIGV2ZW50c1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlzdCA9IGNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3IoJ3VsJylcblxuICAgICAgICBpbmRpY2VzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgLy8gZm9yIGVhY2ggc2V0IG9mIHJlc3VsdHMsIGNyZWF0ZSBhIGxpc3RcbiAgICAgICAgICAgIGlmIChpbmRleC5yZXN1bHRzLmhpdHMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKVxuXG4gICAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGluZGV4LnJlc3VsdHMucGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB1cmxQYXJhbXMuZ2V0KCdmaWx0ZXJzJylcbiAgICAgICAgICAgIC8vIGZpbmQgdGhlIGNhdGVnb3J5IG5hbWUgZnJvbSB0aGUgZmlsdGVyXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGZpbHRlcnMgJiYgZmlsdGVycy5zcGxpdCgnOicpLmxlbmd0aCAmJiBmaWx0ZXJzLnNwbGl0KCc6JykucG9wKClcbiAgICAgICAgICAgIGxpLmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz1cImxmXCI+JHtjYXRlZ29yeSA/IGNhdGVnb3J5IDogJ1RvcCBIaXQnfTwvc3Bhbj5gXG5cbiAgICAgICAgICAgIGluZGV4LnJlc3VsdHMuaGl0cy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIGhpdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gaGl0LnVybDtcbiAgICAgICAgICAgICAgICAgICAgbGluay5pbm5lckhUTUwgPSBoaXQudGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmspXG4gICAgICAgICAgICAgICAgICAgIGxpLmFwcGVuZENoaWxkKGxpbmspXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaSlcbiAgICAgICAgICAgIGxpc3QuYXBwZW5kQ2hpbGQobGkpXG4gICAgICAgIH0pO1xuICAgIH1cbik7XG5cblxuY29uc3QgZ2V0Q2F0ZWdvcnlXaWRnZXRMaXN0ID0gKCkgPT4ge1xuICAgIGxldCB3aWRnZXRzID0gW11cbiAgICBjYXRlZ29yeUxpc3QubWFwKCAobG9vcENhdGVnb3J5LCBpKSA9PiB7XG4gICAgICAgIHdpZGdldHMucHVzaChcbiAgICAgICAgICAgIGluc3RhbnRzZWFyY2gud2lkZ2V0cy5pbmRleCh7IGluZGV4TmFtZTogXCJhbnRpXCIgfSlcbiAgICAgICAgICAgICAgICAuYWRkV2lkZ2V0cyhbIFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuY29uZmlndXJlKHtmaWx0ZXJzOiBgY2F0ZWdvcnk6JHtsb29wQ2F0ZWdvcnl9YCwgaGl0c1BlclBhZ2U6IDJ9KSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICApfVxuICAgIClcbiAgICByZXR1cm4gd2lkZ2V0c1xufVxuXG5leHBvcnQgY29uc3QgZ2V0V2lkZ2V0TGlzdCA9ICgpID0+IHtcbiAgICBsZXQgd2lkZ2V0TGlzdCA9IFtcbiAgICAgICAgY3VzdG9tU2VhcmNoQm94KHsgY29udGFpbmVyOiAnI3F1aWNrU2VhcmNoLWlucHV0JywgfSksXG4gICAgICAgIGluc3RhbnRzZWFyY2gud2lkZ2V0cy5jb25maWd1cmUoe1xuICAgICAgICAgICAgaGl0c1BlclBhZ2U6IDEsXG4gICAgICAgIH0pLFxuICAgICAgICBhdXRvY29tcGxldGUoe1xuICAgICAgICAgICAgY29udGFpbmVyOiAnI3F1aWNrU2VhcmNoLWhpdHMnLFxuICAgICAgICB9KSxcbiAgICBdXG4gICAgY29uc3QgY2F0V2lkZ2V0cyA9IGdldENhdGVnb3J5V2lkZ2V0TGlzdCgpXG4gICAgLy8gY29uc29sZS5sb2coY2F0V2lkZ2V0cylcbiAgICByZXR1cm4gWy4uLndpZGdldExpc3QsIC4uLmNhdFdpZGdldHNdXG59IiwiaW1wb3J0IHsgY2F0ZWdvcnlMaXN0IH0gZnJvbSAnLi9zZWFyY2hDbGllbnQnXG5pbXBvcnQgeyBjdXN0b21TZWFyY2hCb3ggfSBmcm9tICcuL2N1c3RvbVNlYXJjaGJveC
1dcblxuXG5leHBvcnQgY29uc3QgaXRlbVRlbXBsYXRlcyA9IHtcbiAgICBhcnRpc3Q6IGBcbiAgICAgICAgICA8YSBocmVmPVwie3sgdXJsIH19XCI+PGltZyBzcmM9XCJ7eyBpbWFnZV91cmwgfX1cIiB3aWR0aD1cIjIyOFwiIGhlaWdodD1cIjEyN1wiIGFsdD1cInt7IHRpdGxlIH19XCI+PC9hPlxuICAgICAgICAgIDxoND48YSBocmVmPVwie3sgdXJsIH19XCI+e3sgdGl0bGUgfX08L2E+PC9oND5cbiAgICAgIGAsXG4gICAgcmVsZWFzZTogYFxuICAgICAgICAgIHt7XmlzX2hpZGRlbn19PGEgaHJlZj1cInt7IHVybCB9fVwiPnt7L2lzX2hpZGRlbn19PGltZyBzcmM9XCJ7e2ltYWdlX3VybH19XCIgd2lkdGg9XCIxMzhcIiBoZWlnaHQ9XCIxMzhcIiBhbHQ9XCJ7eyBuYW1lIH19XCI+e3teaXNfaGlkZGVufX08L2E+e3svaXNfaGlkZGVufX1cbiAgICAgICAgICA8aDQ+e3teaXNfaGlkZGVufX08YSBocmVmPVwie3sgdXJsIH19XCI+e3svaXNfaGlkZGVufX17eyB0aXRsZSB9fXt7XmlzX2hpZGRlbn19PC9hPnt7L2lzX2hpZGRlbn19PC9oND5cbiAgICAgICAgICA8aDU+PGEgaHJlZj1cInt7IGFydGlzdF91cmwgfX1cIj57eyBhcnRpc3QgfX08L2E+PC9oNT5cbiAgICAgIGAsXG5cbiAgICBuZXdzOiBgXG4gICAgICAgIDxhIGhyZWY9XCJ7eyB1cmwgfX1cIj57eyB0aXRsZSB9fTwvYT5cbiAgICAgIGAsXG4gICAgdmlkZW86IGBcbiAgICAgICAge3sjZHVyYXRpb259fTxzcGFuIGNsYXNzPVwibnVtXCI+e3sgZHVyYXRpb24gfX08L3NwYW4+e3svZHVyYXRpb259fVxuICAgICAgICA8YSBocmVmPVwie3sgdXJsIH19XCI+PGltZyBzcmM9XCJ7e2ltYWdlX3VybH19XCIgd2lkdGg9XCIyMjhcIiBoZWlnaHQ9XCIxMjdcIiBhbHQ9XCJ7eyB0aXRsZSB9fVwiPjwvYT5cbiAgICAgICAgPGg0PjxhIGhyZWY9XCJ7eyB1cmwgfX1cIj57eyB0aXRsZSB9fTwvYT48L2g0PlxuICAgICAgYCxcbiAgICB0cmFjazogYFxuICAgICAgICA8c3BhbiBjbGFzcz1cInJmIGxlbmd0aFwiPnt7IG5pY2VfZHVyYXRpb24gfX08L3NwYW4+XG4gICAgICAgIHt7I2NvbnRlbnR9fTxzcGFuIGNsYXNzPVwicmZcIj48YSBocmVmPVwie3sgdXJsIH19I2x5cmljc1wiPkx5cmljczwvYT48L3NwYW4+e3svY29udGVudH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmZcIj48YSBocmVmPVwie3sgdXJsIH19XCI+VHJhY2sgRGV0YWlsczwvYT48L3NwYW4+XG4gICAgICAgIDxhIGhyZWY9XCJ7eyB1cmwgfX1cIj57eyBhcnRpc3QgfX0gLSB7eyB0aXRsZSB9fTwvYT4gICAgXG4gICAgIGAsXG4gICAgc2hvdzogYFxuICAgIDxkaXYgY2xhc3M9XCJkYXRlLWl0ZW0gY2xlYXJmaXhcIj5cbiAgICAgICAgPGg0Pnt7IGRhdGVfZm9ybWF0dGVkIH19IC0ge3sgbW9udGhfZm9ybWF0dGVkIH19PC9oND5cbiAgICAgICAgPHRhYmxlPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFydFwiPjxhIGhyZWY9XCJ7eyBhcnRpc3RfdXJsIH19XCI+e3sgdGl0bGUgfX08L2E+PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsb2NcIj57eyBsb2NhdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidmVuXCI+e3sjdXJsfX08YSBocmVmPVwie3sgdXJsIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3svdXJsfX17eyBjb250ZW50IH19e3sjdXJsfX08L2E+e3svdXJsfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRpbVwiPnt7IHRpbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImxpbmtcIj57eyNmYWNlYm9va19yc3ZwX3VybH19PGEgaHJlZj1cInt7IGZhY2Vib29rX3JzdnBfdXJsIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCI+UlNWUDwvYT57ey9mYWNlYm9va19yc3ZwX3VybH19Jm5ic3A7PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJsaW5rXCI+e3sjdGlja2V0X3VybH19PGEgaHJlZj1cInt7IHRpY2tldF91cmwgfX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5UaWNrZXRzPC9hPnt7L3RpY2tldF91cmx9fSZuYnNwOzwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuICAgICAgYCxcbiAgICBwcmVzczogYFxuICAgICAgICA8YSBocmVmPVwie3sgdXJsIH19XCI+e3sgdGl0bGUgfX08L2E+XG4gICAgICBgLFxufVxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdpZGdldExpc3QoY2F0ZWdvcnksIHNpdGVTZWFyY2hQYXJhbXMpIHtcbiAgICBsZXQgd2lkZ2V0TGlzdCA9IFtcbiAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLmNvbmZpZ3VyZSggc2l0ZVNlYXJjaFBhcmFtcyApLFxuICAgICAgICBjdXN0b21TZWFyY2hCb3goeyBjb250YWluZXI6ICcjcXVpY2tTZWFyY2gtaW5wdXQnIH0pLFxuICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuc3RhdHMoe1xuICAgICAgICAgICAgY29udGFpbmVyOiAnaDEuYm90Ym9yZGVyJyxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIHRleHQ6IChzdGF0cykgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY2F0TGFiZWwgPSBjYXRlZ29yeSA/IGBJbiAnJHtjYXRlZ29yeX0nYCA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwic21sXCI+JHsgc3RhdHMubmJIaXRzIH0gc2VhcmNoIHJlc3VsdHMgJHtjYXRMYWJlbH0gZm9yIDwvc3Bhbj4mbGRxdW87JHtzdGF0cy5xdWVyeX0mcmRxdW87YFxuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuaGl0cyh7XG4gICAgICAgICAgICBjb250YWluZXI6ICcubm8tcmVzdWx0cycsXG4gICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgZW1wdHk6IGBcbiAgICAgICAgICAgICAgPGFydGljbGUgY2xhc3M9XCJhcnQtc3RuZCBhcnQtc3RuZC13aGl0ZSBuby1zZWFyY2gtcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8aDM+U29ycnkhPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBzZWFyY2ggcmVzdWx0cyB3ZXJlIGZvdW5kIGZvciBcInt7IHF1ZXJ5IH19XCIuPGJyPnBsZWFzZSB0cnkgYWdhaW4gLi4uPC9wPlxuICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgICAgYCxcbiAgICAgICAgICAgICAgaXRlbTogJydcbiAgICAgICAgICAgI
1H1cbiAgICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgXG4gICAgXVxuICAgIGlmIChjYXRlZ29yeSkge1xuICAgICAgICBjb25zdCBzaW5nbGVDYXRMaXN0ID0gW1xuICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLnN0YXRzKHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGAuZmlsdGVyLXN0bmQgLmFsbCAubnVtYCxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiBcIiZsYXJyO1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksICAgICAgICAgICAgXG4gICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuY29uZmlndXJlKHtmaWx0ZXJzOiBgY2F0ZWdvcnk6JHtjYXRlZ29yeX1gfSksXG4gICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuc3RhdHMoe1xuICAgICAgICAgICAgY29udGFpbmVyOiBgIyR7Y2F0ZWdvcnl9IC5taW5pLWZ1bmNgLFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiB7IFxuICAgICAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgICBEaXNwbGF5aW5nIDxiPiR7c3RhdHMubmJIaXRzfTwvYj4gb2YgPGI+JHtzdGF0cy5uYkhpdHN9PC9iPiByZXN1bHRzIHwgPGEgaHJlZj1cIi9zZWFyY2gvLz9xdWVyeT0ke3N0YXRzLnF1ZXJ5fVwiPkJhY2sgdG9cbiAgICAgICAgICAgICAgICAgIEFsbCBSZXN1bHRzPC9hPiAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuaW5maW5pdGVIaXRzKHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogYCMke2NhdGVnb3J5fSAucmVzdWx0LWl0ZW1zYCxcbiAgICAgICAgICAgIGVzY2FwZUhUTUw6IGZhbHNlLFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbVRlbXBsYXRlc1tjYXRlZ29yeV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgICAgd2lkZ2V0TGlzdCA9IFsgLi4ud2lkZ2V0TGlzdCwgLi4uc2luZ2xlQ2F0TGlzdF1cbiAgICB9ZWxzZXtcbiAgICAgICAgd2lkZ2V0TGlzdC5wdXNoKFxuICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLnN0YXRzKHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGAuZmlsdGVyLXN0bmQgLmFsbCAubnVtYCxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiBzdGF0cy5uYkhpdHMgfHwgJzAnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBjYXRlZ29yeUxpc3QubWFwKCAobG9vcENhdGVnb3J5LCBpKSA9PiB7XG4gICAgICAgICAgICB3aWRnZXRMaXN0LnB1c2goXG4gICAgICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLmluZGV4KHtcbiAgICAgICAgICAgICAgICBpbmRleE5hbWU6ICdhbnRpJ1xuICAgICAgICAgICAgICAgIH0pLmFkZFdpZGdldHMoWyBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpbnN0YW50c2VhcmNoLndpZGdldHMuY29uZmlndXJlKHtmaWx0ZXJzOiBgY2F0ZWdvcnk6JHtsb29wQ2F0ZWdvcnl9YH0pLFxuICAgICAgICAgICAgICAgIGluc3RhbnRzZWFyY2gud2lkZ2V0cy5zdGF0cyh7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogYCMke2xvb3BDYXRlZ29yeX0gLm1pbmktZnVuY2AsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiAoc3RhdHMpID0+IHsgXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJfbWVudS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXlpbmcgXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIl9jb3VudFwiPiR7TWF0aC5taW4oc3RhdHMubmJIaXRzLHN0YXRzLmhpdHNQZXJQYWdlKX08L3NwYW4+IFxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgPHNwYW4gY2xhc3M9XCJfY291bnRcIj4ke3N0YXRzLm5iSGl0c308L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiL3NlYXJjaC8ke2xvb3BDYXRlZ29yeX0/cXVlcnk9JHtzdGF0cy5xdWVyeX1cIiBjbGFzcz1cIl9zZWFyY2gtYWxsXCI+U2VlIEFsbDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLnN0YXRzKHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBgLmZpbHRlci1zdG5kIC4ke2xvb3BDYXRlZ29yeX0gLm51bWAsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogKHN0YXRzKSA9PiBzdGF0cy5uYkhpdHMgfHwgJzAnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSwgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaW5zdGFudHNlYXJjaC53aWRnZXRzLmhpdHMoe1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IGAjJHtsb29wQ2F0ZWdvcnl9IC5yZXN1bHQtaXRlbXNgLFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGVIVE1MOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW1UZW1wbGF0ZXNbbG9vcENhdGVnb3J5XSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0TGlzdFxufVxuXG5leHBvcnQgY29uc3Qgc2l0ZVNlYXJjaCA9IChhbGdvbGlhQ2xpZW50KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYWxnb2xpYUNsaWVudCxcbiAgICAgICAgc2VhcmNoKHJlcXVlc3RzKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hCb3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjYW50aS1zZWFyY2gnKVxuICAgICAgICAgICAgLy8gZmlsdGVyIHNlYXJjaGJvdCB0cmFmZmljXG4gICAgICAgICAgICBpZiAocmVxdWVzdHMuZXZlcnkoKHsgcGFyYW1zIH0pID0+ICghcGFyYW1zLnF1ZXJ5IHx8IC9bXFx1MzEzMS1cXHVENzlEXSskLy50ZXN0KHBhcmFtcy5xdWVyeSkgPT0gdHJ1ZSB8fCBwYXJhbXMucXVlcnkubGVuZ3RoID4gMjApKSkge1xuICAgICAgICAgICAgICAgI
1HNlYXJjaEJveC5jbGFzc0xpc3QucmVtb3ZlKCdzZWFyY2hpbmcnKVxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzOiByZXF1ZXN0cy5tYXAoKGksZWwpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iSGl0czogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5iUGFnZXM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1RpbWVNUzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBpLnBhcmFtcy5xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHNlYXJjaEJveC5jbGFzc0xpc3QuYWRkKCdzZWFyY2hpbmcnKVxuICAgICAgICAgICAgcmV0dXJuIGFsZ29saWFDbGllbnQuc2VhcmNoKHJlcXVlc3RzKVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogZ2xvYmFsIGFsZ29saWFzZWFyY2ggaW5zdGFudHNlYXJjaCAqL1xuaW1wb3J0IHsgcXVpY2tTZWFyY2gsIGdldFdpZGdldExpc3QgYXMgcXVpY2tTZWFyY2hXaWRnZXRMaXN0IH0gZnJvbSAnLi9xdWlja1NlYXJjaCdcbmltcG9ydCB7IHNpdGVTZWFyY2gsIGdldFdpZGdldExpc3QgYXMgc2l0ZVNlYXJjaFdpZGdldExpc3QgfSBmcm9tICcuL3NpdGVTZWFyY2gnXG5cbmV4cG9ydCBjb25zdCBjYXRlZ29yeUxpc3QgPSBbXG4gICAgJ2FydGlzdCcsICdyZWxlYXNlJywgJ3Nob3cnLCAndmlkZW8nLCAgJ3RyYWNrJywgJ25ld3MnLCAncHJlc3MnXG5dO1xuXG5jb25zdCBtYXRjaGVzID0gLyg/Ol5cXC9zZWFyY2hcXC8pKFxcdyspL2cuZXhlYyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpXG5jb25zdCBjYXRlZ29yeSA9IG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAxICYmIG1hdGNoZXNbMV1cblxuY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKVxuY29uc3QgcXVlcnkgPSB1cmxQYXJhbXMuZ2V0KCdxdWVyeScpIHx8IHVybFBhcmFtcy5nZXQoJ3EnKVxuXG5sZXQgc2l0ZVNlYXJjaFBhcmFtcyA9IHtcbiAgICBoaXRzUGVyUGFnZTogNixcbiAgICBxdWVyeTogcXVlcnlcbn1cblxuY29uc3QgYWxnb2xpYUNsaWVudCA9IGFsZ29saWFzZWFyY2goXG4gICAgd2luZG93LkFudGlEYXRhLkFMR09MSUFfQVBQTElDQVRJT05fSUQsIFxuICAgIHdpbmRvdy5BbnRpRGF0YS5BTEdPTElBX0FQSV9LRVlfU0VBUkNIXG4pXG5cbmNvbnN0IGlzUXVpY2tTZWFyY2ggPSAhd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy9zZWFyY2gvJykgXG5jb25zdCBzZWFyY2hDbGllbnQgPSBpc1F1aWNrU2VhcmNoID8gcXVpY2tTZWFyY2goYWxnb2xpYUNsaWVudCkgOiBzaXRlU2VhcmNoKGFsZ29saWFDbGllbnQpXG5cbmV4cG9ydCBjb25zdCBzZWFyY2ggPSBpbnN0YW50c2VhcmNoKHtcbiAgICBpbmRleE5hbWU6IGNhdGVnb3J5ID09IFwibmV3c1wiID8gXCJhbnRpXCIgOiBcImFudGlcIixcbiAgICBzZWFyY2hDbGllbnQ6IHNlYXJjaENsaWVudCxcbiAgICBpbml0aWFsVWlTdGF0ZToge1xuICAgICAgICBhbnRpOiBzaXRlU2VhcmNoUGFyYW1zLFxuICAgIH0gICAgXG59KVxuXG5jb25zdCB3aWRnZXRMaXN0ID0gaXNRdWlja1NlYXJjaCA/IHF1aWNrU2VhcmNoV2lkZ2V0TGlzdCgpIDogc2l0ZVNlYXJjaFdpZGdldExpc3QoY2F0ZWdvcnksIHNpdGVTZWFyY2hQYXJhbXMpXG5cbnNlYXJjaC5hZGRXaWRnZXRzKFtcbiAgICAuLi53aWRnZXRMaXN0XG5dKVxuXG5cbnNlYXJjaC5vbigncmVuZGVyJywgKCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaEJveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hbGdvbGlhLXNlYXJjaCcpXG4gICAgZm9yKGxldCBpPTA7aTxjYXRlZ29yeUxpc3QubGVuZ3RoO2krKyl7XG4gICAgICAgIGlmICgkKGAjJHtjYXRlZ29yeUxpc3RbaV19IC5yZXN1bHQtaXRlbXMgbGlgKS5sZW5ndGggPCAxKSB7XG5cbiAgICAgICAgICAgIGxldCByZXN1bHRMaXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7Y2F0ZWdvcnlMaXN0W2ldfWApXG4gICAgICAgICAgICBpZiAocmVzdWx0TGlzdCkgcmVzdWx0TGlzdC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKVxuICAgICAgICAgICAgbGV0IHJlc3VsdEZpbHRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5maWx0ZXItc3RuZCAuJHtjYXRlZ29yeUxpc3RbaV19YClcbiAgICAgICAgICAgIGlmIChyZXN1bHRGaWx0ZXIpIHJlc3VsdEZpbHRlci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKVxuXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbGV0IHJlc3VsdExpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtjYXRlZ29yeUxpc3RbaV19YClcbiAgICAgICAgICAgIGlmIChyZXN1bHRMaXN0KSByZXN1bHRMaXN0LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpXG4gICAgICAgICAgICBsZXQgcmVzdWx0RmlsdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLmZpbHRlci1zdG5kIC4ke2NhdGVnb3J5TGlzdFtpXX1gKVxuICAgICAgICAgICAgaWYgKHJlc3VsdEZpbHRlcikgcmVzdWx0RmlsdGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpXG4gICAgICAgIH1cbiAgICB9XG59KSIsIi8qKlxuICogIEFOVEktXG4gKiAgSGFuZGxlcyBhbGwgZ2xvYmFsIGJlaGF2aW9ycyBhbmQgcHJvcGVydGllcyBmb3IgQU5USS1cbiAqXG4gKiAgRGVwZW5kZW5jaWVzOlxuICogICAgICBqUXVlcnkgMS43LjFcbiAqICAgICAganF1ZXJ5LmluZmluaXRlc2Nyb2xsLmpzXG4gKi9cbmltcG9ydCB7IHNlYXJjaCB9IGZyb20gJy4vc2VhcmNoL3NlYXJjaENsaWVudC5qcyc7XG5cbihmdW5jdGlvbigkKSB7XG5cbiAgICB2YXIgQW50aSA9IHtcblxuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY3JhcHB5IHNhZmFyaSBjdXN0b20gZm9udHMgaW4gdGV4dCBpbnB1dCBoYW5kbGluZ1xuICAgICAgICAgICAgaWYgKEFudGlVdGlsLmRldGVjdF9zYWZhcmkoKSkge1xuICAgICAgICAgICAgICAgICQoJ1twbGFjZWhvbGRlcl0nKS5lYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBoVmFsI
1D0gJCh0aGlzKS5hdHRyKCdwbGFjZWhvbGRlcicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3ZhbHVlJyxwaFZhbCk7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cigncGxhY2Vob2xkZXInLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5mb2N1cyhmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpID09ICQodGhpcylbMF0uZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KS5ibHVyKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkudHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykudmFsKCQodGhpcylbMF0uZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNyYXBweSB3aW5kb3dzIGZvbnQgaGFuZGxpbmdcbiAgICAgICAgICAgIGlmIChBbnRpVXRpbC5kZXRlY3Rfd2luZm9udCgpKSB7XG4gICAgICAgICAgICAgICAgJCgnaHRtbCcpLmFkZENsYXNzKCd3aW5mb250cycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBnbG9iYWwgbmF2XG4gICAgICAgICAgICBpZiAoJCgnaHRtbCcpLmhhc0NsYXNzKCdpZTYnKSB8fCAkKCdodG1sJykuaGFzQ2xhc3MoJ2llNycpIHx8ICQoJ2h0bWwnKS5oYXNDbGFzcygnaWU4JykpIHtcbiAgICAgICAgICAgICAgICBBbnRpLnN0aWNreV9uYXZfaWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgQW50aS5zdGlja3lfbmF2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBsYXN0IGNoaWxkIGhhbmRsZXJcbiAgICAgICAgICAgIEFudGlVdGlsLmxpc3RfbGFzdGNoaWxkKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBzaWRlYmFyIGFjY29yZGlvbiBoYW5kbGVyXG4gICAgICAgICAgICBBbnRpVXRpbC5zaWRlYmFyX2FjY29yZGlvbigpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBnbG9iYWwgZmlsdGVyIGFjY29yZGlvbiBoYW5kbGVyXG4gICAgICAgICAgICBBbnRpVXRpbC5maWx0ZXJfYWNjb3JkaW9uKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBzb2NpYWwgaWNvbnMgKHRoaXMgaXMgZHVlIHRvIElFIGJ1Z3MpXG4gICAgICAgICAgICBBbnRpLnN0bmRfc29jaWFsKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGdsb2JhbCBtYWlsaW5nIGxpc3RcbiAgICAgICAgICAgIEFudGlNYWlsaW5nTGlzdC5pbml0KCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICB3ZWJmb250X2FjdGl2ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBBbnRpLmFydGljbGVfcmVzaXplcigpO1xuICAgICAgICAgICAgQW50aS5hbGJ1bV9jYXJvdXNlbF9zZXRoZWlnaHQoKTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIHdlYmZvbnRfaW5hY3RpdmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgQW50aS5hcnRpY2xlX3Jlc2l6ZXIoKTtcbiAgICAgICAgICAgIEFudGkuYWxidW1fY2Fyb3VzZWxfc2V0aGVpZ2h0KCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBzdGlja3lfbmF2IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2Y
1XIgc05hdiA9ICQoJ25hdicpO1xuICAgICAgICAgICAgdmFyIHNOYXZBbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICQod2luZG93KS5iaW5kKCdzY3JvbGwnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA+PSAxMDAgJiYgIXNOYXYuaGFzQ2xhc3MoJ3N0aWNreW5hdicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNOYXYuYWRkQ2xhc3MoJ3N0aWNreW5hdicpO1xuICAgICAgICAgICAgICAgICAgICBzTmF2LmNzcygndG9wJywnLTUwcHgnKTtcbiAgICAgICAgICAgICAgICAgICAgc05hdi5hbmltYXRlKHsndG9wJzowLGF2b2lkVHJhbnNmb3Jtczp0cnVlfSwgMjAwLCAnc3dpbmcnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA8IDMwICYmIHNOYXYuaGFzQ2xhc3MoJ3N0aWNreW5hdicpICYgIXNOYXZBbmltYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgc05hdkFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNOYXYuYW5pbWF0ZSh7J3RvcCc6Jy01MHB4Jyxhdm9pZFRyYW5zZm9ybXM6dHJ1ZX0sIDE1MCwgJ3N3aW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzTmF2QW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzTmF2LnJlbW92ZUNsYXNzKCdzdGlja3luYXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNOYXYuY3NzKHsndG9wJzonNDlweCcsJ29wYWNpdHknOjB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNOYXYuYW5pbWF0ZSh7J29wYWNpdHknOjEsYXZvaWRUcmFuc2Zvcm1zOnRydWV9LCAzMDApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgQW50aUdsb2JhbFNlYXJjaC5pbml0KCk7XG5cbiAgICAgICAgfSxcblxuICAgICAgICBzdGlja3lfbmF2X2llIDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2Y
1XIgc05hdiA9ICQoJ25hdicpO1xuICAgICAgICAgICAgJCh3aW5kb3cpLmJpbmQoJ3Njcm9sbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJCh3aW5kb3cpLnNjcm9sbFRvcCgpID49IDQ4ICYmICFzTmF2Lmhhc0NsYXNzKCdzdGlja3luYXYnKSkge1xuICAgICAgICAgICAgICAgICAgICBzTmF2LmFkZENsYXNzKCdzdGlja3luYXYnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQod2luZG93KS5zY3JvbGxUb3AoKSA8IDQ4ICYmIHNOYXYuaGFzQ2xhc3MoJ3N0aWNreW5hdicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNOYXYucmVtb3ZlQ2xhc3MoJ3N0aWNreW5hdicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGFsYnVtX2Nhcm91c2VsIDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIGlmICgkKCcuYWxidW0tY2Fyb3VzZWwnKS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBtdWx0aXBsZSBjYXJvdXNlbHNcbiAgICAgICAgICAgICAgICAkKCcuYWxidW0tY2Fyb3VzZWwnKS5lYWNoKGZ1bmN0aW9uKGUpIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxCb3ggPSAkKGVsKS5maW5kKCcuYWxidW0taXRlbXMnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94U2hvd24gPSA1O1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgZWxCb3hTbGlkZUxlbmd0aCA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94U2VsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94TGVuZ3RoID0gJChlbEJveCkuY2hpbGRyZW4oJ2RpdicpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94QW5pID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbEJveE9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbEJveFNsaWRlTGVuZ3RoVG90YWwsIGVsQm94U2xpZGVTcGVlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoJChlbCkuaGFzQ2xhc3MoJ2FsYnVtLWNhcm91c2VsLWxyZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNob3duID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94U2xpZGVMZW5ndGggPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYXJyb3dcbiAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgnLmFyci1sJykuYWRkQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGJpbmQgYXJyb3dzXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKGVsQm94KS5jaGlsZHJlbignZGl2JykubGVuZ3RoID4gZWxCb3hTaG93bikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCcuYXJyLWwnKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoISQodGhpcykuaGFzQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpKSAmJiAoIWVsQm94QW5pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveEFuaSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94U2xpZGVMZW5ndGhUb3RhbCA9IGVsQm94U2xpZGVMZW5ndGgqZWxCb3hTaG93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZVNwZWVkID0gZWxCb3hTaG93bioxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5hcnItcicpLnJlbW92ZUNsYXNzKCdhcnItZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChlbEJveFNlbC0xKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuZmluZCgnLmFyci1sJykuYWRkQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBjb21wZW5zYXRlIGZvciBhbiB1bmV2ZW4gbnVtYmVyIG9mIGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxCb3hPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZUxlbmd0aFRvdGFsID0gZWxCb3hPZmZzZXQqZWxCb3hTbGlkZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNsaWRlU3BlZWQgPSBlbEJveE9mZnNldCoxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94LnN0b3AodHJ1ZSkuYW5pbWF0ZSh7bGVmdDonKz0nK2VsQm94U2xpZGVMZW5ndGhUb3RhbCsncHgnLGF2b2lkVHJhbnNmb3Jtczp0cnVlfSwgZWxCb3hTbGlkZVNwZWVkLCAnZWFzZUluT3V0UXVhZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTZWwtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94QW5pID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCcuYXJyLXInKS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoISQodGhpcykuaGFzQ2xhc3MoJ2Fyci1kaXNhYmxlZCcpKSAmJiAoIWVsQm94QW5pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveEFuaSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94U2xpZGVMZW5ndGhUb3RhbCA9IGVsQm94U2xpZGVMZW5ndGgqZWxCb3hTaG93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZVNwZWVkID0gZWxCb3hTaG93bioxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5hcnItbCcpLnJlbW92ZUNsYXNzKCdhcnItZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgxK2VsQm94U2VsKSA9PSAoKE1hdGguY2VpbChlbEJveExlbmd0aC9lbEJveFNob3duKSktMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5hcnItcicpLmFkZENsYXNzKCdhcnItZGlzYWJsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgYW4gdW5ldmVuIG51bWJlciBvZiBpdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChlbEJveExlbmd0aCVlbEJveFNob3duKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveE9mZnNldCA9IGVsQm94TGVuZ3RoJWVsQm94U2hvd247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hTbGlkZUxlbmd0aFRvdGFsID0gZWxCb3hPZmZzZXQqZWxCb3hTbGlkZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNsaWRlU3BlZWQgPSBlbEJveE9mZnNldCoxMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3guc3RvcCh0cnVlKS5hbmltYXRlKHtsZWZ0OictPScrZWxCb3hTbGlkZUxlbmd0aFRvdGFsKydweCcsYXZvaWRUcmFuc2Zvcm1zOnRydWV9LCBlbEJveFNsaWRlU3BlZWQsICdlYXNlSW5PdXRRdWFkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbEJveFNlbCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxCb3hBbmkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIGVsZW1lbnRzIHRvIHNsaWRlXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGVsKS5maW5kKCcuYXJyLXInKS5hZGRDbGFzcygnYXJyLWRpc2FibGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LFxuXG4gICAgICAgIGFsYnVtX2Nhcm91c2VsX3NldGhlaWdodCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQoJy5hbGJ1bS1jYXJvdXNlbCcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkKCcuYWxidW0tY2Fyb3VzZWwnKS5lYWNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVsQm94ID0gJChlbCkuZmluZCgnLmFsYnVtLWl0ZW1zJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbEJveEhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICQoZWxCb3gpLmNoaWxkcmVuKCdkaXYnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuaGVpZ2h0KCkgPiBlbEJveEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsQm94SGVpZ2h0ID0gJCh0aGlzKS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICQoZWwpLmZpbmQoJy5pbicpLmNzcygnaGVpZ2h0JyxlbEJveEhlaWdodCsncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgJChlbEJveCkuY3NzKCdoZWlnaHQnLGVsQm94SGVpZ2h0KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAkKGVsQm94KS5jaGlsZHJlbignZGl2JykuY3NzKCdoZWlnaHQnLGVsQm94SGVpZ2h0KydweCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGFydGljbGVfcmVzaXplciA6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICBpZiAoJCgnI2hvbWUtYXJ0aWNsZXMnKS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICAgICAgICB2Y
1XIgcFNpemVDaGFuZ2VGaW5hbCA9IGZ1bmN0aW9uKHRleHRCb3gsdGV4dEJveEhlaWdodCxib3hIZWlnaHQsdGV4dEJveEZTLHRleHRCb3hMSCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZURpZmYgPSBib3hIZWlnaHQgLSB0ZXh0Qm94SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZURpZmYgPiB0ZXh0Qm94TEgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIGZvbnQgc2l6ZSwgZG9uJ3QgaW5jcmVhc2UgbGluZS1oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlNOZXcgPSB0ZXh0Qm94RlMgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0ZXh0Qm94KS5jc3MoJ2ZvbnQtc2l6ZScsdGV4dEJveEZTTmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hIZWlnaHROZXcgPSAkKHRleHRCb3gpLmhlaWdodCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcFNpemVDaGFuZ2VGaW5hbCh0ZXh0Qm94LHRleHRCb3hIZWlnaHROZXcsYm94SGVpZ2h0LHRleHRCb3hGU05ldyx0ZXh0Qm94TEgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpemVEaWZmID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgbGluZS1oZWlnaHQsIGRvbid0IGluY3JlYXNlIGZvbnQgc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hMaW5lc1RvdGFsID0gTWF0aC5mbG9vcih0ZXh0Qm94SGVpZ2h0L3RleHRCb3hMSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveExITmV3ID0gdGV4dEJveExIICsgKE1hdGguZmxvb3Ioc2l6ZURpZmYvdGV4dEJveExpbmVzVG90YWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdsaW5lLWhlaWdodCcsdGV4dEJveExITmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHBTaXplQ2hhbmdlID0gZnVuY3Rpb24odGV4dEJveCx0ZXh0Qm94SGVpZ2h0LGJveEhlaWdodCx0ZXh0Qm94RlMsdGV4dEJveExILGRpcikge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRpciA9PSAnaW5jJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCB0b28gc21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlNOZXcgPSB0ZXh0Qm94RlMgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hMSE5ldyA9IHRleHRCb3hMSCArIDE7XG4gICAgICAgICAgICAgICAgICAgIH0gaWYgKGRpciA9PSAnZGVjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCB0b28gbGFyZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlNOZXcgPSB0ZXh0Qm94RlMgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hMSE5ldyA9IHRleHRCb3hMSCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0ZXh0IGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdmb250LXNpemUnLHRleHRCb3hGU05ldysncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0ZXh0Qm94KS5jc3MoJ2xpbmUtaGVpZ2h0Jyx0ZXh0Qm94TEhOZXcrJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94SGVpZ2h0TmV3ID0gJCh0ZXh0Qm94KS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpemVEaWZmID0gYm94SGVpZ2h0IC0gdGV4dEJveEhlaWdodE5ldztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIG5ldyBzaXplXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXIgPT0gJ2luYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib3hIZWlnaHQgPiB0ZXh0Qm94SGVpZ2h0TmV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCBzdGlsbCB0b28gc21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHROZXcsYm94SGVpZ2h0LHRleHRCb3hGU05ldyx0ZXh0Qm94TEhOZXcsZGlyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0ZXh0Qm94SGVpZ2h0TmV3ID4gYm94SGVpZ2h0KSAmJiAodGV4dEJveEhlaWdodCA8IGJveEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2VudCB0b28gZmFyLCBkZWNyZWFzZSBieSBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hGU05ldyA9IHRleHRCb3hGU05ldyAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94TEhOZXcgPSB0ZXh0Qm94TEhOZXcgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRleHRCb3gpLmNzcygnZm9udC1zaXplJyx0ZXh0Qm94RlNOZXcrJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdsaW5lLWhlaWdodCcsdGV4dEJveExITmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveEhlaWdodE5ldyA9ICQodGV4dEJveCkuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplRGlmZiA9IGJveEhlaWdodCAtIHRleHRCb3hIZWlnaHROZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplRGlmZiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWwgYWRqdXN0bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwU2l6ZUNoYW5nZUZpbmFsKHRleHRCb3gsdGV4dEJveEhlaWdodE5ldyxib3hIZWlnaHQsdGV4dEJveEZTTmV3LHRleHRCb3hMSE5ldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaXIgPT0gJ2RlYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Qm94SGVpZ2h0TmV3ID4gYm94SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dCBzdGlsbCB0b28gbGFyZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHROZXcsYm94SGVpZ2h0LHRleHRCb3hGU05ldyx0ZXh0Qm94TEhOZXcsZGlyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChib3hIZWlnaHQgPiB0ZXh0Qm94SGVpZ2h0TmV3KSAmJiAoYm94SGVpZ2h0ID4gdGV4dEJveEhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2VudCB0b28gZmFyLCBpbmNyZWFzZSBieSBvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRCb3hGU05ldyA9IHRleHRCb3hGU05ldyArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94TEhOZXcgPSB0ZXh0Qm94TEhOZXcgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRleHRCb3gpLmNzcygnZm9udC1zaXplJyx0ZXh0Qm94RlNOZXcrJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGV4dEJveCkuY3NzKCdsaW5lLWhlaWdodCcsdGV4dEJveExITmV3KydweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveEhlaWdodE5ldyA9ICQodGV4dEJveCkuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplRGlmZiA9IGJveEhlaWdodCAtIHRleHRCb3hIZWlnaHROZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplRGlmZiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWwgYWRqdXN0bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwU2l6ZUNoYW5nZUZpbmFsKHRleHRCb3gsdGV4dEJveEhlaWdodE5ldyxib3hIZWlnaHQsdGV4dEJveEZTTmV3LHRleHRCb3hMSE5ldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgJCgnI2hvbWUtYXJ0aWNsZXMgYXJ0aWNsZScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBib3ggPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYm94SGVpZ2h0ID0gKCQoYm94KS5oZWlnaHQoKSkgLSAyMTsgLy8gdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHJlYWQgbW9yZSBsaW5rXG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94ID0gJCh0aGlzKS5jaGlsZHJlbigncCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEJveEhlaWdodCA9ICQodGV4dEJveCkuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Qm94RlMgPSBwYXJzZUludCgkKHRleHRCb3gpLmNzcygnZm9udC1zaXplJykpO1xuICAgICAgICAgICAgICAgICAgICB2Y
1XIgdGV4dEJveExIID0gcGFyc2VJbnQoJCh0ZXh0Qm94KS5jc3MoJ2xpbmUtaGVpZ2h0JykpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEJveExpbmVzVG90YWwgPSBNYXRoLmZsb29yKHRleHRCb3hIZWlnaHQvdGV4dEJveExIKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJveEhlaWdodCA+IHRleHRCb3hIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgaXMgdG9vIHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHQsYm94SGVpZ2h0LHRleHRCb3hGUyx0ZXh0Qm94TEgsJ2luYycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRleHRCb3hIZWlnaHQgPiBib3hIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgaXMgdG9vIGxhcmdlXG4gICAgICAgICAgICAgICAgICAgICAgICBwU2l6ZUNoYW5nZSh0ZXh0Qm94LHRleHRCb3hIZWlnaHQsYm94SGVpZ2h0LHRleHRCb3hGUyx0ZXh0Qm94TEgsJ2RlYycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGxvY2sgcCBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgJCh0ZXh0Qm94KS5jc3MoJ2hlaWdodCcsYm94SGVpZ2h0KydweCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gc2hvdyBhcnRpY2xlc1xuICAgICAgICAgICAgICAgICQoJyNob21lLWFydGljbGVzIGFydGljbGUnKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgJCgnI2hvbWUtYXJ0aWNsZXMgYXJ0aWNsZScpLmNzcygndmlzaWJpbGl0eScsJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICAkKCcjaG9tZS1hcnRpY2xlcyAubG9hZGVyJykuZmFkZU91dCgnZmFzdCcpO1xuICAgICAgICAgICAgICAgICQoJyNob21lLWFydGljbGVzIGFydGljbGUnKS5mYWRlSW4oJ2Zhc3QnKTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBzdG5kX3NvY2lhbCA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQoJy5zdG5kLXNvY2lhbCcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoJCgnaHRtbCcpLmhhc0NsYXNzKCdpZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5zdG5kLXNvY2lhbCcpLmNoaWxkcmVuKCcuaWNucy1leHAnKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoJy5zdG5kLXNvY2lhbCcpLm1vdXNlZW50ZXIoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJy5pY25zLWV4cCcpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jaGlsZHJlbignLmljbnMtZXhwJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkKCcuc3RuZC1zb2NpYWwnKS5tb3VzZWVudGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCcuaWNucy1leHAnKS5jc3MoJ29wYWNpdHknLCcxJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLm1vdXNlbGVhdmUoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJy5pY25zLWV4cCcpLmNzcygnb3BhY2l0eScsJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2UgYW5jaG9yIGxpbmtzIHNtb290aGx5IGFuaW1hdGUgdG8gdGhlaXIgY29udGVudCBvbiB0aGUgcGFnZSwgdGFraW5nIHRoZSBuYXYgaGVpZ2h0IGludG8gYWNjb3VudFxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIGxpbmtTZWxlY3RvciAgICAoc3RyaW5nKSAgICBTZWxlY3RvciBmb3IgbGlua3MgdG8gYXBwbHkgc21vb3RoIHNjcm9sbCB0b1xuICAgICAgICAgKiAgICAgIGV4dHJhT2Zmc2V0ICAgICAoaW50ZWdlcikgICAob3B0aW9uYWwpIE51bWJlciBvZiBwaXhlbHMgZm9yIGV4dHJhIHBhZGRpbmcvb2Zmc2V0IGZvciBzY3JvbGwgdGFyZ2V0XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBzbW9vdGhTY3JvbGw6IGZ1bmN0aW9uKGxpbmtTZWxlY3RvciwgZXh0cmFPZmZzZXQpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZXh0cmFPZmZzZXQgPSB0eXBlb2YgZXh0cmFPZmZzZXQgPT0gJ251bWJlcicgPyBleHRyYU9mZnNldCA6IDE4O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2Y
1XIgbmF2SGVpZ2h0ID0gJCgnbmF2JykuaGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICQobGlua1NlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBhbmNob3IgPSAkKGVsKS5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvciAmJiBhbmNob3JbMF0gPT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZWwpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICQoYW5jaG9yKS5vZmZzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3AgPSBvZmZzZXQudG9wIC0gbmF2SGVpZ2h0IC0gZXh0cmFPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2luSGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0hlaWdodCA9ICQoZG9jdW1lbnQpLmhlaWdodCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5Jykuc3RvcCh0cnVlKS5hbmltYXRlKHsnc2Nyb2xsVG9wJzogTWF0aC5taW4odG9wLCAoZG9jSGVpZ2h0IC0gd2luSGVpZ2h0KSl9LCAxMDAwLCdlYXNlSW5PdXRFeHBvJyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQXBwbHkgJ0xvYWQgTW9yZScgZnVuY3Rpb25hbGl0eSB0aGF0IGZldGNoZXMgcGFnaW5hdGVkIGNvbnRlbnQgdmlhIEFKQVggYW5kIGFwcGVuZHMgaXQgdG8gdGhlIHBhZ2VcbiAgICAgICAgICpcbiAgICAgICAgICogICAgICBjb250ZW50U2VsZWN0b3IgICAgIChzdHJpbmcpICAgIFNlbGVjdG9yIGZvciBtYWluIGNvbnRlbnQgd3JhcHBlci4gSW5maW5pdGUgc2Nyb2xsIHBsdWdpbiBpcyBpbXBsZW1lbnRlZCBcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udG8gdGhpcyBlbGVtZW50IGFuZCBjb250ZW50IGlzIGFwcGVuZGVkIHRvIGl0XG4gICAgICAgICAqICAgICAgaXRlbVNlbGVjdG9yICAgICAgICAoc3RyaW5nKSAgICBTZWxlY3RvciBwYXNzZWQgdG8gaW5maW5pdGVzY3JvbGwgcGx1Z2luLCB1c2VkIG9uIEFKQVggY2FsbCB0byBleHRyYWN0IFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCB0byBiZSBhcHBlbmRlZFxuICAgICAgICAgKiAgICAgIGJ1dHRvblNlbGVjdG9yICAgICAgKHN0cmluZykgICAgU2VsZWN0b3IgZm9yICdMb2FkIE1vcmUnIGJ1dHRvbiwgb24gd2hpY2ggY2xpY2sgZXZlbnRzIGFuZCBzdWNoIGFyZSBhcHBsaWVkXG4gICAgICAgICAqICAgICAgb3B0aW9ucyAgICAgICAgICAgICAob2JqZWN0KSAgICAob3B0aW9uYWwpIE9wdGlvbnMgdG8gcGFzcyBkaXJlY3RseSBpbnRvIGluZmluaXRlc2Nyb2xsKClcbiAgICAgICAgICogICAgICBjYWxsYmFjayAgICAgICAgICAgIChmdW5jdGlvbikgIChvcHRpb25hbCkgT3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgcnVuIGF0IHRoZSBlbmQgb2YgcGFnZSBjb250ZW50IGxvYWRcbiAgICAgICAgICovXG4gICAgICAgIHNldExvYWRNb3JlOiBmdW5jdGlvbihjb250ZW50U2VsZWN0b3IsIGl0ZW1TZWxlY3RvciwgYnV0dG9uU2VsZWN0b3IsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PSAnb2JqZWN0JyA/IG9wdGlvbnMgOiB7fTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSAkKGNvbnRlbnRTZWxlY3Rvcik7XG4gICAgICAgICAgICB2Y
1XIgbG9hZE1vcmVCdXR0b24gPSAkKGJ1dHRvblNlbGVjdG9yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoICYmIGxvYWRNb3JlQnV0dG9uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEJ1dHRvblRleHQgPSBsb2FkTW9yZUJ1dHRvbi50ZXh0KCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQmluZCBsb2FkIG1vcmUgZXZlbnQgdG8gYnV0dG9uXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIGJpbmRMb2FkTW9yZSA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRNb3JlQnV0dG9uLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnJldHJpZXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSW5pdCBpbmZpbml0ZSBzY3JvbGxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICduYXZTZWxlY3Rvcic6IGJ1dHRvblNlbGVjdG9yLFxuICAgICAgICAgICAgICAgICAgICAnbmV4dFNlbGVjdG9yJzogYnV0dG9uU2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICdpdGVtU2VsZWN0b3InOiBpdGVtU2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICdwYXRoUGFyc2UnOiBmdW5jdGlvbihwYXRoLCBwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgcGF0dGVybiA9IC9eKC4qKFxcP3wmKXBhZ2U9KShcXGQrKSguKikkLztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVjayA9IHBhdGgubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2NoZWNrWzFdLCBjaGVja1s0XV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdsb2FkaW5nJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2xvYWRpbmcnOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0JzogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGwgdGhpcyBmcm9tIGluZmluaXRlc2Nyb2xsIHBsdWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQWpheChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbG9hZCB0ZXh0IGFuZCB1bmJpbmQgY2xpY2sgZXZlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE1vcmVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQoJ0xvYWRpbmcuLi4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudW5iaW5kKCdjbGljaycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhZGUgdXAvZG93biB3aGlsZSBsb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZU91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbi5mYWRlVG8oNTAwLCAwLjI1LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhZGVVcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhZGVVcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbi5mYWRlSW4oNTAwLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhZGVPdXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWRlT3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAnZmluaXNoZWQnOiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcCBhbmltYXRpb24gYW5kIHJlc2V0IHRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RvcCh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdvcGFjaXR5JywgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQob3JpZ2luYWxCdXR0b25UZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgaHJlZiB3aXRoIG5ldyBwYWdlIG51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYgPSBsb2FkTW9yZUJ1dHRvbi5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZiA9IGhyZWYucmVwbGFjZSgvKFxcP3wm
1KXBhZ2U9KFxcZCspLiovLCAnJDFwYWdlPScgKyAob3B0aW9ucy5zdGF0ZS5jdXJyUGFnZSArIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbi5hdHRyKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmUtYmluZCBsb2FkIG1vcmUgY2xpY2sgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kTG9hZE1vcmUoJCh0aGlzKS5kYXRhKCdpbmZpbml0ZXNjcm9sbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAnZXJyb3JDYWxsYmFjayc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE1vcmVCdXR0b24uZmFkZU91dCg1MDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb250ZW50LmluZmluaXRlc2Nyb2xsKCQuZXh0ZW5kKHRydWUsIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gVW5iaW5kIGluZmluaXRlc2Nyb2xsIHNjcm9sbCBldmVudHMgYW5kIGJpbmQgcmV0cmlldmFsIHRvIHRoZSBidXR0b25cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB2Y
1XIgaW5zdGFuY2UgPSBjb250ZW50LmRhdGEoJ2luZmluaXRlc2Nyb2xsJyk7XG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZCgnc21hcnRzY3JvbGwuaW5mc2NyLicgKyBpbnN0YW5jZS5vcHRpb25zLmluZmlkKTtcbiAgICAgICAgICAgICAgICBiaW5kTG9hZE1vcmUoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICBcbiAgICB9O1xuXG4gICAgdmFyIEFudGlVdGlsID0ge1xuXG4gICAgICAgIGRldGVjdF93aW5mb250IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAobmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoJ1dpbicpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHNjcmVlbi5mb250U21vb3RoaW5nRW5hYmxlZCkgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyZWVuLmZvbnRTbW9vdGhpbmdFbmFibGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNOb2RlLndpZHRoID0gXCIzNVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzTm9kZS5oZWlnaHQgPSBcIjM1XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2Y
1XIgY3R4ID0gY2FudmFzTm9kZS5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgudGV4dEJhc2VsaW5lID0gXCJ0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mb250ID0gXCIzMnB4IEFyaWFsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gXCJibGFja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gXCJibGFja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KFwiT1wiLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSA4OyBqIDw9IDMyOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAzMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKGksIGosIDEsIDEpLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYSA9IGltYWdlRGF0YVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSAmJiBhbHBoYSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIHdpbmRvd3MgZm9udC1zbW9vdGhpbmcgbXVzdCBiZSBvbi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgZGV0ZWN0X3NhZmFyaSA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSB7XG4gICAgICAgICAgICAgICBpZiAoZXNjYXBlKG5hdmlnYXRvci5qYXZhRW5hYmxlZC50b1N0cmluZygpKSA9PSAnZnVuY3Rpb24lMjBqYXZhRW5hYmxlZCUyOCUyOSUyMCU3QiUyMCU1Qm5hdGl2ZSUyMGNvZGUlNUQlMjAlN0QnKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVzY2FwZShuYXZpZ2F0b3IuamF2YUVuYWJsZWQudG9TdHJpbmcoKSkgIT0gJ2Z1bmN0aW9uJTIwamF2YUVuYWJsZWQlMjglMjklMjAlN0IlMjAlNUJuYXRpdmUlMjBjb2RlJTVEJTIwJTdEJykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbGlzdF9sYXN0Y2hpbGQgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQoJy5saXN0LXdpdGhsYXN0LTItdSBsaTpudGgtY2hpbGQoMm4pJykuYWRkQ2xhc3MoJ2xpc3QtbGFzdCcpO1xuICAgICAgICAgICAgJCgnLmxpc3Qtd2l0aGxhc3QtMi1kIGRpdjpudGgtY2hpbGQoMm4pJykuYWRkQ2xhc3MoJ2xpc3QtbGFzdCcpO1xuICAgICAgICAgICAgJCgnLmxpc3Qtd2l0aGxhc3QtMy11IGxpOm50aC1jaGlsZCgzbiknKS5hZGRDbGFzcygnbGlzdC1sYXN0Jyk7XG4gICAgICAgICAgICAkKCcubGlzdC13aXRobGFzdC0zLWQgZGl2Om50aC1jaGlsZCgzbiknKS5hZGRDbGFzcygnbGlzdC1sYXN0Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBzaWRlYmFyX2FjY29yZGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoJCgnLnNiYXItYWNjb3JkaW9uJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICQoJy5zYmFyLWFjY29yZGlvbiBoNCBhJykuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykudG9nZ2xlQ2xhc3MoJ3NlbCcpO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudHMoJy5zYmFyLWFjY29yZGlvbicpLmNoaWxkcmVuKCcuYWNjb3JkaW9uLWV4cGFuZGVkJykudG9nZ2xlKCdmYXN0Jyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBmaWx0ZXJfYWNjb3JkaW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICgkKCcuZmlsdGVyLWFjY29yZGlvbicpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkKCcuZmlsdGVyLWFjY29yZGlvbiAucmVhZC1tb3JlJylcbiAgICAgICAgICAgICAgICAgICAgLmRhdGEoJ29wZW4nLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rVGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuZGF0YSgnb3BlbicpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kYXRhKCdvcGVuJywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtUZXh0ID0gJ1NlZSBGdWxsIExpc3QtJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kYXRhKCdvcGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua1RleHQgPSAnQ29sbGFwc2UgTGlzdC0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmh0bWwobGlua1RleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhcmVudHMoJy5maWx0ZXItYWNjb3JkaW9uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oJy5hY2NvcmRpb24tZXhwYW5kZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b2dnbGUoJ2Zhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgI
1H1cblxuICAgIH07XG4gICAgXG4gICAgLyoqXG4gICAgICogQU5USSBnbG9iYWwgQUpBWCBzZWFyY2ggaW5wdXQgYmVoYXZpb3JcbiAgICAgKi9cbiAgICB2YXIgQW50aUdsb2JhbFNlYXJjaCA9IHtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXRlXG4gICAgICAgIFxuICAgICAgICBhY3RpdmU6IGZhbHNlLCAvLyBXaGV0aGVyIHRoZSBmaWVsZCBpcyAnYWN0aXZlJyBvciBub3RcbiAgICAgICAgbW91c2VJbnNpZGU6IGZhbHNlLCAvLyBXaGV0aGVyIHRoZSBtb3VzZSBpcyBpbnNpZGUgb2YgdGhlIGZvcm0gb3Igbm90XG4gICAgICAgIGN1cnJlbnRRdWVyeTogZmFsc2UsIC8vIGZhbHNlIGlmIG5vIHNlYXJjaCBpcyBydW5uaW5nLCBvdGhlcndpc2UgaXQncyB0aGUgdGVybSBiZWluZyBzZWFyY2hlZFxuICAgICAgICBjdXJyZW50UmVxdWVzdDogbnVsbCwgLy8gSWYgYSBzZWFyY2ggaXMgcnVubmluZywgdGhlIGN1cnJlbnQgWEhSIG9iamVjdFxuICAgICAgICBjdXJyZW50VGltZW91dDogbnVsbCwgLy8gSWYgYSBzZWFyY2ggaXMgcnVubmluZywgdGhlIHRpbWVvdXQgZm9yIGN1cnJlbnQgc2VhcmNoIHJlcXVlc3RcbiAgICAgICAgaGFzQ29udGVudDogZmFsc2UsIC8vIFdoZXRoZXIgdGhlIHJlc3VsdHNFbGVtZW50IGhhcyBiZWVuIGZpbGxlZCB3aXRoIGNvbnRlbnQgZnJvbSBhbiBBSkFYIHJlcXVlc3Qgb3Igbm90XG4gICAgICAgIFxuICAgICAgICAvLyBFbGVtZW50c1xuICAgICAgICBcbiAgICAgICAgc2VhcmNoRm9ybUVsZW1lbnQ6IG51bGwsXG4gICAgICAgIGlucHV0RWxlbWVudDogbnVsbCxcbiAgICAgICAgcmVzdWx0c0VsZW1lbnQ6IG51bGwsIC8vIEluc2VydCBzZWFyY2ggcmVzdWx0IEhUTUwgZnJvbSBBSkFYIHJlcXVlc3QgaGVyZVxuICAgICAgICBcbiAgICAgICAgLy8gU2V0dGluZ3NcbiAgICAgICAgXG4gICAgICAgIG1pbmltdW1DaGFyYWN0ZXJzOiAyLCAvLyBUaGUgbWluaW11bSBhbW91bnQgb2YgY2hhcmFjdGVycyB0byBiZSB0eXBlZCBiZWZvcmUgYSBzZWFyY2ggaXMgc2VudCB0byB0aGUgc2VydmVyXG4gICAgICAgIGRlYWN0aXZhdGVkV2lkdGg6IG51bGwsIC8vIElucHV0IHdpZHRoIHdoZW4gZGVhY3RpdmF0ZWQsIGdldCB0aGlzIGZyb20gdGhlIGVsZW1lbnQgaXRzZWxmIG9uIGluaXRcbiAgICAgICAgYWN0aXZhdGVkV2lkdGg6IDI2MCwgLy8gSW5wdXQgd2lkdGggd2hlbiBhY3RpdmF0ZWRcbiAgICAgICAgcmVzdWx0c1dpZHRoT2Zmc2V0OiA4LCAvLyBQaXhlbHMgYWJvdmUgYWN0aXZhdGVkL2RlYWN0aXZhdGVkIHdpZHRocyB0byBhZGQgdG8gcmVzdWx0IHdpbmRvd1xuICAgICAgICBcbiAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRWxlbWVudHNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtRWxlbWVudCA9ICQoJyNhbnRpLXNlYXJjaCcpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSAkKCdpbnB1dFtuYW1lPXFdJywgdGhpcy5zZWFyY2hGb3JtRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50ID0gJCgnPGRpdiAvPicpLmFkZENsYXNzKCdzZWFyY2gtZXhwYW5kZWQnKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmFmdGVyKHRoaXMucmVzdWx0c0VsZW1lbnQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBTZXR0aW5nc1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVkV2lkdGggPSB0aGlzLmlucHV0RWxlbWVudC53aWR0aCgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBFdmVudHNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtRWxlbWVudC5ob3ZlcihcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgc2VsZi5tb3VzZUluc2lkZSA9IHRydWU7IH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oKSB7IHNlbGYubW91c2VJbnNpZGUgPSBmYWxzZTsgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuZm9jdXNpbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmFjdGl2YXRlRmllbGQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5vbigna2V5dXAgc2VhcmNoJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlSW5wdXQoJCh0aGlzKS52YWwoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2FuY2VsIHNlYXJjaCB3aGVuICdyZXR1cm4nIGlzIGhpdFxuICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hYm9ydFNlYXJjaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAkKCdib2R5JykubW91c2V1cChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5hY3RpdmUgJiYgIXNlbGYubW91c2VJbnNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWFjdGl2YXRlRmllbGQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSW5pdGlhbFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50LmhpZGUoKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV4cGFuZCBpbnB1dCBhbmQgYXBwbHkgYWN0aXZlIHN0YXRlIG9uIGludGVyYWN0aW9uXG4gICAgICAgICAqL1xuICAgICAgICBhY3RpdmF0ZUZpZWxkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbnRlbnQpIHRoaXMuc2VhcmNoRm9ybUVsZW1lbnQuYWRkQ2xhc3MoJ3NlYXJjaGluZycpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgICAgICAgICAgLmFuaW1hdGUoeyd3aWR0aCc6IHRoaXMuYWN0aXZhdGVkV2lkdGh9LCAyMDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3VsdHNFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAuc2hvdygpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdoZWlnaHQnLCAnYXV0bycpO1xuICAgICAgICAgICAgICAgI
1H0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNsaW0gZG93biBpbnB1dCBhbmQgcmVtb3ZlIGFjdGl2ZSBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZGVhY3RpdmF0ZUZpZWxkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm1FbGVtZW50LnJlbW92ZUNsYXNzKCdzZWFyY2hpbmcnKTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c0VsZW1lbnQuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgICAgICAgICAgLmFuaW1hdGUoeyd3aWR0aCc6IHRoaXMuZGVhY3RpdmF0ZWRXaWR0aH0sIDIwMCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogSGFuZGxlIGtleXVwIGV2ZW50IGZyb20gc2VhcmNoIGlucHV0IGZpZWxkXG4gICAgICAgICAqXG4gICAgICAgICAqICAgICAgdGV4dCAgICAoc3RyaW5nKSAgICBUZXh0IHZhbHVlIGZyb20gc2VhcmNoIGlucHV0XG4gICAgICAgICAqL1xuICAgICAgICBoYW5kbGVJbnB1dDogZnVuY3Rpb24odGV4dCkge1xuICAgICAgICAgICAgdGV4dCA9ICQudHJpbSh0ZXh0KTtcbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA+PSB0aGlzLm1pbmltdW1DaGFyYWN0ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlU2VhcmNoKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhc3MgdGV4dCBvZmYgZm9yIEFKQVggc2VhcmNoIGFuZCBoYW5kbGUgcmVzdWx0c1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIHRleHQgICAgKHN0cmluZykgICAgVGV4dCB0byBzZWFyY2ggYWdhaW5zdFxuICAgICAgICAgKi9cbiAgICAgICAgZXhlY3V0ZVNlYXJjaDogZnVuY3Rpb24odGV4dCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2Y
1XIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVyeSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRRdWVyeSA9PSB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0U2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl9zZXRMb2FkaW5nU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzQ29udGVudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtRWxlbWVudC5hZGRDbGFzcygnc2VhcmNoaW5nJyk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRRdWVyeSA9IHRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRSZXF1ZXN0ID0gJC5hamF4KFxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlYXJjaEZvcm1FbGVtZW50LmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FjaGUnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogeydxJzogdGV4dH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0YVR5cGUnOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxldGUnOiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlUmVzdWx0cyhqcVhIUiwgdGV4dFN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBEZWxheSB0aGlzIGEgdGFkIHNvIHRoYXQgcmVxdWVzdHMgYXJlbid0IGJlaW5nIHNlbnQgd2l0aCBldmVyeSBrZXlzdHJva2VcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBydW4oKTsgfSwgNTAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhhbmRsZSBBSkFYIHNlYXJjaCByZXNwb25zZVxuICAgICAgICAgKlxuICAgICAgICAgKiAgICAgIGpxWEhSICAgICAgIChvYmplY3QpICAgIGpRdWVyeSBYTUxIVFRQUmVxdWVzdCBvYmplY3QgZnJvbSBzZWFyY2ggcmVzcG9uc2VcbiAgICAgICAgICogICAgICB0ZXh0U3RhdHVzICAoc3RyaW5nKSAgICBTdGF0dXMgZm9yIEFKQVggc2VhcmNoIHJlc3BvbnNlXG4gICAgICAgICAqL1xuICAgICAgICBoYW5kbGVSZXN1bHRzOiBmdW5jdGlvbihqcVhIUiwgdGV4dFN0YXR1cykge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLl91bnNldExvYWRpbmdTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVxdWVzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhc0NvbnRlbnQgPSB0cnVlOyAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGV4dFN0YXR1cyA9PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50Lmh0bWwoanFYSFIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAvLyBAdG9kbyBIaWdobGlnaHQgbWF0Y2hlZCB0ZXh0IHdpdGggPHNwYW4gY2xhc3M9XCJzZWxcIj4uLi48L3NwYW4+XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0c0VsZW1lbnQuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAkKCc8aDMgLz4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdlbXB0eScpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGV4dCgnVGhlcmUgd2FzIGFuIGVycm9yIHdpdGggeW91ciBzZWFyY2gsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICAvKipcbiAgICAgICAgICogQ2FuY2VsIHNlYXJjaCByZXF1ZXN0XG4gICAgICAgICAqL1xuICAgICAgICBhYm9ydFNlYXJjaDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRUaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY3VycmVudFRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRSZXF1ZXN0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl91bnNldExvYWRpbmdTdGF0ZSgpO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldCBzZWFyY2ggZm9ybSB0byAnbG9hZGluZycgc3RhdGVcbiAgICAgICAgICovXG4gICAgICAgIF9zZXRMb2FkaW5nU3RhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzRWxlbWVudFxuICAgICAgICAgICAgICAgIC5lbXB0eSgpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdsb2FkaW5nJylcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAkKCc8aW1nIC8+JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JjJzogQW50aURhdGEuaW1hZ2VzLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsdCc6ICdMb2FkaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnbG9hZGluZycpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbW92ZSAnbG9hZGluZycgc3Rh
1dGUgZnJvbSBzZWFyY2ggZm9ybVxuICAgICAgICAgKi9cbiAgICAgICAgX3Vuc2V0TG9hZGluZ1N0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VsdHNFbGVtZW50Lmhhc0NsYXNzKCdsb2FkaW5nJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHNFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnbG9hZGluZycpXG4gICAgICAgICAgICAgICAgICAgIC5lbXB0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH07XG4gICAgXG4gICAgdmFyIEFudGlNYWlsaW5nTGlzdCA9IHtcbiAgICAgICAgLy8gRWxlbWVudHNcbiAgICAgICAgXG4gICAgICAgIG92ZXJsYXlCb3g6IG51bGwsXG4gICAgICAgIG92ZXJsYXlIaWRlcjogbnVsbCxcbiAgICAgICAgY2xvc2VCdXR0b246IG51bGwsXG4gICAgICAgIG9wZW5CdXR0b246IG51bGwsXG4gICAgICAgIG92ZXJsYXlCb3g6IG51bGwsIC8vIFdyYXBwZXIgZm9yIG1haWxpbmcgbGlzdCBmb3JtIGJveFxuICAgICAgICBmb3JtOiBudWxsLCAvLyBNYWlsaW5nIGxpc3QgZm9ybSBlbGVtZW50XG4gICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IG51bGwsIC8vIExvYWRpbmcgaW5kaWNhdG9yIGltYWdlXG4gICAgICAgIFxuICAgICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRWxlbWVudHNcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5Qm94ID0gJCgnI21haWxpbmctbGlzdCcpO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5SGlkZXIgPSAkKCcuYm94LXNpZ251cC1oaWRlcicpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZUJ1dHRvbiA9ICQoJyNtYWlsaW5nLWxpc3QgLmJ0bi1tbC1jbG9zZSwgLmJveC1zaWdudXAtaGlkZXInKTtcbiAgICAgICAgICAgIHRoaXMub3BlbkJ1dHRvbiA9ICQoJy5idG4tbWwtb3BlbicpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nSW5kaWNhdG9yID0gJCgnPGltZyAvPicpXG4gICAgICAgICAgICAgICAgLmF0dHIoe1xuICAgICAgICAgICAgICAgICAgICAnc3JjJzogQW50aURhdGEuaW1hZ2VzLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICdhbHQnOiAnTG9hZGluZycsXG4gICAgICAgICAgICAgICAgICAgICdjbGFzcyc6ICdsb2FkaW5nJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmhpZGUoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jbG9zZUJ1dHRvbi5iZWZvcmUodGhpcy5sb2FkaW5nSW5kaWNhdG9yKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRXZlbnRzXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMub3BlbkJ1dHRvbi5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5vcGVuT3ZlcmxheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuY2xvc2VCdXR0b24uY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VPdmVybGF5KCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5SGlkZXIuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuYmluZEZvcm0oKTtcblxuICAgICAgICB9LFxuXG4gICAgICAgIG9wZW5PdmVybGF5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheUhpZGVyLnN0b3AodHJ1ZSkuZmFkZUluKDIwMCk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlCb3guc3RvcCh0cnVlKS5mYWRlSW4oMjAwKTtcbiAgICAgICAgfSxcblxuICAgICAgICBjbG9zZU92ZXJsYXk6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5Qm94LnN0b3AodHJ1ZSkuZmFkZU91dCgyMDApO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5SGlkZXIuc3RvcCh0cnVlKS5mYWRlT3V0KDE1MCk7XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBiaW5kRm9ybTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2Y
1XIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLm92ZXJsYXlCb3guZmluZCgnZm9ybScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5zdWJtaXQoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlU3VibWl0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBoYW5kbGVTdWJtaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuX3NldExvYWRpbmdTdGF0ZSgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAkLnBvc3QodGhpcy5mb3JtLmF0dHIoJ2FjdGlvbicpLCB0aGlzLmZvcm0uc2VyaWFsaXplKCksIGZ1bmN0aW9uKGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5zZXRMb2FkaW5nU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtLnJlcGxhY2VXaXRoKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmJpbmRGb3JtKCk7XG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBcbiAgICAgICAgX3NldExvYWRpbmdTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY3NzKCdvcGFjaXR5JywgMC4zKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VCdXR0b24uZmlsdGVyKCcuYnRuLW1sLWNsb3NlJykuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nSW5kaWNhdG9yLnNob3coKTtcbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIF91bnNldExvYWRpbmdTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uY3NzKCdvcGFjaXR5JywgMSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQnV0dG9uLnNob3coKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0luZGljYXRvci5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgfTtcblxuICAgIHdpbmRvdy5BbnRpID0gQW50aTtcbiAgICB3aW5kb3cuQW50aVV0aWwgPSBBbnRpVXRpbDtcbiAgICB3aW5kb3cuQW50aUdsb2JhbFNlYXJjaCA9IEFudGlHbG9iYWxTZWFyY2g7XG4gICAgd2luZG93LkFudGlNYWlsaW5nTGlzdCA9IEFudGlNYWlsaW5nTGlzdDtcblxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgICBBbnRpLmluaXQoKTtcbiAgICAgICAgc2VhcmNoLnN0YXJ0KCk7XG4gICAgfSk7XG5cbn0pKGpRdWVyeSk7Il0sIm5hbWVzIjpbInJlbmRlclNlYXJjaEJveCIsInJlbmRlck9wdGlvbnMiLCJpc0ZpcnN0UmVuZGVyIiwicXVlcnkiLCJyZWZpbmUiLCJjbGVhciIsImlzU2VhcmNoU3RhbGxlZCIsIndpZGdldFBhcmFtcyIsImNvbnRhaW5lciIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIl93aWRnZXRQYXJhbXMkcGxhY2VobyIsImZvcm0iLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYWN0aW9uIiwiaW5wdXQiLCJuYW1lIiwicGxhY2Vob2xkZXIiLCJsb2FkaW5nSW5kaWNhdG9yIiwidGV4dENvbnRlbnQiLCJi
1dXR0b24iLCJ0eXBlIiwicmVzZXRCdXR0b24iLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJ0ZXN0IiwidGFyZ2V0IiwidmFsdWUiLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwiY29uY2F0Iiwic3VibWl0IiwiYXBwZW5kQ2hpbGQiLCJoaWRkZW4iLCJjdXN0b21TZWFyY2hCb3giLCJpbnN0YW50c2VhcmNoIiwiY29ubmVjdG9ycyIsImNvbm5lY3RTZWFyY2hCb3giLCJjYXRlZ29yeUxpc3QiLCJxdWlja1NlYXJjaCIsImFsZ29saWFDbGllbnQiLCJfb2JqZWN0U3ByZWFkIiwic2VhcmNoIiwicmVxdWVzdHMiLCJzZWFyY2hCb3giLCJldmVyeSIsIl9yZWYiLCJwYXJhbXMiLCJyZW1vdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc3VsdHMiLCJtYXAiLCJoaXRzIiwibmJIaXRzIiwibmJQYWdlcyIsInBhZ2UiLCJwcm9jZXNzaW5nVGltZU1TIiwiYXV0b2NvbXBsZXRlIiwiY29ubmVjdEF1dG9jb21wbGV0ZSIsIl9yZWYyIiwiaXNGaXJzdFJlbmRlcmluZyIsImluZGljZXMiLCJvblNlbGVjdENoYW5nZSIsImNvbnRhaW5lckVsIiwiaW5uZXJIVE1MIiwidWwiLCJzZWVBbGwiLCJocmVmIiwibGlzdCIsImZvckVhY2giLCJpbmRleCIsImxpIiwidXJsUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiZmlsdGVycyIsImdldCIsImNhdGVnb3J5Iiwic3BsaXQiLCJwb3AiLCJoaXQiLCJsaW5rIiwidXJsIiwidGl0bGUiLCJnZXRDYXRlZ29yeVdpZGdldExpc3QiLCJ3aWRnZXRzIiwibG9vcENhdGVnb3J5IiwiaSIsInB1c2giLCJpbmRleE5hbWUiLCJhZGRXaWRnZXRzIiwiY29uZmlndXJlIiwiaGl0c1BlclBhZ2UiLCJnZXRXaWRnZXRMaXN0Iiwid2lkZ2V0TGlzdCIsImNhdFdpZGdldHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJpdGVtVGVtcGxhdGVzIiwiYXJ0aXN0IiwicmVsZWFzZSIsIm5ld3MiLCJ2aWRlbyIsInRyYWNrIiwic2hvdyIsInByZXNzIiwic2l0ZVNlYXJjaFBhcmFtcyIsInN0YXRzIiwidGVtcGxhdGVzIiwidGV4dCIsImNhdExhYmVsIiwiZW1wdHkiLCJpdGVtIiwic2luZ2xlQ2F0TGlzdCIsImluZmluaXRlSGl0cyIsImVzY2FwZUhUTUwiLCJNYXRoIiwibWluIiwic2l0ZVNlYXJjaCIsImVsIiwicXVpY2tTZWFyY2hXaWRnZXRMaXN0Iiwic2l0ZVNlYXJjaFdpZGdldExpc3QiLCJtYXRjaGVzIiwiZXhlYyIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJhbGdvbGlhc2VhcmNoIiwiQW50aURhdGEiLCJBTEdPTElBX0FQUExJQ0FUSU9OX0lEIiwiQUxHT0xJQV9BUElfS0VZX1NFQVJDSCIsImlzUXVpY2tTZWFyY2giLCJzdGFydHNXaXRoIiwic2VhcmNoQ2xpZW50IiwiaW5pdGlhbFVpU3RhdGUiLCJhbnRpIiwib24iLCIkIiwicmVzdWx0TGlzdCIsInJlc3VsdEZpbHRlciIsIl9BbnRpTWFpbGluZ0xpc3QiLCJBbnRpIiwiaW5pdCIsIkFudGlVdGlsIiwiZGV0ZWN0X3NhZmFyaSIsImVhY2giLCJlIiwicGhWYWwiLCJhdHRyIiwiZm9jdXMiLCJ2YWwiLCJkZWZhdWx0VmFsdWUiLCJibHVyIiwidHJpbSIsImRldGVjdF93aW5mb250IiwiYWRkQ2xhc3MiLCJoYXNDbGFzcyIsInN0aWNreV9uYXZfaWUiLCJzdGlja3lfbmF2IiwibGlzdF9sYXN0Y2hpbGQiLCJzaWRlYmFyX2FjY29yZGlvbiIsImZpbHRlcl9hY2NvcmRpb24iLCJzdG5kX3NvY2lhbCIsIkFudGlNYWlsaW5nTGlzdCIsIndlYmZvbnRfYWN0aXZlIiwiYXJ0aWNsZV9yZXNpemVyIiwiYWxidW1fY2Fyb3VzZWxfc2V0aGVpZ2h0Iiwid2ViZm9udF9pbmFjdGl2ZSIsInNOYXYiLCJzTmF2QW5pbWF0aW5nIiwiYmluZCIsInNjcm9sbFRvcCIsImNzcyIsImFuaW1hdGUiLCJhdm9pZFRyYW5zZm9ybXMiLCJyZW1vdmVDbGFzcyIsIkFudGlHbG9iYWxTZWFyY2giLCJhbGJ1bV9jYXJvdXNlbCIsImVsQm94IiwiZmluZCIsImVsQm94SGVpZ2h0IiwiZWxCb3hTaG93biIsImVsQm94U2xpZGVMZW5ndGgiLCJlbEJveFNlbCIsImVsQm94TGVuZ3RoIiwiY2hpbGRyZW4iLCJlbEJveEFuaSIsImVsQm94T2Zmc2V0IiwiZWxCb3hTbGlkZUxlbmd0aFRvdGFsIiwiZWxCb3hTbGlkZVNwZWVkIiwiY2xpY2siLCJwcmV2ZW50RGVmYXVsdCIsInN0b3AiLCJsZWZ0IiwiY2VpbCIsImhlaWdodCIsInBTaXplQ2hhbmdlRmluYWwiLCJ0ZXh0Qm94IiwidGV4dEJveEhlaWdodCIsImJveEhlaWdodCIsInRleHRCb3hGUyIsInRleHRCb3hMSCIsInNpemVEaWZmIiwidGV4dEJveEZTTmV3IiwidGV4dEJveEhlaWdodE5ldyIsInRleHRCb3hMaW5lc1RvdGFsIiwiZmxvb3IiLCJ0ZXh0Qm94TEhOZXciLCJwU2l6ZUNoYW5nZSIsImRpciIsImJveCIsInBhcnNlSW50IiwiaGlkZSIsImZhZGVPdXQiLCJmYWRlSW4iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInNtb290aFNjcm9sbCIsImxpbmtTZWxlY3RvciIsImV4dHJhT2Zmc2V0IiwibmF2SGVpZ2h0IiwiYW5jaG9yIiwib2Zmc2V0IiwidG9wIiwid2luSGVpZ2h0IiwiZG9jSGVpZ2h0Iiwic2V0TG9hZE1vcmUiLCJjb250ZW50U2VsZWN0b3IiLCJpdGVtU2VsZWN0b3IiLCJidXR0b25TZWxlY3RvciIsIm9wdGlvbnMiLCJjYWxsYmFjayIsIl90eXBlb2YiLCJjb250ZW50IiwibG9hZE1vcmVCdXR0b24iLCJvcmlnaW5hbEJ1dHRvblRleHQiLCJiaW5kTG9hZE1vcmUiLCJpbnN0YW5jZSIsInJldHJpZXZlIiwiZGVmYXVsdE9wdGlvbnMiLCJwYXRoUGFyc2UiLCJwYXRoIiwicGF0dGVybiIsImNoZWNrIiwibWF0Y2giLCJzdGFydCIsImJlZ2luQWpheCIsInVuYmluZCIsImZhZGVUbyIsImZhZGVVcCIsImZpbmlzaGVkIiwicmVwbGFjZSIsInN0YXRlIiwiY3VyclBhZ2UiLCJkYXRhIiwiZXJyb3JDYWxsYmFjayIsImluZmluaXRlc2Nyb2xsIiwiZXh0ZW5kIiwiaW5maWQiLCJuYXZpZ2F0b3IiLCJwbGF0Zm9ybSIsImluZGV4T2YiLCJzY3JlZW4iLCJmb250U21vb3RoaW5nRW5hYmxlZCIsImNhbnZhc05vZGUiLCJ3aWR0aCIsInN0eWxlIiwiZGlzcGxheSIsImJvZHkiLCJjdHgiLCJnZXRDb250ZXh0IiwidGV4dEJhc2VsaW5lIiwiZm9udCIsImZpbGxTdHlsZSIsInN0cm9rZVN0eWxlIiwiZmlsbFRleHQiLCJqIiwiaW1hZ2VEYXRhIiwiZ2V0SW1hZ2VEYXRhIiwiYWxwaGEiLCJleCIsImRldmljZVBpeGVsUmF0aW8iLCJlc2NhcGUiLCJqYXZhRW5hYmxlZCIsInRvU3RyaW5nIiwidG9nZ2xlQ2xhc3MiLCJwYXJlbnRzIiwidG9nZ2xlIiwibGlua1RleHQiLCJodG1sIiwiYWN0aXZlIiwibW91c2VJbnNpZGUiLCJjdXJyZW50UXVlcnkiLCJjdXJyZW50UmVxdWVzdCIsImN1cnJlbnRUaW1lb3V0IiwiaGFzQ29udGVudCIsInNlYXJjaEZvcm1FbGVtZW50IiwiaW5wdXRFbGVtZW50IiwicmVzdWx0c0VsZW1lbnQiLCJtaW5pbXVtQ2hhcmFjdGVycyIsImRlYWN0aXZhdGVkV2lkdGgiLCJhY3RpdmF0ZWRXaWR0aCIsInJlc3VsdHNXaWR0aE9mZnNldCIsInNlbGYiLCJhZnRlciIsImhvdmVyIiwiZm9jdXNpbiIsImFjdGl2YXRlRmllbGQiLCJoYW5kbGVJbnB1dCIsImtleUNvZGUiLCJhYm9ydFNlYXJjaCIsIm1vdXNldXAiLCJkZWFjdGl2YXRlRmllbGQiLCJleGVjdXRlU2VhcmNoIiwiX3NldExvYWRpbmdTdGF0ZSIsInJ1biIsImFqYXgiLCJjb21wbGV0ZSIsImpxWEhSIiwidGV4dFN0YXR1cyIsImhhbmRsZVJlc3VsdHMiLCJzZXRUaW1lb3V0IiwiX3Vuc2V0TG9hZGluZ1N0YXRlIiwicmVzcG9uc2VUZXh0IiwiYXBwZW5kIiwiY2xlYXJUaW1lb3V0IiwiYWJvcnQiLCJpbWFnZXMiLCJsb2FkaW5nIiwib3ZlcmxheUJveCIsIm92ZXJsYXlIaWRlciIsImNsb3NlQnV0dG9uIiwib3BlbkJ1dHRvbiIsIl9kZWZpbmVQcm9wZXJ0eSIsImJlZm9yZSIsInN0b3BQcm9wYWdhdGlvbiIsIm9wZW5PdmVybGF5IiwiY2xvc2VPdmVybGF5IiwiYmluZEZvcm0iLCJoYW5kbGVTdWJtaXQiLCJwb3N0Iiwic2VyaWFsaXplIiwicmVwbGFjZVdpdGgiLCJmaWx0ZXIiLCJyZWFkeSIsImpRdWVyeSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///456\n")}},__webpack_exports__={};__webpack_modules__[456]()})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.