@sd-angular/core 0.0.905 → 0.0.909

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/bundles/sd-angular-core-grid-material.umd.js +35 -19
  2. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
  4. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-select.umd.js +9 -10
  6. package/bundles/sd-angular-core-select.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-select.umd.min.js +2 -2
  8. package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
  9. package/bundles/sd-angular-core-setting.umd.js +2 -2
  10. package/bundles/sd-angular-core-setting.umd.js.map +1 -1
  11. package/bundles/sd-angular-core-setting.umd.min.js +1 -1
  12. package/bundles/sd-angular-core-setting.umd.min.js.map +1 -1
  13. package/bundles/sd-angular-core-tab-router.umd.js +33 -18
  14. package/bundles/sd-angular-core-tab-router.umd.js.map +1 -1
  15. package/bundles/sd-angular-core-tab-router.umd.min.js +2 -2
  16. package/bundles/sd-angular-core-tab-router.umd.min.js.map +1 -1
  17. package/esm2015/grid-material/src/lib/grid-material.component.js +2 -1
  18. package/esm2015/grid-material/src/lib/models/grid-config.model.js +1 -1
  19. package/esm2015/grid-material/src/lib/services/grid-configuration.service.js +18 -13
  20. package/esm2015/select/src/lib/select.component.js +7 -7
  21. package/esm2015/setting/src/lib/setting.model.js +1 -1
  22. package/esm2015/setting/src/lib/setting.service.js +5 -5
  23. package/esm2015/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.js +30 -24
  24. package/fesm2015/sd-angular-core-grid-material.js +27 -20
  25. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  26. package/fesm2015/sd-angular-core-select.js +6 -6
  27. package/fesm2015/sd-angular-core-select.js.map +1 -1
  28. package/fesm2015/sd-angular-core-setting.js +4 -4
  29. package/fesm2015/sd-angular-core-setting.js.map +1 -1
  30. package/fesm2015/sd-angular-core-tab-router.js +20 -14
  31. package/fesm2015/sd-angular-core-tab-router.js.map +1 -1
  32. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  33. package/grid-material/src/lib/models/grid-config.model.d.ts +1 -0
  34. package/package.json +1 -1
  35. package/{sd-angular-core-0.0.905.tgz → sd-angular-core-0.0.909.tgz} +0 -0
  36. package/select/sd-angular-core-select.metadata.json +1 -1
  37. package/select/src/lib/select.component.d.ts +2 -2
  38. package/setting/src/lib/setting.model.d.ts +2 -2
  39. package/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.d.ts +7 -7
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","__","this","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","length","push","__read","o","m","r","i","ar","error","__classPrivateFieldGet","receiver","privateMap","has","get","__classPrivateFieldSet","set","SdTabBase","tab","_tab","defineProperty","SdTabActivated","_super","SdTabDeactivated","SdTabRouterService","notifyService","_this","events","BehaviorSubject","actions","builders","_currentTab","_componentBuilders","addBuilder","builder","some","component","setCurrentTab","pushEvent","Event","setOptions","close","type","_a","key","Injectable","args","providedIn","SdNotifyService","SdTabDecoratorService","tabRouterService","undefined","event","preventDefault","stopPropagation","Component","selector","template","Input","SdTabRouterNavComponent","mode","checkUI","nameWidth","tabRouterNav","nativeElement","clientWidth","tabs","onResize","ViewChild","HostListener","SdTabRouterOutletComponent","router","activatedRoute","cd","injector","compiler","tabDecoratorService","sdNotifyService","_rootRoute","_subscription","Subscription","_firstLoad","_closeTab","filter","_h","isActive","lastTab","navigateByUrl","url","queryParams","state","switchTab","markForCheck","_activeRoute","fullUrl","route","assign","params","hash","split","existedIndex","forEach","index","currentNavigation","getCurrentNavigation","_b","extras","existedTab","_d","_c","parent","routeConfig","loadChildren","module","_j","compileModuleAsync","factory","injector_1","activatedRoute_1","_getActivatedRoute","SdOutletInjector","name","_f","_e","_g","notify","warning","splice","_getActivatedRouteSnapshot","activatedRouteSnapshot","firstChild","add","pipe","RoutesRecognized","NavigationEnd","subscribe","snapshot","routerState","root","urlAfterRedirects","ngOnDestroy","unsubscribe","Router","ActivatedRoute","ChangeDetectorRef","Injector","Compiler","token","notFoundValue","SdTabInfoPipe","transform","map","find","tabInfo","initialName","tooltip","color","Pipe","NgModule","declarations","SdTabRouterItemComponent","imports","RouterModule","CommonModule","MatIconModule","MatTooltipModule","exports","providers","service","take"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\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\nexport function __extends(d, b) {\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\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __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\nexport function __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}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor(private notifyService: SdNotifyService) {\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n static tabRouterService = new BehaviorSubject<SdTabRouterService>(undefined);\r\n constructor(tabRouterService: SdTabRouterService) {\r\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n NavigationEnd,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from \"@angular/router\";\r\nimport { SdNotifyService } from \"@sd-angular/core/notify\";\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from \"../../events/tab-router.event\";\r\n\r\nimport { SdTab } from \"../../models/tab-router.model\";\r\nimport { SdTabAction } from \"../../actions/tab-router.action\";\r\nimport { SdTabRouterService } from \"../../services/tab-router.service\";\r\nimport { SdTabRouterNavComponent } from \"../tab-router-nav/tab-router-nav.component\";\r\nimport { Subscription } from \"rxjs\";\r\nimport { SdTabDecoratorService } from \"../../services/tab-decorator.service\";\r\nimport { filter } from \"rxjs/operators\";\r\nimport * as hash from \"object-hash\";\r\n\r\n@Component({\r\n selector: \"sd-tab-router-outlet\",\r\n templateUrl: \"./tab-router-outlet.component.html\",\r\n styleUrls: [\"./tab-router-outlet.component.scss\"],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild(\"tabRouterNav\") tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n #firstLoad = true;\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private tabDecoratorService: SdTabDecoratorService,\r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(\r\n router.events\r\n .pipe(\r\n filter(\r\n (event) =>\r\n event instanceof RoutesRecognized ||\r\n event instanceof NavigationEnd\r\n )\r\n )\r\n .subscribe(async (event: RoutesRecognized | NavigationEnd) => {\r\n if (this.#firstLoad && event instanceof NavigationEnd) {\r\n this.#firstLoad = false;\r\n const route = this.#getActivatedRouteSnapshot(\r\n this.activatedRoute.snapshot\r\n );\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n return;\r\n }\r\n if (!this.#firstLoad && event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n }\r\n })\r\n );\r\n\r\n this.#subscription.add(\r\n tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === \"close\") {\r\n this.#closeTab(event.tab);\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n if (tab.isActive) {\r\n const lastTab = this.tabs[this.tabs.length - 1];\r\n if (lastTab) {\r\n this.router.navigateByUrl(lastTab.url, {\r\n queryParams: lastTab.queryParams || {},\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.router.navigateByUrl(\"/\", {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n };\r\n\r\n #activeRoute = async (\r\n fullUrl: string,\r\n route: ActivatedRouteSnapshot | null\r\n ) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n const key = hash({ url: fullUrl });\r\n const [url] = fullUrl.split(\"?\");\r\n\r\n let existedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === key) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === \"function\") {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n \"Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.\"\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n };\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n while (activatedRouteSnapshot.firstChild) {\r\n activatedRouteSnapshot = activatedRouteSnapshot.firstChild;\r\n }\r\n return activatedRouteSnapshot;\r\n };\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n while (activatedRoute.firstChild) {\r\n activatedRoute = activatedRoute.firstChild;\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) {}\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n if (builder) {\r\n const { url, params, queryParams } = tab;\r\n tab.tabInfo = {\r\n name: typeof (builder.name) === 'function' ?\r\n builder.name({ url, params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ?\r\n builder.initialName({ url, params, queryParams }) : builder.initialName,\r\n tooltip: typeof (builder.tooltip) === 'function' ?\r\n builder.tooltip({ url, params, queryParams }) : builder.tooltip,\r\n color: typeof (builder.color) === 'function' ?\r\n builder.color({ url, params, queryParams }) : builder.color\r\n };\r\n return tab.tabInfo;\r\n }\r\n tab.tabInfo = {\r\n name: tab.url,\r\n initialName: null,\r\n };\r\n return tab.tabInfo;\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","import { Type } from '@angular/core';\r\nimport { filter, take, takeWhile } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n tooltip?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n color?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n isDetail?: boolean;\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService.pipe(\r\n filter(service => service !== undefined && service !== null),\r\n take(1)).subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n"]}
1
+ {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","__","this","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","length","push","__read","o","m","r","i","ar","error","__classPrivateFieldGet","receiver","privateMap","has","get","__classPrivateFieldSet","set","SdTabBase","tab","_tab","defineProperty","SdTabActivated","_super","SdTabDeactivated","SdTabRouterService","notifyService","_this","events","BehaviorSubject","actions","builders","_currentTab","_componentBuilders","addBuilder","builder","some","component","setCurrentTab","pushEvent","Event","setOptions","close","type","_a","key","Injectable","args","providedIn","SdNotifyService","SdTabDecoratorService","tabRouterService","undefined","event","preventDefault","stopPropagation","Component","selector","template","Input","SdTabRouterNavComponent","mode","checkUI","nameWidth","tabRouterNav","nativeElement","clientWidth","tabs","onResize","ViewChild","HostListener","SdTabRouterOutletComponent","router","activatedRoute","cd","injector","compiler","tabDecoratorService","sdNotifyService","_rootRoute","_subscription","Subscription","_firstLoad","_closeTab","isActive","activeKey","activeIndex","findIndex","_h","nextTab","nextUrl","url","nextQueryParams","assign","queryParams","filter","navigate","state","switchTab","navigateByUrl","markForCheck","_activeRoute","fullUrl","route","params","split","hash","existedIndex","forEach","index","currentNavigation","getCurrentNavigation","_b","extras","existedTab","_d","_c","parent","routeConfig","loadChildren","module","_j","compileModuleAsync","factory","injector_1","activatedRoute_1","_getActivatedRoute","SdOutletInjector","name","_f","_e","_g","notify","warning","splice","_getActivatedRouteSnapshot","activatedRouteSnapshot","firstChild","add","pipe","RoutesRecognized","NavigationEnd","subscribe","snapshot","routerState","root","urlAfterRedirects","ngOnDestroy","unsubscribe","Router","ActivatedRoute","ChangeDetectorRef","Injector","Compiler","token","notFoundValue","SdTabInfoPipe","transform","map","find","tabInfo","initialName","tooltip","color","Pipe","NgModule","declarations","SdTabRouterItemComponent","imports","RouterModule","CommonModule","MatIconModule","MatTooltipModule","exports","providers","service","take"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\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\nexport function __extends(d, b) {\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\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __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\nexport function __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}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n constructor(private notifyService: SdNotifyService) {\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n static tabRouterService = new BehaviorSubject<SdTabRouterService>(undefined);\r\n constructor(tabRouterService: SdTabRouterService) {\r\n SdTabDecoratorService.tabRouterService.next(tabRouterService);\r\n }\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n NavigationEnd,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from '@angular/router';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from '../../events/tab-router.event';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabAction } from '../../actions/tab-router.action';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { SdTabDecoratorService } from '../../services/tab-decorator.service';\r\nimport { filter } from 'rxjs/operators';\r\nimport * as hash from 'object-hash';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-outlet',\r\n templateUrl: './tab-router-outlet.component.html',\r\n styleUrls: ['./tab-router-outlet.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild('tabRouterNav') tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n #firstLoad = true;\r\n constructor(\r\n private router: Router,\r\n private activatedRoute: ActivatedRoute,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private tabDecoratorService: SdTabDecoratorService,\r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(\r\n router.events\r\n .pipe(\r\n filter(\r\n (event) =>\r\n event instanceof RoutesRecognized ||\r\n event instanceof NavigationEnd\r\n )\r\n )\r\n .subscribe(async (event: RoutesRecognized | NavigationEnd) => {\r\n if (this.#firstLoad && event instanceof NavigationEnd) {\r\n this.#firstLoad = false;\r\n const route = this.#getActivatedRouteSnapshot(\r\n this.activatedRoute.snapshot\r\n );\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n return;\r\n }\r\n if (!this.#firstLoad && event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(\r\n event.urlAfterRedirects || event.url,\r\n route\r\n );\r\n }\r\n })\r\n );\r\n\r\n this.#subscription.add(\r\n tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === 'close') {\r\n this.#closeTab(event.tab);\r\n }\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n const { isActive, key: activeKey } = tab;\r\n\r\n if (isActive) {\r\n const activeIndex = this.tabs.findIndex(({ key }) => key === activeKey);\r\n const nextTab = this.tabs[activeIndex + 1] || this.tabs[activeIndex - 1];\r\n if (nextTab) {\r\n const { url: nextUrl } = nextTab;\r\n const nextQueryParams = {\r\n ...(nextTab.queryParams || {}),\r\n };\r\n\r\n this.tabs = this.tabs.filter(({ key }) => key !== activeKey);\r\n this.router.navigate([nextUrl], {\r\n queryParams: nextQueryParams,\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.tabs = this.tabs.filter(({ key }) => key !== activeKey);\r\n this.router.navigateByUrl('/', {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n };\r\n\r\n #activeRoute = async (\r\n fullUrl: string,\r\n route: ActivatedRouteSnapshot | null\r\n ) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n\r\n const [url] = fullUrl.split('?');\r\n const key = hash({ url, queryParams });\r\n\r\n let existedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === key) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === 'function') {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n 'Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.'\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n };\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n while (activatedRouteSnapshot.firstChild) {\r\n activatedRouteSnapshot = activatedRouteSnapshot.firstChild;\r\n }\r\n return activatedRouteSnapshot;\r\n };\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n while (activatedRoute.firstChild) {\r\n activatedRoute = activatedRoute.firstChild;\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n }\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) {}\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n if (builder) {\r\n const { url, params, queryParams } = tab;\r\n tab.tabInfo = {\r\n name: typeof (builder.name) === 'function' ?\r\n builder.name({ url, params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ?\r\n builder.initialName({ url, params, queryParams }) : builder.initialName,\r\n tooltip: typeof (builder.tooltip) === 'function' ?\r\n builder.tooltip({ url, params, queryParams }) : builder.tooltip,\r\n color: typeof (builder.color) === 'function' ?\r\n builder.color({ url, params, queryParams }) : builder.color\r\n };\r\n return tab.tabInfo;\r\n }\r\n tab.tabInfo = {\r\n name: tab.url,\r\n initialName: null,\r\n };\r\n return tab.tabInfo;\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","import { Type } from '@angular/core';\r\nimport { filter, take, takeWhile } from 'rxjs/operators';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n tooltip?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n color?: string | ((args: { url: string, params: any, queryParams: any }) => string);\r\n isDetail?: boolean;\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n SdTabDecoratorService.tabRouterService.pipe(\r\n filter(service => service !== undefined && service !== null),\r\n take(1)).subscribe(service => {\r\n service.addBuilder(builder);\r\n });\r\n };\r\n}\r\n"]}
@@ -600,6 +600,7 @@ export class SdGridMaterial {
600
600
  });
601
601
  const configuration = this.gridConfigurationService.init(this.key, this.gridOption);
602
602
  this.gridConfigurationObserver = configuration.observer;
603
+ configuration.load();
603
604
  }
604
605
  }
605
606
  set paginator(paginator) {
@@ -668,4 +669,4 @@ SdGridMaterial.propDecorators = {
668
669
  sdFooterDefs: [{ type: ContentChildren, args: [SdMaterialFooterDefDirective,] }],
669
670
  sdFilterDefs: [{ type: ContentChildren, args: [SdMaterialFilterDefDirective,] }]
670
671
  };
671
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tYXRlcmlhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvdXNlci9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9ncmlkLW1hdGVyaWFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFFVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUdULFlBQVksRUFDWixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsNEJBQTRCLEVBRTdCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFD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LENBQUM7aUJBQ0g7O2FBQ0Y7OztZQXREQyxpQkFBaUI7NENBb0tkLE1BQU0sU0FBQyxvQkFBb0IsY0FBRyxRQUFRO1lBL0hsQywwQkFBMEI7WUFGSSxlQUFlO1lBWDdDLGVBQWU7WUFlZixrQkFBa0I7WUFDbEIsYUFBYTs7OzBCQW1CbkIsU0FBUyxTQUFDLGFBQWE7MEJBQ3ZCLFNBQVMsU0FBQyxZQUFZO3FCQWN0QixLQUFLO3dCQTJCTCxTQUFTLFNBQUMsWUFBWTttQkFhdEIsU0FBUyxTQUFDLE9BQU87NEJBWWpCLFNBQVMsU0FBQyxhQUFhOytCQUd2QixZQUFZLFNBQUMsb0NBQW9DOzBCQUdqRCxZQUFZLFNBQUMsK0JBQStCO3lCQUc1QyxlQUFlLFNBQUMsMEJBQTBCOzJCQU0xQyxlQUFlLFNBQUMsNEJBQTRCOzJCQU81QyxlQUFlLFNBQUMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgSW5qZWN0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ29udGVudENoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7XHJcbiAgU2RHcmlkTWF0ZXJpYWxGaWx0ZXJSZXF1ZXN0XHJcbn0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1maWx0ZXIubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIFNkR3JpZE1hdGVyaWFsT3B0aW9uLCBTZEdyaWRNYXRlcmlhbFJvd0RhdGFcclxufSBmcm9tICcuL21vZGVscy9ncmlkLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgR1JJRF9NQVRFUklBTF9DT05GSUcsXHJcbiAgREVGQVVMVF9HUklEX01BVEVSSUFMX0NPTkZJRyxcclxuICBJU2RHcmlkTWF0ZXJpYWxDb25maWd1cmF0aW9uXHJcbn0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2ROb3RpZnlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9ub3RpZnknO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsQ29sdW1uIH0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsQ2VsbERlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC1tYXRlcmlhbC1jZWxsLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNkR3JpZEZpbHRlciB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLW1hdGVyaWFsLWZpbHRlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLW1hdGVyaWFsLXN1Yi1pbmZvcm1hdGlvbi1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC1tYXRlcmlhbC1mb290ZXItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxFbXB0eURhdGFEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtbWF0ZXJpYWwtZW1wdHktZGF0YS1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RQb3B1cEV4cG9ydCB9IGZyb20gJy4vY29tcG9uZW50cy9wb3B1cC1leHBvcnQvcG9wdXAtZXhwb3J0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkRXhwb3J0Q29sdW1uLCBTZEV4cG9ydEZpbGUsIFNkRXhwb3J0U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvZXhwb3J0JztcclxuaW1wb3J0IHsgU2RHcmlkQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbW9kZWxzL2dyaWQtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgU2RHcmlkQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2dyaWQtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxFeHBvcnRDb2x1bW4gfSBmcm9tICcuL21vZGVscy9ncmlkLWV4cG9ydC5tb2RlbCc7XHJcbmltcG9ydCB7IFNkVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuaW1wb3J0IHsgU2RHcmlkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2RRdWlja0FjdGlvbiB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvcXVpY2stYWN0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZ3JpZC1tYXRlcmlhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtbWF0ZXJpYWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2dyaWQtbWF0ZXJpYWwuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXHJcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQnLCBzdHlsZSh7IGhlaWdodDogJzAnLCBtaW5IZWlnaHQ6ICcwJywgdmlzaWJpbGl0eTogJ2hpZGRlbicgfSkpLFxyXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonLCB2aXNpYmlsaXR5OiAndmlzaWJsZScgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxyXG4gICAgXSksXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkR3JpZE1hdGVyaWFsPFQgPSBhbnk+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIGtleSA9IHV1aWQudjQoKTtcclxuICBncmlkQ29uZmlndXJhdGlvbk9ic2VydmVyOiBPYnNlcnZhYmxlPFNkR3JpZENvbmZpZ3VyYXRpb24+O1xyXG4gIGdyaWRGaWx0ZXI6IFNkR3JpZEZpbHRlcjtcclxuICBAVmlld0NoaWxkKFNkUXVpY2tBY3Rpb24pIHF1aWNrQWN0aW9uOiBTZFF1aWNrQWN0aW9uO1xyXG4gIEBWaWV3Q2hpbGQoU2RHcmlkRmlsdGVyKSBzZXQgX2dyaWRGaWx0ZXIoZ3JpZEZpbHRlcjogU2RHcmlkRmlsdGVyKSB7XHJcbiAgICBpZiAoZ3JpZEZpbHRlciAmJiB0aGlzLmdyaWRGaWx0ZXIgIT09IGdyaWRGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5ncmlkRmlsdGVyID0gZ3JpZEZpbHRlcjtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChncmlkRmlsdGVyLmZpbHRlckNoYW5nZS5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgIG1hcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiNwYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgIHJldHVybiB0aGlzLiNnZXRGaWx0ZXIoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAodGhpcy4jbG9hZClcclxuICAgICAgKS5zdWJzY3JpYmUodGhpcy4jcmVuZGVyKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXQgb3B0aW9uKG9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pIHtcclxuICAgIGlmIChvcHRpb24pIHtcclxuICAgICAgb3B0aW9uID0gdGhpcy4jaW5pdENvbmZpZ3VyYXRpb24ob3B0aW9uKTtcclxuICAgICAgdGhpcy5ncmlkT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgICB0aGlzLiNvcHRpb25DaGFuZ2VzLmVtaXQoKTtcclxuICAgICAgb3B0aW9uPy5jb2x1bW5zPy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgaWYgKGNvbC5maWx0ZXI/LmRlZmF1bHQpIHtcclxuICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyW2NvbC5maWVsZF0gPSBjb2wuZmlsdGVyLmRlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMuZ3JpZENvbmZpZ3VyYXRpb25TZXJ2aWNlLmluaXQodGhpcy5rZXksIHRoaXMuZ3JpZE9wdGlvbik7XHJcbiAgICAgIHRoaXMuZ3JpZENvbmZpZ3VyYXRpb25PYnNlcnZlciA9IGNvbmZpZ3VyYXRpb24ub2JzZXJ2ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbjtcclxuICBsb2NhbEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIGl0ZW1zOiBTZEdyaWRNYXRlcmlhbFJvd0RhdGFbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbXM6IFRbXSA9IFtdO1xyXG4gIHRvdGFsOiBudW1iZXI7XHJcblxyXG4gIC8vIExvYWRpbmdcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gUGFnaW5hdGVcclxuICBpc0hpZGRlblBhZ2luYXRvciA9IGZhbHNlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQocGFnaW5hdG9yLnBhZ2UucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICBtYXAodGhpcy4jZ2V0RmlsdGVyKSxcclxuICAgICAgICBzd2l0Y2hNYXAodGhpcy4jbG9hZClcclxuICAgICAgKS5zdWJzY3JpYmUodGhpcy4jcmVuZGVyKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTb3J0aW5nXHJcbiAgI3NvcnQ6IE1hdFNvcnQ7XHJcbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzZXQgc29ydChzb3J0OiBNYXRTb3J0KSB7XHJcbiAgICBpZiAoc29ydCAmJiB0aGlzLiNzb3J0ICE9PSBzb3J0KSB7XHJcbiAgICAgIHRoaXMuI3NvcnQgPSBzb3J0O1xyXG4gICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHNvcnQuc29ydENoYW5nZS5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgIG1hcCh0aGlzLiNnZXRGaWx0ZXIpLFxyXG4gICAgICAgIHN3aXRjaE1hcCh0aGlzLiNsb2FkKVxyXG4gICAgICApLnN1YnNjcmliZSh0aGlzLiNyZW5kZXIpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEV4cG9ydFxyXG4gIEBWaWV3Q2hpbGQoU2RQb3B1cEV4cG9ydCkgc2RQb3B1cEV4cG9ydDogU2RQb3B1cEV4cG9ydDtcclxuXHJcbiAgLy8gU3ViIEluZm9ybWF0aW9uXHJcbiAgQENvbnRlbnRDaGlsZChTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmUpIHNkU3ViSW5mb3JtYXRpb246IFNkTWF0ZXJpYWxTdWJJbmZvcm1hdGlvbkRlZkRpcmVjdGl2ZTtcclxuXHJcbiAgLy8gRW1wdHkgRGF0YVxyXG4gIEBDb250ZW50Q2hpbGQoU2RNYXRlcmlhbEVtcHR5RGF0YURlZkRpcmVjdGl2ZSkgc2RFbXB0eURhdGE6IFNkTWF0ZXJpYWxFbXB0eURhdGFEZWZEaXJlY3RpdmU7XHJcblxyXG4gIC8vIENlbGwgRGVmXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZE1hdGVyaWFsQ2VsbERlZkRpcmVjdGl2ZSkgc2RDZWxsRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RNYXRlcmlhbENlbGxEZWZEaXJlY3RpdmU+KCk7XHJcbiAgY2VsbERlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RNYXRlcmlhbENlbGxEZWZEaXJlY3RpdmVcclxuICB9ID0ge307XHJcblxyXG4gIC8vIEZvb3RlciBEZWZcclxuICBAQ29udGVudENoaWxkcmVuKFNkTWF0ZXJpYWxGb290ZXJEZWZEaXJlY3RpdmUpIHNkRm9vdGVyRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZT4oKTtcclxuICBmb290ZXJEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkTWF0ZXJpYWxGb290ZXJEZWZEaXJlY3RpdmVcclxuICB9ID0ge307XHJcbiAgaGFzRm9vdGVyID0gZmFsc2U7XHJcblxyXG4gIC8vIEZpbHRlciBEZWZcclxuICBAQ29udGVudENoaWxkcmVuKFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmUpIHNkRmlsdGVyRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZT4oKTtcclxuICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW10gPSBbXTtcclxuXHJcbiAgLy8gRmlsdGVyXHJcbiAgY29sdW1uRmlsdGVyOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcclxuICB9ID0ge307XHJcbiAgLy8gU3ViY3JpcHRpb25cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICNvcHRpb25DaGFuZ2VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGlzRXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgaXNTZWxlY3RBbGwgPSBmYWxzZTtcclxuICBleHBvcnRUaXRsZSA9ICdFeHBvcnQnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoR1JJRF9NQVRFUklBTF9DT05GSUcpIEBPcHRpb25hbCgpIHB1YmxpYyBjb25maWd1cmF0aW9uOiBJU2RHcmlkTWF0ZXJpYWxDb25maWd1cmF0aW9uLFxyXG4gICAgcHJpdmF0ZSBncmlkQ29uZmlndXJhdGlvblNlcnZpY2U6IFNkR3JpZENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogU2RUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogU2RHcmlkU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLiNpbml0Q2VsbERlZigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNkQ2VsbERlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0Q2VsbERlZikpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNkRm9vdGVyRGVmcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKFtdKSkuc3Vic2NyaWJlKHRoaXMuI2luaXRGb290ZXJEZWYpKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZEZpbHRlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0RmlsdGVyRGVmKSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuI29wdGlvbkNoYW5nZXMucGlwZShcclxuICAgICAgc3RhcnRXaXRoKHt9KSxcclxuICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICAgIG1hcCh0aGlzLiNnZXRGaWx0ZXIpLFxyXG4gICAgICBzd2l0Y2hNYXAodGhpcy4jbG9hZClcclxuICAgICkuc3Vic2NyaWJlKHRoaXMuI3JlbmRlcikpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gICNpbml0Q2VsbERlZiA9ICgpID0+IHtcclxuICAgIHRoaXMuY2VsbERlZiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBjZWxsRGVmIG9mIHRoaXMuc2RDZWxsRGVmcykge1xyXG4gICAgICBpZiAoY2VsbERlZi5zZE1hdGVyaWFsQ2VsbERlZikge1xyXG4gICAgICAgIHRoaXMuY2VsbERlZltjZWxsRGVmLnNkTWF0ZXJpYWxDZWxsRGVmXSA9IGNlbGxEZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICNpbml0RmlsdGVyRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5maWx0ZXJEZWZzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGZpbHRlckRlZiBvZiB0aGlzLnNkRmlsdGVyRGVmcykge1xyXG4gICAgICB0aGlzLmZpbHRlckRlZnMucHVzaChmaWx0ZXJEZWYpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgI2luaXRGb290ZXJEZWYgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZvb3RlckRlZiA9IHt9O1xyXG4gICAgdGhpcy5oYXNGb290ZXIgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3QgZm9vdGVyRGVmIG9mIHRoaXMuc2RGb290ZXJEZWZzKSB7XHJcbiAgICAgIGlmIChmb290ZXJEZWYuc2RNYXRlcmlhbEZvb3RlckRlZikge1xyXG4gICAgICAgIHRoaXMuaGFzRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvb3RlckRlZltmb290ZXJEZWYuc2RNYXRlcmlhbEZvb3RlckRlZl0gPSBmb290ZXJEZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICNmaWx0ZXJFeHBvcnRJbmZvID0gKHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IFNkR3JpZE1hdGVyaWFsRmlsdGVyUmVxdWVzdCA9PiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICByYXdDb2x1bW5GaWx0ZXI6ICh0aGlzLmdyaWRPcHRpb24/LmZpbHRlcj8uaW5saW5lQ29sdW1uID8gdGhpcy5jb2x1bW5GaWx0ZXIgOiB0aGlzLmdyaWRGaWx0ZXI/LmNvbHVtbkZpbHRlcikgfHwge30sXHJcbiAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiB0aGlzLmdyaWRGaWx0ZXI/LmV4dGVybmFsRmlsdGVyIHx8IHt9LFxyXG4gICAgICByYXdGaWx0ZXJEZWY6IHRoaXMuZ3JpZEZpbHRlcj8uZmlsdGVyRGVmIHx8IHt9LFxyXG4gICAgICBvcmRlckJ5OiB0aGlzLiNzb3J0Py5hY3RpdmUgfHwgJycsXHJcbiAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLiNzb3J0Py5kaXJlY3Rpb24gfHwgJycsXHJcbiAgICAgIHBhZ2VOdW1iZXIsXHJcbiAgICAgIHBhZ2VTaXplLFxyXG4gICAgICBpc0V4cG9ydGVkOiB0cnVlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI2luaXRDb25maWd1cmF0aW9uID0gKG9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb24pID0+IHtcclxuICAgIG9wdGlvbi5wYWdpbmF0ZSA9IHtcclxuICAgICAgaGlkZGVuOiBvcHRpb24/LnBhZ2luYXRlPy5oaWRkZW4sXHJcbiAgICAgIHBhZ2VTaXplOiBvcHRpb24/LnBhZ2luYXRlPy5wYWdlU2l6ZSA/PyB0aGlzLmNvbmZpZ3VyYXRpb24/LnBhZ2luYXRlPy5wYWdlU2l6ZSA/PyBERUZBVUxUX0dSSURfTUFURVJJQUxfQ09ORklHLnBhZ2luYXRlPy5wYWdlU2l6ZSxcclxuICAgICAgcGFnZXM6IG9wdGlvbj8ucGFnaW5hdGU/LnBhZ2VzID8/IHRoaXMuY29uZmlndXJhdGlvbj8ucGFnaW5hdGU/LnBhZ2VzID8/IERFRkFVTFRfR1JJRF9NQVRFUklBTF9DT05GSUcucGFnaW5hdGU/LnBhZ2VzLFxyXG4gICAgICBzaG93Rmlyc3RMYXN0QnV0dG9uczogb3B0aW9uPy5wYWdpbmF0ZT8uc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgPz8gZmFsc2VcclxuICAgIH07XHJcbiAgICByZXR1cm4gb3B0aW9uO1xyXG4gIH1cclxuXHJcbiAgI2ZpbHRlckxvY2FsID0gKGxvY2FsSXRlbXM6IGFueVtdLCBmaWx0ZXJJbmZvOiBTZEdyaWRNYXRlcmlhbEZpbHRlclJlcXVlc3QpID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgY29uc3QgaXRlbXMgPSBsb2NhbEl0ZW1zLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlOiBzdHJpbmcgPSAoZmlsdGVySW5mby5yYXdDb2x1bW5GaWx0ZXJbY29sdW1uLmZpZWxkXSB8fCAnJykudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZTogc3RyaW5nID0gKGl0ZW1bY29sdW1uLmZpZWxkXSB8fCAnJykudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAgIGlmICghY29sdW1uVmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uVmFsdWUuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjb25zdCBmVmFsdWUgPSArZmlsdGVyVmFsdWUucmVwbGFjZSgnPj0nLCAnJykucmVwbGFjZSgnPD0nLCAnJykucmVwbGFjZSgnPicsICcnKS5yZXBsYWNlKCc8JywgJycpO1xyXG4gICAgICAgICAgICBjb25zdCBjVmFsdWUgPSArY29sdW1uVmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChmVmFsdWUgfHwgZlZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFjVmFsdWUgJiYgY1ZhbHVlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc+PScpID4gLTEgJiYgY1ZhbHVlIDwgZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc8PScpID4gLTEgJiYgY1ZhbHVlID4gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc8JykgPiAtMSAmJiBjVmFsdWUgPj0gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc+JykgPiAtMSAmJiBjVmFsdWUgPD0gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjVmFsdWUgIT09IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZSA9PT0gJzEnICYmIGNvbHVtblZhbHVlICE9PSAnMScgJiYgY29sdW1uVmFsdWUgIT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZSA9PT0gJzAnICYmIGNvbHVtblZhbHVlICE9PSAnMCcgJiYgY29sdW1uVmFsdWUgIT09ICdmYWxzZScpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gRGF0ZS50b0Zvcm1hdChmaWx0ZXJWYWx1ZSwgJ01NL3l5eXkvZGQnKTtcclxuICAgICAgICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShkYXRlKTtcclxuICAgICAgICAgICAgY29uc3QgdG9EYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgICAgIHRvRGF0ZS5zZXREYXRlKHRvRGF0ZS5nZXREYXRlKCkgKyAxKTtcclxuICAgICAgICAgICAgaWYgKG5ldyBEYXRlKGNvbHVtblZhbHVlKS5nZXRUaW1lKCkgPCBmcm9tRGF0ZS5nZXRUaW1lKCkgfHwgbmV3IERhdGUoY29sdW1uVmFsdWUpLmdldFRpbWUoKSA+PSB0b0RhdGUuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICAvLyBTb3J0XHJcbiAgICBpZiAoZmlsdGVySW5mby5vcmRlckJ5ICYmIGZpbHRlckluZm8ub3JkZXJEaXJlY3Rpb24pIHtcclxuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gZmlsdGVySW5mby5vcmRlckJ5KTtcclxuICAgICAgaWYgKGNvbHVtbikge1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgZmllbGQgfSA9IGNvbHVtbjtcclxuICAgICAgICBpdGVtcy5zb3J0KChjdXJyZW50LCBuZXh0KSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChjdXJyZW50W2ZpZWxkXSB8fCAwKSAtIChuZXh0W2ZpZWxkXSB8fCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0eXBlID09PSAnZGF0ZScgfHwgdHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCB0eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgY29uc3QgZDEgPSBuZXcgRGF0ZShjdXJyZW50W2ZpZWxkXSB8fCAnJykuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBkMiA9IG5ldyBEYXRlKGN1cnJlbnRbZmllbGRdIHx8ICcnKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkMSAtIGQyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgczEgPSAoY3VycmVudFtmaWVsZF0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb25zdCBzMiA9IChuZXh0W2ZpZWxkXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlmIChzMSA+IHMyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHMxIDwgczIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGZpbHRlckluZm8ub3JkZXJEaXJlY3Rpb24gPT09ICdkZXNjJykge1xyXG4gICAgICAgICAgaXRlbXMucmV2ZXJzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXRlbXM6IGl0ZW1zLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VJbmRleCB8fCAwO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCB0aGlzLmdyaWRPcHRpb24/LnBhZ2luYXRlPy5wYWdlU2l6ZSB8fCA1MDtcclxuICAgICAgICByZXR1cm4gaW5kZXggPj0gcGFnZUluZGV4ICogcGFnZVNpemVcclxuICAgICAgICAgICYmIGluZGV4IDwgKHBhZ2VJbmRleCArIDEpICogcGFnZVNpemU7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0b3RhbDogaXRlbXMubGVuZ3RoXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgI2dldEZpbHRlciA9ICgpOiBTZEdyaWRNYXRlcmlhbEZpbHRlclJlcXVlc3QgPT4gKHtcclxuICAgIHJhd0NvbHVtbkZpbHRlcjogKHRoaXMuZ3JpZE9wdGlvbj8uZmlsdGVyPy5pbmxpbmVDb2x1bW4gPyB0aGlzLmNvbHVtbkZpbHRlciA6IHRoaXMuZ3JpZEZpbHRlcj8uY29sdW1uRmlsdGVyKSB8fCB7fSxcclxuICAgIHJhd0V4dGVybmFsRmlsdGVyOiB0aGlzLmdyaWRGaWx0ZXI/LmV4dGVybmFsRmlsdGVyIHx8IHt9LFxyXG4gICAgcmF3RmlsdGVyRGVmOiB0aGlzLmdyaWRGaWx0ZXI/LmZpbHRlckRlZiB8fCB7fSxcclxuICAgIG9yZGVyQnk6IHRoaXMuI3NvcnQ/LmFjdGl2ZSB8fCAnJyxcclxuICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLiNzb3J0Py5kaXJlY3Rpb24gfHwgJycsXHJcbiAgICBwYWdlTnVtYmVyOiB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VJbmRleCB8fCAwLFxyXG4gICAgcGFnZVNpemU6IHRoaXMuI3BhZ2luYXRvcj8ucGFnZVNpemUgfHwgdGhpcy5ncmlkT3B0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgfHwgNTBcclxuICB9KVxyXG5cclxuICAjbG9hZCA9IGFzeW5jIChmaWx0ZXJSZXE6IFNkR3JpZE1hdGVyaWFsRmlsdGVyUmVxdWVzdCk6IFByb21pc2U8eyBpdGVtczogYW55W10sIHRvdGFsOiBudW1iZXIgfT4gPT4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnc2VydmVyJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXMoZmlsdGVyUmVxKTtcclxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b1Byb21pc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSBhd2FpdCByZXN1bHRzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4jZmlsdGVyTG9jYWwodGhpcy5sb2NhbEl0ZW1zLCBmaWx0ZXJSZXEpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICNyZW5kZXIgPSBhc3luYyAoYXJnczogeyBpdGVtczogYW55W10sIHRvdGFsOiBudW1iZXIgfSkgPT4ge1xyXG4gICAgdGhpcy5pdGVtcyA9IGFyZ3M/Lml0ZW1zIHx8IFtdO1xyXG4gICAgdGhpcy50b3RhbCA9IGFyZ3M/LnRvdGFsIHx8IDA7XHJcbiAgICAvLyB0aGlzLmlzSGlkZGVuUGFnaW5hdG9yID0gdGhpcy5maWx0ZXJJbmZvLnBhZ2VOdW1iZXIgPT09IDAgJiYgdGhpcy50b3RhbCA8PSB0aGlzLmZpbHRlckluZm8ucGFnZVNpemU7XHJcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLm9yaWdpbkl0ZW0gPSB7IC4uLml0ZW0gfSk7XHJcbiAgICBhd2FpdCB0aGlzLmdyaWRPcHRpb24/LnJlbG9hZD8ub25SZWxvYWQ/Lih0aGlzLml0ZW1zKTtcclxuICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0aGlzLml0ZW1zLmV2ZXJ5KGUgPT4gZS5pc1NlbGVjdGVkKTtcclxuICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLiNsb2FkKHRoaXMuI2dldEZpbHRlcigpKTtcclxuICAgIHRoaXMuI3JlbmRlcihkYXRhKTtcclxuICB9XHJcblxyXG4gICNleHBvcnRlZEl0ZW1zID0gYXN5bmMgKHBhZ2VOdW1iZXI6IG51bWJlciA9IDAsIHBhZ2VTaXplOiBudW1iZXIgPSAxMDAwMCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/Lml0ZW1zKSB7XHJcbiAgICAgIC8vIGNvbnN0IGV4cG9ydGVkSXRlbXMgPSB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLiNmaWx0ZXJFeHBvcnRJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSk7XHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLiNmaWx0ZXJFeHBvcnRJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSk7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09ic2VydmFibGU8YW55W10+KHJlc3VsdCkpIHtcclxuICAgICAgICByZXN1bHQgPSByZXN1bHQudG9Qcm9taXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzT2JzZXJ2YWJsZTx7IGl0ZW1zOiBhbnlbXSwgdG90YWw6IG51bWJlciB9PihyZXN1bHQpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XHJcbiAgICAgIC8vIGlmIChleHBvcnRlZEl0ZW1zIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAvLyAgIHJldHVybiBhd2FpdCBleHBvcnRlZEl0ZW1zO1xyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAvLyAgIHJldHVybiBleHBvcnRlZEl0ZW1zO1xyXG4gICAgICAvLyB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBmaWx0ZXJJbmZvID0gdGhpcy4jZmlsdGVyRXhwb3J0SW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ3NlcnZlcicpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKGZpbHRlckluZm8pO1xyXG4gICAgICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzdWx0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBleHBvcnRlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuZ3JpZE9wdGlvbi5pdGVtcykgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmdyaWRPcHRpb24uaXRlbXMoKTtcclxuICAgICAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBleHBvcnRlZEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cG9ydGVkSXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleHBvcnRlZEl0ZW1zID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4jZmlsdGVyTG9jYWwoZXhwb3J0ZWRJdGVtcywgZmlsdGVySW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPHN0cmluZ1tdPiwgY29sdW1uczogc3RyaW5nW10pIHtcclxuICAgIG1vdmVJdGVtSW5BcnJheShjb2x1bW5zLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgI2FsbENvbHVtbnMgPSAoKTogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXSA9PiB7XHJcbiAgICBjb25zdCBjb2x1bW5zOiBTZEdyaWRNYXRlcmlhbENvbHVtbltdID0gW107XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29sdW1ucy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKS5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICBjb2x1bW4uY2hpbGRyZW4/LmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpLmZvckVhY2goY2hpbGRDb2x1bW4gPT4ge1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4tY29sJykge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbj8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkuZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hpbGRDb2x1bW4udHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb2x1bW5zLnB1c2goY2hpbGRDb2x1bW4pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICAjYWxsRXhwb3J0ZWRDb2x1bW5zID0gKCk6IFNkR3JpZE1hdGVyaWFsRXhwb3J0Q29sdW1uW10gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQ/LmNvbHVtbnM/LmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgI29uRXhwb3J0ID0gYXN5bmMgKGFyZ3M6IHsgZmlsZTogU2RFeHBvcnRGaWxlLCBjb2x1bW5zOiBTZEV4cG9ydENvbHVtbltdLCBpc0NTVjogYm9vbGVhbiB9KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB7IGZpbGUsIGNvbHVtbnMsIGlzQ1NWIH0gPSBhcmdzO1xyXG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuZ3JpZE9wdGlvbj8uZXhwb3J0Py5tYXhJdGVtc1BlclJlcXVlc3QgfHwgMTAwMDtcclxuICAgICAgbGV0IHRvdGFsID0gdGhpcy50b3RhbDtcclxuICAgICAgbGV0IHBhZ2VOdW1iZXIgPSAwO1xyXG4gICAgICBsZXQgZXhwb3J0SXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5pc0V4cG9ydGluZyA9IHRydWU7XHJcbiAgICAgIGNvbnN0IGl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgICB3aGlsZSAocGFnZU51bWJlciAqIHBhZ2VTaXplIDwgdG90YWwpIHtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLiNleHBvcnRlZEl0ZW1zKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKTtcclxuICAgICAgICBpZiAoJ2l0ZW1zJyBpbiByZXMpIHtcclxuICAgICAgICAgIGV4cG9ydEl0ZW1zID0gcmVzLml0ZW1zO1xyXG4gICAgICAgICAgdG90YWwgPSByZXMudG90YWw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4cG9ydEl0ZW1zID0gcmVzO1xyXG4gICAgICAgICAgLy8gdG90YWwgPSBleHBvcnRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5tYXBwaW5nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLmV4cG9ydC5tYXBwaW5nKGV4cG9ydEl0ZW1zKTtcclxuICAgICAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBleHBvcnRJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleHBvcnRJdGVtcyA9IHJlc3VsdHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbFBhZ2UgPSB0b3RhbCAvIHBhZ2VTaXplO1xyXG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSBNYXRoLnJvdW5kKHBhZ2VOdW1iZXIgKiAxMDAuMCAvIHRvdGFsUGFnZSk7XHJcbiAgICAgICAgdGhpcy5leHBvcnRUaXRsZSA9IGBFeHBvcnRpbmcuLi4ke3BlcmNlbnR9JWA7XHJcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuI2FsbENvbHVtbnMoKTtcclxuICAgICAgICBjb25zdCBhbGxFeHBvcnRlZENvbHVtbnMgPSB0aGlzLiNhbGxFeHBvcnRlZENvbHVtbnMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXhwb3J0SXRlbXMpIHtcclxuICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSAoZXhwb3J0Q29sdW1uOiBTZEV4cG9ydENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICBvYmpbZXhwb3J0Q29sdW1uLmZpZWxkXSA9IGl0ZW1bZXhwb3J0Q29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gYWxsQ29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gZXhwb3J0Q29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgZXhwb3J0ZWRDb2x1bW4gPSBhbGxFeHBvcnRlZENvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IGV4cG9ydENvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChleHBvcnRlZENvbHVtbj8udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgb2JqW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSA9IGV4cG9ydGVkQ29sdW1uLnRyYW5zZm9ybShpdGVtW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuLWNvbCcpIHtcclxuICAgICAgICAgICAgICBjb2x1bW4/LmNoaWxkcmVuLmZvckVhY2goY2hpbGRDb2x1bW4gPT4gaGFuZGxlKGNoaWxkQ29sdW1uKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY29sdW1ucy5zb21lKGUgPT4gZS5maWVsZCA9PT0gY29sdW1uLmZpZWxkKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29sdW1uLnRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLnRyYW5zZm9ybShpdGVtW2NvbHVtbi5maWVsZF0sIGl0ZW0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gbnVsbCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSAnJztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgY2VsbCBsw6Agc3RyaW5nIGhv4bq3YyBudW1iZXIgdGjDrCBnw6FuIGLhurFuZyBjaMOtbmggbsOzXHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCBib29sIHRow6wgZ8OhbiBi4bqxbmcgZ2nDoSB0cuG7iyB0cnVlVmFsdWUgdsOgIGZhbHNlVmFsdWUgKG7hur91IGPDsyksIG3hurdjIMSR4buLbmggbMOgIFRSVUUvRkFMU0VcclxuICAgICAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5vcHRpb24/LmRpc3BsYXlPblRydWUgfHwgJ1RydWUnO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5vcHRpb24/LmRpc3BsYXlPbkZhbHNlIHx8ICdGYWxzZSc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gRGF0ZS50b0Zvcm1hdChkYXRlLCAnZGQvTU0veXl5eSBISDptbTpzcycpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgdGltZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdISDptbTpzcycpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCB2YWx1ZXMgdGjDrCBs4bqleSBnacOhIHRy4buLIGPhu6dhIHZhbHVlIMSRxrDhu6NjIGNo4buNblxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldFZhbHVlcyhjb2x1bW4sIHRoaXMua2V5KTtcclxuICAgICAgICAgICAgICBpZiAoZGF0YS5vYmpbY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdICE9PSBudWxsICYmIGRhdGEub2JqW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGRhdGEub2JqW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKGhhbmRsZSk7XHJcbiAgICAgICAgICBpdGVtcy5wdXNoKG9iaik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2VOdW1iZXIrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWZpbGU/LmZpbGVQYXRoKSB7XHJcbiAgICAgICAgaWYgKGlzQ1NWKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0Q1NWKHtcclxuICAgICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiB0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8uZmlsZU5hbWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaGVldHM6IHtcclxuICAgICAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgICAgIGl0ZW1zOiBhbnlbXSxcclxuICAgICAgICAgIGZpZWxkczogc3RyaW5nW11cclxuICAgICAgICB9W10gPSBbXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8uc2hlZXRzKSkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLmdyaWRPcHRpb24uZXhwb3J0LnNoZWV0cykge1xyXG4gICAgICAgICAgICBpZiAoc2hlZXQubmFtZSAmJiBzaGVldC5pdGVtcyAmJiBzaGVldC5maWVsZHMpIHtcclxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNoZWV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICAgICAgaXRlbXM6IGF3YWl0IHNoZWV0Lml0ZW1zKCksXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkczogc2hlZXQuZmllbGRzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydCh7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICBmaWxlTmFtZTogdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmZpbGVOYW1lLFxyXG4gICAgICAgICAgc2hlZXRzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRCeVRlbXBsYXRlKHtcclxuICAgICAgICBmaWxlUGF0aDogZmlsZS5maWxlUGF0aCxcclxuICAgICAgICBmaWxlTmFtZTogZmlsZS5maWxlTmFtZSxcclxuICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgIGl0ZW1zXHJcbiAgICAgIH0pO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0V4cG9ydGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmV4cG9ydFRpdGxlID0gYEV4cG9ydGA7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRXhwb3J0ID0gYXN5bmMgKGFyZ3M6IHsgZmlsZTogU2RFeHBvcnRGaWxlLCBjb2x1bW5zOiBTZEV4cG9ydENvbHVtbltdLCBpc0NTVjogYm9vbGVhbiB9KSA9PiB7XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgaWYgKCFhcmdzLmlzQ1NWICYmIHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQubWF4ICYmIHRoaXMudG90YWwgPiB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Lm1heCkge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuY29uZmlybSh0cmFuc2xhdGUoYFRvdGFsIHJvd3MgcmVhY2ggbGltaXQsIGRvIHlvdSB3YW50IHRvIGV4cG9ydCBDU1ZgKSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgYXJncy5pc0NTViA9IHRydWU7XHJcbiAgICAgICAgdGhpcy4jb25FeHBvcnQoYXJncyk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLiNvbkV4cG9ydChhcmdzKTtcclxuICB9XHJcblxyXG4gIG9uRmlsdGVyQ2hhbmdlID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICB0aGlzLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgb25FeHBhbmQgPSBhc3luYyAocm93RGF0YTogU2RHcmlkTWF0ZXJpYWxSb3dEYXRhKSA9PiB7XHJcbiAgICBpZiAocm93RGF0YS5pc0V4cGFuZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocm93RGF0YS5pc0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0RhdGEuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkT3B0aW9uPy5zdWJJbmZvcm1hdGlvbj8ub25FeHBhbmQocm93RGF0YSk7XHJcbiAgICBpZiAoIXRoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbj8ubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5pc0V4cGFuZGluZyA9IGl0ZW0uaXNFeHBhbmRlZCA9IGZhbHNlKTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICByb3dEYXRhLmlzRXhwYW5kaW5nID0gdHJ1ZTtcclxuICAgICAgZGF0YS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgcm93RGF0YS5leHBhbmREZXRhaWwgPSByZXM7XHJcbiAgICAgICAgcm93RGF0YS5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgfSkuZmluYWxseSgoKSA9PiByb3dEYXRhLmlzRXhwYW5kaW5nID0gZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcm93RGF0YS5leHBhbmREZXRhaWwgPSBkYXRhO1xyXG4gICAgICByb3dEYXRhLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QgPSAocm93RGF0YTogU2RHcmlkTWF0ZXJpYWxSb3dEYXRhKSA9PiB7XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnNlbGVjdGlvbj8uc2luZ2xlKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZSAhPT0gcm93RGF0YSkuZm9yRWFjaChlID0+IGUuaXNTZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgdGhpcy4jdXBkYXRlU2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uc2VsZWN0aW9uPy5vblNlbGVjdD8uKHJvd0RhdGEsIHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5pc1NlbGVjdGVkKSk7XHJcbiAgICB0aGlzLmlzU2VsZWN0QWxsID0gdGhpcy5pdGVtcy5ldmVyeShlID0+IGUuaXNTZWxlY3RlZCk7XHJcbiAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuaXRlbXM/LmZvckVhY2goZSA9PiBlLmlzU2VsZWN0ZWQgPSB0aGlzLmlzU2VsZWN0QWxsKTtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5zZWxlY3Rpb24/Lm9uU2VsZWN0QWxsPy4odGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlLmlzU2VsZWN0ZWQpKTtcclxuICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICB9XHJcblxyXG4gICN1cGRhdGVTZWxlY3RlZEl0ZW1zID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlzU2VsZWN0ZWQpXHJcbiAgICAgIC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3Qge1xyXG4gICAgICAgICAgaXNTZWxlY3RlZCxcclxuICAgICAgICAgIGlzRXhwYW5kZWQsXHJcbiAgICAgICAgICBpc0V4cGFuZGluZyxcclxuICAgICAgICAgIGV4cGFuZERldGFpbCxcclxuICAgICAgICAgIC4uLnJlc3VsdFxyXG4gICAgICAgIH0gPSBpdGVtO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pIGFzIFRbXTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5ncmlkRmlsdGVyPy5vbkNsZWFyRmlsdGVyKCk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXIgPSAoYXJnczoge1xyXG4gICAgY29sdW1uRmlsdGVyOiBhbnksXHJcbiAgICBleHRlcm5hbEZpbHRlcjogYW55LFxyXG4gICAgZmlsdGVyRGVmOiBhbnlcclxuICB9KSA9PiB7XHJcbiAgICB0aGlzLmdyaWRGaWx0ZXI/LnNldEZpbHRlcihhcmdzKTtcclxuICB9XHJcbn1cclxuIl19
672
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tYXRlcmlhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvdXNlci9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9ncmlkLW1hdGVyaWFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFFVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsU0FBUyxFQUdULFlBQVksRUFDWixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsNEJBQTRCLEVBRTdCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdEQUFnRCxDQUFD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QU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO3FCQUN0RixDQUFDO2lCQUNIOzthQUNGOzs7WUF0REMsaUJBQWlCOzRDQXFLZCxNQUFNLFNBQUMsb0JBQW9CLGNBQUcsUUFBUTtZQWhJbEMsMEJBQTBCO1lBRkksZUFBZTtZQVg3QyxlQUFlO1lBZWYsa0JBQWtCO1lBQ2xCLGFBQWE7OzswQkFtQm5CLFNBQVMsU0FBQyxhQUFhOzBCQUN2QixTQUFTLFNBQUMsWUFBWTtxQkFjdEIsS0FBSzt3QkE0QkwsU0FBUyxTQUFDLFlBQVk7bUJBYXRCLFNBQVMsU0FBQyxPQUFPOzRCQVlqQixTQUFTLFNBQUMsYUFBYTsrQkFHdkIsWUFBWSxTQUFDLG9DQUFvQzswQkFHakQsWUFBWSxTQUFDLCtCQUErQjt5QkFHNUMsZUFBZSxTQUFDLDBCQUEwQjsyQkFNMUMsZUFBZSxTQUFDLDRCQUE0QjsyQkFPNUMsZUFBZSxTQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIEluamVjdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENvbnRlbnRDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQge1xyXG4gIFNkR3JpZE1hdGVyaWFsRmlsdGVyUmVxdWVzdFxyXG59IGZyb20gJy4vbW9kZWxzL2dyaWQtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBTZEdyaWRNYXRlcmlhbE9wdGlvbiwgU2RHcmlkTWF0ZXJpYWxSb3dEYXRhXHJcbn0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEdSSURfTUFURVJJQUxfQ09ORklHLFxyXG4gIERFRkFVTFRfR1JJRF9NQVRFUklBTF9DT05GSUcsXHJcbiAgSVNkR3JpZE1hdGVyaWFsQ29uZmlndXJhdGlvblxyXG59IGZyb20gJy4vbW9kZWxzL2dyaWQtY29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNkTm90aWZ5U2VydmljZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbENvbHVtbiB9IGZyb20gJy4vbW9kZWxzL2dyaWQtY29sdW1uLm1vZGVsJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbENlbGxEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtbWF0ZXJpYWwtY2VsbC1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZEdyaWRGaWx0ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC1tYXRlcmlhbC1maWx0ZXItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxTdWJJbmZvcm1hdGlvbkRlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC1tYXRlcmlhbC1zdWItaW5mb3JtYXRpb24tZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkTWF0ZXJpYWxGb290ZXJEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtbWF0ZXJpYWwtZm9vdGVyLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsRW1wdHlEYXRhRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLW1hdGVyaWFsLWVtcHR5LWRhdGEtZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkUG9wdXBFeHBvcnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcG9wdXAtZXhwb3J0L3BvcHVwLWV4cG9ydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydENvbHVtbiwgU2RFeHBvcnRGaWxlLCBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcbmltcG9ydCB7IFNkR3JpZENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL21vZGVscy9ncmlkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkR3JpZENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ncmlkLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsRXhwb3J0Q29sdW1uIH0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1leHBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IFNkR3JpZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNkUXVpY2tBY3Rpb24gfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3F1aWNrLWFjdGlvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NkLWdyaWQtbWF0ZXJpYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLW1hdGVyaWFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ncmlkLW1hdGVyaWFsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xyXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwJywgbWluSGVpZ2h0OiAnMCcsIHZpc2liaWxpdHk6ICdoaWRkZW4nIH0pKSxcclxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJywgdmlzaWJpbGl0eTogJ3Zpc2libGUnIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcclxuICAgIF0pLFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEdyaWRNYXRlcmlhbDxUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBrZXkgPSB1dWlkLnY0KCk7XHJcbiAgZ3JpZENvbmZpZ3VyYXRpb25PYnNlcnZlcjogT2JzZXJ2YWJsZTxTZEdyaWRDb25maWd1cmF0aW9uPjtcclxuICBncmlkRmlsdGVyOiBTZEdyaWRGaWx0ZXI7XHJcbiAgQFZpZXdDaGlsZChTZFF1aWNrQWN0aW9uKSBxdWlja0FjdGlvbjogU2RRdWlja0FjdGlvbjtcclxuICBAVmlld0NoaWxkKFNkR3JpZEZpbHRlcikgc2V0IF9ncmlkRmlsdGVyKGdyaWRGaWx0ZXI6IFNkR3JpZEZpbHRlcikge1xyXG4gICAgaWYgKGdyaWRGaWx0ZXIgJiYgdGhpcy5ncmlkRmlsdGVyICE9PSBncmlkRmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEZpbHRlciA9IGdyaWRGaWx0ZXI7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoZ3JpZEZpbHRlci5maWx0ZXJDaGFuZ2UucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy4jcGFnaW5hdG9yLnBhZ2VJbmRleCA9IDA7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy4jZ2V0RmlsdGVyKCk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKHRoaXMuI2xvYWQpXHJcbiAgICAgICkuc3Vic2NyaWJlKHRoaXMuI3JlbmRlcikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IG9wdGlvbihvcHRpb246IFNkR3JpZE1hdGVyaWFsT3B0aW9uKSB7XHJcbiAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgIG9wdGlvbiA9IHRoaXMuI2luaXRDb25maWd1cmF0aW9uKG9wdGlvbik7XHJcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbiA9IG9wdGlvbjtcclxuICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5lbWl0KCk7XHJcbiAgICAgIG9wdGlvbj8uY29sdW1ucz8uZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgIGlmKGNvbC5maWx0ZXI/LmRlZmF1bHQpIHtcclxuICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyW2NvbC5maWVsZF0gPSBjb2wuZmlsdGVyLmRlZmF1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHRoaXMuZ3JpZENvbmZpZ3VyYXRpb25TZXJ2aWNlLmluaXQodGhpcy5rZXksIHRoaXMuZ3JpZE9wdGlvbik7XHJcbiAgICAgIHRoaXMuZ3JpZENvbmZpZ3VyYXRpb25PYnNlcnZlciA9IGNvbmZpZ3VyYXRpb24ub2JzZXJ2ZXI7XHJcbiAgICAgIGNvbmZpZ3VyYXRpb24ubG9hZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ3JpZE9wdGlvbjogU2RHcmlkTWF0ZXJpYWxPcHRpb247XHJcbiAgbG9jYWxJdGVtczogYW55W10gPSBbXTtcclxuICBpdGVtczogU2RHcmlkTWF0ZXJpYWxSb3dEYXRhW10gPSBbXTtcclxuICBzZWxlY3RlZEl0ZW1zOiBUW10gPSBbXTtcclxuICB0b3RhbDogbnVtYmVyO1xyXG5cclxuICAvLyBMb2FkaW5nXHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIC8vIFBhZ2luYXRlXHJcbiAgaXNIaWRkZW5QYWdpbmF0b3IgPSBmYWxzZTtcclxuICAjcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XHJcbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHNldCBwYWdpbmF0b3IocGFnaW5hdG9yOiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIGlmIChwYWdpbmF0b3IgJiYgdGhpcy4jcGFnaW5hdG9yICE9PSBwYWdpbmF0b3IpIHtcclxuICAgICAgdGhpcy4jcGFnaW5hdG9yID0gcGFnaW5hdG9yO1xyXG4gICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHBhZ2luYXRvci5wYWdlLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXHJcbiAgICAgICAgbWFwKHRoaXMuI2dldEZpbHRlciksXHJcbiAgICAgICAgc3dpdGNoTWFwKHRoaXMuI2xvYWQpXHJcbiAgICAgICkuc3Vic2NyaWJlKHRoaXMuI3JlbmRlcikpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU29ydGluZ1xyXG4gICNzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc2V0IHNvcnQoc29ydDogTWF0U29ydCkge1xyXG4gICAgaWYgKHNvcnQgJiYgdGhpcy4jc29ydCAhPT0gc29ydCkge1xyXG4gICAgICB0aGlzLiNzb3J0ID0gc29ydDtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChzb3J0LnNvcnRDaGFuZ2UucGlwZShcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcclxuICAgICAgICBtYXAodGhpcy4jZ2V0RmlsdGVyKSxcclxuICAgICAgICBzd2l0Y2hNYXAodGhpcy4jbG9hZClcclxuICAgICAgKS5zdWJzY3JpYmUodGhpcy4jcmVuZGVyKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBFeHBvcnRcclxuICBAVmlld0NoaWxkKFNkUG9wdXBFeHBvcnQpIHNkUG9wdXBFeHBvcnQ6IFNkUG9wdXBFeHBvcnQ7XHJcblxyXG4gIC8vIFN1YiBJbmZvcm1hdGlvblxyXG4gIEBDb250ZW50Q2hpbGQoU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlKSBzZFN1YkluZm9ybWF0aW9uOiBTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmU7XHJcblxyXG4gIC8vIEVtcHR5IERhdGFcclxuICBAQ29udGVudENoaWxkKFNkTWF0ZXJpYWxFbXB0eURhdGFEZWZEaXJlY3RpdmUpIHNkRW1wdHlEYXRhOiBTZE1hdGVyaWFsRW1wdHlEYXRhRGVmRGlyZWN0aXZlO1xyXG5cclxuICAvLyBDZWxsIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RNYXRlcmlhbENlbGxEZWZEaXJlY3RpdmUpIHNkQ2VsbERlZnMgPSBuZXcgUXVlcnlMaXN0PFNkTWF0ZXJpYWxDZWxsRGVmRGlyZWN0aXZlPigpO1xyXG4gIGNlbGxEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkTWF0ZXJpYWxDZWxsRGVmRGlyZWN0aXZlXHJcbiAgfSA9IHt9O1xyXG5cclxuICAvLyBGb290ZXIgRGVmXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlKSBzZEZvb3RlckRlZnMgPSBuZXcgUXVlcnlMaXN0PFNkTWF0ZXJpYWxGb290ZXJEZWZEaXJlY3RpdmU+KCk7XHJcbiAgZm9vdGVyRGVmOiB7XHJcbiAgICBbY29sdW1uOiBzdHJpbmddOiBTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlXHJcbiAgfSA9IHt9O1xyXG4gIGhhc0Zvb3RlciA9IGZhbHNlO1xyXG5cclxuICAvLyBGaWx0ZXIgRGVmXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlKSBzZEZpbHRlckRlZnMgPSBuZXcgUXVlcnlMaXN0PFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmU+KCk7XHJcbiAgZmlsdGVyRGVmczogU2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZVtdID0gW107XHJcblxyXG4gIC8vIEZpbHRlclxyXG4gIGNvbHVtbkZpbHRlcjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55XHJcbiAgfSA9IHt9O1xyXG4gIC8vIFN1YmNyaXB0aW9uXHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAjb3B0aW9uQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBpc0V4cG9ydGluZyA9IGZhbHNlO1xyXG4gIGlzU2VsZWN0QWxsID0gZmFsc2U7XHJcbiAgZXhwb3J0VGl0bGUgPSAnRXhwb3J0JztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KEdSSURfTUFURVJJQUxfQ09ORklHKSBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlndXJhdGlvbjogSVNkR3JpZE1hdGVyaWFsQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgZ3JpZENvbmZpZ3VyYXRpb25TZXJ2aWNlOiBTZEdyaWRDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogU2RFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlOiBTZE5vdGlmeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3JpZFNlcnZpY2U6IFNkR3JpZFNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy4jaW5pdENlbGxEZWYoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZENlbGxEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUodGhpcy4jaW5pdENlbGxEZWYpKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZEZvb3RlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0Rm9vdGVyRGVmKSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuc2RGaWx0ZXJEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUodGhpcy4jaW5pdEZpbHRlckRlZikpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLiNvcHRpb25DaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHN0YXJ0V2l0aCh7fSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICBtYXAodGhpcy4jZ2V0RmlsdGVyKSxcclxuICAgICAgc3dpdGNoTWFwKHRoaXMuI2xvYWQpXHJcbiAgICApLnN1YnNjcmliZSh0aGlzLiNyZW5kZXIpKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAjaW5pdENlbGxEZWYgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmNlbGxEZWYgPSB7fTtcclxuICAgIGZvciAoY29uc3QgY2VsbERlZiBvZiB0aGlzLnNkQ2VsbERlZnMpIHtcclxuICAgICAgaWYgKGNlbGxEZWYuc2RNYXRlcmlhbENlbGxEZWYpIHtcclxuICAgICAgICB0aGlzLmNlbGxEZWZbY2VsbERlZi5zZE1hdGVyaWFsQ2VsbERlZl0gPSBjZWxsRGVmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjaW5pdEZpbHRlckRlZiA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyRGVmcyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBmaWx0ZXJEZWYgb2YgdGhpcy5zZEZpbHRlckRlZnMpIHtcclxuICAgICAgdGhpcy5maWx0ZXJEZWZzLnB1c2goZmlsdGVyRGVmKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICNpbml0Rm9vdGVyRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5mb290ZXJEZWYgPSB7fTtcclxuICAgIHRoaXMuaGFzRm9vdGVyID0gZmFsc2U7XHJcbiAgICBmb3IgKGNvbnN0IGZvb3RlckRlZiBvZiB0aGlzLnNkRm9vdGVyRGVmcykge1xyXG4gICAgICBpZiAoZm9vdGVyRGVmLnNkTWF0ZXJpYWxGb290ZXJEZWYpIHtcclxuICAgICAgICB0aGlzLmhhc0Zvb3RlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb290ZXJEZWZbZm9vdGVyRGVmLnNkTWF0ZXJpYWxGb290ZXJEZWZdID0gZm9vdGVyRGVmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjZmlsdGVyRXhwb3J0SW5mbyA9IChwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpOiBTZEdyaWRNYXRlcmlhbEZpbHRlclJlcXVlc3QgPT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcmF3Q29sdW1uRmlsdGVyOiAodGhpcy5ncmlkT3B0aW9uPy5maWx0ZXI/LmlubGluZUNvbHVtbiA/IHRoaXMuY29sdW1uRmlsdGVyIDogdGhpcy5ncmlkRmlsdGVyPy5jb2x1bW5GaWx0ZXIpIHx8IHt9LFxyXG4gICAgICByYXdFeHRlcm5hbEZpbHRlcjogdGhpcy5ncmlkRmlsdGVyPy5leHRlcm5hbEZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RmlsdGVyRGVmOiB0aGlzLmdyaWRGaWx0ZXI/LmZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgb3JkZXJCeTogdGhpcy4jc29ydD8uYWN0aXZlIHx8ICcnLFxyXG4gICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy4jc29ydD8uZGlyZWN0aW9uIHx8ICcnLFxyXG4gICAgICBwYWdlTnVtYmVyLFxyXG4gICAgICBwYWdlU2l6ZSxcclxuICAgICAgaXNFeHBvcnRlZDogdHJ1ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNpbml0Q29uZmlndXJhdGlvbiA9IChvcHRpb246IFNkR3JpZE1hdGVyaWFsT3B0aW9uKSA9PiB7XHJcbiAgICBvcHRpb24ucGFnaW5hdGUgPSB7XHJcbiAgICAgIGhpZGRlbjogb3B0aW9uPy5wYWdpbmF0ZT8uaGlkZGVuLFxyXG4gICAgICBwYWdlU2l6ZTogb3B0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgPz8gdGhpcy5jb25maWd1cmF0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgPz8gREVGQVVMVF9HUklEX01BVEVSSUFMX0NPTkZJRy5wYWdpbmF0ZT8ucGFnZVNpemUsXHJcbiAgICAgIHBhZ2VzOiBvcHRpb24/LnBhZ2luYXRlPy5wYWdlcyA/PyB0aGlzLmNvbmZpZ3VyYXRpb24/LnBhZ2luYXRlPy5wYWdlcyA/PyBERUZBVUxUX0dSSURfTUFURVJJQUxfQ09ORklHLnBhZ2luYXRlPy5wYWdlcyxcclxuICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6IG9wdGlvbj8ucGFnaW5hdGU/LnNob3dGaXJzdExhc3RCdXR0b25zID8/IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG9wdGlvbjtcclxuICB9XHJcblxyXG4gICNmaWx0ZXJMb2NhbCA9IChsb2NhbEl0ZW1zOiBhbnlbXSwgZmlsdGVySW5mbzogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJSZXF1ZXN0KSA9PiB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHRoaXMuZ3JpZE9wdGlvbjtcclxuICAgIGNvbnN0IGl0ZW1zID0gbG9jYWxJdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZTogc3RyaW5nID0gKGZpbHRlckluZm8ucmF3Q29sdW1uRmlsdGVyW2NvbHVtbi5maWVsZF0gfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWU6IHN0cmluZyA9IChpdGVtW2NvbHVtbi5maWVsZF0gfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlKSB7XHJcbiAgICAgICAgICBpZiAoIWNvbHVtblZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtblZhbHVlLmluZGV4T2YoZmlsdGVyVmFsdWUpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgY29uc3QgZlZhbHVlID0gK2ZpbHRlclZhbHVlLnJlcGxhY2UoJz49JywgJycpLnJlcGxhY2UoJzw9JywgJycpLnJlcGxhY2UoJz4nLCAnJykucmVwbGFjZSgnPCcsICcnKTtcclxuICAgICAgICAgICAgY29uc3QgY1ZhbHVlID0gK2NvbHVtblZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoZlZhbHVlIHx8IGZWYWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGlmICghY1ZhbHVlICYmIGNWYWx1ZSAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPj0nKSA+IC0xICYmIGNWYWx1ZSA8IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPD0nKSA+IC0xICYmIGNWYWx1ZSA+IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPCcpID4gLTEgJiYgY1ZhbHVlID49IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUuaW5kZXhPZignPicpID4gLTEgJiYgY1ZhbHVlIDw9IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY1ZhbHVlICE9PSBmVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUgPT09ICcxJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJzEnICYmIGNvbHVtblZhbHVlICE9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyVmFsdWUgPT09ICcwJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJzAnICYmIGNvbHVtblZhbHVlICE9PSAnZmFsc2UnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IERhdGUudG9Gb3JtYXQoZmlsdGVyVmFsdWUsICdNTS95eXl5L2RkJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUoZGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xyXG4gICAgICAgICAgICB0b0RhdGUuc2V0RGF0ZSh0b0RhdGUuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgICAgIGlmIChuZXcgRGF0ZShjb2x1bW5WYWx1ZSkuZ2V0VGltZSgpIDwgZnJvbURhdGUuZ2V0VGltZSgpIHx8IG5ldyBEYXRlKGNvbHVtblZhbHVlKS5nZXRUaW1lKCkgPj0gdG9EYXRlLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgLy8gU29ydFxyXG4gICAgaWYgKGZpbHRlckluZm8ub3JkZXJCeSAmJiBmaWx0ZXJJbmZvLm9yZGVyRGlyZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IGZpbHRlckluZm8ub3JkZXJCeSk7XHJcbiAgICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIGZpZWxkIH0gPSBjb2x1bW47XHJcbiAgICAgICAgaXRlbXMuc29ydCgoY3VycmVudCwgbmV4dCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoY3VycmVudFtmaWVsZF0gfHwgMCkgLSAobmV4dFtmaWVsZF0gfHwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnIHx8IHR5cGUgPT09ICdkYXRldGltZScgfHwgdHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGQxID0gbmV3IERhdGUoY3VycmVudFtmaWVsZF0gfHwgJycpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgY29uc3QgZDIgPSBuZXcgRGF0ZShjdXJyZW50W2ZpZWxkXSB8fCAnJykuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZDEgLSBkMjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IHMxID0gKGN1cnJlbnRbZmllbGRdIHx8ICcnKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgY29uc3QgczIgPSAobmV4dFtmaWVsZF0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBpZiAoczEgPiBzMikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChzMSA8IHMyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChmaWx0ZXJJbmZvLm9yZGVyRGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgICAgIGl0ZW1zLnJldmVyc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGl0ZW1zOiBpdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy4jcGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMDtcclxuICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMuI3BhZ2luYXRvcj8ucGFnZVNpemUgfHwgdGhpcy5ncmlkT3B0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgfHwgNTA7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IHBhZ2VJbmRleCAqIHBhZ2VTaXplXHJcbiAgICAgICAgICAmJiBpbmRleCA8IChwYWdlSW5kZXggKyAxKSAqIHBhZ2VTaXplO1xyXG4gICAgICB9KSxcclxuICAgICAgdG90YWw6IGl0ZW1zLmxlbmd0aFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gICNnZXRGaWx0ZXIgPSAoKTogU2RHcmlkTWF0ZXJpYWxGaWx0ZXJSZXF1ZXN0ID0+ICh7XHJcbiAgICByYXdDb2x1bW5GaWx0ZXI6ICh0aGlzLmdyaWRPcHRpb24/LmZpbHRlcj8uaW5saW5lQ29sdW1uID8gdGhpcy5jb2x1bW5GaWx0ZXIgOiB0aGlzLmdyaWRGaWx0ZXI/LmNvbHVtbkZpbHRlcikgfHwge30sXHJcbiAgICByYXdFeHRlcm5hbEZpbHRlcjogdGhpcy5ncmlkRmlsdGVyPy5leHRlcm5hbEZpbHRlciB8fCB7fSxcclxuICAgIHJhd0ZpbHRlckRlZjogdGhpcy5ncmlkRmlsdGVyPy5maWx0ZXJEZWYgfHwge30sXHJcbiAgICBvcmRlckJ5OiB0aGlzLiNzb3J0Py5hY3RpdmUgfHwgJycsXHJcbiAgICBvcmRlckRpcmVjdGlvbjogdGhpcy4jc29ydD8uZGlyZWN0aW9uIHx8ICcnLFxyXG4gICAgcGFnZU51bWJlcjogdGhpcy4jcGFnaW5hdG9yPy5wYWdlSW5kZXggfHwgMCxcclxuICAgIHBhZ2VTaXplOiB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VTaXplIHx8IHRoaXMuZ3JpZE9wdGlvbj8ucGFnaW5hdGU/LnBhZ2VTaXplIHx8IDUwXHJcbiAgfSlcclxuXHJcbiAgI2xvYWQgPSBhc3luYyAoZmlsdGVyUmVxOiBTZEdyaWRNYXRlcmlhbEZpbHRlclJlcXVlc3QpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCB0b3RhbDogbnVtYmVyIH0+ID0+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ3NlcnZlcicpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKGZpbHRlclJlcSk7XHJcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ3JpZE9wdGlvbi5pdGVtcygpO1xyXG4gICAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlckxvY2FsKHRoaXMubG9jYWxJdGVtcywgZmlsdGVyUmVxKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmhhbmRsZS5lcnJvcihlcnJvcik7XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjcmVuZGVyID0gYXN5bmMgKGFyZ3M6IHsgaXRlbXM6IGFueVtdLCB0b3RhbDogbnVtYmVyIH0pID0+IHtcclxuICAgIHRoaXMuaXRlbXMgPSBhcmdzPy5pdGVtcyB8fCBbXTtcclxuICAgIHRoaXMudG90YWwgPSBhcmdzPy50b3RhbCB8fCAwO1xyXG4gICAgLy8gdGhpcy5pc0hpZGRlblBhZ2luYXRvciA9IHRoaXMuZmlsdGVySW5mby5wYWdlTnVtYmVyID09PSAwICYmIHRoaXMudG90YWwgPD0gdGhpcy5maWx0ZXJJbmZvLnBhZ2VTaXplO1xyXG4gICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5vcmlnaW5JdGVtID0geyAuLi5pdGVtIH0pO1xyXG4gICAgYXdhaXQgdGhpcy5ncmlkT3B0aW9uPy5yZWxvYWQ/Lm9uUmVsb2FkPy4odGhpcy5pdGVtcyk7XHJcbiAgICB0aGlzLmlzU2VsZWN0QWxsID0gdGhpcy5pdGVtcy5ldmVyeShlID0+IGUuaXNTZWxlY3RlZCk7XHJcbiAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICByZWxvYWQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy4jbG9hZCh0aGlzLiNnZXRGaWx0ZXIoKSk7XHJcbiAgICB0aGlzLiNyZW5kZXIoZGF0YSk7XHJcbiAgfVxyXG5cclxuICAjZXhwb3J0ZWRJdGVtcyA9IGFzeW5jIChwYWdlTnVtYmVyOiBudW1iZXIgPSAwLCBwYWdlU2l6ZTogbnVtYmVyID0gMTAwMDApID0+IHtcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcykge1xyXG4gICAgICAvLyBjb25zdCBleHBvcnRlZEl0ZW1zID0gdGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy4jZmlsdGVyRXhwb3J0SW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICBsZXQgcmVzdWx0ID0gdGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy4jZmlsdGVyRXhwb3J0SW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlPGFueVtdPihyZXN1bHQpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09ic2VydmFibGU8eyBpdGVtczogYW55W10sIHRvdGFsOiBudW1iZXIgfT4ocmVzdWx0KSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b1Byb21pc2UoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdWx0O1xyXG4gICAgICAvLyBpZiAoZXhwb3J0ZWRJdGVtcyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgLy8gICByZXR1cm4gYXdhaXQgZXhwb3J0ZWRJdGVtcztcclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICByZXR1cm4gZXhwb3J0ZWRJdGVtcztcclxuICAgICAgLy8gfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVySW5mbyA9IHRoaXMuI2ZpbHRlckV4cG9ydEluZm8ocGFnZU51bWJlciwgcGFnZVNpemUpO1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdzZXJ2ZXInKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZ3JpZE9wdGlvbi5pdGVtcyhmaWx0ZXJJbmZvKTtcclxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b1Byb21pc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZXhwb3J0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmdyaWRPcHRpb24uaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKCk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgZXhwb3J0ZWRJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleHBvcnRlZEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXhwb3J0ZWRJdGVtcyA9IHRoaXMuZ3JpZE9wdGlvbi5pdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlckxvY2FsKGV4cG9ydGVkSXRlbXMsIGZpbHRlckluZm8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4sIGNvbHVtbnM6IHN0cmluZ1tdKSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkoY29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gICNhbGxDb2x1bW5zID0gKCk6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW10gPT4ge1xyXG4gICAgY29uc3QgY29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXSA9IFtdO1xyXG4gICAgdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgY29sdW1uLmNoaWxkcmVuPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKS5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChjaGlsZENvbHVtbi50eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbHVtbnMucHVzaChjaGlsZENvbHVtbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuLWNvbCcpIHtcclxuICAgICAgICBjb2x1bW4uY2hpbGRyZW4/LmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpLmZvckVhY2goY2hpbGRDb2x1bW4gPT4ge1xyXG4gICAgICAgICAgaWYgKGNoaWxkQ29sdW1uLnR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29sdW1ucy5wdXNoKGNvbHVtbik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgI2FsbEV4cG9ydGVkQ29sdW1ucyA9ICgpOiBTZEdyaWRNYXRlcmlhbEV4cG9ydENvbHVtbltdID0+IHtcclxuICAgIHJldHVybiB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5jb2x1bW5zPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKSB8fCBbXTtcclxuICB9XHJcblxyXG4gICNvbkV4cG9ydCA9IGFzeW5jIChhcmdzOiB7IGZpbGU6IFNkRXhwb3J0RmlsZSwgY29sdW1uczogU2RFeHBvcnRDb2x1bW5bXSwgaXNDU1Y6IGJvb2xlYW4gfSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgeyBmaWxlLCBjb2x1bW5zLCBpc0NTViB9ID0gYXJncztcclxuICAgICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdyaWRPcHRpb24/LmV4cG9ydD8ubWF4SXRlbXNQZXJSZXF1ZXN0IHx8IDEwMDA7XHJcbiAgICAgIGxldCB0b3RhbCA9IHRoaXMudG90YWw7XHJcbiAgICAgIGxldCBwYWdlTnVtYmVyID0gMDtcclxuICAgICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuaXNFeHBvcnRpbmcgPSB0cnVlO1xyXG4gICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuICAgICAgd2hpbGUgKHBhZ2VOdW1iZXIgKiBwYWdlU2l6ZSA8IHRvdGFsKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4jZXhwb3J0ZWRJdGVtcyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSk7XHJcbiAgICAgICAgaWYgKCdpdGVtcycgaW4gcmVzKSB7XHJcbiAgICAgICAgICBleHBvcnRJdGVtcyA9IHJlcy5pdGVtcztcclxuICAgICAgICAgIHRvdGFsID0gcmVzLnRvdGFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBleHBvcnRJdGVtcyA9IHJlcztcclxuICAgICAgICAgIC8vIHRvdGFsID0gZXhwb3J0SXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8ubWFwcGluZykge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ3JpZE9wdGlvbi5leHBvcnQubWFwcGluZyhleHBvcnRJdGVtcyk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBhd2FpdCByZXN1bHRzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG90YWxQYWdlID0gdG90YWwgLyBwYWdlU2l6ZTtcclxuICAgICAgICBjb25zdCBwZXJjZW50ID0gTWF0aC5yb3VuZChwYWdlTnVtYmVyICogMTAwLjAgLyB0b3RhbFBhZ2UpO1xyXG4gICAgICAgIHRoaXMuZXhwb3J0VGl0bGUgPSBgRXhwb3J0aW5nLi4uJHtwZXJjZW50fSVgO1xyXG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLiNhbGxDb2x1bW5zKCk7XHJcbiAgICAgICAgY29uc3QgYWxsRXhwb3J0ZWRDb2x1bW5zID0gdGhpcy4jYWxsRXhwb3J0ZWRDb2x1bW5zKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGV4cG9ydEl0ZW1zKSB7XHJcbiAgICAgICAgICBjb25zdCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gKGV4cG9ydENvbHVtbjogU2RFeHBvcnRDb2x1bW4pID0+IHtcclxuICAgICAgICAgICAgb2JqW2V4cG9ydENvbHVtbi5maWVsZF0gPSBpdGVtW2V4cG9ydENvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGFsbENvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IGV4cG9ydENvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydGVkQ29sdW1uID0gYWxsRXhwb3J0ZWRDb2x1bW5zLmZpbmQoZSA9PiBlLmZpZWxkID09PSBleHBvcnRDb2x1bW4uZmllbGQpO1xyXG4gICAgICAgICAgICBpZiAoZXhwb3J0ZWRDb2x1bW4/LnRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgICAgIG9ialtleHBvcnRlZENvbHVtbi5maWVsZF0gPSBleHBvcnRlZENvbHVtbi50cmFuc2Zvcm0oaXRlbVtleHBvcnRlZENvbHVtbi5maWVsZF0sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWNvbHVtbikge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicgfHwgY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbi1jb2wnKSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uPy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IGhhbmRsZShjaGlsZENvbHVtbikpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWNvbHVtbnMuc29tZShlID0+IGUuZmllbGQgPT09IGNvbHVtbi5maWVsZCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50cmFuc2Zvcm0pIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi50cmFuc2Zvcm0oaXRlbVtjb2x1bW4uZmllbGRdLCBpdGVtKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSAnJykge1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gJyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnIHx8IGNvbHVtbi50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGNlbGwgbMOgIHN0cmluZyBob+G6t2MgbnVtYmVyIHRow6wgZ8OhbiBi4bqxbmcgY2jDrW5oIG7Ds1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgYm9vbCB0aMOsIGfDoW4gYuG6sW5nIGdpw6EgdHLhu4sgdHJ1ZVZhbHVlIHbDoCBmYWxzZVZhbHVlIChu4bq/dSBjw7MpLCBt4bq3YyDEkeG7i25oIGzDoCBUUlVFL0ZBTFNFXHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW1bY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4ub3B0aW9uPy5kaXNwbGF5T25UcnVlIHx8ICdUcnVlJztcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4ub3B0aW9uPy5kaXNwbGF5T25GYWxzZSB8fCAnRmFsc2UnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGRhdGUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gRGF0ZS50b0Zvcm1hdChkYXRlLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGRhdGV0aW1lIHRow6wgY29udmVydCB0aGVvIMSRw7puZyBmb3JtYXRcclxuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IERhdGUudG9Gb3JtYXQoZGF0ZSwgJ2RkL01NL3l5eXkgSEg6bW06c3MnKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIHRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtW2NvbHVtbi5maWVsZF0pO1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gRGF0ZS50b0Zvcm1hdChkYXRlLCAnSEg6bW06c3MnKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgdmFsdWVzIHRow6wgbOG6pXkgZ2nDoSB0cuG7iyBj4bunYSB2YWx1ZSDEkcaw4bujYyBjaOG7jW5cclxuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5ncmlkU2VydmljZS5nZXRWYWx1ZXMoY29sdW1uLCB0aGlzLmtleSk7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEub2JqW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXSAhPT0gbnVsbCAmJiBkYXRhLm9ialtjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBkYXRhLm9ialtjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIC8vIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZvckVhY2goaGFuZGxlKTtcclxuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICAgICAgaXRlbXMucHVzaChvYmopO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYWdlTnVtYmVyKys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFmaWxlPy5maWxlUGF0aCkge1xyXG4gICAgICAgIGlmIChpc0NTVikge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydENTVih7XHJcbiAgICAgICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgICAgIGl0ZW1zLFxyXG4gICAgICAgICAgICBmaWxlTmFtZTogdGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LmZpbGVOYW1lXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgICAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgICBpdGVtczogYW55W10sXHJcbiAgICAgICAgICBmaWVsZHM6IHN0cmluZ1tdXHJcbiAgICAgICAgfVtdID0gW107XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5ncmlkT3B0aW9uPy5leHBvcnQ/LnNoZWV0cykpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qgc2hlZXQgb2YgdGhpcy5ncmlkT3B0aW9uLmV4cG9ydC5zaGVldHMpIHtcclxuICAgICAgICAgICAgaWYgKHNoZWV0Lm5hbWUgJiYgc2hlZXQuaXRlbXMgJiYgc2hlZXQuZmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2hlZXQuaXRlbXMpKSB7XHJcbiAgICAgICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBzaGVldC5pdGVtcyxcclxuICAgICAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHNoZWV0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZHM6IHNoZWV0LmZpZWxkc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnQoe1xyXG4gICAgICAgICAgY29sdW1ucyxcclxuICAgICAgICAgIGl0ZW1zLFxyXG4gICAgICAgICAgZmlsZU5hbWU6IHRoaXMuZ3JpZE9wdGlvbj8uZXhwb3J0Py5maWxlTmFtZSxcclxuICAgICAgICAgIHNoZWV0c1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBhd2FpdCB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0QnlUZW1wbGF0ZSh7XHJcbiAgICAgICAgZmlsZVBhdGg6IGZpbGUuZmlsZVBhdGgsXHJcbiAgICAgICAgZmlsZU5hbWU6IGZpbGUuZmlsZU5hbWUsXHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBpdGVtc1xyXG4gICAgICB9KTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNFeHBvcnRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5leHBvcnRUaXRsZSA9IGBFeHBvcnRgO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydCA9IGFzeW5jIChhcmdzOiB7IGZpbGU6IFNkRXhwb3J0RmlsZSwgY29sdW1uczogU2RFeHBvcnRDb2x1bW5bXSwgaXNDU1Y6IGJvb2xlYW4gfSkgPT4ge1xyXG4gICAgY29uc3QgeyB0cmFuc2xhdGUgfSA9IHRoaXMudHJhbnNsYXRlU2VydmljZTtcclxuICAgIGlmICghYXJncy5pc0NTViAmJiB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Lm1heCAmJiB0aGlzLnRvdGFsID4gdGhpcy5ncmlkT3B0aW9uLmV4cG9ydC5tYXgpIHtcclxuICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmNvbmZpcm0odHJhbnNsYXRlKGBUb3RhbCByb3dzIHJlYWNoIGxpbWl0LCBkbyB5b3Ugd2FudCB0byBleHBvcnQgQ1NWYCkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGFyZ3MuaXNDU1YgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuI29uRXhwb3J0KGFyZ3MpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy4jb25FeHBvcnQoYXJncyk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlckNoYW5nZSA9ICgpID0+IHtcclxuICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kID0gYXN5bmMgKHJvd0RhdGE6IFNkR3JpZE1hdGVyaWFsUm93RGF0YSkgPT4ge1xyXG4gICAgaWYgKHJvd0RhdGEuaXNFeHBhbmRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHJvd0RhdGEuaXNFeHBhbmRlZCkge1xyXG4gICAgICByb3dEYXRhLmlzRXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ3JpZE9wdGlvbj8uc3ViSW5mb3JtYXRpb24/Lm9uRXhwYW5kKHJvd0RhdGEpO1xyXG4gICAgaWYgKCF0aGlzLmdyaWRPcHRpb24uc3ViSW5mb3JtYXRpb24/Lm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uaXNFeHBhbmRpbmcgPSBpdGVtLmlzRXhwYW5kZWQgPSBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgcm93RGF0YS5pc0V4cGFuZGluZyA9IHRydWU7XHJcbiAgICAgIGRhdGEudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIHJvd0RhdGEuZXhwYW5kRGV0YWlsID0gcmVzO1xyXG4gICAgICAgIHJvd0RhdGEuaXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gcm93RGF0YS5pc0V4cGFuZGluZyA9IGZhbHNlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvd0RhdGEuZXhwYW5kRGV0YWlsID0gZGF0YTtcclxuICAgICAgcm93RGF0YS5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ID0gKHJvd0RhdGE6IFNkR3JpZE1hdGVyaWFsUm93RGF0YSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5zZWxlY3Rpb24/LnNpbmdsZSkge1xyXG4gICAgICB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUgIT09IHJvd0RhdGEpLmZvckVhY2goZSA9PiBlLmlzU2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkT3B0aW9uLnNlbGVjdGlvbj8ub25TZWxlY3Q/Lihyb3dEYXRhLCB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUuaXNTZWxlY3RlZCkpO1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRoaXMuaXRlbXMuZXZlcnkoZSA9PiBlLmlzU2VsZWN0ZWQpO1xyXG4gICAgdGhpcy4jdXBkYXRlU2VsZWN0ZWRJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGwgPSAoKSA9PiB7XHJcbiAgICB0aGlzLml0ZW1zPy5mb3JFYWNoKGUgPT4gZS5pc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdEFsbCk7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uc2VsZWN0aW9uPy5vblNlbGVjdEFsbD8uKHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5pc1NlbGVjdGVkKSk7XHJcbiAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICAjdXBkYXRlU2VsZWN0ZWRJdGVtcyA9ICgpID0+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pc1NlbGVjdGVkKVxyXG4gICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgIGlzU2VsZWN0ZWQsXHJcbiAgICAgICAgICBpc0V4cGFuZGVkLFxyXG4gICAgICAgICAgaXNFeHBhbmRpbmcsXHJcbiAgICAgICAgICBleHBhbmREZXRhaWwsXHJcbiAgICAgICAgICAuLi5yZXN1bHRcclxuICAgICAgICB9ID0gaXRlbTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KSBhcyBUW107XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckZpbHRlciA9ICgpID0+IHtcclxuICAgIHRoaXMuZ3JpZEZpbHRlcj8ub25DbGVhckZpbHRlcigpO1xyXG4gIH1cclxuXHJcbiAgc2V0RmlsdGVyID0gKGFyZ3M6IHtcclxuICAgIGNvbHVtbkZpbHRlcjogYW55LFxyXG4gICAgZXh0ZXJuYWxGaWx0ZXI6IGFueSxcclxuICAgIGZpbHRlckRlZjogYW55XHJcbiAgfSkgPT4ge1xyXG4gICAgdGhpcy5ncmlkRmlsdGVyPy5zZXRGaWx0ZXIoYXJncyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvdXNlci9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9tb2RlbHMvZ3JpZC1jb25maWcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZEdlbmVyYXRlZENvbHVtbiB9IGZyb20gJy4uL3NlcnZpY2VzL2dlbmVyYXRlZC1jb2x1bW4vZ2VuZXJhdGVkLWNvbHVtbi5tb2RlbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkR3JpZE1hdGVyaWFsQ29uZmlnT3B0aW9uPFQgPSBhbnk+IHtcclxuICBrZXk/OiBzdHJpbmc7XHJcbiAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgc3RvcmFnZT86ICdzZXNzaW9uJyB8ICdzZXJ2ZXInO1xyXG4gIGN1c3RvbUNvbHVtbj86IGJvb2xlYW47XHJcbiAgYXJncz86IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICB9O1xyXG4gIHN5c3RlbUNvbHVtbj86IHtcclxuICAgIHBlcm1pc3Npb24/OiAnUkVBRCcgfCAnQ1JFQVRFJyB8ICdVUERBVEUnIHwgJ0RFTEVURSc7XHJcbiAgICBhcmdzPzoge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2RPcmlnaW5Db2x1bW4ge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICB3aWR0aD86IHN0cmluZztcclxuICBpbnZpc2libGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkR2VuZXJhdGVkQ29uZmlndXJhdGlvbiB7XHJcbiAgc3lzdGVtQ29sdW1uczogU2RHZW5lcmF0ZWRDb2x1bW5bXTtcclxuICBjb2x1bW5zOiBTZEdlbmVyYXRlZENvbHVtbltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkQ29sdW1uQ29uZmlndXJhdGlvbiB7XHJcbiAgb3JpZ2luOiBTZE9yaWdpbkNvbHVtbjtcclxuICB0aXRsZT86IHN0cmluZztcclxuICB3aWR0aD86IHN0cmluZztcclxuICBpbnZpc2libGU/OiBib29sZWFuO1xyXG4gIGZpeGVkPzogYm9vbGVhbjtcclxuICBpc0dlbmVyYXRlZENvbHVtbj86IGJvb2xlYW47XHJcbiAgZ2VuZXJhdGVkQ29sdW1ucz86IHN0cmluZ1tdO1xyXG4gIGh0bWxUZW1wbGF0ZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZEdyaWRDb25maWd1cmF0aW9uIHtcclxuICBjb2x1bW5zPzogU2RDb2x1bW5Db25maWd1cmF0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2RHcmlkQ29uZmlndXJhdGlvblJlc3VsdCB7XHJcbiAgY29sdW1uOiB7XHJcbiAgICBbZmllbGQ6IHN0cmluZ106IHtcclxuICAgICAgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIHdpZHRoPzogc3RyaW5nLFxyXG4gICAgfVxyXG4gIH07XHJcbiAgZml4ZWRDb2x1bW46IHtcclxuICAgIFtmaWVsZDogc3RyaW5nXToge1xyXG4gICAgICB0aXRsZT86IHN0cmluZyxcclxuICAgICAgd2lkdGg/OiBzdHJpbmcsXHJcbiAgICB9XHJcbiAgfTtcclxuICBmaXJzdENvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW107XHJcbiAgc2Vjb25kQ29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXTtcclxuICBmaXJzdEhlYWRlcnM6IHN0cmluZ1tdO1xyXG4gIHNlY29uZEhlYWRlcnM6IHN0cmluZ1tdO1xyXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIGRpc3BsYXllZEZvb3RlcnM6IHN0cmluZ1tdO1xyXG4gIG11bHRpcGxlSGVhZGVyOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkR3JpZENvbmZpZ3VyYXRpb25DYWNoZSB7XHJcbiAgZ2V0OiAoKSA9PiBQcm9taXNlPFNkR3JpZENvbmZpZ3VyYXRpb24+O1xyXG4gIHNldDogKGNvbmZpZ3VyYXRpb246IFNkR3JpZENvbmZpZ3VyYXRpb24pID0+IFNkR3JpZENvbmZpZ3VyYXRpb247XHJcbiAgcmVtb3ZlOiAoKSA9PiB2b2lkO1xyXG4gIG9ic2VydmVyOiBPYnNlcnZhYmxlPFNkR3JpZENvbmZpZ3VyYXRpb24+O1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb25maWcubW9kZWwuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvdXNlci9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9tb2RlbHMvZ3JpZC1jb25maWcubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RHcmlkTWF0ZXJpYWxDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZEdlbmVyYXRlZENvbHVtbiB9IGZyb20gJy4uL3NlcnZpY2VzL2dlbmVyYXRlZC1jb2x1bW4vZ2VuZXJhdGVkLWNvbHVtbi5tb2RlbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkR3JpZE1hdGVyaWFsQ29uZmlnT3B0aW9uPFQgPSBhbnk+IHtcclxuICBrZXk/OiBzdHJpbmc7XHJcbiAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgc3RvcmFnZT86ICdzZXNzaW9uJyB8ICdzZXJ2ZXInO1xyXG4gIGN1c3RvbUNvbHVtbj86IGJvb2xlYW47XHJcbiAgYXJncz86IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueTtcclxuICB9O1xyXG4gIHN5c3RlbUNvbHVtbj86IHtcclxuICAgIHBlcm1pc3Npb24/OiAnUkVBRCcgfCAnQ1JFQVRFJyB8ICdVUERBVEUnIHwgJ0RFTEVURSc7XHJcbiAgICBhcmdzPzoge1xyXG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2RPcmlnaW5Db2x1bW4ge1xyXG4gIGZpZWxkOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICB3aWR0aD86IHN0cmluZztcclxuICBpbnZpc2libGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkR2VuZXJhdGVkQ29uZmlndXJhdGlvbiB7XHJcbiAgc3lzdGVtQ29sdW1uczogU2RHZW5lcmF0ZWRDb2x1bW5bXTtcclxuICBjb2x1bW5zOiBTZEdlbmVyYXRlZENvbHVtbltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkQ29sdW1uQ29uZmlndXJhdGlvbiB7XHJcbiAgb3JpZ2luOiBTZE9yaWdpbkNvbHVtbjtcclxuICB0aXRsZT86IHN0cmluZztcclxuICB3aWR0aD86IHN0cmluZztcclxuICBpbnZpc2libGU/OiBib29sZWFuO1xyXG4gIGZpeGVkPzogYm9vbGVhbjtcclxuICBpc0dlbmVyYXRlZENvbHVtbj86IGJvb2xlYW47XHJcbiAgZ2VuZXJhdGVkQ29sdW1ucz86IHN0cmluZ1tdO1xyXG4gIGh0bWxUZW1wbGF0ZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZEdyaWRDb25maWd1cmF0aW9uIHtcclxuICBjb2x1bW5zPzogU2RDb2x1bW5Db25maWd1cmF0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2RHcmlkQ29uZmlndXJhdGlvblJlc3VsdCB7XHJcbiAgY29sdW1uOiB7XHJcbiAgICBbZmllbGQ6IHN0cmluZ106IHtcclxuICAgICAgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgIHdpZHRoPzogc3RyaW5nLFxyXG4gICAgfVxyXG4gIH07XHJcbiAgZml4ZWRDb2x1bW46IHtcclxuICAgIFtmaWVsZDogc3RyaW5nXToge1xyXG4gICAgICB0aXRsZT86IHN0cmluZyxcclxuICAgICAgd2lkdGg/OiBzdHJpbmcsXHJcbiAgICB9XHJcbiAgfTtcclxuICBmaXJzdENvbHVtbnM6IFNkR3JpZE1hdGVyaWFsQ29sdW1uW107XHJcbiAgc2Vjb25kQ29sdW1uczogU2RHcmlkTWF0ZXJpYWxDb2x1bW5bXTtcclxuICBmaXJzdEhlYWRlcnM6IHN0cmluZ1tdO1xyXG4gIHNlY29uZEhlYWRlcnM6IHN0cmluZ1tdO1xyXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIGRpc3BsYXllZEZvb3RlcnM6IHN0cmluZ1tdO1xyXG4gIG11bHRpcGxlSGVhZGVyOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNkR3JpZENvbmZpZ3VyYXRpb25DYWNoZSB7XHJcbiAgbG9hZDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcclxuICBnZXQ6ICgpID0+IFByb21pc2U8U2RHcmlkQ29uZmlndXJhdGlvbj47XHJcbiAgc2V0OiAoY29uZmlndXJhdGlvbjogU2RHcmlkQ29uZmlndXJhdGlvbikgPT4gU2RHcmlkQ29uZmlndXJhdGlvbjtcclxuICByZW1vdmU6ICgpID0+IHZvaWQ7XHJcbiAgb2JzZXJ2ZXI6IE9ic2VydmFibGU8U2RHcmlkQ29uZmlndXJhdGlvbj47XHJcbn1cclxuIl19