{"version":3,"sources":["webpack:///./node_modules/enquire.js/src/Util.js","webpack:///./node_modules/getaddress-api/dist/getaddress-api.mjs","webpack:///./node_modules/dom-matches/index.js","webpack:///./node_modules/dom-closest/index.js","webpack:///./node_modules/is-mobile/index.js","webpack:///./node_modules/enquire.js/src/index.js","webpack:///./node_modules/enquire.js/src/QueryHandler.js","webpack:///./node_modules/enquire.js/src/MediaQuery.js","webpack:///./node_modules/enquire.js/src/MediaQueryDispatch.js","webpack:///./node_modules/dom-scroll-into-view/dist-web/index.js"],"names":["each","collection","fn","cont","i","length","isArray","target","Object","prototype","toString","apply","isFunction","module","exports","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","Symbol","iterator","n","v","op","pop","push","Suggestion","address","url","id","Result","isSuccess","Success","_super","AutocompleteSuccess","suggestions","_this","toSuccess","toFailed","Error","GetSuccess","AutocompleteFailed","status","message","GetFailed","AutocompleteOptions","all","undefined","template","top","filter","Default","options","TypeaheadOptions","search","Address","AutocompleteFilter","county","locality","district","town_or_city","postcode","residential","radius","AutocompleteFilterRadius","km","longitude","latitude","formatted_address","thoroughfare","building_name","sub_building_name","sub_building_number","building_number","line_1","line_2","line_3","line_4","country","FindSuccess","AutocompleteAddress","FindAddresses","addresses","FindFailed","TypeaheadSuccess","results","TypeaheadFailed","Client","api_key","autocomplete_url","get_url","typeahead_url","autocompleteResponse","getResponse","typeaheadResponse","autocompleteAbortController","AbortController","getAbortController","typeaheadAbortController","autocomplete","query","_a","json_1","json","err_1","_b","assign","replace","includes","abort","fetch","method","signal","headers","JSON","stringify","Message","name","get","json_2","err_2","find","response","json_3","err_3","concat","typeahead","term","json_4","err_4","matches","elem","selector","proto","window","Element","nativeMatches","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","nodeType","parentElem","parentNode","nodes","querySelectorAll","len","element","context","document","isMobile","default","mobileRE","tabletRE","opts","ua","navigator","userAgent","tablet","test","featureDetect","maxTouchPoints","indexOf","MediaQueryDispatch","QueryHandler","deferSetup","setup","initialised","on","match","off","unmatch","destroy","equals","MediaQuery","isUnconditional","handlers","mql","matchMedia","self","listener","currentTarget","assess","addListener","constuctor","addHandler","handler","qh","removeHandler","h","splice","clear","removeListener","action","Util","queries","browserIsIncapable","register","q","shouldDegrade","unregister","_typeof","obj","_defineProperty","key","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","arguments","source","forEach","getOwnPropertyDescriptors","defineProperties","RE_NUM","getClientPosition","box","x","doc","ownerDocument","docElem","documentElement","getBoundingClientRect","left","clientLeft","clientTop","getScroll","w","ret","getScrollLeft","getScrollTop","getOffset","el","pos","defaultView","parentWindow","_getComputedStyle","computedStyle_","val","computedStyle","getComputedStyle","getPropertyValue","getComputedStyleX","_RE_NUM_NO_PX","RegExp","RE_POS","CURRENT_STYLE","RUNTIME_STYLE","LEFT","PX","_getComputedStyleIE","style","rsLeft","pixelLeft","arr","isBorderBoxFn","BOX_MODELS","CONTENT_INDEX","PADDING_INDEX","BORDER_INDEX","MARGIN_INDEX","swap","callback","old","getPBMWidth","props","which","prop","j","cssProp","parseFloat","isWindow","domUtils","getWH","extra","viewportWidth","viewportHeight","docWidth","docHeight","borderBoxValue","offsetWidth","offsetHeight","isBorderBox","cssBoxValue","Number","borderBoxValueOrIsBorderBox","padding","slice","refWin","Math","max","win","documentElementProp","compatMode","cssShow","position","visibility","display","getWHIgnoreDisplay","args","css","setOffset","offset","current","first","charAt","toUpperCase","includeMargin","util","getWindow","node","clone","overflow","_i","scrollLeft","scrollTo","scrollTop","scrollIntoView","container","config","allowHorizontalScroll","onlyScrollIfNeeded","alignWithTop","alignWithLeft","offsetTop","offsetLeft","offsetBottom","offsetRight","containerOffset","ch","cw","containerScroll","diffTop","diffBottom","winScroll","ww","wh","isWin","elemOffset","eh","outerHeight","ew","outerWidth","height","width","clientHeight","clientWidth"],"mappings":"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","file":"js/chunk-vendors~b5906859.65dcc020.js","sourcesContent":["/**\n * Helper function for iterating over a collection\n *\n * @param collection\n * @param fn\n */\nfunction each(collection, fn) {\n var i = 0,\n length = collection.length,\n cont;\n\n for(i; i < length; i++) {\n cont = fn(collection[i], i);\n if(cont === false) {\n break; //allow early exit\n }\n }\n}\n\n/**\n * Helper function for determining whether target object is an array\n *\n * @param target the object under test\n * @return {Boolean} true if array, false otherwise\n */\nfunction isArray(target) {\n return Object.prototype.toString.apply(target) === '[object Array]';\n}\n\n/**\n * Helper function for determining whether target object is a function\n *\n * @param target the object under test\n * @return {Boolean} true if function, false otherwise\n */\nfunction isFunction(target) {\n return typeof target === 'function';\n}\n\nmodule.exports = {\n isFunction : isFunction,\n isArray : isArray,\n each : each\n};\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\n\nvar Suggestion = /** @class */ (function () {\r\n function Suggestion(address, url, id) {\r\n this.address = address;\r\n this.url = url;\r\n this.id = id;\r\n }\r\n return Suggestion;\r\n}());\r\nvar Result = /** @class */ (function () {\r\n function Result(isSuccess) {\r\n this.isSuccess = isSuccess;\r\n }\r\n return Result;\r\n}());\r\nvar Success = /** @class */ (function (_super) {\r\n __extends(Success, _super);\r\n function Success() {\r\n return _super.call(this, true) || this;\r\n }\r\n return Success;\r\n}(Result));\r\nvar AutocompleteSuccess = /** @class */ (function (_super) {\r\n __extends(AutocompleteSuccess, _super);\r\n function AutocompleteSuccess(suggestions) {\r\n var _this = _super.call(this) || this;\r\n _this.suggestions = suggestions;\r\n return _this;\r\n }\r\n AutocompleteSuccess.prototype.toSuccess = function () {\r\n return this;\r\n };\r\n AutocompleteSuccess.prototype.toFailed = function () {\r\n throw new Error('Did not fail');\r\n };\r\n return AutocompleteSuccess;\r\n}(Success));\r\nvar GetSuccess = /** @class */ (function (_super) {\r\n __extends(GetSuccess, _super);\r\n function GetSuccess(address) {\r\n var _this = _super.call(this) || this;\r\n _this.address = address;\r\n return _this;\r\n }\r\n GetSuccess.prototype.toSuccess = function () {\r\n return this;\r\n };\r\n GetSuccess.prototype.toFailed = function () {\r\n throw new Error('Did not fail');\r\n };\r\n return GetSuccess;\r\n}(Success));\r\nvar AutocompleteFailed = /** @class */ (function (_super) {\r\n __extends(AutocompleteFailed, _super);\r\n function AutocompleteFailed(status, message) {\r\n var _this = _super.call(this, false) || this;\r\n _this.status = status;\r\n _this.message = message;\r\n return _this;\r\n }\r\n AutocompleteFailed.prototype.toSuccess = function () {\r\n throw new Error('Not a success');\r\n };\r\n AutocompleteFailed.prototype.toFailed = function () {\r\n return this;\r\n };\r\n return AutocompleteFailed;\r\n}(Result));\r\nvar GetFailed = /** @class */ (function (_super) {\r\n __extends(GetFailed, _super);\r\n function GetFailed(status, message) {\r\n var _this = _super.call(this, false) || this;\r\n _this.status = status;\r\n _this.message = message;\r\n return _this;\r\n }\r\n GetFailed.prototype.toSuccess = function () {\r\n throw new Error('Not a success');\r\n };\r\n GetFailed.prototype.toFailed = function () {\r\n return this;\r\n };\r\n return GetFailed;\r\n}(Result));\r\nvar AutocompleteOptions = /** @class */ (function () {\r\n function AutocompleteOptions() {\r\n this.all = undefined;\r\n this.template = undefined;\r\n this.top = undefined;\r\n this.filter = undefined;\r\n }\r\n AutocompleteOptions.Default = function () {\r\n var options = new AutocompleteOptions();\r\n options.all = true;\r\n return options;\r\n };\r\n return AutocompleteOptions;\r\n}());\r\nvar TypeaheadOptions = /** @class */ (function () {\r\n function TypeaheadOptions() {\r\n this.top = undefined;\r\n this.search = undefined;\r\n }\r\n TypeaheadOptions.Default = function () {\r\n var options = new TypeaheadOptions();\r\n return options;\r\n };\r\n return TypeaheadOptions;\r\n}());\r\nvar AutocompleteFilter = /** @class */ (function () {\r\n function AutocompleteFilter() {\r\n this.county = undefined;\r\n this.locality = undefined;\r\n this.district = undefined;\r\n this.town_or_city = undefined;\r\n this.postcode = undefined;\r\n this.residential = undefined;\r\n this.radius = undefined;\r\n }\r\n return AutocompleteFilter;\r\n}());\r\nvar AutocompleteFilterRadius = /** @class */ (function () {\r\n function AutocompleteFilterRadius() {\r\n this.km = undefined;\r\n this.longitude = undefined;\r\n this.latitude = undefined;\r\n }\r\n return AutocompleteFilterRadius;\r\n}());\r\nvar Address = /** @class */ (function () {\r\n function Address(formatted_address, thoroughfare, building_name, sub_building_name, sub_building_number, building_number, line_1, line_2, line_3, line_4, locality, town_or_city, county, district, country) {\r\n this.formatted_address = formatted_address;\r\n this.thoroughfare = thoroughfare;\r\n this.building_name = building_name;\r\n this.sub_building_name = sub_building_name;\r\n this.sub_building_number = sub_building_number;\r\n this.building_number = building_number;\r\n this.line_1 = line_1;\r\n this.line_2 = line_2;\r\n this.line_3 = line_3;\r\n this.line_4 = line_4;\r\n this.locality = locality;\r\n this.town_or_city = town_or_city;\r\n this.county = county;\r\n this.district = district;\r\n this.country = country;\r\n }\r\n return Address;\r\n}());\r\nvar AutocompleteAddress = /** @class */ (function (_super) {\r\n __extends(AutocompleteAddress, _super);\r\n function AutocompleteAddress(postcode, latitude, longitude, formatted_address, thoroughfare, building_name, building_number, sub_building_name, sub_building_number, line_1, line_2, line_3, line_4, locality, town_or_city, county, district, country, residential) {\r\n var _this = _super.call(this, formatted_address, thoroughfare, building_name, building_number, sub_building_name, sub_building_number, line_1, line_2, line_3, line_3, line_4, town_or_city, county, district, country) || this;\r\n _this.postcode = postcode;\r\n _this.latitude = latitude;\r\n _this.longitude = longitude;\r\n _this.formatted_address = formatted_address;\r\n _this.thoroughfare = thoroughfare;\r\n _this.building_name = building_name;\r\n _this.building_number = building_number;\r\n _this.sub_building_name = sub_building_name;\r\n _this.sub_building_number = sub_building_number;\r\n _this.line_1 = line_1;\r\n _this.line_2 = line_2;\r\n _this.line_3 = line_3;\r\n _this.line_4 = line_4;\r\n _this.locality = locality;\r\n _this.town_or_city = town_or_city;\r\n _this.county = county;\r\n _this.district = district;\r\n _this.country = country;\r\n _this.residential = residential;\r\n return _this;\r\n }\r\n return AutocompleteAddress;\r\n}(Address));\r\nvar FindAddresses = /** @class */ (function () {\r\n function FindAddresses(postcode, latitude, longitude, addresses) {\r\n this.postcode = postcode;\r\n this.latitude = latitude;\r\n this.longitude = longitude;\r\n this.addresses = addresses;\r\n }\r\n return FindAddresses;\r\n}());\r\nvar FindSuccess = /** @class */ (function (_super) {\r\n __extends(FindSuccess, _super);\r\n function FindSuccess(addresses) {\r\n var _this = _super.call(this) || this;\r\n _this.addresses = addresses;\r\n return _this;\r\n }\r\n FindSuccess.prototype.toSuccess = function () {\r\n return this;\r\n };\r\n FindSuccess.prototype.toFailed = function () {\r\n throw new Error('failed');\r\n };\r\n return FindSuccess;\r\n}(Success));\r\nvar FindFailed = /** @class */ (function (_super) {\r\n __extends(FindFailed, _super);\r\n function FindFailed(status, message) {\r\n var _this = _super.call(this, false) || this;\r\n _this.status = status;\r\n _this.message = message;\r\n return _this;\r\n }\r\n FindFailed.prototype.toSuccess = function () {\r\n throw new Error('failed');\r\n };\r\n FindFailed.prototype.toFailed = function () {\r\n return this;\r\n };\r\n return FindFailed;\r\n}(Result));\r\nvar TypeaheadSuccess = /** @class */ (function (_super) {\r\n __extends(TypeaheadSuccess, _super);\r\n function TypeaheadSuccess(results) {\r\n var _this = _super.call(this) || this;\r\n _this.results = results;\r\n return _this;\r\n }\r\n TypeaheadSuccess.prototype.toSuccess = function () {\r\n return this;\r\n };\r\n TypeaheadSuccess.prototype.toFailed = function () {\r\n throw new Error('failed');\r\n };\r\n return TypeaheadSuccess;\r\n}(Success));\r\nvar TypeaheadFailed = /** @class */ (function (_super) {\r\n __extends(TypeaheadFailed, _super);\r\n function TypeaheadFailed(status, message) {\r\n var _this = _super.call(this, false) || this;\r\n _this.status = status;\r\n _this.message = message;\r\n return _this;\r\n }\r\n TypeaheadFailed.prototype.toSuccess = function () {\r\n throw new Error('failed');\r\n };\r\n TypeaheadFailed.prototype.toFailed = function () {\r\n return this;\r\n };\r\n return TypeaheadFailed;\r\n}(Result));\n\nvar Client = /** @class */ (function () {\r\n function Client(api_key, autocomplete_url, get_url, typeahead_url) {\r\n if (autocomplete_url === void 0) { autocomplete_url = \"https://api.getaddress.io/autocomplete/{query}\"; }\r\n if (get_url === void 0) { get_url = \"https://api.getaddress.io/get/{id}\"; }\r\n if (typeahead_url === void 0) { typeahead_url = \"https://api.getaddress.io/typeahead/{term}\"; }\r\n this.api_key = api_key;\r\n this.autocomplete_url = autocomplete_url;\r\n this.get_url = get_url;\r\n this.typeahead_url = typeahead_url;\r\n this.autocompleteResponse = undefined;\r\n this.getResponse = undefined;\r\n this.typeaheadResponse = undefined;\r\n this.autocompleteAbortController = new AbortController();\r\n this.getAbortController = new AbortController();\r\n this.typeaheadAbortController = new AbortController();\r\n }\r\n Client.prototype.autocomplete = function (query, options) {\r\n if (options === void 0) { options = AutocompleteOptions.Default(); }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var url, _a, json_1, suggestions, json, err_1;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _b.trys.push([0, 5, 6, 7]);\r\n options = Object.assign(AutocompleteOptions.Default(), options);\r\n url = this.autocomplete_url.replace(/{query}/i, query);\r\n if (this.api_key) {\r\n if (url.includes('?')) {\r\n url = url + '&api-key=' + this.api_key;\r\n }\r\n else {\r\n url = url + '?api-key=' + this.api_key;\r\n }\r\n }\r\n if (this.autocompleteResponse !== undefined) {\r\n this.autocompleteResponse = undefined;\r\n this.autocompleteAbortController.abort();\r\n this.autocompleteAbortController = new AbortController();\r\n }\r\n _a = this;\r\n return [4 /*yield*/, fetch(url, {\r\n method: 'post',\r\n signal: this.autocompleteAbortController.signal,\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(options)\r\n })];\r\n case 1:\r\n _a.autocompleteResponse = _b.sent();\r\n if (!(this.autocompleteResponse.status == 200)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, this.autocompleteResponse.json()];\r\n case 2:\r\n json_1 = _b.sent();\r\n suggestions = json_1.suggestions;\r\n return [2 /*return*/, new AutocompleteSuccess(suggestions)];\r\n case 3: return [4 /*yield*/, this.autocompleteResponse.json()];\r\n case 4:\r\n json = _b.sent();\r\n return [2 /*return*/, new AutocompleteFailed(this.autocompleteResponse.status, json.Message)];\r\n case 5:\r\n err_1 = _b.sent();\r\n if (err_1 instanceof Error) {\r\n if (err_1.name === 'AbortError') {\r\n return [2 /*return*/, new AutocompleteSuccess([])];\r\n }\r\n return [2 /*return*/, new AutocompleteFailed(401, err_1.message)];\r\n }\r\n return [2 /*return*/, new AutocompleteFailed(401, 'Unauthorised')];\r\n case 6:\r\n this.autocompleteResponse = undefined;\r\n return [7 /*endfinally*/];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n Client.prototype.get = function (id) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var url, _a, json_2, address, json, err_2;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _b.trys.push([0, 5, 6, 7]);\r\n url = this.get_url.replace(/{id}/i, id);\r\n if (this.api_key) {\r\n if (url.includes('?')) {\r\n url = url + '&api-key=' + this.api_key;\r\n }\r\n else {\r\n url = url + '?api-key=' + this.api_key;\r\n }\r\n }\r\n if (this.getResponse !== undefined) {\r\n this.getResponse = undefined;\r\n this.getAbortController.abort();\r\n this.getAbortController = new AbortController();\r\n }\r\n _a = this;\r\n return [4 /*yield*/, fetch(url, {\r\n method: 'get',\r\n signal: this.getAbortController.signal,\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n })];\r\n case 1:\r\n _a.getResponse = _b.sent();\r\n if (!(this.getResponse.status == 200)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, this.getResponse.json()];\r\n case 2:\r\n json_2 = _b.sent();\r\n address = json_2;\r\n return [2 /*return*/, new GetSuccess(address)];\r\n case 3: return [4 /*yield*/, this.getResponse.json()];\r\n case 4:\r\n json = _b.sent();\r\n return [2 /*return*/, new GetFailed(this.getResponse.status, json.Message)];\r\n case 5:\r\n err_2 = _b.sent();\r\n if (err_2 instanceof Error) {\r\n return [2 /*return*/, new GetFailed(401, err_2.message)];\r\n }\r\n return [2 /*return*/, new GetFailed(401, 'Unauthorised')];\r\n case 6:\r\n this.getResponse = undefined;\r\n return [7 /*endfinally*/];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n Client.prototype.find = function (postcode) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var response, json_3, addresses, json, err_3;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 5, , 6]);\r\n return [4 /*yield*/, fetch(\"https://api.getaddress.io/find/\".concat(postcode, \"?api-key=\").concat(this.api_key, \"&expand=true\"))];\r\n case 1:\r\n response = _a.sent();\r\n if (!(response.status == 200)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, response.json()];\r\n case 2:\r\n json_3 = _a.sent();\r\n addresses = json_3;\r\n return [2 /*return*/, new FindSuccess(addresses)];\r\n case 3: return [4 /*yield*/, response.json()];\r\n case 4:\r\n json = _a.sent();\r\n return [2 /*return*/, new FindFailed(response.status, json.Message)];\r\n case 5:\r\n err_3 = _a.sent();\r\n if (err_3 instanceof Error) {\r\n return [2 /*return*/, new FindFailed(401, err_3.message)];\r\n }\r\n return [2 /*return*/, new FindFailed(401, 'Unauthorised')];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n Client.prototype.typeahead = function (term, options) {\r\n if (options === void 0) { options = TypeaheadOptions.Default(); }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var url, _a, json_4, results, json, err_4;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _b.trys.push([0, 5, 6, 7]);\r\n options = Object.assign(TypeaheadOptions.Default(), options);\r\n url = this.typeahead_url.replace(/{term}/i, term);\r\n if (this.api_key) {\r\n if (url.includes('?')) {\r\n url = url + '&api-key=' + this.api_key;\r\n }\r\n else {\r\n url = url + '?api-key=' + this.api_key;\r\n }\r\n }\r\n if (this.typeaheadResponse !== undefined) {\r\n this.typeaheadResponse = undefined;\r\n this.typeaheadAbortController.abort();\r\n this.typeaheadAbortController = new AbortController();\r\n }\r\n _a = this;\r\n return [4 /*yield*/, fetch(url, {\r\n method: 'post',\r\n signal: this.autocompleteAbortController.signal,\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(options)\r\n })];\r\n case 1:\r\n _a.typeaheadResponse = _b.sent();\r\n if (!(this.typeaheadResponse.status == 200)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, this.typeaheadResponse.json()];\r\n case 2:\r\n json_4 = _b.sent();\r\n results = json_4;\r\n return [2 /*return*/, new TypeaheadSuccess(results)];\r\n case 3: return [4 /*yield*/, this.typeaheadResponse.json()];\r\n case 4:\r\n json = _b.sent();\r\n return [2 /*return*/, new TypeaheadFailed(this.typeaheadResponse.status, json.Message)];\r\n case 5:\r\n err_4 = _b.sent();\r\n if (err_4 instanceof Error) {\r\n if (err_4.name === 'AbortError') {\r\n return [2 /*return*/, new TypeaheadSuccess([])];\r\n }\r\n return [2 /*return*/, new TypeaheadFailed(401, err_4.message)];\r\n }\r\n return [2 /*return*/, new TypeaheadFailed(401, 'Unauthorised')];\r\n case 6:\r\n this.typeaheadResponse = undefined;\r\n return [7 /*endfinally*/];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n return Client;\r\n}());\n\nexport { AutocompleteAddress, AutocompleteFailed, AutocompleteFilter, AutocompleteFilterRadius, AutocompleteOptions, AutocompleteSuccess, FindAddresses, FindFailed, FindSuccess, GetFailed, GetSuccess, Result, Suggestion, TypeaheadFailed, TypeaheadOptions, TypeaheadSuccess, Client as default };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0YWRkcmVzcy1hcGkubWpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwiLi4vc3JjL1R5cGVzLnRzIiwiLi4vc3JjL0NsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBTdWdnZXN0aW9uIFxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBhZGRyZXNzOnN0cmluZywgcmVhZG9ubHkgdXJsOnN0cmluZywgcmVhZG9ubHkgaWQ6c3RyaW5nKSBcclxuICAgIHtcclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlc3VsdDxTLEY+XHJcbntcclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGlzU3VjY2Vzczpib29sZWFuKXtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBhYnN0cmFjdCB0b1N1Y2Nlc3MoKTpTO1xyXG4gICAgYWJzdHJhY3QgdG9GYWlsZWQoKTpGO1xyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3VjY2VzczxTLEY+IGV4dGVuZHMgUmVzdWx0PFMsRj5cclxue1xyXG4gICAgY29uc3RydWN0b3IoKVxyXG4gICAge1xyXG4gICAgICAgIHN1cGVyKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFic3RyYWN0IHRvU3VjY2VzcygpOlM7XHJcbiAgICBhYnN0cmFjdCB0b0ZhaWxlZCgpOkY7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVTdWNjZXNzIGV4dGVuZHMgU3VjY2VzczxBdXRvY29tcGxldGVTdWNjZXNzLEF1dG9jb21wbGV0ZUZhaWxlZD5cclxue1xyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgc3VnZ2VzdGlvbnM6U3VnZ2VzdGlvbltdKVxyXG4gICAge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdWNjZXNzKCk6IEF1dG9jb21wbGV0ZVN1Y2Nlc3Mge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgdG9GYWlsZWQoKTogQXV0b2NvbXBsZXRlRmFpbGVkIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpZCBub3QgZmFpbCcpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR2V0U3VjY2VzcyBleHRlbmRzIFN1Y2Nlc3M8R2V0U3VjY2VzcywgR2V0RmFpbGVkPlxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBhZGRyZXNzOkF1dG9jb21wbGV0ZUFkZHJlc3MpXHJcbiAgICB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N1Y2Nlc3MoKTogR2V0U3VjY2VzcyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICB0b0ZhaWxlZCgpOiBHZXRGYWlsZWQge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBmYWlsJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlRmFpbGVkIGV4dGVuZHMgUmVzdWx0PEF1dG9jb21wbGV0ZVN1Y2Nlc3MsQXV0b2NvbXBsZXRlRmFpbGVkPlxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBzdGF0dXM6bnVtYmVyLCByZWFkb25seSBtZXNzYWdlOnN0cmluZylcclxuICAgIHtcclxuICAgICAgICBzdXBlcihmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdWNjZXNzKCk6IEF1dG9jb21wbGV0ZVN1Y2Nlc3Mge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGEgc3VjY2VzcycpO1xyXG4gICAgfVxyXG4gICAgdG9GYWlsZWQoKTogQXV0b2NvbXBsZXRlRmFpbGVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEdldEZhaWxlZCBleHRlbmRzIFJlc3VsdDxHZXRTdWNjZXNzLEdldEZhaWxlZD5cclxue1xyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgc3RhdHVzOm51bWJlciwgcmVhZG9ubHkgbWVzc2FnZTpzdHJpbmcpXHJcbiAgICB7XHJcbiAgICAgICAgc3VwZXIoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvU3VjY2VzcygpOiBHZXRTdWNjZXNzIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIHN1Y2Nlc3MnKTtcclxuICAgIH1cclxuICAgIHRvRmFpbGVkKCk6IEdldEZhaWxlZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVPcHRpb25zXHJcbntcclxuICAgIGFsbDpib29sZWFuID0gdW5kZWZpbmVkO1xyXG4gICAgdGVtcGxhdGU6c3RyaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgdG9wOm51bWJlciA9IHVuZGVmaW5lZDtcclxuICAgIGZpbHRlcjpBdXRvY29tcGxldGVGaWx0ZXIgPSB1bmRlZmluZWQ7XHJcbiAgIFxyXG4gICAgc3RhdGljIERlZmF1bHQoKTpBdXRvY29tcGxldGVPcHRpb25zXHJcbiAgICB7XHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBuZXcgQXV0b2NvbXBsZXRlT3B0aW9ucygpO1xyXG4gICAgICAgIG9wdGlvbnMuYWxsID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFR5cGVhaGVhZE9wdGlvbnNcclxue1xyXG4gICAgXHJcbiAgICB0b3A6bnVtYmVyID0gdW5kZWZpbmVkO1xyXG4gICAgc2VhcmNoOnN0cmluZ1tdID0gdW5kZWZpbmVkO1xyXG4gICBcclxuICAgIHN0YXRpYyBEZWZhdWx0KCk6VHlwZWFoZWFkT3B0aW9uc1xyXG4gICAge1xyXG4gICAgICAgIGxldCBvcHRpb25zID0gbmV3IFR5cGVhaGVhZE9wdGlvbnMoKTtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZUZpbHRlclxyXG57XHJcbiAgICBjb3VudHk6c3RyaW5nID0gdW5kZWZpbmVkO1xyXG4gICAgbG9jYWxpdHk6c3RyaW5nPSB1bmRlZmluZWQ7XHJcbiAgICBkaXN0cmljdDpzdHJpbmc9IHVuZGVmaW5lZDtcclxuICAgIHRvd25fb3JfY2l0eTpzdHJpbmc9dW5kZWZpbmVkO1xyXG4gICAgcG9zdGNvZGU6c3RyaW5nPXVuZGVmaW5lZDtcclxuICAgIHJlc2lkZW50aWFsOmJvb2xlYW49dW5kZWZpbmVkO1xyXG4gICAgcmFkaXVzOkF1dG9jb21wbGV0ZUZpbHRlclJhZGl1cz11bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVGaWx0ZXJSYWRpdXNcclxue1xyXG4gICAga206bnVtYmVyPXVuZGVmaW5lZDtcclxuICAgIGxvbmdpdHVkZTpudW1iZXI9dW5kZWZpbmVkO1xyXG4gICAgbGF0aXR1ZGU6bnVtYmVyPXVuZGVmaW5lZDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBBZGRyZXNzXHJcbntcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHJlYWRvbmx5IGZvcm1hdHRlZF9hZGRyZXNzOnN0cmluZ1tdLFxyXG4gICAgICAgIHJlYWRvbmx5IHRob3JvdWdoZmFyZTpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgYnVpbGRpbmdfbmFtZTpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgc3ViX2J1aWxkaW5nX25hbWU6c3RyaW5nLFxyXG4gICAgICAgIHJlYWRvbmx5IHN1Yl9idWlsZGluZ19udW1iZXI6c3RyaW5nLFxyXG4gICAgICAgIHJlYWRvbmx5IGJ1aWxkaW5nX251bWJlcjpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgbGluZV8xOnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBsaW5lXzI6c3RyaW5nLFxyXG4gICAgICAgIHJlYWRvbmx5IGxpbmVfMzpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgbGluZV80OnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBsb2NhbGl0eTpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgdG93bl9vcl9jaXR5OnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBjb3VudHk6c3RyaW5nLFxyXG4gICAgICAgIHJlYWRvbmx5IGRpc3RyaWN0OnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBjb3VudHJ5OnN0cmluZylcclxuICAgIHtcclxuXHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZUFkZHJlc3MgZXh0ZW5kcyBBZGRyZXNze1xyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICByZWFkb25seSBwb3N0Y29kZTpzdHJpbmcsIFxyXG4gICAgICAgIHJlYWRvbmx5IGxhdGl0dWRlOm51bWJlcixcclxuICAgICAgICByZWFkb25seSBsb25naXR1ZGU6bnVtYmVyLFxyXG4gICAgICAgIHJlYWRvbmx5IGZvcm1hdHRlZF9hZGRyZXNzOnN0cmluZ1tdLFxyXG4gICAgICAgIHJlYWRvbmx5IHRob3JvdWdoZmFyZTpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgYnVpbGRpbmdfbmFtZTpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgYnVpbGRpbmdfbnVtYmVyOnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBzdWJfYnVpbGRpbmdfbmFtZTpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgc3ViX2J1aWxkaW5nX251bWJlcjpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgbGluZV8xOnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBsaW5lXzI6c3RyaW5nLFxyXG4gICAgICAgIHJlYWRvbmx5IGxpbmVfMzpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgbGluZV80OnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBsb2NhbGl0eTpzdHJpbmcsXHJcbiAgICAgICAgcmVhZG9ubHkgdG93bl9vcl9jaXR5OnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBjb3VudHk6c3RyaW5nLFxyXG4gICAgICAgIHJlYWRvbmx5IGRpc3RyaWN0OnN0cmluZyxcclxuICAgICAgICByZWFkb25seSBjb3VudHJ5OnN0cmluZyxcclxuICAgICAgICByZWFkb25seSByZXNpZGVudGlhbDpib29sZWFuKVxyXG4gICAge1xyXG4gICAgICAgIHN1cGVyKGZvcm1hdHRlZF9hZGRyZXNzLHRob3JvdWdoZmFyZSxcclxuICAgICAgICAgICAgYnVpbGRpbmdfbmFtZSxidWlsZGluZ19udW1iZXIsXHJcbiAgICAgICAgICAgIHN1Yl9idWlsZGluZ19uYW1lLHN1Yl9idWlsZGluZ19udW1iZXIsXHJcbiAgICAgICAgICAgIGxpbmVfMSxsaW5lXzIsbGluZV8zLGxpbmVfMyxsaW5lXzQsXHJcbiAgICAgICAgICAgIHRvd25fb3JfY2l0eSxjb3VudHksZGlzdHJpY3QsY291bnRyeSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGaW5kQWRkcmVzc2VzXHJcbntcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHJlYWRvbmx5IHBvc3Rjb2RlOnN0cmluZywgXHJcbiAgICAgICAgcmVhZG9ubHkgbGF0aXR1ZGU6bnVtYmVyLFxyXG4gICAgICAgIHJlYWRvbmx5IGxvbmdpdHVkZTpudW1iZXIsXHJcbiAgICAgICAgcmVhZG9ubHkgYWRkcmVzc2VzOkFkZHJlc3NbXSl7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmluZFN1Y2Nlc3MgZXh0ZW5kcyBTdWNjZXNzPEZpbmRTdWNjZXNzLEZpbmRGYWlsZWQ+XHJcbntcclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGFkZHJlc3NlczpGaW5kQWRkcmVzc2VzKVxyXG4gICAge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdWNjZXNzKCk6IEZpbmRTdWNjZXNzIHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuICAgIHRvRmFpbGVkKCk6IEZpbmRGYWlsZWQge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGaW5kRmFpbGVkIGV4dGVuZHMgUmVzdWx0PEZpbmRTdWNjZXNzLEZpbmRGYWlsZWQ+XHJcbntcclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHN0YXR1czpudW1iZXIsIHJlYWRvbmx5IG1lc3NhZ2U6c3RyaW5nKVxyXG4gICAge1xyXG4gICAgICAgIHN1cGVyKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N1Y2Nlc3MoKTogRmluZFN1Y2Nlc3Mge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkJyk7XHJcbiAgICB9XHJcbiAgICB0b0ZhaWxlZCgpOiBGaW5kRmFpbGVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFR5cGVhaGVhZFN1Y2Nlc3MgZXh0ZW5kcyBTdWNjZXNzPFR5cGVhaGVhZFN1Y2Nlc3MsVHlwZWFoZWFkRmFpbGVkPlxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSByZXN1bHRzOnN0cmluZ1tdKVxyXG4gICAge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdWNjZXNzKCk6IFR5cGVhaGVhZFN1Y2Nlc3Mge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgdG9GYWlsZWQoKTogVHlwZWFoZWFkRmFpbGVkIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCcpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVHlwZWFoZWFkRmFpbGVkIGV4dGVuZHMgUmVzdWx0PFR5cGVhaGVhZFN1Y2Nlc3MsVHlwZWFoZWFkRmFpbGVkPlxyXG57XHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBzdGF0dXM6bnVtYmVyLCByZWFkb25seSBtZXNzYWdlOnN0cmluZylcclxuICAgIHtcclxuICAgICAgICBzdXBlcihmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdWNjZXNzKCk6IFR5cGVhaGVhZFN1Y2Nlc3Mge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkJyk7XHJcbiAgICB9XHJcbiAgICB0b0ZhaWxlZCgpOiBUeXBlYWhlYWRGYWlsZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtHZXRGYWlsZWQsIFJlc3VsdCxBdXRvY29tcGxldGVPcHRpb25zLCBTdWdnZXN0aW9uLFxyXG4gICAgQXV0b2NvbXBsZXRlU3VjY2VzcywgQXV0b2NvbXBsZXRlQWRkcmVzcyxHZXRTdWNjZXNzLCBcclxuICAgIEF1dG9jb21wbGV0ZUZhaWxlZCxGaW5kQWRkcmVzc2VzLEZpbmRTdWNjZXNzLEZpbmRGYWlsZWQsIFxyXG4gICAgQXV0b2NvbXBsZXRlRmlsdGVyLCBBdXRvY29tcGxldGVGaWx0ZXJSYWRpdXMsIFR5cGVhaGVhZFN1Y2Nlc3MsIFxyXG4gICAgVHlwZWFoZWFkRmFpbGVkLFR5cGVhaGVhZE9wdGlvbnN9IGZyb20gXCIuL1R5cGVzXCJcclxuICAgIFxyXG5jbGFzcyBDbGllbnRcclxue1xyXG4gICAgcHJpdmF0ZSAgYXV0b2NvbXBsZXRlQWJvcnRDb250cm9sbGVyOkFib3J0Q29udHJvbGxlcjtcclxuICAgIHByaXZhdGUgIGdldEFib3J0Q29udHJvbGxlcjpBYm9ydENvbnRyb2xsZXI7XHJcbiAgICBwcml2YXRlICB0eXBlYWhlYWRBYm9ydENvbnRyb2xsZXI6QWJvcnRDb250cm9sbGVyO1xyXG4gICAgcHJpdmF0ZSBhdXRvY29tcGxldGVSZXNwb25zZT86UmVzcG9uc2UgPSB1bmRlZmluZWQ7XHJcbiAgICBwcml2YXRlIGdldFJlc3BvbnNlPzpSZXNwb25zZSA9IHVuZGVmaW5lZDtcclxuICAgIHByaXZhdGUgdHlwZWFoZWFkUmVzcG9uc2U/OlJlc3BvbnNlID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGFwaV9rZXk6c3RyaW5nLCBcclxuICAgICAgICByZWFkb25seSBhdXRvY29tcGxldGVfdXJsOnN0cmluZyA9IFwiaHR0cHM6Ly9hcGkuZ2V0YWRkcmVzcy5pby9hdXRvY29tcGxldGUve3F1ZXJ5fVwiLFxyXG4gICAgICAgIHJlYWRvbmx5IGdldF91cmw6c3RyaW5nID0gXCJodHRwczovL2FwaS5nZXRhZGRyZXNzLmlvL2dldC97aWR9XCIsXHJcbiAgICAgICAgcmVhZG9ubHkgdHlwZWFoZWFkX3VybDpzdHJpbmcgPSBcImh0dHBzOi8vYXBpLmdldGFkZHJlc3MuaW8vdHlwZWFoZWFkL3t0ZXJtfVwiKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQWJvcnRDb250cm9sbGVyPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XHJcbiAgICAgICAgdGhpcy5nZXRBYm9ydENvbnRyb2xsZXI9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICB0aGlzLnR5cGVhaGVhZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhdXRvY29tcGxldGUocXVlcnk6c3RyaW5nLCBvcHRpb25zOkF1dG9jb21wbGV0ZU9wdGlvbnMgPSBBdXRvY29tcGxldGVPcHRpb25zLkRlZmF1bHQoKSk6UHJvbWlzZTxSZXN1bHQ8QXV0b2NvbXBsZXRlU3VjY2VzcyxBdXRvY29tcGxldGVGYWlsZWQ+PiBcclxuICAgIHtcclxuICAgICAgICB0cnlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKEF1dG9jb21wbGV0ZU9wdGlvbnMuRGVmYXVsdCgpLG9wdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHVybCA9IHRoaXMuYXV0b2NvbXBsZXRlX3VybC5yZXBsYWNlKC97cXVlcnl9L2kscXVlcnkpO1xyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5hcGlfa2V5KXtcclxuICAgICAgICAgICAgICAgIGlmKHVybC5pbmNsdWRlcygnPycpKXtcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwrICcmYXBpLWtleT0nKyB0aGlzLmFwaV9rZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCsgJz9hcGkta2V5PScrIHRoaXMuYXBpX2tleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5hdXRvY29tcGxldGVSZXNwb25zZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlUmVzcG9uc2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVBYm9ydENvbnRyb2xsZXI9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVSZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsIFxyXG4gICAgICAgICAgICAgICAgc2lnbmFsOiB0aGlzLmF1dG9jb21wbGV0ZUFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmKHRoaXMuYXV0b2NvbXBsZXRlUmVzcG9uc2Uuc3RhdHVzID09IDIwMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvbjphbnkgPSBhd2FpdCB0aGlzLmF1dG9jb21wbGV0ZVJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gIGpzb24uc3VnZ2VzdGlvbnMgYXMgU3VnZ2VzdGlvbltdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRvY29tcGxldGVTdWNjZXNzKHN1Z2dlc3Rpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gXHJcbiAgICAgICAgICAgIGNvbnN0IGpzb246YW55ID0gYXdhaXQgdGhpcy5hdXRvY29tcGxldGVSZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXV0b2NvbXBsZXRlRmFpbGVkKHRoaXMuYXV0b2NvbXBsZXRlUmVzcG9uc2Uuc3RhdHVzLGpzb24uTWVzc2FnZSk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY2F0Y2goZXJyOnVua25vd24pXHJcbiAgICAgICAgIHtcclxuICAgICAgICAgICAgaWYoZXJyIGluc3RhbmNlb2YgRXJyb3IpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXV0b2NvbXBsZXRlU3VjY2VzcyhbXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEF1dG9jb21wbGV0ZUZhaWxlZCg0MDEsZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEF1dG9jb21wbGV0ZUZhaWxlZCg0MDEsJ1VuYXV0aG9yaXNlZCcpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGZpbmFsbHkgXHJcbiAgICAgICAgIHtcclxuICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlUmVzcG9uc2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBcclxuICAgIGFzeW5jIGdldChpZDpzdHJpbmcpOlByb21pc2U8UmVzdWx0PEdldFN1Y2Nlc3MsR2V0RmFpbGVkPj4gXHJcbiAgICB7XHJcbiAgICAgICAgdHJ5XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBsZXQgdXJsID0gdGhpcy5nZXRfdXJsLnJlcGxhY2UoL3tpZH0vaSxpZCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLmFwaV9rZXkpe1xyXG4gICAgICAgICAgICAgICAgaWYodXJsLmluY2x1ZGVzKCc/Jykpe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCsgJyZhcGkta2V5PScrIHRoaXMuYXBpX2tleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsKyAnP2FwaS1rZXk9JysgdGhpcy5hcGlfa2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZih0aGlzLmdldFJlc3BvbnNlICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRSZXNwb25zZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWJvcnRDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFib3J0Q29udHJvbGxlcj0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldFJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICAgICAgICAgICAgc2lnbmFsOiB0aGlzLmdldEFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLmdldFJlc3BvbnNlLnN0YXR1cyA9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvbjphbnkgPSBhd2FpdCB0aGlzLmdldFJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSAganNvbiBhcyBBdXRvY29tcGxldGVBZGRyZXNzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHZXRTdWNjZXNzKGFkZHJlc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiBcclxuICAgICAgICAgICAgY29uc3QganNvbjphbnkgPSBhd2FpdCB0aGlzLmdldFJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBHZXRGYWlsZWQodGhpcy5nZXRSZXNwb25zZS5zdGF0dXMsanNvbi5NZXNzYWdlKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjYXRjaChlcnI6dW5rbm93bilcclxuICAgICAgICAge1xyXG4gICAgICAgICAgICBpZihlcnIgaW5zdGFuY2VvZiBFcnJvcilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHZXRGYWlsZWQoNDAxLGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBHZXRGYWlsZWQoNDAxLCdVbmF1dGhvcmlzZWQnKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBmaW5hbGx5e1xyXG4gICAgICAgICAgICB0aGlzLmdldFJlc3BvbnNlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmluZChwb3N0Y29kZTpzdHJpbmcpOlByb21pc2U8UmVzdWx0PEZpbmRTdWNjZXNzLEZpbmRGYWlsZWQ+PiBcclxuICAgIHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2FwaS5nZXRhZGRyZXNzLmlvL2ZpbmQvJHtwb3N0Y29kZX0/YXBpLWtleT0ke3RoaXMuYXBpX2tleX0mZXhwYW5kPXRydWVgKTtcclxuICAgIFxyXG4gICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXMgPT0gMjAwKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb246YW55ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzc2VzID0gIGpzb24gYXMgRmluZEFkZHJlc3NlcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmluZFN1Y2Nlc3MoYWRkcmVzc2VzKTtcclxuICAgICAgICAgICAgfVxyXG4gXHJcbiAgICAgICAgICAgIGNvbnN0IGpzb246YW55ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZpbmRGYWlsZWQocmVzcG9uc2Uuc3RhdHVzLGpzb24uTWVzc2FnZSk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY2F0Y2goZXJyOnVua25vd24pXHJcbiAgICAgICAgIHtcclxuICAgICAgICAgICAgaWYoZXJyIGluc3RhbmNlb2YgRXJyb3IpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmluZEZhaWxlZCg0MDEsZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEZpbmRGYWlsZWQoNDAxLCdVbmF1dGhvcmlzZWQnKTtcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyB0eXBlYWhlYWQodGVybTpzdHJpbmcsIG9wdGlvbnM6VHlwZWFoZWFkT3B0aW9ucyA9IFR5cGVhaGVhZE9wdGlvbnMuRGVmYXVsdCgpKTpQcm9taXNlPFJlc3VsdDxUeXBlYWhlYWRTdWNjZXNzLFR5cGVhaGVhZEZhaWxlZD4+IFxyXG4gICAge1xyXG4gICAgICAgIHRyeVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oVHlwZWFoZWFkT3B0aW9ucy5EZWZhdWx0KCksb3B0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdXJsID0gdGhpcy50eXBlYWhlYWRfdXJsLnJlcGxhY2UoL3t0ZXJtfS9pLHRlcm0pO1xyXG5cclxuICAgICAgICAgICAgaWYodGhpcy5hcGlfa2V5KXtcclxuICAgICAgICAgICAgICAgIGlmKHVybC5pbmNsdWRlcygnPycpKXtcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwrICcmYXBpLWtleT0nKyB0aGlzLmFwaV9rZXk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHVybCsgJz9hcGkta2V5PScrIHRoaXMuYXBpX2tleTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYodGhpcy50eXBlYWhlYWRSZXNwb25zZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkUmVzcG9uc2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVhaGVhZEFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRBYm9ydENvbnRyb2xsZXI9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRSZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsIFxyXG4gICAgICAgICAgICAgICAgc2lnbmFsOiB0aGlzLmF1dG9jb21wbGV0ZUFib3J0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgIGlmKHRoaXMudHlwZWFoZWFkUmVzcG9uc2Uuc3RhdHVzID09IDIwMClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvbjphbnkgPSBhd2FpdCB0aGlzLnR5cGVhaGVhZFJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSAganNvbiBhcyBzdHJpbmdbXTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZWFoZWFkU3VjY2VzcyhyZXN1bHRzKTtcclxuICAgICAgICAgICAgfVxyXG4gXHJcbiAgICAgICAgICAgIGNvbnN0IGpzb246YW55ID0gYXdhaXQgdGhpcy50eXBlYWhlYWRSZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZWFoZWFkRmFpbGVkKHRoaXMudHlwZWFoZWFkUmVzcG9uc2Uuc3RhdHVzLGpzb24uTWVzc2FnZSk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY2F0Y2goZXJyOnVua25vd24pXHJcbiAgICAgICAgIHtcclxuICAgICAgICAgICAgaWYoZXJyIGluc3RhbmNlb2YgRXJyb3IpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlmKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZWFoZWFkU3VjY2VzcyhbXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVhaGVhZEZhaWxlZCg0MDEsZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVhaGVhZEZhaWxlZCg0MDEsJ1VuYXV0aG9yaXNlZCcpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGZpbmFsbHkgXHJcbiAgICAgICAgIHtcclxuICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkUmVzcG9uc2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IHtDbGllbnQgYXMgZGVmYXVsdCxHZXRGYWlsZWQsIFJlc3VsdCxcclxuICAgIEF1dG9jb21wbGV0ZU9wdGlvbnMsIFxyXG4gICAgQXV0b2NvbXBsZXRlRmlsdGVyLFxyXG4gICAgQXV0b2NvbXBsZXRlRmlsdGVyUmFkaXVzLFxyXG4gICAgU3VnZ2VzdGlvbixcclxuICAgIEF1dG9jb21wbGV0ZVN1Y2Nlc3MsIFxyXG4gICAgQXV0b2NvbXBsZXRlQWRkcmVzcyxcclxuICAgIEdldFN1Y2Nlc3MsIFxyXG4gICAgQXV0b2NvbXBsZXRlRmFpbGVkLEZpbmRBZGRyZXNzZXMsXHJcbiAgICBGaW5kU3VjY2VzcyxGaW5kRmFpbGVkLFR5cGVhaGVhZEZhaWxlZCxcclxuICAgIFR5cGVhaGVhZFN1Y2Nlc3MsVHlwZWFoZWFkT3B0aW9ucyB9XHJcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNuQyxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsY0FBYztBQUN6QyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDcEYsUUFBUSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDMUcsSUFBSSxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBQ0Y7QUFDTyxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLElBQUk7QUFDN0MsUUFBUSxNQUFNLElBQUksU0FBUyxDQUFDLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRywrQkFBK0IsQ0FBQyxDQUFDO0FBQ2xHLElBQUksYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMzQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekYsQ0FBQztBQXVDRDtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDbkcsUUFBUSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDdEcsUUFBUSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDdEgsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUUsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBQ0Q7QUFDTyxTQUFTLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNySCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLE1BQU0sS0FBSyxVQUFVLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdKLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEUsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDdEIsUUFBUSxJQUFJLENBQUMsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUFDdEUsUUFBUSxPQUFPLENBQUMsRUFBRSxJQUFJO0FBQ3RCLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDekssWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELFlBQVksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNO0FBQzlDLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7QUFDakUsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcs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\n","'use strict';\n\n/**\n * Determine if a DOM element matches a CSS selector\n *\n * @param {Element} elem\n * @param {String} selector\n * @return {Boolean}\n * @api public\n */\n\nfunction matches(elem, selector) {\n // Vendor-specific implementations of `Element.prototype.matches()`.\n var proto = window.Element.prototype;\n var nativeMatches = proto.matches ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n\n if (!elem || elem.nodeType !== 1) {\n return false;\n }\n\n var parentElem = elem.parentNode;\n\n // use native 'matches'\n if (nativeMatches) {\n return nativeMatches.call(elem, selector);\n }\n\n // native support for `matches` is missing and a fallback is required\n var nodes = parentElem.querySelectorAll(selector);\n var len = nodes.length;\n\n for (var i = 0; i < len; i++) {\n if (nodes[i] === elem) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Expose `matches`\n */\n\nmodule.exports = matches;\n","/**\n * Module dependencies\n */\n\nvar matches = require('dom-matches');\n\n/**\n * @param element {Element}\n * @param selector {String}\n * @param context {Element}\n * @return {Element}\n */\nmodule.exports = function (element, selector, context) {\n context = context || document;\n // guard against orphans\n element = { parentNode: element };\n\n while ((element = element.parentNode) && element !== context) {\n if (matches(element, selector)) {\n return element;\n }\n }\n};\n","'use strict'\r\n\r\nmodule.exports = isMobile\r\nmodule.exports.isMobile = isMobile\r\nmodule.exports.default = isMobile\r\n\r\nvar mobileRE = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\r\n\r\nvar tabletRE = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i\r\n\r\nfunction isMobile (opts) {\r\n if (!opts) opts = {}\r\n var ua = opts.ua\r\n if (!ua && typeof navigator !== 'undefined') ua = navigator.userAgent\r\n if (ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {\r\n ua = ua.headers['user-agent']\r\n }\r\n if (typeof ua !== 'string') return false\r\n\r\n var result = opts.tablet ? tabletRE.test(ua) : mobileRE.test(ua)\r\n\r\n if (\r\n !result &&\r\n opts.tablet &&\r\n opts.featureDetect &&\r\n navigator &&\r\n navigator.maxTouchPoints > 1 &&\r\n ua.indexOf('Macintosh') !== -1 &&\r\n ua.indexOf('Safari') !== -1\r\n ) {\r\n result = true\r\n }\r\n\r\n return result\r\n}\r\n","var MediaQueryDispatch = require('./MediaQueryDispatch');\nmodule.exports = new MediaQueryDispatch();\n","/**\n * Delegate to handle a media query being matched and unmatched.\n *\n * @param {object} options\n * @param {function} options.match callback for when the media query is matched\n * @param {function} [options.unmatch] callback for when the media query is unmatched\n * @param {function} [options.setup] one-time callback triggered the first time a query is matched\n * @param {boolean} [options.deferSetup=false] should the setup callback be run immediately, rather than first time query is matched?\n * @constructor\n */\nfunction QueryHandler(options) {\n this.options = options;\n !options.deferSetup && this.setup();\n}\n\nQueryHandler.prototype = {\n\n constructor : QueryHandler,\n\n /**\n * coordinates setup of the handler\n *\n * @function\n */\n setup : function() {\n if(this.options.setup) {\n this.options.setup();\n }\n this.initialised = true;\n },\n\n /**\n * coordinates setup and triggering of the handler\n *\n * @function\n */\n on : function() {\n !this.initialised && this.setup();\n this.options.match && this.options.match();\n },\n\n /**\n * coordinates the unmatch event for the handler\n *\n * @function\n */\n off : function() {\n this.options.unmatch && this.options.unmatch();\n },\n\n /**\n * called when a handler is to be destroyed.\n * delegates to the destroy or unmatch callbacks, depending on availability.\n *\n * @function\n */\n destroy : function() {\n this.options.destroy ? this.options.destroy() : this.off();\n },\n\n /**\n * determines equality by reference.\n * if object is supplied compare options, if function, compare match callback\n *\n * @function\n * @param {object || function} [target] the target for comparison\n */\n equals : function(target) {\n return this.options === target || this.options.match === target;\n }\n\n};\n\nmodule.exports = QueryHandler;\n","var QueryHandler = require('./QueryHandler');\nvar each = require('./Util').each;\n\n/**\n * Represents a single media query, manages it's state and registered handlers for this query\n *\n * @constructor\n * @param {string} query the media query string\n * @param {boolean} [isUnconditional=false] whether the media query should run regardless of whether the conditions are met. Primarily for helping older browsers deal with mobile-first design\n */\nfunction MediaQuery(query, isUnconditional) {\n this.query = query;\n this.isUnconditional = isUnconditional;\n this.handlers = [];\n this.mql = window.matchMedia(query);\n\n var self = this;\n this.listener = function(mql) {\n // Chrome passes an MediaQueryListEvent object, while other browsers pass MediaQueryList directly\n self.mql = mql.currentTarget || mql;\n self.assess();\n };\n this.mql.addListener(this.listener);\n}\n\nMediaQuery.prototype = {\n\n constuctor : MediaQuery,\n\n /**\n * add a handler for this query, triggering if already active\n *\n * @param {object} handler\n * @param {function} handler.match callback for when query is activated\n * @param {function} [handler.unmatch] callback for when query is deactivated\n * @param {function} [handler.setup] callback for immediate execution when a query handler is registered\n * @param {boolean} [handler.deferSetup=false] should the setup callback be deferred until the first time the handler is matched?\n */\n addHandler : function(handler) {\n var qh = new QueryHandler(handler);\n this.handlers.push(qh);\n\n this.matches() && qh.on();\n },\n\n /**\n * removes the given handler from the collection, and calls it's destroy methods\n *\n * @param {object || function} handler the handler to remove\n */\n removeHandler : function(handler) {\n var handlers = this.handlers;\n each(handlers, function(h, i) {\n if(h.equals(handler)) {\n h.destroy();\n return !handlers.splice(i,1); //remove from array and exit each early\n }\n });\n },\n\n /**\n * Determine whether the media query should be considered a match\n *\n * @return {Boolean} true if media query can be considered a match, false otherwise\n */\n matches : function() {\n return this.mql.matches || this.isUnconditional;\n },\n\n /**\n * Clears all handlers and unbinds events\n */\n clear : function() {\n each(this.handlers, function(handler) {\n handler.destroy();\n });\n this.mql.removeListener(this.listener);\n this.handlers.length = 0; //clear array\n },\n\n /*\n * Assesses the query, turning on all handlers if it matches, turning them off if it doesn't match\n */\n assess : function() {\n var action = this.matches() ? 'on' : 'off';\n\n each(this.handlers, function(handler) {\n handler[action]();\n });\n }\n};\n\nmodule.exports = MediaQuery;\n","var MediaQuery = require('./MediaQuery');\nvar Util = require('./Util');\nvar each = Util.each;\nvar isFunction = Util.isFunction;\nvar isArray = Util.isArray;\n\n/**\n * Allows for registration of query handlers.\n * Manages the query handler's state and is responsible for wiring up browser events\n *\n * @constructor\n */\nfunction MediaQueryDispatch () {\n if(!window.matchMedia) {\n throw new Error('matchMedia not present, legacy browsers require a polyfill');\n }\n\n this.queries = {};\n this.browserIsIncapable = !window.matchMedia('only all').matches;\n}\n\nMediaQueryDispatch.prototype = {\n\n constructor : MediaQueryDispatch,\n\n /**\n * Registers a handler for the given media query\n *\n * @param {string} q the media query\n * @param {object || Array || Function} options either a single query handler object, a function, or an array of query handlers\n * @param {function} options.match fired when query matched\n * @param {function} [options.unmatch] fired when a query is no longer matched\n * @param {function} [options.setup] fired when handler first triggered\n * @param {boolean} [options.deferSetup=false] whether setup should be run immediately or deferred until query is first matched\n * @param {boolean} [shouldDegrade=false] whether this particular media query should always run on incapable browsers\n */\n register : function(q, options, shouldDegrade) {\n var queries = this.queries,\n isUnconditional = shouldDegrade && this.browserIsIncapable;\n\n if(!queries[q]) {\n queries[q] = new MediaQuery(q, isUnconditional);\n }\n\n //normalise to object in an array\n if(isFunction(options)) {\n options = { match : options };\n }\n if(!isArray(options)) {\n options = [options];\n }\n each(options, function(handler) {\n if (isFunction(handler)) {\n handler = { match : handler };\n }\n queries[q].addHandler(handler);\n });\n\n return this;\n },\n\n /**\n * unregisters a query and all it's handlers, or a specific handler for a query\n *\n * @param {string} q the media query to target\n * @param {object || function} [handler] specific handler to unregister\n */\n unregister : function(q, handler) {\n var query = this.queries[q];\n\n if(query) {\n if(handler) {\n query.removeHandler(handler);\n }\n else {\n query.clear();\n delete this.queries[q];\n }\n }\n\n return this;\n }\n};\n\nmodule.exports = MediaQueryDispatch;\n","function _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nfunction getClientPosition(elem) {\n var box;\n var x;\n var y;\n var doc = elem.ownerDocument;\n var body = doc.body;\n var docElem = doc && doc.documentElement; // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n\n box = elem.getBoundingClientRect(); // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n x = box.left;\n y = box.top; // In IE, most of the time, 2 extra pixels are added to the top and left\n // due to the implicit 2-pixel inset border. In IE6/7 quirks mode and\n // IE6 standards mode, this border can be overridden by setting the\n // document element's border to zero -- thus, we cannot rely on the\n // offset always being 2 pixels.\n // In quirks mode, the offset can be determined by querying the body's\n // clientLeft/clientTop, but in standards mode, it is found by querying\n // the document element's clientLeft/clientTop. Since we already called\n // getClientBoundingRect we have already forced a reflow, so it is not\n // too expensive just to query them all.\n // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n // 窗口边框标准是设 documentElement ,quirks 时设置 body\n // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n // 标准 ie 下 docElem.clientTop 就是 border-top\n // ie7 html 即窗口边框改变不了。永远为 2\n // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n x -= docElem.clientLeft || body.clientLeft || 0;\n y -= docElem.clientTop || body.clientTop || 0;\n return {\n left: x,\n top: y\n };\n}\n\nfunction getScroll(w, top) {\n var ret = w[\"page\".concat(top ? 'Y' : 'X', \"Offset\")];\n var method = \"scroll\".concat(top ? 'Top' : 'Left');\n\n if (typeof ret !== 'number') {\n var d = w.document; // ie6,7,8 standard mode\n\n ret = d.documentElement[method];\n\n if (typeof ret !== 'number') {\n // quirks mode\n ret = d.body[method];\n }\n }\n\n return ret;\n}\n\nfunction getScrollLeft(w) {\n return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n var pos = getClientPosition(el);\n var doc = el.ownerDocument;\n var w = doc.defaultView || doc.parentWindow;\n pos.left += getScrollLeft(w);\n pos.top += getScrollTop(w);\n return pos;\n}\n\nfunction _getComputedStyle(elem, name, computedStyle_) {\n var val = '';\n var d = elem.ownerDocument;\n var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null); // https://github.com/kissyteam/kissy/issues/61\n\n if (computedStyle) {\n val = computedStyle.getPropertyValue(name) || computedStyle[name];\n }\n\n return val;\n}\n\nvar _RE_NUM_NO_PX = new RegExp(\"^(\".concat(RE_NUM, \")(?!px)[a-z%]+$\"), 'i');\n\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n // currentStyle maybe null\n // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name]; // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n // 在 ie 下不对,需要直接用 offset 方式\n // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n // From the awesome hack by Dean Edwards\n // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n // If we're not dealing with a regular pixel number\n // but a number that has a weird ending, we need to convert it to pixels\n // exclude left right for relativity\n\n if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n // Remember the original values\n var style = elem.style;\n var left = style[LEFT];\n var rsLeft = elem[RUNTIME_STYLE][LEFT]; // prevent flashing of content\n\n elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; // Put in the new values to get a computed value out\n\n style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n ret = style.pixelLeft + PX; // Revert the changed values\n\n style[LEFT] = left;\n elem[RUNTIME_STYLE][LEFT] = rsLeft;\n }\n\n return ret === '' ? 'auto' : ret;\n}\n\nvar getComputedStyleX;\n\nif (typeof window !== 'undefined') {\n getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\n\nfunction each(arr, fn) {\n for (var i = 0; i < arr.length; i++) {\n fn(arr[i]);\n }\n}\n\nfunction isBorderBoxFn(elem) {\n return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n var old = {};\n var style = elem.style;\n var name; // Remember the old values, and insert the new ones\n\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n old[name] = style[name];\n style[name] = options[name];\n }\n }\n\n callback.call(elem); // Revert the old values\n\n for (name in options) {\n if (options.hasOwnProperty(name)) {\n style[name] = old[name];\n }\n }\n}\n\nfunction getPBMWidth(elem, props, which) {\n var value = 0;\n var prop;\n var j;\n var i;\n\n for (j = 0; j < props.length; j++) {\n prop = props[j];\n\n if (prop) {\n for (i = 0; i < which.length; i++) {\n var cssProp = void 0;\n\n if (prop === 'border') {\n cssProp = \"\".concat(prop + which[i], \"Width\");\n } else {\n cssProp = prop + which[i];\n }\n\n value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n }\n }\n }\n\n return value;\n}\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\n\n\nfunction isWindow(obj) {\n // must use == for ie8\n\n /* eslint eqeqeq:0 */\n return obj != null && obj == obj.window;\n}\n\nvar domUtils = {};\neach(['Width', 'Height'], function (name) {\n domUtils[\"doc\".concat(name)] = function (refWin) {\n var d = refWin.document;\n return Math.max( // firefox chrome documentElement.scrollHeight< body.scrollHeight\n // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n d.documentElement[\"scroll\".concat(name)], // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n d.body[\"scroll\".concat(name)], domUtils[\"viewport\".concat(name)](d));\n };\n\n domUtils[\"viewport\".concat(name)] = function (win) {\n // pc browser includes scrollbar in window.innerWidth\n var prop = \"client\".concat(name);\n var doc = win.document;\n var body = doc.body;\n var documentElement = doc.documentElement;\n var documentElementProp = documentElement[prop]; // 标准模式取 documentElement\n // backcompat 取 body\n\n return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n };\n});\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra] 'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\n\nfunction getWH(elem, name, extra) {\n if (isWindow(elem)) {\n return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n } else if (elem.nodeType === 9) {\n return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n }\n\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem);\n var cssBoxValue = 0;\n\n if (borderBoxValue == null || borderBoxValue <= 0) {\n borderBoxValue = undefined; // Fall back to computed then un computed css if necessary\n\n cssBoxValue = getComputedStyleX(elem, name);\n\n if (cssBoxValue == null || Number(cssBoxValue) < 0) {\n cssBoxValue = elem.style[name] || 0;\n } // Normalize '', auto, and prepare for extra\n\n\n cssBoxValue = parseFloat(cssBoxValue) || 0;\n }\n\n if (extra === undefined) {\n extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n }\n\n var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n var val = borderBoxValue || cssBoxValue;\n\n if (extra === CONTENT_INDEX) {\n if (borderBoxValueOrIsBorderBox) {\n return val - getPBMWidth(elem, ['border', 'padding'], which);\n }\n\n return cssBoxValue;\n }\n\n if (borderBoxValueOrIsBorderBox) {\n var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which) : getPBMWidth(elem, ['margin'], which);\n return val + (extra === BORDER_INDEX ? 0 : padding);\n }\n\n return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which);\n}\n\nvar cssShow = {\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n}; // fix #119 : https://github.com/kissyteam/kissy/issues/119\n\nfunction getWHIgnoreDisplay(elem) {\n var val;\n var args = arguments; // in case elem is window\n // elem.offsetWidth === undefined\n\n if (elem.offsetWidth !== 0) {\n val = getWH.apply(undefined, args);\n } else {\n swap(elem, cssShow, function () {\n val = getWH.apply(undefined, args);\n });\n }\n\n return val;\n}\n\nfunction css(el, name, v) {\n var value = v;\n\n if (_typeof(name) === 'object') {\n for (var i in name) {\n if (name.hasOwnProperty(i)) {\n css(el, i, name[i]);\n }\n }\n\n return undefined;\n }\n\n if (typeof value !== 'undefined') {\n if (typeof value === 'number') {\n value += 'px';\n }\n\n el.style[name] = value;\n return undefined;\n }\n\n return getComputedStyleX(el, name);\n}\n\neach(['width', 'height'], function (name) {\n var first = name.charAt(0).toUpperCase() + name.slice(1);\n\n domUtils[\"outer\".concat(first)] = function (el, includeMargin) {\n return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n };\n\n var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n domUtils[name] = function (elem, val) {\n if (val !== undefined) {\n if (elem) {\n var computedStyle = getComputedStyleX(elem);\n var isBorderBox = isBorderBoxFn(elem);\n\n if (isBorderBox) {\n val += getPBMWidth(elem, ['padding', 'border'], which);\n }\n\n return css(elem, name, val);\n }\n\n return undefined;\n }\n\n return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n };\n}); // 设置 elem 相对 elem.ownerDocument 的坐标\n\nfunction setOffset(elem, offset) {\n // set position first, in-case top/left are set even on static elem\n if (css(elem, 'position') === 'static') {\n elem.style.position = 'relative';\n }\n\n var old = getOffset(elem);\n var ret = {};\n var current;\n var key;\n\n for (key in offset) {\n if (offset.hasOwnProperty(key)) {\n current = parseFloat(css(elem, key)) || 0;\n ret[key] = current + offset[key] - old[key];\n }\n }\n\n css(elem, ret);\n}\n\nvar util = _objectSpread2({\n getWindow: function getWindow(node) {\n var doc = node.ownerDocument || node;\n return doc.defaultView || doc.parentWindow;\n },\n offset: function offset(el, value) {\n if (typeof value !== 'undefined') {\n setOffset(el, value);\n } else {\n return getOffset(el);\n }\n },\n isWindow: isWindow,\n each: each,\n css: css,\n clone: function clone(obj) {\n var ret = {};\n\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n ret[i] = obj[i];\n }\n }\n\n var overflow = obj.overflow;\n\n if (overflow) {\n for (var _i in obj) {\n if (obj.hasOwnProperty(_i)) {\n ret.overflow[_i] = obj.overflow[_i];\n }\n }\n }\n\n return ret;\n },\n scrollLeft: function scrollLeft(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollLeft(w);\n }\n\n window.scrollTo(v, getScrollTop(w));\n } else {\n if (v === undefined) {\n return w.scrollLeft;\n }\n\n w.scrollLeft = v;\n }\n },\n scrollTop: function scrollTop(w, v) {\n if (isWindow(w)) {\n if (v === undefined) {\n return getScrollTop(w);\n }\n\n window.scrollTo(getScrollLeft(w), v);\n } else {\n if (v === undefined) {\n return w.scrollTop;\n }\n\n w.scrollTop = v;\n }\n },\n viewportWidth: 0,\n viewportHeight: 0\n}, domUtils);\n\nfunction scrollIntoView(elem, container, config) {\n config = config || {}; // document 归一化到 window\n\n if (container.nodeType === 9) {\n container = util.getWindow(container);\n }\n\n var allowHorizontalScroll = config.allowHorizontalScroll;\n var onlyScrollIfNeeded = config.onlyScrollIfNeeded;\n var alignWithTop = config.alignWithTop;\n var alignWithLeft = config.alignWithLeft;\n var offsetTop = config.offsetTop || 0;\n var offsetLeft = config.offsetLeft || 0;\n var offsetBottom = config.offsetBottom || 0;\n var offsetRight = config.offsetRight || 0;\n allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n var isWin = util.isWindow(container);\n var elemOffset = util.offset(elem);\n var eh = util.outerHeight(elem);\n var ew = util.outerWidth(elem);\n var containerOffset;\n var ch;\n var cw;\n var containerScroll;\n var diffTop;\n var diffBottom;\n var win;\n var winScroll;\n var ww;\n var wh;\n\n if (isWin) {\n win = container;\n wh = util.height(win);\n ww = util.width(win);\n winScroll = {\n left: util.scrollLeft(win),\n top: util.scrollTop(win)\n }; // elem 相对 container 可视视窗的距离\n\n diffTop = {\n left: elemOffset.left - winScroll.left - offsetLeft,\n top: elemOffset.top - winScroll.top - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom\n };\n containerScroll = winScroll;\n } else {\n containerOffset = util.offset(container);\n ch = container.clientHeight;\n cw = container.clientWidth;\n containerScroll = {\n left: container.scrollLeft,\n top: container.scrollTop\n }; // elem 相对 container 可视视窗的距离\n // 注意边框, offset 是边框到根节点\n\n diffTop = {\n left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,\n top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop\n };\n diffBottom = {\n left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,\n top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom\n };\n }\n\n if (diffTop.top < 0 || diffBottom.top > 0) {\n // 强制向上\n if (alignWithTop === true) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else if (alignWithTop === false) {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n } else {\n // 自动调整\n if (diffTop.top < 0) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n\n if (alignWithTop) {\n util.scrollTop(container, containerScroll.top + diffTop.top);\n } else {\n util.scrollTop(container, containerScroll.top + diffBottom.top);\n }\n }\n }\n\n if (allowHorizontalScroll) {\n if (diffTop.left < 0 || diffBottom.left > 0) {\n // 强制向上\n if (alignWithLeft === true) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else if (alignWithLeft === false) {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n } else {\n // 自动调整\n if (diffTop.left < 0) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n } else {\n if (!onlyScrollIfNeeded) {\n alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n\n if (alignWithLeft) {\n util.scrollLeft(container, containerScroll.left + diffTop.left);\n } else {\n util.scrollLeft(container, containerScroll.left + diffBottom.left);\n }\n }\n }\n }\n}\n\nexport default scrollIntoView;\n//# sourceMappingURL=index.js.map\n"],"sourceRoot":""}