1"use strict"; 2 3function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } 4 5function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 6 7function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 8 9jQuery.fn.offerGeofencing = function offerGeofencing(customOptions, callback) { 10 var _this = this; 11 12 var defaultOptions = { 13 items: '.view-content .views-row div[data-wrapper="offer-tile-wrapper"]', 14 itemsClass: '.views-row', 15 itemsWrapper: '.view-content', 16 tileShowCount: "all", 17 paginate: { 18 status: false, 19 pageItem: '.views-row', 20 desktop: { 21 "default": 3, 22 increment: 3 23 }, 24 tablet: { 25 "default": 2, 26 increment: 2 27 }, 28 mobile: { 29 "default": 1, 30 increment: 1 31 }, 32 showLess: true, 33 more: { 34 text: "Show more", 35 "class": "" 36 }, 37 less: { 38 text: "Show less", 39 "class": "" 40 }, 41 count: true, 42 totalRemaining: true 43 } 44 }; 45 46 var options = _objectSpread({}, defaultOptions, {}, customOptions); 47 48 var init = function init() { 49 var currentCountry = window.Cookies.get("current_country"); 50 51 if (typeof currentCountry === "undefined" || currentCountry == '') { 52 currentCountry = "TH"; 53 } else { 54 currentCountry = currentCountry.toUpperCase(); 55 } 56 57 var offerTiles = jQuery(_this).find("".concat(options.items)); 58 var count = 1; 59 60 if (offerTiles.length > 0) { 61 offerTiles.each(function (key, object) { 62 var blackListedCountry = jQuery(object).attr('data-blacklisted-countries'); 63 var whiteListedCountry = jQuery(object).attr('data-whitelisted-countries'); // If offer is black listed for thr current country then remove it. 64 65 if (typeof blackListedCountry !== 'undefined' && blackListedCountry !== '') { 66 var blackListedCountryArr = blackListedCountry.split(', '); 67 68 if (jQuery.inArray(currentCountry, blackListedCountryArr) != -1) { 69 if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) { 70 jQuery(object).parents("".concat(options.itemsClass)).remove(); 71 } 72 } 73 } else { 74 if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) { 75 jQuery(object).parents("".concat(options.itemsClass)).attr('data-offer-sort', ""); 76 } 77 } // If offer not white listed for the current country then remove it. 78 79 80 if (typeof whiteListedCountry !== 'undefined' && whiteListedCountry !== '') { 81 var whiteListedCountryArr = whiteListedCountry.split(', '); 82 83 if (jQuery.inArray(currentCountry, whiteListedCountryArr) == -1) { 84 if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) { 85 jQuery(object).parents("".concat(options.itemsClass)).remove(); 86 } 87 } else { 88 if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) { 89 jQuery(object).parents("".concat(options.itemsClass)).attr('data-offer-sort', count); 90 count = count + 1; 91 } 92 } 93 } else { 94 if (jQuery(object).parents("".concat(options.itemsClass)).length > 0) { 95 jQuery(object).parents("".concat(options.itemsClass)).attr('data-offer-sort', ""); 96 } 97 } 98 });
98 // Re-check offer tile after removing offers. 99 100 var offerTilesLength = jQuery(_this).find("".concat(options.items)).length; // Un paginate the pagination. 101 102 if (jQuery(_this).find('.btn-container').length > 0) { 103 jQuery(_this).find('.btn-container').remove(); 104 } 105 106 if (offerTilesLength > 0) { 107 // Show specific number of offers. 108 if (options.tileShowCount != 'all' && offerTilesLength > options.tileShowCount) { 109 sortOfferTiles(); 110 var offerTilesParent = jQuery(_this).find("".concat(options.itemsClass)); 111 offerTilesParent.slice(options.tileShowCount).remove(); 112 } // Enable pagination. 113 114 115 if (options.paginate.status == true) { 116 jQuery(_this).paginate({ 117 items: options.paginate.pageItem, 118 more: { 119 text: options.paginate.more.text, 120 "class": options.paginate.more["class"] 121 }, 122 less: { 123 text: options.paginate.less.text, 124 "class": options.paginate.less["class"] 125 }, 126 count: options.paginate.count, 127 showLess: options.paginate.showLess, 128 desktop: { 129 "default": options.paginate.desktop["default"], 130 increment: options.paginate.desktop.increment 131 }, 132 tablet: { 133 "default": options.paginate.desktop["default"], 134 increment: options.paginate.desktop["default"] 135 }, 136 mobile: { 137 "default": options.paginate.tablet["default"], 138 increment: options.paginate.tablet["default"] 139 }, 140 totalRemaining: options.paginate.totalRemaining 141 }); 142 } 143 } 144 } // Defining callback. 145 // We are using it in some special cases. 146 // Like before slider initalizing. 147 148 149 if (typeof callback !== "undefined") { 150 // If we have to call the methods after the call of geo-fencing. 151 // Then we can use those methods under callback. 152 callback(); 153 } 154 }; 155 156 var sortOfferTiles = function sortOfferTiles() { 157 var sortedLength = jQuery(_this).find("".concat(options.itemsClass, ":not([data-offer-sort=\"\"])")).length + 1; 158 var nonSortedWrapperTiles = jQuery(_this).find("".concat(options.itemsClass, "[data-offer-sort=\"\"]")); 159 nonSortedWrapperTiles.each(function (key, object) { 160 jQuery(object).attr('data-offer-sort', sortedLength); 161 sortedLength = sortedLength + 1; 162 }); 163 var mainWrapper = jQuery(_this).find("".concat(options.itemsWrapper)); 164 var itemWrapper = jQuery(_this).find("".concat(options.itemsClass)); 165 itemWrapper.sort(function (a, b) { 166 var startA = parseInt(jQuery(a).data('offer-sort')) || Number.MAX_VALUE; 167 var startB = parseInt(jQuery(b).data('offer-sort')) || Number.MAX_VALUE; 168 return startA === startB ? 0 : startA > startB ? 1 : -1; 169 }).appendTo(mainWrapper); 170 }; // Sometime cookie takes time to set. 171 // So we can't get it for first time. 172 // So here we again call to server for country code. 173 // Then set the cookie again for country for safer side. 174 // Init method also called in it. 175 176 177 var fallbackCountryInit = function fallbackCountryInit() { 178 var baseUrl = window.location.origin; 179 var url = baseUrl + "/currency/country"; 180 jQuery.ajax({ 181 url: url, 182 type: "GET", 183 dataType: "json", 184 async: true, 185 success: function success(response) { 186 window.Cookies.set("current_country", response.data.current_country_code, { 187 path: '/' 188 }); 189 init(); 190 }, 191 error: function error() { 192 window.Cookies.set("current_country", "TH", { 193 path: '/' 194 }); 195 init(); 196 } 197 }); 198 }; 199 200 var countryInit = function countryInit() { 201 // Lab tools: skip cross-origin Cloudflare fetch (CORS fails on local/LH). 202 if (navigator.webdriver) { 203 window.Cookies.set("current_country", "TH", { 204 path: '/' 205 }); 206 init(); 207 return; 208 } 209 210 fetch('https://www.centarahotelsresorts.com/cdn-cgi/trace').then(function (res) { 211 return res.text(); 212 }).then(function (t) { 213 var data = t.replace(/[\r\n]+/g, '","').replace(/\=+/g, '":"'); 214 data = '{"' + data.slice(0, data.lastIndexOf('","')) + '"}'; 215 var jsondata = JSON.parse(data); 216 217 if (typeof jsondata.loc !== "undefined" && jsondata.loc != '') { 218 window.Cookies.set("current_country", jsondata.loc, { 219 path: '/' 220 }); 221 init(); 222 } else { 223 fallbackCountryInit(); 224 } 225 })["catch"](function () { 226 fallbackCountryInit(); 227 }); 228 }; 229 230 var currentCountry = window.Cookies.get("current_country"); 231 232 if (typeof currentCountry === "undefined" || currentCountry == '') { 233 countryInit(); 234 } else { 235 init(); 236 } 237}; 238//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL29mZmVycy1nZW9mZW5jaW5nLmpzIl0sIm5hbWVzIjpbImpRdWVyeSIsImZuIiwib2ZmZXJHZW9mZW5jaW5nIiwiY3VzdG9tT3B0aW9ucyIsImNhbGxiYWNrIiwiZGVmYXVsdE9wdGlvbnMiLCJpdGVtcyIsIml0ZW1zQ2xhc3MiLCJpdGVtc1dyYXBwZXIiLCJ0aWxlU2hvd0NvdW50IiwicGFnaW5hdGUiLCJzdGF0dXMiLCJwYWdlSXRlbSIsImRlc2t0b3AiLCJpbmNyZW1lbnQiLCJ0YWJsZXQiLCJtb2JpbGUiLCJzaG93TGVzcyIsIm1vcmUiLCJ0ZXh0IiwibGVzcyIsImNvdW50IiwidG90YWxSZW1haW5pbmciLCJvcHRpb25zIiwiaW5pdCIsImN1cnJlbnRDb3VudHJ5Iiwid2luZG93IiwiQ29va2llcyIsImdldCIsInRvVXBwZXJDYXNlIiwib2ZmZXJUaWxlcyIsImZpbmQiLCJsZW5ndGgiLCJlYWNoIiwia2V5Iiwib2JqZWN0IiwiYmxhY2tMaXN0ZWRDb3VudHJ5IiwiYXR0ciIsIndoaXRlTGlzdGVkQ291bnRyeSIsImJsYWNrTGlzdGVkQ291bnRyeUFyciIsInNwbGl0IiwiaW5BcnJheSIsInBhcmVudHMiLCJyZW1vdmUiLCJ3aGl0ZUxpc3RlZENvdW50cnlBcnIiLCJvZmZlclRpbGVzTGVuZ3RoIiwic29ydE9mZmVyVGlsZXMiLCJvZmZlclRpbGVzUGFyZW50Iiwic2xpY2UiLCJzb3J0ZWRMZW5ndGgiLCJub25Tb3J0ZWRXcmFwcGVyVGlsZXMiLCJtYWluV3JhcHBlciIsIml0ZW1XcmFwcGVyIiwic29ydCIsImEiLCJiIiwic3RhcnRBIiwicGFyc2VJbnQiLCJkYXRhIiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwic3RhcnRCIiwiYXBwZW5kVG8iLCJmYWxsYmFja0NvdW50cnlJbml0IiwiYmFzZVVybCIsImxvY2F0aW9uIiwib3JpZ2luIiwidXJsIiwiYWpheCIsInR5cGUiLCJkYXRhVHlwZSIsImFzeW5jIiwic3VjY2VzcyIsInJlc3BvbnNlIiwic2V0IiwiY3VycmVudF9jb3VudHJ5X2NvZGUiLCJwYXRoIiwiZXJyb3IiLCJjb3VudHJ5SW5pdCIsIm5hdmlnYXRvciIsIndlYmRyaXZlciIsImZldGNoIiwidGhlbiIsInJlcyIsInQiLCJyZXBsYWNlIiwibGFzdEluZGV4T2YiLCJqc29uZGF0YSIsIkpTT04iLCJwYXJzZSIsImxvYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQUEsTUFBTSxDQUFDQyxFQUFQLENBQVVDLGVBQVYsR0FBNEIsU0FBU0EsZUFBVCxDQUF5QkMsYUFBekIsRUFBd0NDLFFBQXhDLEVBQWtEO0FBQUE7O0FBQzVFLE1BQU1DLGNBQWMsR0FBRztBQUNyQkMsSUFBQUEsS0FBSyxFQUFFLGlFQURjO0FBRXJCQyxJQUFBQSxVQUFVLEVBQUUsWUFGUztBQUdyQkMsSUFBQUEsWUFBWSxFQUFFLGVBSE87QUFJckJDLElBQUFBLGFBQWEsRUFBRSxLQUpNO0FBS3JCQyxJQUFBQSxRQUFRLEVBQUU7QUFDUkMsTUFBQUEsTUFBTSxFQUFFLEtBREE7QUFFUkMsTUFBQUEsUUFBUSxFQUFFLFlBRkY7QUFHUkMsTUFBQUEsT0FBTyxFQUFFO0FBQ1AsbUJBQVMsQ0FERjtBQUVQQyxRQUFBQSxTQUFTLEVBQUU7QUFGSixPQUhEO0FBT1JDLE1BQUFBLE1BQU0sRUFBRTtBQUNOLG1CQUFTLENBREg7QUFFTkQsUUFBQUEsU0FBUyxFQUFFO0FBRkwsT0FQQTtBQVdSRSxNQUFBQSxNQUFNLEVBQUU7QUFDTixtQkFBUyxDQURIO0FBRU5GLFFBQUFBLFNBQVMsRUFBRTtBQUZMLE9BWEE7QUFlUkcsTUFBQUEsUUFBUSxFQUFFLElBZkY7QUFnQlJDLE1BQUFBLElBQUksRUFBRTtBQUNKQyxRQUFBQSxJQUFJLEVBQUUsV0FERjtBQUVKLGlCQUFPO0FBRkgsT0FoQkU7QUFvQlJDLE1BQUFBLElBQUksRUFBRTtBQUNKRCxRQUFBQSxJQUFJLEVBQUUsV0FERjtBQUVKLGlCQUFPO0FBRkgsT0FwQkU7QUF3QlJFLE1BQUFBLEtBQUssRUFBRSxJQXhCQztBQXlCUkMs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jaW5nKGN1c3RvbU9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGl0ZW1zOiAnLnZpZXctY29udGVudCAudmlld3Mtcm93IGRpdltkYXRhLXdyYXBwZXI9XCJvZmZlci10aWxlLXdyYXBwZXJcIl0nLFxuICAgIGl0ZW1zQ2xhc3M6ICcudmlld3Mtcm93JyxcbiAgICBpdGVtc1dyYXBwZXI6ICcudmlldy1jb250ZW50JyxcbiAgICB0aWxlU2hvd0NvdW50OiBcImFsbFwiLFxuICAgIHBhZ2luYXRlOiB7XG4gICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgcGFnZUl0ZW06ICcudmlld3Mtcm93JyxcbiAgICAgIGRlc2t0b3A6IHtcbiAgICAgICAgZGVmYXVsdDogMyxcbiAgICAgICAgaW5jcmVtZW50OiAzXG4gICAgICB9LFxuICAgICAgdGFibGV0OiB7XG4gICAgICAgIGRlZmF1bHQ6IDIsXG4gICAgICAgIGluY3JlbWVudDogMlxuICAgICAgfSxcbiAgICAgIG1vYmlsZToge1xuICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICBpbmNyZW1lbnQ6IDFcbiAgICAgIH0sXG4gICAgICBzaG93TGVzczogdHJ1ZSxcbiAgICAgIG1vcmU6IHtcbiAgICAgICAgdGV4dDogXCJTaG93IG1vcmVcIixcbiAgICAgICAgY2xhc3M6IFwiXCJcbiAgICAgIH0sXG4gICAgICBsZXNzOiB7XG4gICAgICAgIHRleHQ6IFwiU2hvdyBsZXNzXCIsXG4gICAgICAgIGNsYXNzOiBcIlwiXG4gICAgICB9LFxuICAgICAgY291bnQ6IHRydWUsXG4gICAgICB0b3RhbFJlbWFpbmluZzogdHJ1ZVxuICAgIH1cbiAgfTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAuLi5jdXN0b21PcHRpb25zXG4gIH07XG5cbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICBsZXQgY3VycmVudENvdW50cnkgPSB3aW5kb3cuQ29va2llcy5nZXQoXCJjdXJyZW50X2NvdW50cnlcIik7XG4gICAgaWYgKHR5cGVvZiBjdXJyZW50Q291bnRyeSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBjdXJyZW50Q291bnRyeSA9PSAnJykge1xuICAgICAgY3VycmVudENvdW50cnkgPSBcIlRIXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY3VycmVudENvdW50cnkgPSBjdXJyZW50Q291bnRyeS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgb2ZmZXJUaWxlcyA9IGpRdWVyeSh0aGlzKS5maW5kKGAke29wdGlvbnMuaXRlbXN9YCk7XG4gICAgdmFyIGNvdW50ID0gMTtcbiAgICBpZiAob2ZmZXJUaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBvZmZlclRpbGVzLmVhY2goZnVuY3Rpb24oa2V5LCBvYmplY3QpIHtcbiAgICAgICAgdmFyIGJsYWNrTGlzdGVkQ291bnRyeSA9IGpRdWVyeShvYmplY3QpLmF0dHIoJ2RhdGEtYmxhY2tsaXN0ZWQtY291bnRyaWVzJyk7XG4gICAgICAgI
238HZhciB3aGl0ZUxpc3RlZENvdW50cnkgPSBqUXVlcnkob2JqZWN0KS5hdHRyKCdkYXRhLXdoaXRlbGlzdGVkLWNvdW50cmllcycpO1xuICAgICAgICAvLyBJZiBvZmZlciBpcyBibGFjayBsaXN0ZWQgZm9yIHRociBjdXJyZW50IGNvdW50cnkgdGhlbiByZW1vdmUgaXQuXG4gICAgICAgIGlmICh0eXBlb2YgYmxhY2tMaXN0ZWRDb3VudHJ5ICE9PSAndW5kZWZpbmVkJyAmJiBibGFja0xpc3RlZENvdW50cnkgIT09ICcnKSB7XG4gICAgICAgICAgdmFyIGJsYWNrTGlzdGVkQ291bnRyeUFyciA9IGJsYWNrTGlzdGVkQ291bnRyeS5zcGxpdCgnLCAnKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoalF1ZXJ5LmluQXJyYXkoY3VycmVudENvdW50cnksIGJsYWNrTGlzdGVkQ291bnRyeUFycikgIT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChqUXVlcnkob2JqZWN0KS5wYXJlbnRzKGAke29wdGlvbnMuaXRlbXNDbGFzc31gKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAoalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkuYXR0cignZGF0YS1vZmZlci1zb3J0JywgXCJcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb2ZmZXIgbm90IHdoaXRlIGxpc3RlZCBmb3IgdGhlIGN1cnJlbnQgY291bnRyeSB0aGVuIHJlbW92ZSBpdC5cbiAgICAgICAgaWYgKHR5cGVvZiB3aGl0ZUxpc3RlZENvdW50cnkgIT09ICd1bmRlZmluZWQnICYmIHdoaXRlTGlzdGVkQ291bnRyeSAhPT0gJycpIHtcbiAgICAgICAgICB2Y
238XIgd2hpdGVMaXN0ZWRDb3VudHJ5QXJyID0gd2hpdGVMaXN0ZWRDb3VudHJ5LnNwbGl0KCcsICcpO1xuICAgICAgICAgIGlmIChqUXVlcnkuaW5BcnJheShjdXJyZW50Q291bnRyeSwgd2hpdGVMaXN0ZWRDb3VudHJ5QXJyKSA9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG9iamVjdCkucGFyZW50cyhgJHtvcHRpb25zLml0ZW1zQ2xhc3N9YCkuYXR0cignZGF0YS1vZmZlci1zb3J0JywgY291bnQpO1xuICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGpRdWVyeShvYmplY3QpLnBhcmVudHMoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApLmF0dHIoJ2RhdGEtb2ZmZXItc29ydCcsIFwiXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlLWNoZWNrIG9mZmVyIHRpbGUgYWZ0ZXIgcmVtb3Zpbmcgb2ZmZXJzLlxuICAgICAgdmFyIG9mZmVyVGlsZXNMZW5ndGggPSBqUXVlcnkodGhpcykuZmluZChgJHtvcHRpb25zLml0ZW1zfWApLmxlbmd0aDtcblxuICAgICAgLy8gVW4gcGFnaW5hdGUgdGhlIHBhZ2luYXRpb24uXG4gICAgICBpZiAoalF1ZXJ5KHRoaXMpLmZpbmQoJy5idG4tY29udGFpbmVyJykubGVuZ3RoID4gMCkge1xuICAgICAgICBqUXVlcnkodGhpcykuZmluZCgnLmJ0bi1jb250YWluZXInKS5yZW1vdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9mZmVyVGlsZXNMZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFNob3cgc3BlY2lmaWMgbnVtYmVyIG9mIG9mZmVycy5cbiAgICAgICAgaWYgKG9wdGlvbnMudGlsZVNob3dDb3VudCAhPSAnYWxsJyAmJiBvZmZlclRpbGVzTGVuZ3RoID4gb3B0aW9ucy50aWxlU2hvd0NvdW50KSB7XG5cbiAgICAgICAgICBzb3J0T2ZmZXJUaWxlcygpO1xuICAgICAgICAgIHZhciBvZmZlclRpbGVzUGFyZW50ID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApO1xuICAgICAgICAgIG9mZmVyVGlsZXNQYXJlbnQuc2xpY2Uob3B0aW9ucy50aWxlU2hvd0NvdW50KS5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuYWJsZSBwYWdpbmF0aW9uLlxuICAgICAgICBpZiAob3B0aW9ucy5wYWdpbmF0ZS5zdGF0dXMgPT0gdHJ1ZSkge1xuICAgICAgICAgIGpRdWVyeSh0aGlzKS5wYWdpbmF0ZSh7XG4gICAgICAgICAgICBpdGVtczogb3B0aW9ucy5wYWdpbmF0ZS5wYWdlSXRlbSxcbiAgICAgICAgICAgIG1vcmU6IHsgdGV4dDogb3B0aW9ucy5wYWdpbmF0ZS5tb3JlLnRleHQsIGNsYXNzOiBvcHRpb25zLnBhZ2luYXRlLm1vcmUuY2xhc3MgfSxcbiAgICAgICAgICAgIGxlc3M6IHsgdGV4dDogb3B0aW9ucy5wYWdpbmF0ZS5sZXNzLnRleHQsIGNsYXNzOiBvcHRpb25zLnBhZ2luYXRlLmxlc3MuY2xhc3MgfSxcbiAgICAgICAgICAgIGNvdW50OiBvcHRpb25zLnBhZ2luYXRlLmNvdW50LFxuICAgICAgICAgICAgc2hvd0xlc3M6IG9wdGlvbnMucGFnaW5hdGUuc2hvd0xlc3MsXG4gICAgICAgICAgICBkZXNrdG9wOiB7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6IG9wdGlvbnMucGFnaW5hdGUuZGVza3RvcC5kZWZhdWx0LFxuICAgICAgICAgICAgICBpbmNyZW1lbnQ6IG9wdGlvbnMucGFnaW5hdGUuZGVza3RvcC5pbmNyZW1lbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YWJsZXQ6IHtcbiAgICAgICAgICAgICAgZGVmYXVsdDogb3B0aW9ucy5wYWdpbmF0ZS5kZXNrdG9wLmRlZmF1bHQsXG4gICAgICAgICAgICAgIGluY3JlbWVudDogb3B0aW9ucy5wYWdpbmF0ZS5kZXNrdG9wLmRlZmF1bHRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb2JpbGU6IHtcbiAgICAgICAgICAgICAgZGVmYXVsdDogb3B0aW9ucy5wYWdpbmF0ZS50YWJsZXQuZGVmYXVsdCxcbiAgICAgICAgICAgICAgaW5jcmVtZW50OiBvcHRpb25zLnBhZ2luYXRlLnRhYmxldC5kZWZhdWx0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG90YWxSZW1haW5pbmc6IG9wdGlvbnMucGFnaW5hdGUudG90YWxSZW1haW5pbmdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmluaW5nIGNhbGxiYWNrLlxuICAgIC8vIFdlIGFyZSB1c2luZyBpdCBpbiBzb21lIHNwZWNpYWwgY2FzZXMuXG4gICAgLy8gTGlrZSBiZWZvcmUgc2xpZGVyIGluaXRhbGl6aW5nLlxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIC8vIElmIHdlIGhhdmUgdG8gY2FsbCB0aGUgbWV0aG9kcyBhZnRlciB0aGUgY2FsbCBvZiBnZW8tZmVuY2luZy5cbiAgICAgIC8vIFRoZW4gd2UgY2FuIHVzZSB0aG9zZSBtZXRob2RzIHVuZGVyIGNhbGxiYWNrLlxuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc29ydE9mZmVyVGlsZXMgPSAoKSA9PiB7XG4gICAgdmFyIHNvcnRlZExlbmd0aCA9IGpRdWVyeSh0aGlzKS5maW5kKGAke29wdGlvbnMuaXRlbXNDbGFzc306bm90KFtkYXRhLW9mZmVyLXNvcnQ9XCJcIl0pYCkubGVuZ3RoICsgMTtcbiAgICB2YXIgbm9uU29ydGVkV3JhcHBlclRpbGVzID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfVtkYXRhLW9mZmVyLXNvcnQ9XCJcIl1gKTtcbiAgICBub25Tb3J0ZWRXcmFwcGVyVGlsZXMuZWFjaChmdW5jdGlvbiAoa2V5LCBvYmplY3QpIHtcbiAgICAgIGpRdWVyeShvYmplY3QpLmF0dHIoJ2RhdGEtb2ZmZXItc29ydCcsIHNvcnRlZExlbmd0aCk7XG4gICAgICBzb3J0ZWRMZW5ndGggPSBzb3J0ZWRMZW5ndGggKyAxO1xuICAgIH0pO1xuXG4gICAgdmFyIG1haW5XcmFwcGVyID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc1dyYXBwZXJ9YCk7XG4gICAgdmFyIGl0ZW1XcmFwcGVyID0galF1ZXJ5KHRoaXMpLmZpbmQoYCR7b3B0aW9ucy5pdGVtc0NsYXNzfWApO1xuICAgIGl0ZW1XcmFwcGVyLnNvcnQoZnVuY3Rpb24oYSwgYikge1xuICAgICAgY29uc3Qgc3RhcnRBID0gcGFyc2VJbnQoalF1ZXJ5KGEpLmRhdGEoJ29mZmVyLXNvcnQnKSkgfHwgTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgIGNvbnN0IHN0YXJ0QiA9IHBhcnNlSW50KGpRdWVyeShiKS5kYXRhKCdvZmZlci1zb3J0JykpIHx8IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICByZXR1cm4gc3RhcnRBID09PSBzdGFydEIgPyAwIDogc3RhcnRBID4gc3RhcnRCID8gMSA6IC0xO1xuICAgIH0pLmFwcGVuZFRvKG1haW5XcmFwcGVyKTtcbiAgfVxuXG4gIC8vIFNvbWV0aW1lIGNvb2tpZSB0YWtlcyB0aW1lIH
238RvIHNldC5cbiAgLy8gU28gd2UgY2FuJ3QgZ2V0IGl0IGZvciBmaXJzdCB0aW1lLlxuICAvLyBTbyBoZXJlIHdlIGFnYWluIGNhbGwgdG8gc2VydmVyIGZvciBjb3VudHJ5IGNvZGUuXG4gIC8vIFRoZW4gc2V0IHRoZSBjb29raWUgYWdhaW4gZm9yIGNvdW50cnkgZm9yIHNhZmVyIHNpZGUuXG4gIC8vIEluaXQgbWV0aG9kIGFsc28gY2FsbGVkIGluIGl0LlxuICBjb25zdCBmYWxsYmFja0NvdW50cnlJbml0ID0gKCkgPT4ge1xuICAgIHZhciBiYXNlVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB2YXIgdXJsID0gYmFzZVVybCArIFwiL2N1cnJlbmN5L2NvdW50cnlcIjtcbiAgICBqUXVlcnkuYWpheCh7XG4gICAgICB1cmw6IHVybCxcbiAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICBhc3luYzogdHJ1ZSxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIHN1Y2Nlc3MocmVzcG9uc2UpIHtcbiAgICAgICAgd2luZG93LkNvb2tpZXMuc2V0KFwiY3VycmVudF9jb3VudHJ5XCIsIHJlc3BvbnNlLmRhdGEuY3VycmVudF9jb3VudHJ5X2NvZGUsIHtcbiAgICAgICAgICBwYXRoOiAnLydcbiAgICAgICAgfSk7XG4gICAgICAgIGluaXQoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoKSB7XG4gICAgICAgIHdpbmRvdy5Db29raWVzLnNldChcImN1cnJlbnRfY291bnRyeVwiLCBcIlRIXCIsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICBpbml0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgY291bnRyeUluaXQgPSAoKSA9PiB7XG4gICAgLy8gTGFiIHRvb2xzOiBza2lwIGNyb3NzLW9yaWdpbiBDbG91ZGZsYXJlIGZldGNoIChDT1JTIGZhaWxzIG9uIGxvY2FsL0xIKS5cbiAgICBpZiAobmF2aWdhdG9yLndlYmRyaXZlcikge1xuICAgICAgd2luZG93LkNvb2tpZXMuc2V0KFwiY3VycmVudF9jb3VudHJ5XCIsIFwiVEhcIiwgeyBwYXRoOiAnLycgfSk7XG4gICAgICBpbml0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZldGNoKCdodHRwczovL3d3dy5jZW50YXJhaG90ZWxzcmVzb3J0cy5jb20vY2RuLWNnaS90cmFjZScpXG4gICAgICAudGhlbihmdW5jdGlvbiAocmVzKSB7IHJldHVybiByZXMudGV4dCgpOyB9KVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0LnJlcGxhY2UoL1tcXHJcXG5dKy9nLCAnXCIsXCInKS5yZXBsYWNlKC9cXD0rL2csICdcIjpcIicpO1xuICAgICAgICBkYXRhID0gJ3tcIicgKyBkYXRhLnNsaWNlKDAsIGRhdGEubGFzdEluZGV4T2YoJ1wiLFwiJykpICsgJ1wifSc7XG4gICAgICAgIHZhciBqc29uZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIGlmICh0eXBlb2YganNvbmRhdGEubG9jICE9PSBcInVuZGVmaW5lZFwiICYmIGpzb25kYXRhLmxvYyAhPSAnJykge1xuICAgICAgICAgIHdpbmRvdy5Db29raWVzLnNldChcImN1cnJlbnRfY291bnRyeVwiLCBqc29uZGF0YS5sb2MsIHsgcGF0aDogJy8nIH0pO1xuICAgICAgICAgIGluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmYWxsYmFja0NvdW50cnlJbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgICBmYWxsYmFja0NvdW50cnlJbml0KCk7XG4gICAgICB9KTtcbiAgfTtcblxuICBsZXQgY3VycmVudENvdW50cnkgPSB3aW5kb3cuQ29va2llcy5nZXQoXCJjdXJyZW50X2NvdW50cnlcIik7XG4gIGlmICh0eXBlb2YgY3VycmVudENvdW50cnkgPT09IFwidW5kZWZpbmVkXCIgfHwgY3VycmVudENvdW50cnkgPT0gJycpIHtcbiAgICBjb3VudHJ5SW5pdCgpO1xuICB9XG4gIGVsc2Uge1xuICAgIGluaXQoKTtcbiAgfVxufTtcbiJdLCJmaWxlIjoianMvb2ZmZXJzLWdlb2ZlbmNpbmcuanMifQ==
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.