Skip to content

Instantly share code, notes, and snippets.

@navarrorc
Created May 22, 2019 16:05
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save navarrorc/967a04b7902dc8f67fb8aeb05874b77c to your computer and use it in GitHub Desktop.
/******/ (function(modules) { // webpackBootstrap
/******/ // install a JSONP callback for chunk loading
/******/ function webpackJsonpCallback(data) {
/******/ var chunkIds = data[0];
/******/ var moreModules = data[1];
/******/ var executeModules = data[2];
/******/
/******/ // add "moreModules" to the modules object,
/******/ // then flag all "chunkIds" as loaded and fire callback
/******/ var moduleId, chunkId, i = 0, resolves = [];
/******/ for(;i < chunkIds.length; i++) {
/******/ chunkId = chunkIds[i];
/******/ if(installedChunks[chunkId]) {
/******/ resolves.push(installedChunks[chunkId][0]);
/******/ }
/******/ installedChunks[chunkId] = 0;
/******/ }
/******/ for(moduleId in moreModules) {
/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ modules[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if(parentJsonpFunction) parentJsonpFunction(data);
/******/
/******/ while(resolves.length) {
/******/ resolves.shift()();
/******/ }
/******/
/******/ // add entry modules from loaded chunk to deferred list
/******/ deferredModules.push.apply(deferredModules, executeModules || []);
/******/
/******/ // run deferred modules when all chunks ready
/******/ return checkDeferredModules();
/******/ };
/******/ function checkDeferredModules() {
/******/ var result;
/******/ for(var i = 0; i < deferredModules.length; i++) {
/******/ var deferredModule = deferredModules[i];
/******/ var fulfilled = true;
/******/ for(var j = 1; j < deferredModule.length; j++) {
/******/ var depId = deferredModule[j];
/******/ if(installedChunks[depId] !== 0) fulfilled = false;
/******/ }
/******/ if(fulfilled) {
/******/ deferredModules.splice(i--, 1);
/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
/******/ }
/******/ }
/******/ return result;
/******/ }
/******/ function hotDisposeChunk(chunkId) {
/******/ delete installedChunks[chunkId];
/******/ }
/******/ var parentHotUpdateCallback = window["webpackHotUpdate"];
/******/ window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
/******/ function webpackHotUpdateCallback(chunkId, moreModules) {
/******/ hotAddUpdateChunk(chunkId, moreModules);
/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
/******/ } ;
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotDownloadUpdateChunk(chunkId) {
/******/ var script = document.createElement("script");
/******/ script.charset = "utf-8";
/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
/******/ if (null) script.crossOrigin = null;
/******/ document.head.appendChild(script);
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotDownloadManifest(requestTimeout) {
/******/ requestTimeout = requestTimeout || 10000;
/******/ return new Promise(function(resolve, reject) {
/******/ if (typeof XMLHttpRequest === "undefined") {
/******/ return reject(new Error("No browser support"));
/******/ }
/******/ try {
/******/ var request = new XMLHttpRequest();
/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
/******/ request.open("GET", requestPath, true);
/******/ request.timeout = requestTimeout;
/******/ request.send(null);
/******/ } catch (err) {
/******/ return reject(err);
/******/ }
/******/ request.onreadystatechange = function() {
/******/ if (request.readyState !== 4) return;
/******/ if (request.status === 0) {
/******/ // timeout
/******/ reject(
/******/ new Error("Manifest request to " + requestPath + " timed out.")
/******/ );
/******/ } else if (request.status === 404) {
/******/ // no update available
/******/ resolve();
/******/ } else if (request.status !== 200 && request.status !== 304) {
/******/ // other failure
/******/ reject(new Error("Manifest request to " + requestPath + " failed."));
/******/ } else {
/******/ // success
/******/ try {
/******/ var update = JSON.parse(request.responseText);
/******/ } catch (e) {
/******/ reject(e);
/******/ return;
/******/ }
/******/ resolve(update);
/******/ }
/******/ };
/******/ });
/******/ }
/******/
/******/ var hotApplyOnUpdate = true;
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentHash = "ae70a47ef3d6a7812c4a";
/******/ var hotRequestTimeout = 10000;
/******/ var hotCurrentModuleData = {};
/******/ var hotCurrentChildModule;
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentParents = [];
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentParentsTemp = [];
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotCreateRequire(moduleId) {
/******/ var me = installedModules[moduleId];
/******/ if (!me) return __webpack_require__;
/******/ var fn = function(request) {
/******/ if (me.hot.active) {
/******/ if (installedModules[request]) {
/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
/******/ installedModules[request].parents.push(moduleId);
/******/ }
/******/ } else {
/******/ hotCurrentParents = [moduleId];
/******/ hotCurrentChildModule = request;
/******/ }
/******/ if (me.children.indexOf(request) === -1) {
/******/ me.children.push(request);
/******/ }
/******/ } else {
/******/ console.warn(
/******/ "[HMR] unexpected require(" +
/******/ request +
/******/ ") from disposed module " +
/******/ moduleId
/******/ );
/******/ hotCurrentParents = [];
/******/ }
/******/ return __webpack_require__(request);
/******/ };
/******/ var ObjectFactory = function ObjectFactory(name) {
/******/ return {
/******/ configurable: true,
/******/ enumerable: true,
/******/ get: function() {
/******/ return __webpack_require__[name];
/******/ },
/******/ set: function(value) {
/******/ __webpack_require__[name] = value;
/******/ }
/******/ };
/******/ };
/******/ for (var name in __webpack_require__) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
/******/ name !== "e" &&
/******/ name !== "t"
/******/ ) {
/******/ Object.defineProperty(fn, name, ObjectFactory(name));
/******/ }
/******/ }
/******/ fn.e = function(chunkId) {
/******/ if (hotStatus === "ready") hotSetStatus("prepare");
/******/ hotChunksLoading++;
/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
/******/ finishChunkLoading();
/******/ throw err;
/******/ });
/******/
/******/ function finishChunkLoading() {
/******/ hotChunksLoading--;
/******/ if (hotStatus === "prepare") {
/******/ if (!hotWaitingFilesMap[chunkId]) {
/******/ hotEnsureUpdateChunk(chunkId);
/******/ }
/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ }
/******/ }
/******/ };
/******/ fn.t = function(value, mode) {
/******/ if (mode & 1) value = fn(value);
/******/ return __webpack_require__.t(value, mode & ~1);
/******/ };
/******/ return fn;
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotCreateModule(moduleId) {
/******/ var hot = {
/******/ // private stuff
/******/ _acceptedDependencies: {},
/******/ _declinedDependencies: {},
/******/ _selfAccepted: false,
/******/ _selfDeclined: false,
/******/ _disposeHandlers: [],
/******/ _main: hotCurrentChildModule !== moduleId,
/******/
/******/ // Module API
/******/ active: true,
/******/ accept: function(dep, callback) {
/******/ if (dep === undefined) hot._selfAccepted = true;
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ else if (typeof dep === "object")
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
/******/ else hot._acceptedDependencies[dep] = callback || function() {};
/******/ },
/******/ decline: function(dep) {
/******/ if (dep === undefined) hot._selfDeclined = true;
/******/ else if (typeof dep === "object")
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._declinedDependencies[dep[i]] = true;
/******/ else hot._declinedDependencies[dep] = true;
/******/ },
/******/ dispose: function(callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ addDisposeHandler: function(callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ removeDisposeHandler: function(callback) {
/******/ var idx = hot._disposeHandlers.indexOf(callback);
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ },
/******/
/******/ // Management API
/******/ check: hotCheck,
/******/ apply: hotApply,
/******/ status: function(l) {
/******/ if (!l) return hotStatus;
/******/ hotStatusHandlers.push(l);
/******/ },
/******/ addStatusHandler: function(l) {
/******/ hotStatusHandlers.push(l);
/******/ },
/******/ removeStatusHandler: function(l) {
/******/ var idx = hotStatusHandlers.indexOf(l);
/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
/******/ },
/******/
/******/ //inherit from previous dispose call
/******/ data: hotCurrentModuleData[moduleId]
/******/ };
/******/ hotCurrentChildModule = undefined;
/******/ return hot;
/******/ }
/******/
/******/ var hotStatusHandlers = [];
/******/ var hotStatus = "idle";
/******/
/******/ function hotSetStatus(newStatus) {
/******/ hotStatus = newStatus;
/******/ for (var i = 0; i < hotStatusHandlers.length; i++)
/******/ hotStatusHandlers[i].call(null, newStatus);
/******/ }
/******/
/******/ // while downloading
/******/ var hotWaitingFiles = 0;
/******/ var hotChunksLoading = 0;
/******/ var hotWaitingFilesMap = {};
/******/ var hotRequestedFilesMap = {};
/******/ var hotAvailableFilesMap = {};
/******/ var hotDeferred;
/******/
/******/ // The update info
/******/ var hotUpdate, hotUpdateNewHash;
/******/
/******/ function toModuleId(id) {
/******/ var isNumber = +id + "" === id;
/******/ return isNumber ? +id : id;
/******/ }
/******/
/******/ function hotCheck(apply) {
/******/ if (hotStatus !== "idle") {
/******/ throw new Error("check() is only allowed in idle status");
/******/ }
/******/ hotApplyOnUpdate = apply;
/******/ hotSetStatus("check");
/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
/******/ if (!update) {
/******/ hotSetStatus("idle");
/******/ return null;
/******/ }
/******/ hotRequestedFilesMap = {};
/******/ hotWaitingFilesMap = {};
/******/ hotAvailableFilesMap = update.c;
/******/ hotUpdateNewHash = update.h;
/******/
/******/ hotSetStatus("prepare");
/******/ var promise = new Promise(function(resolve, reject) {
/******/ hotDeferred = {
/******/ resolve: resolve,
/******/ reject: reject
/******/ };
/******/ });
/******/ hotUpdate = {};
/******/ for(var chunkId in installedChunks)
/******/ // eslint-disable-next-line no-lone-blocks
/******/ {
/******/ /*globals chunkId */
/******/ hotEnsureUpdateChunk(chunkId);
/******/ }
/******/ if (
/******/ hotStatus === "prepare" &&
/******/ hotChunksLoading === 0 &&
/******/ hotWaitingFiles === 0
/******/ ) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ return promise;
/******/ });
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotAddUpdateChunk(chunkId, moreModules) {
/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
/******/ return;
/******/ hotRequestedFilesMap[chunkId] = false;
/******/ for (var moduleId in moreModules) {
/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ hotUpdate[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ }
/******/
/******/ function hotEnsureUpdateChunk(chunkId) {
/******/ if (!hotAvailableFilesMap[chunkId]) {
/******/ hotWaitingFilesMap[chunkId] = true;
/******/ } else {
/******/ hotRequestedFilesMap[chunkId] = true;
/******/ hotWaitingFiles++;
/******/ hotDownloadUpdateChunk(chunkId);
/******/ }
/******/ }
/******/
/******/ function hotUpdateDownloaded() {
/******/ hotSetStatus("ready");
/******/ var deferred = hotDeferred;
/******/ hotDeferred = null;
/******/ if (!deferred) return;
/******/ if (hotApplyOnUpdate) {
/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
/******/ // avoid triggering uncaught exception warning in Chrome.
/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
/******/ Promise.resolve()
/******/ .then(function() {
/******/ return hotApply(hotApplyOnUpdate);
/******/ })
/******/ .then(
/******/ function(result) {
/******/ deferred.resolve(result);
/******/ },
/******/ function(err) {
/******/ deferred.reject(err);
/******/ }
/******/ );
/******/ } else {
/******/ var outdatedModules = [];
/******/ for (var id in hotUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ outdatedModules.push(toModuleId(id));
/******/ }
/******/ }
/******/ deferred.resolve(outdatedModules);
/******/ }
/******/ }
/******/
/******/ function hotApply(options) {
/******/ if (hotStatus !== "ready")
/******/ throw new Error("apply() is only allowed in ready status");
/******/ options = options || {};
/******/
/******/ var cb;
/******/ var i;
/******/ var j;
/******/ var module;
/******/ var moduleId;
/******/
/******/ function getAffectedStuff(updateModuleId) {
/******/ var outdatedModules = [updateModuleId];
/******/ var outdatedDependencies = {};
/******/
/******/ var queue = outdatedModules.slice().map(function(id) {
/******/ return {
/******/ chain: [id],
/******/ id: id
/******/ };
/******/ });
/******/ while (queue.length > 0) {
/******/ var queueItem = queue.pop();
/******/ var moduleId = queueItem.id;
/******/ var chain = queueItem.chain;
/******/ module = installedModules[moduleId];
/******/ if (!module || module.hot._selfAccepted) continue;
/******/ if (module.hot._selfDeclined) {
/******/ return {
/******/ type: "self-declined",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ if (module.hot._main) {
/******/ return {
/******/ type: "unaccepted",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ for (var i = 0; i < module.parents.length; i++) {
/******/ var parentId = module.parents[i];
/******/ var parent = installedModules[parentId];
/******/ if (!parent) continue;
/******/ if (parent.hot._declinedDependencies[moduleId]) {
/******/ return {
/******/ type: "declined",
/******/ chain: chain.concat([parentId]),
/******/ moduleId: moduleId,
/******/ parentId: parentId
/******/ };
/******/ }
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
/******/ if (!outdatedDependencies[parentId])
/******/ outdatedDependencies[parentId] = [];
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ continue;
/******/ }
/******/ delete outdatedDependencies[parentId];
/******/ outdatedModules.push(parentId);
/******/ queue.push({
/******/ chain: chain.concat([parentId]),
/******/ id: parentId
/******/ });
/******/ }
/******/ }
/******/
/******/ return {
/******/ type: "accepted",
/******/ moduleId: updateModuleId,
/******/ outdatedModules: outdatedModules,
/******/ outdatedDependencies: outdatedDependencies
/******/ };
/******/ }
/******/
/******/ function addAllToSet(a, b) {
/******/ for (var i = 0; i < b.length; i++) {
/******/ var item = b[i];
/******/ if (a.indexOf(item) === -1) a.push(item);
/******/ }
/******/ }
/******/
/******/ // at begin all updates modules are outdated
/******/ // the "outdated" status can propagate to parents if they don't accept the children
/******/ var outdatedDependencies = {};
/******/ var outdatedModules = [];
/******/ var appliedUpdate = {};
/******/
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
/******/ console.warn(
/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
/******/ );
/******/ };
/******/
/******/ for (var id in hotUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ moduleId = toModuleId(id);
/******/ /** @type {TODO} */
/******/ var result;
/******/ if (hotUpdate[id]) {
/******/ result = getAffectedStuff(moduleId);
/******/ } else {
/******/ result = {
/******/ type: "disposed",
/******/ moduleId: id
/******/ };
/******/ }
/******/ /** @type {Error|false} */
/******/ var abortError = false;
/******/ var doApply = false;
/******/ var doDispose = false;
/******/ var chainInfo = "";
/******/ if (result.chain) {
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ }
/******/ switch (result.type) {
/******/ case "self-declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of self decline: " +
/******/ result.moduleId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of declined dependency: " +
/******/ result.moduleId +
/******/ " in " +
/******/ result.parentId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "unaccepted":
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
/******/ if (!options.ignoreUnaccepted)
/******/ abortError = new Error(
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ );
/******/ break;
/******/ case "accepted":
/******/ if (options.onAccepted) options.onAccepted(result);
/******/ doApply = true;
/******/ break;
/******/ case "disposed":
/******/ if (options.onDisposed) options.onDisposed(result);
/******/ doDispose = true;
/******/ break;
/******/ default:
/******/ throw new Error("Unexception type " + result.type);
/******/ }
/******/ if (abortError) {
/******/ hotSetStatus("abort");
/******/ return Promise.reject(abortError);
/******/ }
/******/ if (doApply) {
/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
/******/ addAllToSet(outdatedModules, result.outdatedModules);
/******/ for (moduleId in result.outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(
/******/ result.outdatedDependencies,
/******/ moduleId
/******/ )
/******/ ) {
/******/ if (!outdatedDependencies[moduleId])
/******/ outdatedDependencies[moduleId] = [];
/******/ addAllToSet(
/******/ outdatedDependencies[moduleId],
/******/ result.outdatedDependencies[moduleId]
/******/ );
/******/ }
/******/ }
/******/ }
/******/ if (doDispose) {
/******/ addAllToSet(outdatedModules, [result.moduleId]);
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ }
/******/ }
/******/ }
/******/
/******/ // Store self accepted outdated modules to require them later by the module system
/******/ var outdatedSelfAcceptedModules = [];
/******/ for (i = 0; i < outdatedModules.length; i++) {
/******/ moduleId = outdatedModules[i];
/******/ if (
/******/ installedModules[moduleId] &&
/******/ installedModules[moduleId].hot._selfAccepted
/******/ )
/******/ outdatedSelfAcceptedModules.push({
/******/ module: moduleId,
/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
/******/ });
/******/ }
/******/
/******/ // Now in "dispose" phase
/******/ hotSetStatus("dispose");
/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
/******/ if (hotAvailableFilesMap[chunkId] === false) {
/******/ hotDisposeChunk(chunkId);
/******/ }
/******/ });
/******/
/******/ var idx;
/******/ var queue = outdatedModules.slice();
/******/ while (queue.length > 0) {
/******/ moduleId = queue.pop();
/******/ module = installedModules[moduleId];
/******/ if (!module) continue;
/******/
/******/ var data = {};
/******/
/******/ // Call dispose handlers
/******/ var disposeHandlers = module.hot._disposeHandlers;
/******/ for (j = 0; j < disposeHandlers.length; j++) {
/******/ cb = disposeHandlers[j];
/******/ cb(data);
/******/ }
/******/ hotCurrentModuleData[moduleId] = data;
/******/
/******/ // disable module (this disables requires from this module)
/******/ module.hot.active = false;
/******/
/******/ // remove module from cache
/******/ delete installedModules[moduleId];
/******/
/******/ // when disposing there is no need to call dispose handler
/******/ delete outdatedDependencies[moduleId];
/******/
/******/ // remove "parents" references from all children
/******/ for (j = 0; j < module.children.length; j++) {
/******/ var child = installedModules[module.children[j]];
/******/ if (!child) continue;
/******/ idx = child.parents.indexOf(moduleId);
/******/ if (idx >= 0) {
/******/ child.parents.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/
/******/ // remove outdated dependency from module children
/******/ var dependency;
/******/ var moduleOutdatedDependencies;
/******/ for (moduleId in outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ ) {
/******/ module = installedModules[moduleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ dependency = moduleOutdatedDependencies[j];
/******/ idx = module.children.indexOf(dependency);
/******/ if (idx >= 0) module.children.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Not in "apply" phase
/******/ hotSetStatus("apply");
/******/
/******/ hotCurrentHash = hotUpdateNewHash;
/******/
/******/ // insert new code
/******/ for (moduleId in appliedUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
/******/ modules[moduleId] = appliedUpdate[moduleId];
/******/ }
/******/ }
/******/
/******/ // call accept handlers
/******/ var error = null;
/******/ for (moduleId in outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ ) {
/******/ module = installedModules[moduleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ var callbacks = [];
/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
/******/ dependency = moduleOutdatedDependencies[i];
/******/ cb = module.hot._acceptedDependencies[dependency];
/******/ if (cb) {
/******/ if (callbacks.indexOf(cb) !== -1) continue;
/******/ callbacks.push(cb);
/******/ }
/******/ }
/******/ for (i = 0; i < callbacks.length; i++) {
/******/ cb = callbacks[i];
/******/ try {
/******/ cb(moduleOutdatedDependencies);
/******/ } catch (err) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-errored",
/******/ moduleId: moduleId,
/******/ dependencyId: moduleOutdatedDependencies[i],
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err;
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Load self accepted modules
/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
/******/ var item = outdatedSelfAcceptedModules[i];
/******/ moduleId = item.module;
/******/ hotCurrentParents = [moduleId];
/******/ try {
/******/ __webpack_require__(moduleId);
/******/ } catch (err) {
/******/ if (typeof item.errorHandler === "function") {
/******/ try {
/******/ item.errorHandler(err);
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-error-handler-errored",
/******/ moduleId: moduleId,
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err2;
/******/ }
/******/ if (!error) error = err;
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-errored",
/******/ moduleId: moduleId,
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err;
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // handle errors in accept handlers and self accepted module load
/******/ if (error) {
/******/ hotSetStatus("fail");
/******/ return Promise.reject(error);
/******/ }
/******/
/******/ hotSetStatus("idle");
/******/ return new Promise(function(resolve) {
/******/ resolve(outdatedModules);
/******/ });
/******/ }
/******/
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // object to store loaded and loading chunks
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
/******/ // Promise = chunk loading, 0 = chunk loaded
/******/ var installedChunks = {
/******/ "main": 0
/******/ };
/******/
/******/ var deferredModules = [];
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {},
/******/ hot: hotCreateModule(moduleId),
/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
/******/ children: []
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "https://localhost:9000/assets/";
/******/
/******/ // __webpack_hash__
/******/ __webpack_require__.h = function() { return hotCurrentHash; };
/******/
/******/ var jsonpArray = window["noconflictJsonp"] = window["noconflictJsonp"] || [];
/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
/******/ jsonpArray.push = webpackJsonpCallback;
/******/ jsonpArray = jsonpArray.slice();
/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
/******/ var parentJsonpFunction = oldJsonpFunction;
/******/
/******/
/******/ // add entry module to deferred list
/******/ deferredModules.push([0,"vendors~main"]);
/******/ // run deferred modules when ready
/******/ return checkDeferredModules();
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/webpack/hot sync ^\\.\\/log$":
/*!*************************************************!*\
!*** (webpack)/hot sync nonrecursive ^\.\/log$ ***!
\*************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var map = {
"./log": "./node_modules/webpack/hot/log.js"
};
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "./node_modules/webpack/hot sync ^\\.\\/log$";
/***/ }),
/***/ "./src/_environments/variables.js":
/*!****************************************!*\
!*** ./src/_environments/variables.js ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(process) {// see: https://itnext.io/sharing-variables-between-js-and-sass-using-webpack-sass-loader-713f51fa7fa0
// TODO: define all the avaiable environments
// DEV - "https://alamocityconsulting.sharepoint.com/sites/intranet"
// STG - "https://rushenterprises.sharepoint.com/sites/stage_rushnet"
// PROD - "https://rushenterprises.sharepoint.com"
// const isProd = process.env.NODE_ENV === "stage";
var isStage = process.env.DESTINATION_ENV === "stage";
var devURL = "https://alamocityconsulting.sharepoint.com/sites/intranet"; //using the absolute URL is by design
var stageURL = "https://rushenterprises.sharepoint.com/sites/stage-rushnet"; // const prodURL = "/";
// variables
module.exports = {
baseUrl: isStage ? stageURL : devURL,
pressCoverageWebPartId: isStage ? "9d79cce7-e84c-49d7-92bc-f5c797588244" : "33f0eaa1-2826-4141-94a6-4011d1bac15c",
stayInTheKnowWebPartId: isStage ? "5f2b5488-5469-48ec-9701-f6677958b316" : "2b2998d5-6eb6-4d94-9c71-e3af002a168e"
};
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/process/browser.js */ "./node_modules/process/browser.js")))
/***/ }),
/***/ "./src/components/DocumentCenter.js":
/*!******************************************!*\
!*** ./src/components/DocumentCenter.js ***!
\******************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
var DocumentCenter = function DocumentCenter(_ref) {
var categories = _ref.categories,
siteURL = _ref.siteURL;
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "container Canvas-slideUpIn"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
style: {
fontWeight: 400,
fontFamily: "warnock-pro-display-regular, Times New Roman, Times, serif"
}
}, "Corporate Document Center"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "row"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "brochures",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=brochures")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/brochures.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "brochures"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "corporate materials",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=corporate materials")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/corporate materials.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "corporate materials"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "frequently asked questions",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=frequently asked questions")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/frequently asked questions.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "frequently asked questions"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "it support",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=it support")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/it support.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "it support"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "newsletters",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=newsletters")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/newsletters.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "newsletters"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "presentations",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=presentations")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/presentations.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "presentations"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "travel information",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=travel information")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/travel information.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "travel information"))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
className: "document-category-link document-category-wrapper",
title: "trend books",
href: "".concat(siteURL, "/Shared%20Documents?FilterField1=DocumentCategory&FilterValue1=trend books")
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "document-category-image",
src: "/sites/intranet/SiteAssets/Images_DocumentsCenter/trend books.jpg",
alt: "document types"
}), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "document-category-label"
}, "trend books")))));
};
DocumentCenter.propTypes = {
categories: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array.isRequired,
siteURL: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired
};
/* harmony default export */ __webpack_exports__["default"] = (DocumentCenter);
/***/ }),
/***/ "./src/components/Footer.js":
/*!**********************************!*\
!*** ./src/components/Footer.js ***!
\**********************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
var Footer = function Footer(_ref) {
var baseUrl = _ref.baseUrl;
var spanStyles = {
fontSize: "11px"
};
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
style: {
backgroundColor: "black",
color: "white"
}
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "container"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "row"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col-sm-12 col-md"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "d-none d-md-block",
id: "coin-wrap"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
style: {
maxWidth: "90%",
marginTop: 20
},
src: "".concat(baseUrl, "/Style%20Library/images/rush-coin-footer.png"),
alt: "Rush Coin"
}))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col-sm-12 col-md"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
style: {
font: "23px/29px warnock-pro-display-regular, Times New Roman, Times, serif",
color: "#eeb111"
}
}, "About"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("nav", {
className: "row footer-links"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col-12 col-sm"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "#"
}, "Driving Principles"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "#"
}, "Our Mission"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "#"
}, "Our History")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col-12 col-sm"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "#"
}, "Rush Coin"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "#"
}, "Corporate Organization"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "#"
}, "Policies and Procedures"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
href: "#"
}, "Employee Handbook")))), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "col-sm-12 col-md"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {
style: {
font: "23px/29px warnock-pro-display-regular, Times New Roman, Times, serif",
color: "#eeb111"
}
}, "Information"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
className: "footer-information"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", null, "IT Service Desk"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("br", null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", null, "830-302-5301\xA0", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
style: spanStyles
}, "(from company extensions)")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("br", null), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("strong", null, "888-758-4357\xA0", react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
style: spanStyles
}, "(from external lines)")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("br", null))))));
};
Footer.propTypes = {
baseUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired
};
/* harmony default export */ __webpack_exports__["default"] = (Footer);
/***/ }),
/***/ "./src/components/PressCoverage.js":
/*!*****************************************!*\
!*** ./src/components/PressCoverage.js ***!
\*****************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
var PressCoverage = function PressCoverage() {
console.log("+Inside the PressCoverage component.");
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
id: "press-coverage",
className: "Canvas-slideUpIn"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "custom-heading",
style: {
display: "block",
fontFamily: "warnock-pro-display-regular, Times New Roman, Times, serif"
}
}, "Press Coverage"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "news-wrapper"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
className: "news-link"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "title-wrap"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
target: "_blank",
rel: "noopener noreferrer",
href: "https://www.ccjdigital.com/california-high-school-program-offers-blueprint-to-combat-technician-shortage",
title: "California high school program offers blueprint to combat technician shortage"
}, "California high school program offers blueprint to combat technician shortage")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "new-tag"
}, "New"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "from"
}, "Commercial Carrier Journal")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
className: "news-link"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "title-wrap"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
target: "_blank",
rel: "noopener noreferrer",
href: "https://www.truckinginfo.com/327841/cummins-x12-wins-truck-writers-technical-achievement-award",
title: "Cummins X12 Wins Truck Writers' Technical Achievement Award"
}, "Cummins X12 Wins Truck Writers' Technical Achievement Award")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "new-tag"
}, "New"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "from"
}, "TruckingInfo.com")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
className: "news-link"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "title-wrap"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
target: "_blank",
rel: "noopener noreferrer",
href: "http://www.landlinemag.com/Story.aspx?StoryID=73940#.XJulyuRYZaQ",
title: "Cummins' X12 diesel engine wins tech achievement honor"
}, "Cummins' X12 diesel engine wins tech achievement honor")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "new-tag"
}, "New"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "from"
}, "Land Line Magazine")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
className: "news-link"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "title-wrap"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
target: "_blank",
rel: "noopener noreferrer",
href: "https://www.trucknews.com/transportation/trucking-journalists-present-cummins-x12-with-tech-award/1003090496/",
title: "Trucking journalists present Cummins X12 with tech award "
}, "Trucking journalists present Cummins X12 with tech award")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "new-tag"
}, "New"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "from"
}, "Truck News")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", {
className: "news-link"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "title-wrap"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("a", {
target: "_blank",
rel: "noopener noreferrer",
href: "https://www.truckpartsandservice.com/short-on-technicians-big-on-opportunity/",
title: "Trucking\u2019s technician shortage, Part 1: Short on technicians, big on opportunity"
}, "Trucking's technician shortage, Part 1: Short on technicians, big on opportunity")), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "new-tag"
}, "New"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "from"
}, "Truck Parts & Service"))));
};
/* harmony default export */ __webpack_exports__["default"] = (PressCoverage);
/***/ }),
/***/ "./src/components/StayInTheKnow.js":
/*!*****************************************!*\
!*** ./src/components/StayInTheKnow.js ***!
\*****************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
var StayInTheKnow = function StayInTheKnow(_ref) {
var baseUrl = _ref.baseUrl;
return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "Canvas-slideUpIn"
}, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("span", {
className: "custom-heading",
style: {
display: "block",
fontFamily: "warnock-pro-display-regular, Times New Roman, Times, serif"
}
}, "Stay in the Know"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
className: "stayInTheKnow-image",
src: "".concat(baseUrl, "/Style%20Library/images/StayInTheKnow_Teladoc.jpg"),
alt: "Stay in the Know"
})));
};
StayInTheKnow.propTypes = {
baseUrl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired
};
/* harmony default export */ __webpack_exports__["default"] = (StayInTheKnow);
/***/ }),
/***/ "./src/components/StockTicker.js":
/*!***************************************!*\
!*** ./src/components/StockTicker.js ***!
\***************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! regenerator-runtime/runtime */ "./node_modules/regenerator-runtime/runtime.js");
/* harmony import */ var regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(regenerator_runtime_runtime__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es6_promise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es6.promise */ "./node_modules/core-js/modules/es6.promise.js");
/* harmony import */ var core_js_modules_es6_promise__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_promise__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es6.object.to-string */ "./node_modules/core-js/modules/es6.object.to-string.js");
/* harmony import */ var core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_to_string__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es7.symbol.async-iterator */ "./node_modules/core-js/modules/es7.symbol.async-iterator.js");
/* harmony import */ var core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_symbol_async_iterator__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es6.symbol */ "./node_modules/core-js/modules/es6.symbol.js");
/* harmony import */ var core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_symbol__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var core_js_modules_es6_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es6.object.set-prototype-of */ "./node_modules/core-js/modules/es6.object.set-prototype-of.js");
/* harmony import */ var core_js_modules_es6_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_object_set_prototype_of__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function info(m) {
console.log("%c".concat(m), "background: peru; color:white;");
}
function error(m) {
console.log("%c".concat(m), "background: darkred; color:white;");
}
function getStocks() {
return _getStocks.apply(this, arguments);
}
function _getStocks() {
_getStocks = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee() {
var response, stocks;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return fetch("https://rushnet-api.azurewebsites.net/api/stocks", {
headers: {
ApplicationIdentity: "RushNetIntranet"
}
});
case 2:
response = _context.sent;
_context.next = 5;
return response.json();
case 5:
stocks = _context.sent;
return _context.abrupt("return", stocks);
case 7:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _getStocks.apply(this, arguments);
}
var StockTicker =
/*#__PURE__*/
function (_Component) {
_inherits(StockTicker, _Component);
function StockTicker(props) {
var _this;
_classCallCheck(this, StockTicker);
_this = _possibleConstructorReturn(this, _getPrototypeOf(StockTicker).call(this, props));
_this.state = {
stockA: null,
stockB: null
}; // setting initial state
return _this;
}
_createClass(StockTicker, [{
key: "componentDidMount",
value: function componentDidMount() {
var _this2 = this;
getStocks().then(function (stocks) {
_this2.setState({
stockA: stocks[0],
stockB: stocks[1]
});
});
}
}, {
key: "render",
value: function render() {
// info(JSON.stringify(this.state, null, 2));
var stockA = this.state.stockA;
var stockB = this.state.stockB;
if (!stockA || !stockB) {
return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("div", {
style: {
height: 19
},
className: "stockticker-container"
});
}
return react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("div", {
className: "stockticker-container"
}, react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("span", null, react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("strong", null, "RUSHA"), " $", stockA.lastPrice, " ", stockA.change > 0 ? "+" : "", stockA.change, " (", stockA.percentage > 0 ? "+" : "", stockA.percentage, "%)"), react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("span", null, react__WEBPACK_IMPORTED_MODULE_6___default.a.createElement("strong", null, "RUSHB"), " $", stockB.lastPrice, " ", stockB.change > 0 ? "+" : "", stockB.change, " (", stockB.percentage > 0 ? "+" : "", stockB.percentage, "%)"));
}
}]);
return StockTicker;
}(react__WEBPACK_IMPORTED_MODULE_6__["Component"]);
/* harmony default export */ __webpack_exports__["default"] = (StockTicker); // const StockTicker = () => {
// console.log(
// "%cStockTicker Component Loaded!",
// "background:orange; color:white"
// );
// // getStocks();
// getStocks().then(data => {
// // write(JSON.stringify(data, null, 4));
// return data;
// });
// // return (
// // <div className="stockticker-container">
// // <span>
// // <strong>RUSHA</strong> 38.67 -0.27 (-0.69%)
// // </span>
// // <span>
// // <strong>RUSHB</strong> 40.11 +0.26 (0.65%)
// // </span>
// // </div>
// // );
// return null;
// };
// export default StockTicker;
/***/ }),
/***/ "./src/main.js":
/*!*********************!*\
!*** ./src/main.js ***!
\*********************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es7.array.includes */ "./node_modules/core-js/modules/es7.array.includes.js");
/* harmony import */ var core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es7_array_includes__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es6.string.includes */ "./node_modules/core-js/modules/es6.string.includes.js");
/* harmony import */ var core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es6_string_includes__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./main.scss */ "./src/main.scss");
/* harmony import */ var _main_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_main_scss__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var _environments_variables__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_environments/variables */ "./src/_environments/variables.js");
/* harmony import */ var _environments_variables__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_environments_variables__WEBPACK_IMPORTED_MODULE_3__);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js");
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_5__);
/* harmony import */ var _components_StockTicker__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components/StockTicker */ "./src/components/StockTicker.js");
/* harmony import */ var _components_PressCoverage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./components/PressCoverage */ "./src/components/PressCoverage.js");
/* harmony import */ var _components_StayInTheKnow__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/StayInTheKnow */ "./src/components/StayInTheKnow.js");
/* harmony import */ var _components_DocumentCenter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components/DocumentCenter */ "./src/components/DocumentCenter.js");
/* harmony import */ var _components_Footer__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/Footer */ "./src/components/Footer.js");
/* harmony import */ var _pnp_sp_taxonomy__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @pnp/sp-taxonomy */ "./node_modules/@pnp/sp-taxonomy/dist/sp-taxonomy.es5.js");
// Home
// Homepage import GetToKnow from "./components/GetToKnow"; // Home
// Footer import Footer from "./components/Footer"; // Home
// import { sp } from "@pnp/sp";
function q(query) {
return document.querySelector(query);
}
function infoMessage(m) {
console.log("%c" + m, "background: peru; color: white;");
}
window.applyBranding = function applyBranding() {
window.q = q; // expose to be able to use in the browser's console
var p = window.pageContext; // shorthand variable to be referenced below
window.p = p;
if (true) {
var m = "\uD83D\uDEE0\uFE0FDevelopment Mode\uD83D\uDEE0\uFE0F";
console.log("%c" + m, "background: #eeb111; color: black;"); // console.log(`+Environment Variables: ${JSON.stringify(vars, null, 2)}`);
}
/***
* Searchbox
*/
var searchBox;
var searchBoxInterval = window.setInterval(function () {
searchBox = q("#O365_SearchBoxContainer form input");
if (searchBox) {
searchBox.placeholder = "Find News, Pages and Documents";
searchBox.style.display = "block";
clearInterval(searchBoxInterval);
}
infoMessage("Inside searchBoxInterval");
}, 500);
/***REMOVE after testing*/
// import { Web } from "@pnp/sp";
// let w = new Web(`${location.origin}/sites/intranet`);
// get all the items from a list
// w.lists
// .getByTitle("options")
// .items.get()
// .then(items => {
// // console.log(items);
// console.log(JSON.stringify(items.map(item => item.value), null, 4));
// });
/*******/
/***
* Global components
*/
var topPlaceholder = q("div[data-sp-placeholder='Top']"); // console.log(`topPlaceholder: ${topPlaceholder}`);
if (topPlaceholder) {
react_dom__WEBPACK_IMPORTED_MODULE_5___default.a.render(react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_components_StockTicker__WEBPACK_IMPORTED_MODULE_6__["default"], null), topPlaceholder);
}
/***
* Applies to "Home" page
* */
var isIntranetHome = p.site.absoluteUrl.toLowerCase() === _environments_variables__WEBPACK_IMPORTED_MODULE_3___default.a.baseUrl.toLowerCase();
var homePagePath = p.site.serverRequestPath.toLowerCase();
if (isIntranetHome && homePagePath.includes("home.aspx")) {
var intervalHomeComponents = window.setInterval(function () {
// ReactJS Components
var rootElementPressCoverage = q("div[data-sp-a11y-id=\"ControlZone_".concat(_environments_variables__WEBPACK_IMPORTED_MODULE_3___default.a.pressCoverageWebPartId, "\"]")).children[0];
var rootElementStayInTheKnow = q("div[data-sp-a11y-id=\"ControlZone_".concat(_environments_variables__WEBPACK_IMPORTED_MODULE_3___default.a.stayInTheKnowWebPartId, "\"]")).children[0];
if (rootElementPressCoverage && rootElementStayInTheKnow) {
// Mounting components
console.log("+About to mount <PressCoverage/ >"); // console.log(`+rootElementPressCoverage ${rootElementPressCoverage}`);
// console.log(`${PressCoverage}`);
react_dom__WEBPACK_IMPORTED_MODULE_5___default.a.render(react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_components_PressCoverage__WEBPACK_IMPORTED_MODULE_7__["default"], null), rootElementPressCoverage);
react_dom__WEBPACK_IMPORTED_MODULE_5___default.a.render(react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_components_StayInTheKnow__WEBPACK_IMPORTED_MODULE_8__["default"], {
baseUrl: _environments_variables__WEBPACK_IMPORTED_MODULE_3___default.a.baseUrl
}), rootElementStayInTheKnow); // console.log("+About to clearInterval(intervalHomeComponents)");
clearInterval(intervalHomeComponents);
} // console.log("+Inside intervalHomeComponents");
}, 300); // It seems like this interval is required for when using OOTB webparts as the elements to mount
// var intervalEventsHeading = window.setInterval(function() {
// Events Web Part 'See all' link
var seeAllEventsLink = q('div[data-sp-feature-tag^="EventsWebPart"] a'); // TODO: Make the StartDate & EndDate dynamic using moment.js and the current date
if (seeAllEventsLink) {
seeAllEventsLink.href = seeAllEventsLink.href + "&Category=&StartDate=2019-03-13&EndDate=2019-12-31"; // clearInterval(intervalEventsHeading);
} // }, 300);
}
/***
* Out-of-the-box "Event" page
*/
var eventPagePath = p.site.serverRequestPath.toLowerCase();
if (eventPagePath.includes("event.aspx")) {
var _seeAllEventsLink = q('section[class^="seeAllEvents_"] a'); // TODO: Make the StartDate & EndDate dynamic using moment.js and the current date
if (_seeAllEventsLink) {
_seeAllEventsLink.href = _seeAllEventsLink.href + "&Category=&StartDate=2019-03-13&EndDate=2019-12-31";
}
}
/***
* "Document Center" page
*/
var documentsCenterPagePath = p.site.serverRequestPath.toLowerCase();
if (documentsCenterPagePath.includes("documentcenter.aspx")) {
// console.log("+ DocumentCenter.aspx page!");
// TODO: Get information from "Page details"
var taxonomy = new _pnp_sp_taxonomy__WEBPACK_IMPORTED_MODULE_11__["Session"](p.legacyPageContext.webAbsoluteUrl);
var store = taxonomy.termStores.getByName("Taxonomy_RE+f/U7xrLvVxljyYWTmXg==");
store.getTermSetById("e7dfa49d-5627-475d-8342-83df42c04dce") // .terms.select("Id", "Name", "PathOfTerm")
.terms.select().get().then(function (data) {
var department = "Corporate";
var categories = data.filter(function (term) {
return term.PathOfTerm.includes("".concat(department, ";Categories;"));
}); // console.log(JSON.stringify(categories[0], null, 4));
var siteRelativeUrl = p.site.serverRelativeUrl;
react_dom__WEBPACK_IMPORTED_MODULE_5___default.a.render(react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_components_DocumentCenter__WEBPACK_IMPORTED_MODULE_9__["default"], {
categories: categories,
siteURL: siteRelativeUrl
}), q("#spPageCanvasContent .CanvasComponent"));
});
}
/***
* TODO: apply this to all Audio Articles types
* Hide audio player's additional controls
* */
// if (
// location.pathname === "/sites/intranet/SitePages/Rusty-Q3-2018-Message.aspx"
// ) {
// var intervalIframe = window.setInterval(function() {
// //document.querySelector("iframe[allowfullscreen]").contentWindow.document.getElementsByClassName('mediaPlayerAdditionalControls')[0].setAttribute("style", "display:none");
// var iframe = q("iframe[allowfullscreen]");
// // console.log(iframe);
// if (iframe) {
// let mediaControls = iframe.contentWindow.document.getElementsByClassName(
// "mediaPlayerAdditionalControls"
// );
// if (mediaControls.length) {
// mediaControls[0].parentElement.insertAdjacentHTML(
// "afterbegin",
// "<style scoped>ul.mediaPlayerAdditionalControls{ display:none; }</style>"
// );
// clearInterval(intervalIframe);
// }
// }
// }, 1000);
// }
/***
* Footer
*/
var docsPage = p.legacyPageContext.serverRequestPath.toLowerCase().includes("shared documents");
var eventsPage = p.legacyPageContext.serverRequestPath.toLowerCase().includes("events.aspx") || p.legacyPageContext.serverRequestPath.toLowerCase().includes("event.aspx");
if (!docsPage && !eventsPage) {
// do not execute if viewing the Document Library or Events page
// var intervalFooter = window.setInterval(function() {
// console.log("+Inside footer interval");
var customFooterArea = q("#custom-footer-area");
if (!customFooterArea) {
var canvasWrapperElement = q('div[class^="canvasWrapper_"]');
if (canvasWrapperElement) {
canvasWrapperElement.insertAdjacentHTML("afterend", '<div id="custom-footer-area"></div>'); // Mount footer component
react_dom__WEBPACK_IMPORTED_MODULE_5___default.a.render(react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_components_Footer__WEBPACK_IMPORTED_MODULE_10__["default"], {
baseUrl: _environments_variables__WEBPACK_IMPORTED_MODULE_3___default.a.baseUrl
}), document.getElementById("custom-footer-area")); // clearInterval(intervalFooter);
}
} else {
// This is necessary so that HMR is able to render the changes on hot updates during development
// Mount footer component
react_dom__WEBPACK_IMPORTED_MODULE_5___default.a.render(react__WEBPACK_IMPORTED_MODULE_4___default.a.createElement(_components_Footer__WEBPACK_IMPORTED_MODULE_10__["default"], {
baseUrl: _environments_variables__WEBPACK_IMPORTED_MODULE_3___default.a.baseUrl
}), document.getElementById("custom-footer-area")); // clearInterval(intervalFooter);
} // }, 300);
}
}; // On initial page load execute the global function
window.applyBranding(); // Enables Hot Module Reloading (HMR) during Development
if (true) {
module.hot.accept();
}
/***/ }),
/***/ "./src/main.scss":
/*!***********************!*\
!*** ./src/main.scss ***!
\***********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// extracted by mini-css-extract-plugin
if(true) {
// 1558535029645
var cssReload = __webpack_require__(/*! ../node_modules/css-hot-loader/hotModuleReplacement.js */ "./node_modules/css-hot-loader/hotModuleReplacement.js")(module.i, {"fileMap":"{fileName}"});
module.hot.dispose(cssReload);
module.hot.accept(undefined, cssReload);;
}
/***/ }),
/***/ 0:
/*!**********************************************************************************************************!*\
!*** multi (webpack)-dev-server/client?https://localhost:9000 (webpack)/hot/dev-server.js ./src/main.js ***!
\**********************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(/*! C:\Users\navarroaburr\source\repos\spo-intranet-enhancements\node_modules\webpack-dev-server\client\index.js?https://localhost:9000 */"./node_modules/webpack-dev-server/client/index.js?https://localhost:9000");
__webpack_require__(/*! C:\Users\navarroaburr\source\repos\spo-intranet-enhancements\node_modules\webpack\hot\dev-server.js */"./node_modules/webpack/hot/dev-server.js");
module.exports = __webpack_require__(/*! ./src/main.js */"./src/main.js");
/***/ })
/******/ });
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9ob3Qgc3luYyBub25yZWN1cnNpdmUgXlxcLlxcL2xvZyQiLCJ3ZWJwYWNrOi8vLy4vc3JjL19lbnZpcm9ubWVudHMvdmFyaWFibGVzLmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0RvY3VtZW50Q2VudGVyLmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL0Zvb3Rlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9QcmVzc0NvdmVyYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL1N0YXlJblRoZUtub3cuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvU3RvY2tUaWNrZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21haW4uc2Nzcz9iMjAzIl0sIm5hbWVzIjpbImlzU3RhZ2UiLCJwcm9jZXNzIiwiZW52IiwiREVTVElOQVRJT05fRU5WIiwiZGV2VVJMIiwic3RhZ2VVUkwiLCJtb2R1bGUiLCJleHBvcnRzIiwiYmFzZVVybCIsInByZXNzQ292ZXJhZ2VXZWJQYXJ0SWQiLCJzdGF5SW5UaGVLbm93V2ViUGFydElkIiwiRG9jdW1lbnRDZW50ZXIiLCJjYXRlZ29yaWVzIiwic2l0ZVVSTCIsImZvbnRXZWlnaHQiLCJmb250RmFtaWx5IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYXJyYXkiLCJpc1JlcXVpcmVkIiwic3RyaW5nIiwiRm9vdGVyIiwic3BhblN0eWxlcyIsImZvbnRTaXplIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJtYXhXaWR0aCIsIm1hcmdpblRvcCIsImZvbnQiLCJQcmVzc0NvdmVyYWdlIiwiY29uc29sZSIsImxvZyIsImRpc3BsYXkiLCJTdGF5SW5UaGVLbm93IiwiaW5mbyIsIm0iLCJlcnJvciIsImdldFN0b2NrcyIsImZldGNoIiwiaGVhZGVycyIsIkFwcGxpY2F0aW9uSWRlbnRpdHkiLCJyZXNwb25zZSIsImpzb24iLCJzdG9ja3MiLCJTdG9ja1RpY2tlciIsInByb3BzIiwic3RhdGUiLCJzdG9ja0EiLCJzdG9ja0IiLCJ0aGVuIiwic2V0U3RhdGUiLCJoZWlnaHQiLCJsYXN0UHJpY2UiLCJjaGFuZ2UiLCJwZXJjZW50YWdlIiwiQ29tcG9uZW50IiwicSIsInF1ZXJ5IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiaW5mb01lc3NhZ2UiLCJ3aW5kb3ciLCJhcHBseUJyYW5kaW5nIiwicCIsInBhZ2VDb250ZXh0Iiwic2VhcmNoQm94Iiwic2VhcmNoQm94SW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsInBsYWNlaG9sZGVyIiwic3R5bGUiLCJjbGVhckludGVydmFsIiwidG9wUGxhY2Vob2xkZXIiLCJSZWFjdERPTSIsInJlbmRlciIsImlzSW50cmFuZXRIb21lIiwic2l0ZSIsImFic29sdXRlVXJsIiwidG9Mb3dlckNhc2UiLCJ2YXJzIiwiaG9tZVBhZ2VQYXRoIiwic2VydmVyUmVxdWVzdFBhdGgiLCJpbmNsdWRlcyIsImludGVydmFsSG9tZUNvbXBvbmVudHMiLCJyb290RWxlbWVudFByZXNzQ292ZXJhZ2UiLCJjaGlsZHJlbiIsInJvb3RFbGVtZW50U3RheUluVGhlS25vdyIsInNlZUFsbEV2ZW50c0xpbmsiLCJocmVmIiwiZXZlbnRQYWdlUGF0aCIsImRvY3VtZW50c0NlbnRlclBhZ2VQYXRoIiwidGF4b25vbXkiLCJTZXNzaW9uIiwibGVnYWN5UGFnZUNvbnRleHQiLCJ3ZWJBYnNvbHV0ZVVybCIsInN0b3JlIiwidGVybVN0b3JlcyIsImdldEJ5TmFtZSIsImdldFRlcm1TZXRCeUlkIiwidGVybXMiLCJzZWxlY3QiLCJnZXQiLCJkYXRhIiwiZGVwYXJ0bWVudCIsImZpbHRlciIsInRlcm0iLCJQYXRoT2ZUZXJtIiwic2l0ZVJlbGF0aXZlVXJsIiwic2VydmVyUmVsYXRpdmVVcmwiLCJkb2NzUGFnZSIsImV2ZW50c1BhZ2UiLCJjdXN0b21Gb290ZXJBcmVhIiwiY2FudmFzV3JhcHBlckVsZW1lbnQiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJnZXRFbGVtZW50QnlJZCIsImhvdCIsImFjY2VwdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQVEsb0JBQW9CO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQWlCLDRCQUE0QjtBQUM3QztBQUNBO0FBQ0EsMEJBQWtCLDJCQUEyQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBTTtBQUNOO0FBQ0E7QUFDQSxjQUFNO0FBQ047QUFDQTtBQUNBLGNBQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxlQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBNkI7QUFDN0IscUNBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUFxQixnQkFBZ0I7QUFDckM7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw2QkFBcUIsZ0JBQWdCO0FBQ3JDO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGFBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsYUFBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQWtCLDhCQUE4QjtBQUNoRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsZUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBb0IsMkJBQTJCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBZ0IsS0FBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxjQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQWMsNEJBQTRCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHVCQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHVCQUFlLDRCQUE0QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQWlCLHVDQUF1QztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FB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QUN1RCxjQUFULENBQXdCLG9CQUF4QixDQUZGLEVBUHdCLENBV3hCO0FBQ0Q7QUFDRixLQWZELE1BZU87QUFDTDtBQUNBO0FBQ0F6QyxzREFBUSxDQUFDQyxNQUFULENBQ0UsMkRBQUMsMkRBQUQ7QUFBUSxlQUFPLEVBQUVLLDhEQUFJLENBQUN0RTtBQUF0QixRQURGLEVBRUVrRCxRQUFRLENBQUN1RCxjQUFULENBQXdCLG9CQUF4QixDQUZGLEVBSEssQ0FPTDtBQUNELEtBNUIyQixDQTZCNUI7O0FBQ0Q7QUFDRixDQXRORCxDLENBd05BOzs7QUFDQXBELE1BQU0sQ0FBQ0MsYUFBUCxHLENBRUE7O0FBQ0EsSUFBSXhELElBQUosRUFBZ0I7QUFDZEEsUUFBTSxDQUFDNEcsR0FBUCxDQUFXQyxNQUFYO0FBQ0QsQzs7Ozs7Ozs7Ozs7QUNwUEQ7QUFDQSxPQUFPLElBQVU7QUFDakI7QUFDQSxzQkFBc0IsbUJBQU8sQ0FBQyxxSEFBeUQsRUFBRSxRQUFTLEdBQUcsWUFBWSxTQUFTLEVBQUU7QUFDNUg7QUFDQTtBQUNBIiwiZmlsZSI6Im1haW4tYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gaW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBsb2FkaW5nXG4gXHRmdW5jdGlvbiB3ZWJwYWNrSnNvbnBDYWxsYmFjayhkYXRhKSB7XG4gXHRcdHZhciBjaHVua0lkcyA9IGRhdGFbMF07XG4gXHRcdHZhciBtb3JlTW9kdWxlcyA9IGRhdGFbMV07XG4gXHRcdHZhciBleGVjdXRlTW9kdWxlcyA9IGRhdGFbMl07XG5cbiBcdFx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG4gXHRcdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuIFx0XHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdO1xuIFx0XHRmb3IoO2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdGNodW5rSWQgPSBjaHVua0lkc1tpXTtcbiBcdFx0XHRpZihpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbiBcdFx0XHRcdHJlc29sdmVzLnB1c2goaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKTtcbiBcdFx0XHR9XG4gXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gMDtcbiBcdFx0fVxuIFx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGlmKHBhcmVudEpzb25wRnVuY3Rpb24pIHBhcmVudEpzb25wRnVuY3Rpb24oZGF0YSk7XG5cbiBcdFx0d2hpbGUocmVzb2x2ZXMubGVuZ3RoKSB7XG4gXHRcdFx0cmVzb2x2ZXMuc2hpZnQoKSgpO1xuIFx0XHR9XG5cbiBcdFx0Ly8gYWRkIGVudHJ5IG1vZHVsZXMgZnJvbSBsb2FkZWQgY2h1bmsgdG8gZGVmZXJyZWQgbGlzdFxuIFx0XHRkZWZlcnJlZE1vZHVsZXMucHVzaC5hcHBseShkZWZlcnJlZE1vZHVsZXMsIGV4ZWN1dGVNb2R1bGVzIHx8IFtdKTtcblxuIFx0XHQvLyBydW4gZGVmZXJyZWQgbW9kdWxlcyB3aGVuIGFsbCBjaHVua3MgcmVhZHlcbiBcdFx0cmV0dXJuIGNoZWNrRGVmZXJyZWRNb2R1bGVzKCk7XG4gXHR9O1xuIFx0ZnVuY3Rpb24gY2hlY2tEZWZlcnJlZE1vZHVsZXMoKSB7XG4gXHRcdHZhciByZXN1bHQ7XG4gXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHR2YXIgZGVmZXJyZWRNb2R1bGUgPSBkZWZlcnJlZE1vZHVsZXNbaV07XG4gXHRcdFx0dmFyIGZ1bGZpbGxlZCA9IHRydWU7XG4gXHRcdFx0Zm9yKHZhciBqID0gMTsgaiA8IGRlZmVycmVkTW9kdWxlLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHR2YXIgZGVwSWQgPSBkZWZlcnJlZE1vZHVsZVtqXTtcbiBcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rc1tkZXBJZF0gIT09IDApIGZ1bGZpbGxlZCA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcdFx0XHRpZihmdWxmaWxsZWQpIHtcbiBcdFx0XHRcdGRlZmVycmVkTW9kdWxlcy5zcGxpY2UoaS0tLCAxKTtcbiBcdFx0XHRcdHJlc3VsdCA9IF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gZGVmZXJyZWRNb2R1bGVbMF0pO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRyZXR1cm4gcmVzdWx0O1xuIFx0fVxuIFx0ZnVuY3Rpb24gaG90RGlzcG9zZUNodW5rKGNodW5rSWQpIHtcbiBcdFx0ZGVsZXRlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbiBcdH1cbiBcdHZhciBwYXJlbnRIb3RVcGRhdGVDYWxsYmFjayA9IHdpbmRvd1tcIndlYnBhY2tIb3RVcGRhdGVcIl07XG4gXHR3aW5kb3dbXCJ3ZWJwYWNrSG90VXBkYXRlXCJdID0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiB3ZWJwYWNrSG90VXBkYXRlQ2FsbGJhY2soY2h1bmtJZCwgbW9yZU1vZHVsZXMpIHtcbiBcdFx0aG90QWRkVXBkYXRlQ2h1bmsoY2h1bmtJZCwgbW9yZU1vZHVsZXMpO1xuIFx0XHRpZiAocGFyZW50SG90VXBkYXRlQ2FsbGJhY2spIHBhcmVudEhvdFVwZGF0ZUNhbGxiYWNrKGNodW5rSWQsIG1vcmVNb2R1bGVzKTtcbiBcdH0gO1xuXG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIGhvdERvd25sb2FkVXBkYXRlQ2h1bmsoY2h1bmtJZCkge1xuIFx0XHR2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiBcdFx0c2NyaXB0LmNoYXJzZXQgPSBcInV0Zi04XCI7XG4gXHRcdHNjcmlwdC5zcmMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLnAgKyBcIlwiICsgY2h1bmtJZCArIFwiLlwiICsgaG90Q3VycmVudEhhc2ggKyBcIi5ob3QtdXBkYXRlLmpzXCI7XG4gXHRcdGlmIChudWxsKSBzY3JpcHQuY3Jvc3NPcmlnaW4gPSBudWxsO1xuIFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRNYW5pZmVzdChyZXF1ZXN0VGltZW91dCkge1xuIFx0XHRyZXF1ZXN0VGltZW91dCA9IHJlcXVlc3RUaW1lb3V0IHx8IDEwMDAwO1xuIFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gXHRcdFx0aWYgKHR5cGVvZiBYTUxIdHRwUmVxdWVzdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuIFx0XHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJObyBicm93c2VyIHN1cHBvcnRcIikpO1xuIFx0XHRcdH1cbiBcdFx0XHR0cnkge1xuIFx0XHRcdFx0dmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiBcdFx0XHRcdHZhciByZXF1ZXN0UGF0aCA9IF9fd2VicGFja19yZXF1aXJlX18ucCArIFwiXCIgKyBob3RDdXJyZW50SGFzaCArIFwiLmhvdC11cGRhdGUuanNvblwiO1xuIFx0XHRcdFx0cmVxdWVzdC5vcGVuKFwiR0VUXCIsIHJlcXVlc3RQYXRoLCB0cnVlKTtcbiBcdFx0XHRcdHJlcXVlc3QudGltZW91dCA9IHJlcXVlc3RUaW1lb3V0O1xuIFx0XHRcdFx0cmVxdWVzdC5zZW5kKG51bGwpO1xuIFx0XHRcdH0gY2F0Y2ggKGVycikge1xuIFx0XHRcdFx0cmV0dXJuIHJlamVjdChlcnIpO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0aWYgKHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkgcmV0dXJuO1xuIFx0XHRcdFx0aWYgKHJlcXVlc3Quc3RhdHVzID09PSAwKSB7XG4gXHRcdFx0XHRcdC8vIHRpbWVvdXRcbiBcdFx0XHRcdFx0cmVqZWN0KFxuIFx0XHRcdFx0XHRcdG5ldyBFcnJvcihcIk1hbmlmZXN0IHJlcXVlc3QgdG8gXCIgKyByZXF1ZXN0UGF0aCArIFwiIHRpbWVkIG91dC5cIilcbiBcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdH0gZWxzZSBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDQwNCkge1xuIFx0XHRcdFx0XHQvLyBubyB1cGRhdGUgYXZhaWxhYmxlXG4gXHRcdFx0XHRcdHJlc29sdmUoKTtcbiBcdFx0XHRcdH0gZWxzZSBpZiAocmVxdWVzdC5zdGF0dXMgIT09IDIwMCAmJiByZXF1ZXN0LnN0YXR1cyAhPT0gMzA0KSB7XG4gXHRcdFx0XHRcdC8vIG90aGVyIGZhaWx1cmVcbiBcdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIk1hbmlmZXN0IHJlcXVlc3QgdG8gXCIgKyByZXF1ZXN0UGF0aCArIFwiIGZhaWxlZC5cIikpO1xuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0Ly8gc3VjY2Vzc1xuIFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdHZhciB1cGRhdGUgPSBKU09OLnBhcnNlKHJlcXVlc3QucmVzcG9uc2VUZXh0KTtcbiBcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuIFx0XHRcdFx0XHRcdHJlamVjdChlKTtcbiBcdFx0XHRcdFx0XHRyZXR1cm47XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0cmVzb2x2ZSh1cGRhdGUpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH07XG4gXHRcdH0pO1xuIFx0fVxuXG4gXHR2YXIgaG90QXBwbHlPblVwZGF0ZSA9IHRydWU7XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50SGFzaCA9IFwiYWU3MGE0N2VmM2Q2YTc4MTJjNGFcIjtcbiBcdHZhciBob3RSZXF1ZXN0VGltZW91dCA9IDEwMDAwO1xuIFx0dmFyIGhvdEN1cnJlbnRNb2R1bGVEYXRhID0ge307XG4gXHR2YXIgaG90Q3VycmVudENoaWxkTW9kdWxlO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudFBhcmVudHMgPSBbXTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCA9IFtdO1xuXG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpIHtcbiBcdFx0dmFyIG1lID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdGlmICghbWUpIHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fO1xuIFx0XHR2YXIgZm4gPSBmdW5jdGlvbihyZXF1ZXN0KSB7XG4gXHRcdFx0aWYgKG1lLmhvdC5hY3RpdmUpIHtcbiBcdFx0XHRcdGlmIChpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdKSB7XG4gXHRcdFx0XHRcdGlmIChpbnN0YWxsZWRNb2R1bGVzW3JlcXVlc3RdLnBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCkgPT09IC0xKSB7XG4gXHRcdFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzLnB1c2gobW9kdWxlSWQpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGhvdEN1cnJlbnRDaGlsZE1vZHVsZSA9IHJlcXVlc3Q7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAobWUuY2hpbGRyZW4uaW5kZXhPZihyZXF1ZXN0KSA9PT0gLTEpIHtcbiBcdFx0XHRcdFx0bWUuY2hpbGRyZW4ucHVzaChyZXF1ZXN0KTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0Y29uc29sZS53YXJuKFxuIFx0XHRcdFx0XHRcIltITVJdIHVuZXhwZWN0ZWQgcmVxdWlyZShcIiArXG4gXHRcdFx0XHRcdFx0cmVxdWVzdCArXG4gXHRcdFx0XHRcdFx0XCIpIGZyb20gZGlzcG9zZWQgbW9kdWxlIFwiICtcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZFxuIFx0XHRcdFx0KTtcbiBcdFx0XHRcdGhvdEN1cnJlbnRQYXJlbnRzID0gW107XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKHJlcXVlc3QpO1xuIFx0XHR9O1xuIFx0XHR2YXIgT2JqZWN0RmFjdG9yeSA9IGZ1bmN0aW9uIE9iamVjdEZhY3RvcnkobmFtZSkge1xuIFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcbiBcdFx0XHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX19bbmFtZV07XG4gXHRcdFx0XHR9LFxuIFx0XHRcdFx0c2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuIFx0XHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdID0gdmFsdWU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fTtcbiBcdFx0fTtcbiBcdFx0Zm9yICh2YXIgbmFtZSBpbiBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9fd2VicGFja19yZXF1aXJlX18sIG5hbWUpICYmXG4gXHRcdFx0XHRuYW1lICE9PSBcImVcIiAmJlxuIFx0XHRcdFx0bmFtZSAhPT0gXCJ0XCJcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgbmFtZSwgT2JqZWN0RmFjdG9yeShuYW1lKSk7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGZuLmUgPSBmdW5jdGlvbihjaHVua0lkKSB7XG4gXHRcdFx0aWYgKGhvdFN0YXR1cyA9PT0gXCJyZWFkeVwiKSBob3RTZXRTdGF0dXMoXCJwcmVwYXJlXCIpO1xuIFx0XHRcdGhvdENodW5rc0xvYWRpbmcrKztcbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXy5lKGNodW5rSWQpLnRoZW4oZmluaXNoQ2h1bmtMb2FkaW5nLCBmdW5jdGlvbihlcnIpIHtcbiBcdFx0XHRcdGZpbmlzaENodW5rTG9hZGluZygpO1xuIFx0XHRcdFx0dGhyb3cgZXJyO1xuIFx0XHRcdH0pO1xuXG4gXHRcdFx0ZnVuY3Rpb24gZmluaXNoQ2h1bmtMb2FkaW5nKCkge1xuIFx0XHRcdFx0aG90Q2h1bmtzTG9hZGluZy0tO1xuIFx0XHRcdFx0aWYgKGhvdFN0YXR1cyA9PT0gXCJwcmVwYXJlXCIpIHtcbiBcdFx0XHRcdFx0aWYgKCFob3RXYWl0aW5nRmlsZXNNYXBbY2h1bmtJZF0pIHtcbiBcdFx0XHRcdFx0XHRob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRpZiAoaG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJiBob3RXYWl0aW5nRmlsZXMgPT09IDApIHtcbiBcdFx0XHRcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH07XG4gXHRcdGZuLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRcdGlmIChtb2RlICYgMSkgdmFsdWUgPSBmbih2YWx1ZSk7XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18udCh2YWx1ZSwgbW9kZSAmIH4xKTtcbiBcdFx0fTtcbiBcdFx0cmV0dXJuIGZuO1xuIFx0fVxuXG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdGZ1bmN0aW9uIGhvdENyZWF0ZU1vZHVsZShtb2R1bGVJZCkge1xuIFx0XHR2YXIgaG90ID0ge1xuIFx0XHRcdC8vIHByaXZhdGUgc3R1ZmZcbiBcdFx0XHRfYWNjZXB0ZWREZXBlbmRlbmNpZXM6IHt9LFxuIFx0XHRcdF9kZWNsaW5lZERlcGVuZGVuY2llczoge30sXG4gXHRcdFx0X3NlbGZBY2NlcHRlZDogZmFsc2UsXG4gXHRcdFx0X3NlbGZEZWNsaW5lZDogZmFsc2UsXG4gXHRcdFx0X2Rpc3Bvc2VIYW5kbGVyczogW10sXG4gXHRcdFx0X21haW46IGhvdEN1cnJlbnRDaGlsZE1vZHVsZSAhPT0gbW9kdWxlSWQsXG5cbiBcdFx0XHQvLyBNb2R1bGUgQVBJXG4gXHRcdFx0YWN0aXZlOiB0cnVlLFxuIFx0XHRcdGFjY2VwdDogZnVuY3Rpb24oZGVwLCBjYWxsYmFjaykge1xuIFx0XHRcdFx0aWYgKGRlcCA9PT0gdW5kZWZpbmVkKSBob3QuX3NlbGZBY2NlcHRlZCA9IHRydWU7XG4gXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcImZ1bmN0aW9uXCIpIGhvdC5fc2VsZkFjY2VwdGVkID0gZGVwO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIilcbiBcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspXG4gXHRcdFx0XHRcdFx0aG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBbaV1dID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiBcdFx0XHRcdGVsc2UgaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBdID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcbiBcdFx0XHR9LFxuIFx0XHRcdGRlY2xpbmU6IGZ1bmN0aW9uKGRlcCkge1xuIFx0XHRcdFx0aWYgKGRlcCA9PT0gdW5kZWZpbmVkKSBob3QuX3NlbGZEZWNsaW5lZCA9IHRydWU7XG4gXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgZGVwID09PSBcIm9iamVjdFwiKVxuIFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcC5sZW5ndGg7IGkrKylcbiBcdFx0XHRcdFx0XHRob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW2RlcFtpXV0gPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW2RlcF0gPSB0cnVlO1xuIFx0XHRcdH0sXG4gXHRcdFx0ZGlzcG9zZTogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdGhvdC5fZGlzcG9zZUhhbmRsZXJzLnB1c2goY2FsbGJhY2spO1xuIFx0XHRcdH0sXG4gXHRcdFx0YWRkRGlzcG9zZUhhbmRsZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcbiBcdFx0XHR9LFxuIFx0XHRcdHJlbW92ZURpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0dmFyIGlkeCA9IGhvdC5fZGlzcG9zZUhhbmRsZXJzLmluZGV4T2YoY2FsbGJhY2spO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHR9LFxuXG4gXHRcdFx0Ly8gTWFuYWdlbWVudCBBUElcbiBcdFx0XHRjaGVjazogaG90Q2hlY2ssXG4gXHRcdFx0YXBwbHk6IGhvdEFwcGx5LFxuIFx0XHRcdHN0YXR1czogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0aWYgKCFsKSByZXR1cm4gaG90U3RhdHVzO1xuIFx0XHRcdFx0aG90U3RhdHVzSGFuZGxlcnMucHVzaChsKTtcbiBcdFx0XHR9LFxuIFx0XHRcdGFkZFN0YXR1c0hhbmRsZXI6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XG4gXHRcdFx0fSxcbiBcdFx0XHRyZW1vdmVTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHR2YXIgaWR4ID0gaG90U3RhdHVzSGFuZGxlcnMuaW5kZXhPZihsKTtcbiBcdFx0XHRcdGlmIChpZHggPj0gMCkgaG90U3RhdHVzSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0fSxcblxuIFx0XHRcdC8vaW5oZXJpdCBmcm9tIHByZXZpb3VzIGRpc3Bvc2UgY2FsbFxuIFx0XHRcdGRhdGE6IGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXVxuIFx0XHR9O1xuIFx0XHRob3RDdXJyZW50Q2hpbGRNb2R1bGUgPSB1bmRlZmluZWQ7XG4gXHRcdHJldHVybiBob3Q7XG4gXHR9XG5cbiBcdHZhciBob3RTdGF0dXNIYW5kbGVycyA9IFtdO1xuIFx0dmFyIGhvdFN0YXR1cyA9IFwiaWRsZVwiO1xuXG4gXHRmdW5jdGlvbiBob3RTZXRTdGF0dXMobmV3U3RhdHVzKSB7XG4gXHRcdGhvdFN0YXR1cyA9IG5ld1N0YXR1cztcbiBcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBob3RTdGF0dXNIYW5kbGVycy5sZW5ndGg7IGkrKylcbiBcdFx0XHRob3RTdGF0dXNIYW5kbGVyc1tpXS5jYWxsKG51bGwsIG5ld1N0YXR1cyk7XG4gXHR9XG5cbiBcdC8vIHdoaWxlIGRvd25sb2FkaW5nXG4gXHR2YXIgaG90V2FpdGluZ0ZpbGVzID0gMDtcbiBcdHZhciBob3RDaHVua3NMb2FkaW5nID0gMDtcbiBcdHZhciBob3RXYWl0aW5nRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3RSZXF1ZXN0ZWRGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdEF2YWlsYWJsZUZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90RGVmZXJyZWQ7XG5cbiBcdC8vIFRoZSB1cGRhdGUgaW5mb1xuIFx0dmFyIGhvdFVwZGF0ZSwgaG90VXBkYXRlTmV3SGFzaDtcblxuIFx0ZnVuY3Rpb24gdG9Nb2R1bGVJZChpZCkge1xuIFx0XHR2YXIgaXNOdW1iZXIgPSAraWQgKyBcIlwiID09PSBpZDtcbiBcdFx0cmV0dXJuIGlzTnVtYmVyID8gK2lkIDogaWQ7XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdENoZWNrKGFwcGx5KSB7XG4gXHRcdGlmIChob3RTdGF0dXMgIT09IFwiaWRsZVwiKSB7XG4gXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiY2hlY2soKSBpcyBvbmx5IGFsbG93ZWQgaW4gaWRsZSBzdGF0dXNcIik7XG4gXHRcdH1cbiBcdFx0aG90QXBwbHlPblVwZGF0ZSA9IGFwcGx5O1xuIFx0XHRob3RTZXRTdGF0dXMoXCJjaGVja1wiKTtcbiBcdFx0cmV0dXJuIGhvdERvd25sb2FkTWFuaWZlc3QoaG90UmVxdWVzdFRpbWVvdXQpLnRoZW4oZnVuY3Rpb24odXBkYXRlKSB7XG4gXHRcdFx0aWYgKCF1cGRhdGUpIHtcbiBcdFx0XHRcdGhvdFNldFN0YXR1cyhcImlkbGVcIik7XG4gXHRcdFx0XHRyZXR1cm4gbnVsbDtcbiBcdFx0XHR9XG4gXHRcdFx0aG90UmVxdWVzdGVkRmlsZXNNYXAgPSB7fTtcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXNNYXAgPSB7fTtcbiBcdFx0XHRob3RBdmFpbGFibGVGaWxlc01hcCA9IHVwZGF0ZS5jO1xuIFx0XHRcdGhvdFVwZGF0ZU5ld0hhc2ggPSB1cGRhdGUuaDtcblxuIFx0XHRcdGhvdFNldFN0YXR1cyhcInByZXBhcmVcIik7XG4gXHRcdFx0dmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiBcdFx0XHRcdGhvdERlZmVycmVkID0ge1xuIFx0XHRcdFx0XHRyZXNvbHZlOiByZXNvbHZlLFxuIFx0XHRcdFx0XHRyZWplY3Q6IHJlamVjdFxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9KTtcbiBcdFx0XHRob3RVcGRhdGUgPSB7fTtcbiBcdFx0XHRmb3IodmFyIGNodW5rSWQgaW4gaW5zdGFsbGVkQ2h1bmtzKVxuIFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb25lLWJsb2Nrc1xuIFx0XHRcdHtcbiBcdFx0XHRcdC8qZ2xvYmFscyBjaHVua0lkICovXG4gXHRcdFx0XHRob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0aG90U3RhdHVzID09PSBcInByZXBhcmVcIiAmJlxuIFx0XHRcdFx0aG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJlxuIFx0XHRcdFx0aG90V2FpdGluZ0ZpbGVzID09PSAwXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiBwcm9taXNlO1xuIFx0XHR9KTtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdIHx8ICFob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdID0gZmFsc2U7XG4gXHRcdGZvciAodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG4gXHRcdFx0XHRob3RVcGRhdGVbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRpZiAoLS1ob3RXYWl0aW5nRmlsZXMgPT09IDAgJiYgaG90Q2h1bmtzTG9hZGluZyA9PT0gMCkge1xuIFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHRcdGlmICghaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0pIHtcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXNNYXBbY2h1bmtJZF0gPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXMrKztcbiBcdFx0XHRob3REb3dubG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHR9XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdFVwZGF0ZURvd25sb2FkZWQoKSB7XG4gXHRcdGhvdFNldFN0YXR1cyhcInJlYWR5XCIpO1xuIFx0XHR2YXIgZGVmZXJyZWQgPSBob3REZWZlcnJlZDtcbiBcdFx0aG90RGVmZXJyZWQgPSBudWxsO1xuIFx0XHRpZiAoIWRlZmVycmVkKSByZXR1cm47XG4gXHRcdGlmIChob3RBcHBseU9uVXBkYXRlKSB7XG4gXHRcdFx0Ly8gV3JhcCBkZWZlcnJlZCBvYmplY3QgaW4gUHJvbWlzZSB0byBtYXJrIGl0IGFzIGEgd2VsbC1oYW5kbGVkIFByb21pc2UgdG9cbiBcdFx0XHQvLyBhdm9pZCB0cmlnZ2VyaW5nIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3YXJuaW5nIGluIENocm9tZS5cbiBcdFx0XHQvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDY1NjY2XG4gXHRcdFx0UHJvbWlzZS5yZXNvbHZlKClcbiBcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0XHRyZXR1cm4gaG90QXBwbHkoaG90QXBwbHlPblVwZGF0ZSk7XG4gXHRcdFx0XHR9KVxuIFx0XHRcdFx0LnRoZW4oXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKHJlc3VsdCkge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmUocmVzdWx0KTtcbiBcdFx0XHRcdFx0fSxcbiBcdFx0XHRcdFx0ZnVuY3Rpb24oZXJyKSB7XG4gXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0KGVycik7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHRcdGZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xuIFx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIGlkKSkge1xuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaCh0b01vZHVsZUlkKGlkKSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHRcdGRlZmVycmVkLnJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RBcHBseShvcHRpb25zKSB7XG4gXHRcdGlmIChob3RTdGF0dXMgIT09IFwicmVhZHlcIilcbiBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXNcIik7XG4gXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gXHRcdHZhciBjYjtcbiBcdFx0dmFyIGk7XG4gXHRcdHZhciBqO1xuIFx0XHR2YXIgbW9kdWxlO1xuIFx0XHR2YXIgbW9kdWxlSWQ7XG5cbiBcdFx0ZnVuY3Rpb24gZ2V0QWZmZWN0ZWRTdHVmZih1cGRhdGVNb2R1bGVJZCkge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuIFx0XHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gXHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLnNsaWNlKCkubWFwKGZ1bmN0aW9uKGlkKSB7XG4gXHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRjaGFpbjogW2lkXSxcbiBcdFx0XHRcdFx0aWQ6IGlkXG4gXHRcdFx0XHR9O1xuIFx0XHRcdH0pO1xuIFx0XHRcdHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gXHRcdFx0XHR2YXIgcXVldWVJdGVtID0gcXVldWUucG9wKCk7XG4gXHRcdFx0XHR2YXIgbW9kdWxlSWQgPSBxdWV1ZUl0ZW0uaWQ7XG4gXHRcdFx0XHR2YXIgY2hhaW4gPSBxdWV1ZUl0ZW0uY2hhaW47XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmICghbW9kdWxlIHx8IG1vZHVsZS5ob3QuX3NlbGZBY2NlcHRlZCkgY29udGludWU7XG4gXHRcdFx0XHRpZiAobW9kdWxlLmhvdC5fc2VsZkRlY2xpbmVkKSB7XG4gXHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWRlY2xpbmVkXCIsXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX21haW4pIHtcbiBcdFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0XHR0eXBlOiBcInVuYWNjZXB0ZWRcIixcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4sXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkXG4gXHRcdFx0XHRcdH07XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZS5wYXJlbnRzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRcdHZhciBwYXJlbnRJZCA9IG1vZHVsZS5wYXJlbnRzW2ldO1xuIFx0XHRcdFx0XHR2YXIgcGFyZW50ID0gaW5zdGFsbGVkTW9kdWxlc1twYXJlbnRJZF07XG4gXHRcdFx0XHRcdGlmICghcGFyZW50KSBjb250aW51ZTtcbiBcdFx0XHRcdFx0aWYgKHBhcmVudC5ob3QuX2RlY2xpbmVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSkge1xuIFx0XHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRlY2xpbmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0cGFyZW50SWQ6IHBhcmVudElkXG4gXHRcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRpZiAob3V0ZGF0ZWRNb2R1bGVzLmluZGV4T2YocGFyZW50SWQpICE9PSAtMSkgY29udGludWU7XG4gXHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRcdFx0XHRpZiAoIW91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSlcbiBcdFx0XHRcdFx0XHRcdG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSA9IFtdO1xuIFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXSwgW21vZHVsZUlkXSk7XG4gXHRcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW3BhcmVudElkXTtcbiBcdFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzLnB1c2gocGFyZW50SWQpO1xuIFx0XHRcdFx0XHRxdWV1ZS5wdXNoKHtcbiBcdFx0XHRcdFx0XHRjaGFpbjogY2hhaW4uY29uY2F0KFtwYXJlbnRJZF0pLFxuIFx0XHRcdFx0XHRcdGlkOiBwYXJlbnRJZFxuIFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG5cbiBcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0dHlwZTogXCJhY2NlcHRlZFwiLFxuIFx0XHRcdFx0bW9kdWxlSWQ6IHVwZGF0ZU1vZHVsZUlkLFxuIFx0XHRcdFx0b3V0ZGF0ZWRNb2R1bGVzOiBvdXRkYXRlZE1vZHVsZXMsXG4gXHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llczogb3V0ZGF0ZWREZXBlbmRlbmNpZXNcbiBcdFx0XHR9O1xuIFx0XHR9XG5cbiBcdFx0ZnVuY3Rpb24gYWRkQWxsVG9TZXQoYSwgYikge1xuIFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0dmFyIGl0ZW0gPSBiW2ldO1xuIFx0XHRcdFx0aWYgKGEuaW5kZXhPZihpdGVtKSA9PT0gLTEpIGEucHVzaChpdGVtKTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBhdCBiZWdpbiBhbGwgdXBkYXRlcyBtb2R1bGVzIGFyZSBvdXRkYXRlZFxuIFx0XHQvLyB0aGUgXCJvdXRkYXRlZFwiIHN0YXR1cyBjYW4gcHJvcGFnYXRlIHRvIHBhcmVudHMgaWYgdGhleSBkb24ndCBhY2NlcHQgdGhlIGNoaWxkcmVuXG4gXHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuIFx0XHR2YXIgb3V0ZGF0ZWRNb2R1bGVzID0gW107XG4gXHRcdHZhciBhcHBsaWVkVXBkYXRlID0ge307XG5cbiBcdFx0dmFyIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSA9IGZ1bmN0aW9uIHdhcm5VbmV4cGVjdGVkUmVxdWlyZSgpIHtcbiBcdFx0XHRjb25zb2xlLndhcm4oXG4gXHRcdFx0XHRcIltITVJdIHVuZXhwZWN0ZWQgcmVxdWlyZShcIiArIHJlc3VsdC5tb2R1bGVJZCArIFwiKSB0byBkaXNwb3NlZCBtb2R1bGVcIlxuIFx0XHRcdCk7XG4gXHRcdH07XG5cbiBcdFx0Zm9yICh2YXIgaWQgaW4gaG90VXBkYXRlKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIGlkKSkge1xuIFx0XHRcdFx0bW9kdWxlSWQgPSB0b01vZHVsZUlkKGlkKTtcbiBcdFx0XHRcdC8qKiBAdHlwZSB7VE9ET30gKi9cbiBcdFx0XHRcdHZhciByZXN1bHQ7XG4gXHRcdFx0XHRpZiAoaG90VXBkYXRlW2lkXSkge1xuIFx0XHRcdFx0XHRyZXN1bHQgPSBnZXRBZmZlY3RlZFN0dWZmKG1vZHVsZUlkKTtcbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdHJlc3VsdCA9IHtcbiBcdFx0XHRcdFx0XHR0eXBlOiBcImRpc3Bvc2VkXCIsXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWQ6IGlkXG4gXHRcdFx0XHRcdH07XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHQvKiogQHR5cGUge0Vycm9yfGZhbHNlfSAqL1xuIFx0XHRcdFx0dmFyIGFib3J0RXJyb3IgPSBmYWxzZTtcbiBcdFx0XHRcdHZhciBkb0FwcGx5ID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgZG9EaXNwb3NlID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgY2hhaW5JbmZvID0gXCJcIjtcbiBcdFx0XHRcdGlmIChyZXN1bHQuY2hhaW4pIHtcbiBcdFx0XHRcdFx0Y2hhaW5JbmZvID0gXCJcXG5VcGRhdGUgcHJvcGFnYXRpb246IFwiICsgcmVzdWx0LmNoYWluLmpvaW4oXCIgLT4gXCIpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0c3dpdGNoIChyZXN1bHQudHlwZSkge1xuIFx0XHRcdFx0XHRjYXNlIFwic2VsZi1kZWNsaW5lZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGVjbGluZWQpIG9wdGlvbnMub25EZWNsaW5lZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVEZWNsaW5lZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIG9mIHNlbGYgZGVjbGluZTogXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwiZGVjbGluZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBkZWNsaW5lZCBkZXBlbmRlbmN5OiBcIiArXG4gXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0Lm1vZHVsZUlkICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRcIiBpbiBcIiArXG4gXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0LnBhcmVudElkICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRjaGFpbkluZm9cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJ1bmFjY2VwdGVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25VbmFjY2VwdGVkKSBvcHRpb25zLm9uVW5hY2NlcHRlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVVbmFjY2VwdGVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2UgXCIgKyBtb2R1bGVJZCArIFwiIGlzIG5vdCBhY2NlcHRlZFwiICsgY2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwiYWNjZXB0ZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkFjY2VwdGVkKSBvcHRpb25zLm9uQWNjZXB0ZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRkb0FwcGx5ID0gdHJ1ZTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImRpc3Bvc2VkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EaXNwb3NlZCkgb3B0aW9ucy5vbkRpc3Bvc2VkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0ZG9EaXNwb3NlID0gdHJ1ZTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0ZGVmYXVsdDpcbiBcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmV4Y2VwdGlvbiB0eXBlIFwiICsgcmVzdWx0LnR5cGUpO1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGFib3J0RXJyb3IpIHtcbiBcdFx0XHRcdFx0aG90U2V0U3RhdHVzKFwiYWJvcnRcIik7XG4gXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChhYm9ydEVycm9yKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChkb0FwcGx5KSB7XG4gXHRcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdID0gaG90VXBkYXRlW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0YWRkQWxsVG9TZXQob3V0ZGF0ZWRNb2R1bGVzLCByZXN1bHQub3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0XHRcdFx0Zm9yIChtb2R1bGVJZCBpbiByZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbiBcdFx0XHRcdFx0XHRpZiAoXG4gXHRcdFx0XHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llcyxcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWRcbiBcdFx0XHRcdFx0XHRcdClcbiBcdFx0XHRcdFx0XHQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKVxuIFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0gPSBbXTtcbiBcdFx0XHRcdFx0XHRcdGFkZEFsbFRvU2V0KFxuIFx0XHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF0sXG4gXHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5vdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF1cbiBcdFx0XHRcdFx0XHRcdCk7XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoZG9EaXNwb3NlKSB7XG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgW3Jlc3VsdC5tb2R1bGVJZF0pO1xuIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IHdhcm5VbmV4cGVjdGVkUmVxdWlyZTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBTdG9yZSBzZWxmIGFjY2VwdGVkIG91dGRhdGVkIG1vZHVsZXMgdG8gcmVxdWlyZSB0aGVtIGxhdGVyIGJ5IHRoZSBtb2R1bGUgc3lzdGVtXG4gXHRcdHZhciBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXMgPSBbXTtcbiBcdFx0Zm9yIChpID0gMDsgaSA8IG91dGRhdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdG1vZHVsZUlkID0gb3V0ZGF0ZWRNb2R1bGVzW2ldO1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdICYmXG4gXHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZFxuIFx0XHRcdClcbiBcdFx0XHRcdG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5wdXNoKHtcbiBcdFx0XHRcdFx0bW9kdWxlOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyOiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZFxuIFx0XHRcdFx0fSk7XG4gXHRcdH1cblxuIFx0XHQvLyBOb3cgaW4gXCJkaXNwb3NlXCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiZGlzcG9zZVwiKTtcbiBcdFx0T2JqZWN0LmtleXMoaG90QXZhaWxhYmxlRmlsZXNNYXApLmZvckVhY2goZnVuY3Rpb24oY2h1bmtJZCkge1xuIFx0XHRcdGlmIChob3RBdmFpbGFibGVGaWxlc01hcFtjaHVua0lkXSA9PT0gZmFsc2UpIHtcbiBcdFx0XHRcdGhvdERpc3Bvc2VDaHVuayhjaHVua0lkKTtcbiBcdFx0XHR9XG4gXHRcdH0pO1xuXG4gXHRcdHZhciBpZHg7XG4gXHRcdHZhciBxdWV1ZSA9IG91dGRhdGVkTW9kdWxlcy5zbGljZSgpO1xuIFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdG1vZHVsZUlkID0gcXVldWUucG9wKCk7XG4gXHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0aWYgKCFtb2R1bGUpIGNvbnRpbnVlO1xuXG4gXHRcdFx0dmFyIGRhdGEgPSB7fTtcblxuIFx0XHRcdC8vIENhbGwgZGlzcG9zZSBoYW5kbGVyc1xuIFx0XHRcdHZhciBkaXNwb3NlSGFuZGxlcnMgPSBtb2R1bGUuaG90Ll9kaXNwb3NlSGFuZGxlcnM7XG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IGRpc3Bvc2VIYW5kbGVycy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0Y2IgPSBkaXNwb3NlSGFuZGxlcnNbal07XG4gXHRcdFx0XHRjYihkYXRhKTtcbiBcdFx0XHR9XG4gXHRcdFx0aG90Q3VycmVudE1vZHVsZURhdGFbbW9kdWxlSWRdID0gZGF0YTtcblxuIFx0XHRcdC8vIGRpc2FibGUgbW9kdWxlICh0aGlzIGRpc2FibGVzIHJlcXVpcmVzIGZyb20gdGhpcyBtb2R1bGUpXG4gXHRcdFx0bW9kdWxlLmhvdC5hY3RpdmUgPSBmYWxzZTtcblxuIFx0XHRcdC8vIHJlbW92ZSBtb2R1bGUgZnJvbSBjYWNoZVxuIFx0XHRcdGRlbGV0ZSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHdoZW4gZGlzcG9zaW5nIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCBkaXNwb3NlIGhhbmRsZXJcbiBcdFx0XHRkZWxldGUgb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdO1xuXG4gXHRcdFx0Ly8gcmVtb3ZlIFwicGFyZW50c1wiIHJlZmVyZW5jZXMgZnJvbSBhbGwgY2hpbGRyZW5cbiBcdFx0XHRmb3IgKGogPSAwOyBqIDwgbW9kdWxlLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHR2YXIgY2hpbGQgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZS5jaGlsZHJlbltqXV07XG4gXHRcdFx0XHRpZiAoIWNoaWxkKSBjb250aW51ZTtcbiBcdFx0XHRcdGlkeCA9IGNoaWxkLnBhcmVudHMuaW5kZXhPZihtb2R1bGVJZCk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIHtcbiBcdFx0XHRcdFx0Y2hpbGQucGFyZW50cy5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyByZW1vdmUgb3V0ZGF0ZWQgZGVwZW5kZW5jeSBmcm9tIG1vZHVsZSBjaGlsZHJlblxuIFx0XHR2YXIgZGVwZW5kZW5jeTtcbiBcdFx0dmFyIG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzO1xuIFx0XHRmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZClcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuIFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9IG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHRcdFx0ZGVwZW5kZW5jeSA9IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2pdO1xuIFx0XHRcdFx0XHRcdGlkeCA9IG1vZHVsZS5jaGlsZHJlbi5pbmRleE9mKGRlcGVuZGVuY3kpO1xuIFx0XHRcdFx0XHRcdGlmIChpZHggPj0gMCkgbW9kdWxlLmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTm90IGluIFwiYXBwbHlcIiBwaGFzZVxuIFx0XHRob3RTZXRTdGF0dXMoXCJhcHBseVwiKTtcblxuIFx0XHRob3RDdXJyZW50SGFzaCA9IGhvdFVwZGF0ZU5ld0hhc2g7XG5cbiBcdFx0Ly8gaW5zZXJ0IG5ldyBjb2RlXG4gXHRcdGZvciAobW9kdWxlSWQgaW4gYXBwbGllZFVwZGF0ZSkge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXBwbGllZFVwZGF0ZSwgbW9kdWxlSWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVzW21vZHVsZUlkXSA9IGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIGNhbGwgYWNjZXB0IGhhbmRsZXJzXG4gXHRcdHZhciBlcnJvciA9IG51bGw7XG4gXHRcdGZvciAobW9kdWxlSWQgaW4gb3V0ZGF0ZWREZXBlbmRlbmNpZXMpIHtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3V0ZGF0ZWREZXBlbmRlbmNpZXMsIG1vZHVsZUlkKVxuIFx0XHRcdCkge1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAobW9kdWxlKSB7XG4gXHRcdFx0XHRcdG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzID0gb3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gW107XG4gXHRcdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tpXTtcbiBcdFx0XHRcdFx0XHRjYiA9IG1vZHVsZS5ob3QuX2FjY2VwdGVkRGVwZW5kZW5jaWVzW2RlcGVuZGVuY3ldO1xuIFx0XHRcdFx0XHRcdGlmIChjYikge1xuIFx0XHRcdFx0XHRcdFx0aWYgKGNhbGxiYWNrcy5pbmRleE9mKGNiKSAhPT0gLTEpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRcdFx0Y2FsbGJhY2tzLnB1c2goY2IpO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0XHRcdFx0Y2IgPSBjYWxsYmFja3NbaV07XG4gXHRcdFx0XHRcdFx0dHJ5IHtcbiBcdFx0XHRcdFx0XHRcdGNiKG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzKTtcbiBcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLm9uRXJyb3JlZCh7XG4gXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJhY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdFx0XHRkZXBlbmRlbmN5SWQ6IG1vZHVsZU91dGRhdGVkRGVwZW5kZW5jaWVzW2ldLFxuIFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yOiBlcnJcbiBcdFx0XHRcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiBcdFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBMb2FkIHNlbGYgYWNjZXB0ZWQgbW9kdWxlc1xuIFx0XHRmb3IgKGkgPSAwOyBpIDwgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0dmFyIGl0ZW0gPSBvdXRkYXRlZFNlbGZBY2NlcHRlZE1vZHVsZXNbaV07XG4gXHRcdFx0bW9kdWxlSWQgPSBpdGVtLm1vZHVsZTtcbiBcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFttb2R1bGVJZF07XG4gXHRcdFx0dHJ5IHtcbiBcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpO1xuIFx0XHRcdH0gY2F0Y2ggKGVycikge1xuIFx0XHRcdFx0aWYgKHR5cGVvZiBpdGVtLmVycm9ySGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gXHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0aXRlbS5lcnJvckhhbmRsZXIoZXJyKTtcbiBcdFx0XHRcdFx0fSBjYXRjaCAoZXJyMikge1xuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcInNlbGYtYWNjZXB0LWVycm9yLWhhbmRsZXItZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBlcnIyLFxuIFx0XHRcdFx0XHRcdFx0XHRvcmlnaW5hbEVycm9yOiBlcnJcbiBcdFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnIyO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25FcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvcmVkXCIsXG4gXHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRpZiAoIWVycm9yKSBlcnJvciA9IGVycjtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIGhhbmRsZSBlcnJvcnMgaW4gYWNjZXB0IGhhbmRsZXJzIGFuZCBzZWxmIGFjY2VwdGVkIG1vZHVsZSBsb2FkXG4gXHRcdGlmIChlcnJvcikge1xuIFx0XHRcdGhvdFNldFN0YXR1cyhcImZhaWxcIik7XG4gXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiBcdFx0fVxuXG4gXHRcdGhvdFNldFN0YXR1cyhcImlkbGVcIik7XG4gXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gXHRcdFx0cmVzb2x2ZShvdXRkYXRlZE1vZHVsZXMpO1xuIFx0XHR9KTtcbiBcdH1cblxuIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3NcbiBcdC8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuIFx0Ly8gUHJvbWlzZSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbiBcdHZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG4gXHRcdFwibWFpblwiOiAwXG4gXHR9O1xuXG4gXHR2YXIgZGVmZXJyZWRNb2R1bGVzID0gW107XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGhvdDogaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSxcbiBcdFx0XHRwYXJlbnRzOiAoaG90Q3VycmVudFBhcmVudHNUZW1wID0gaG90Q3VycmVudFBhcmVudHMsIGhvdEN1cnJlbnRQYXJlbnRzID0gW10sIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCksXG4gXHRcdFx0Y2hpbGRyZW46IFtdXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcImh0dHBzOi8vbG9jYWxob3N0OjkwMDAvYXNzZXRzL1wiO1xuXG4gXHQvLyBfX3dlYnBhY2tfaGFzaF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIGhvdEN1cnJlbnRIYXNoOyB9O1xuXG4gXHR2YXIganNvbnBBcnJheSA9IHdpbmRvd1tcIm5vY29uZmxpY3RKc29ucFwiXSA9IHdpbmRvd1tcIm5vY29uZmxpY3RKc29ucFwiXSB8fCBbXTtcbiBcdHZhciBvbGRKc29ucEZ1bmN0aW9uID0ganNvbnBBcnJheS5wdXNoLmJpbmQoanNvbnBBcnJheSk7XG4gXHRqc29ucEFycmF5LnB1c2ggPSB3ZWJwYWNrSnNvbnBDYWxsYmFjaztcbiBcdGpzb25wQXJyYXkgPSBqc29ucEFycmF5LnNsaWNlKCk7XG4gXHRmb3IodmFyIGkgPSAwOyBpIDwganNvbnBBcnJheS5sZW5ndGg7IGkrKykgd2VicGFja0pzb25wQ2FsbGJhY2soanNvbnBBcnJheVtpXSk7XG4gXHR2YXIgcGFyZW50SnNvbnBGdW5jdGlvbiA9IG9sZEpzb25wRnVuY3Rpb247XG5cblxuIFx0Ly8gYWRkIGVudHJ5IG1vZHVsZSB0byBkZWZlcnJlZCBsaXN0XG4gXHRkZWZlcnJlZE1vZHVsZXMucHVzaChbMCxcInZlbmRvcnN+bWFpblwiXSk7XG4gXHQvLyBydW4gZGVmZXJyZWQgbW9kdWxlcyB3aGVuIHJlYWR5XG4gXHRyZXR1cm4gY2hlY2tEZWZlcnJlZE1vZHVsZXMoKTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9sb2dcIjogXCIuL25vZGVfbW9kdWxlcy93ZWJwYWNrL2hvdC9sb2cuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi9ub2RlX21vZHVsZXMvd2VicGFjay9ob3Qgc3luYyBeXFxcXC5cXFxcL2xvZyRcIjsiLCIvLyBzZWU6IGh0dHBzOi8vaXRuZXh0LmlvL3NoYXJpbmctdmFyaWFibGVzLWJldHdlZW4tanMtYW5kLXNhc3MtdXNpbmctd2VicGFjay1zYXNzLWxvYWRlci03MTNmNTFmYTdmYTBcblxuLy8gVE9ETzogZGVmaW5lIGFsbCB0aGUgYXZhaWFibGUgZW52aXJvbm1lbnRzXG4vLyBERVYgLSBcImh0dHBzOi8vYWxhbW9jaXR5Y29uc3VsdGluZy5zaGFyZXBvaW50LmNvbS9zaXRlcy9pbnRyYW5ldFwiXG4vLyBTVEcgLSBcImh0dHBzOi8vcnVzaGVudGVycHJpc2VzLnNoYXJlcG9pbnQuY29tL3NpdGVzL3N0YWdlX3J1c2huZXRcIlxuLy8gUFJPRCAtIFwiaHR0cHM6Ly9ydXNoZW50ZXJwcmlzZXMuc2hhcmVwb2ludC5jb21cIlxuXG4vLyBjb25zdCBpc1Byb2QgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJzdGFnZVwiO1xuY29uc3QgaXNTdGFnZSA9IHByb2Nlc3MuZW52LkRFU1RJTkFUSU9OX0VOViA9PT0gXCJzdGFnZVwiO1xuXG5jb25zdCBkZXZVUkwgPSBcImh0dHBzOi8vYWxhbW9jaXR5Y29uc3VsdGluZy5zaGFyZXBvaW50LmNvbS9zaXRlcy9pbnRyYW5ldFwiOyAvL3VzaW5nIHRoZSBhYnNvbHV0ZSBVUkwgaXMgYnkgZGVzaWduXG5jb25zdCBzdGFnZVVSTCA9IFwiaHR0cHM6Ly9ydXNoZW50ZXJwcmlzZXMuc2hhcmVwb2ludC5jb20vc2l0ZXMvc3RhZ2UtcnVzaG5ldFwiO1xuLy8gY29uc3QgcHJvZFVSTCA9IFwiL1wiO1xuXG4vLyB2YXJpYWJsZXNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBiYXNlVXJsOiBpc1N0YWdlID8gc3RhZ2VVUkwgOiBkZXZVUkwsXG4gIHByZXNzQ292ZXJhZ2VXZWJQYXJ0SWQ6IGlzU3RhZ2VcbiAgICA/IFwiOWQ3OWNjZTctZTg0Yy00OWQ3LTkyYmMtZjVjNzk3NTg4MjQ0XCJcbiAgICA6IFwiMzNmMGVhYTEtMjgyNi00MTQxLTk0YTYtNDAxMWQxYmFjMTVjXCIsXG4gIHN0YXlJblRoZUtub3dXZWJQYXJ0SWQ6IGlzU3RhZ2VcbiAgICA/IFwiNWYyYjU0ODgtNTQ2OS00OGVjLTk3MDEtZjY2Nzc5NThiMzE2XCJcbiAgICA6IFwiMmIyOTk4ZDUtNmViNi00ZDk0LTljNzEtZTNhZjAwMmExNjhlXCJcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmNvbnN0IERvY3VtZW50Q2VudGVyID0gKHsgY2F0ZWdvcmllcywgc2l0ZVVSTCB9KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyIENhbnZhcy1zbGlkZVVwSW5cIj5cbiAgICA8aDFcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGZvbnRXZWlnaHQ6IDQwMCxcbiAgICAgICAgZm9udEZhbWlseTogXCJ3YXJub2NrLXByby1kaXNwbGF5LXJlZ3VsYXIsIFRpbWVzIE5ldyBSb21hbiwgVGltZXMsIHNlcmlmXCJcbiAgICAgIH19XG4gICAgPlxuICAgICAge2Ake1wiQ29ycG9yYXRlIERvY3VtZW50IENlbnRlclwifWB9XG4gICAgPC9oMT5cbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgey8qIHtjYXRlZ29yaWVzLm1hcCgoeyBJZCwgTmFtZSB9KSA9PiAoXG4gICAgICAgIDxhXG4gICAgICAgICAga2V5PXtJZH1cbiAgICAgICAgICBjbGFzc05hbWU9XCJkb2N1bWVudC1jYXRlZ29yeS1saW5rIGRvY3VtZW50LWNhdGVnb3J5LXdyYXBwZXJcIlxuICAgICAgICAgIHRpdGxlPXtOYW1lfVxuICAgICAgICAgIGhyZWY9e2Ake3NpdGVVUkx9L1NoYXJlZCUyMERvY3VtZW50cz9GaWx0ZXJGaWVsZDE9RG9jdW1lbnRDYXRlZ29yeSZGaWx0ZXJWYWx1ZTE9JHtOYW1lfWB9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbFwiPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJkb2N1bWVudC1jYXRlZ29yeS1pbWFnZVwiXG4gICAgICAgICAgICAgIHNyYz1cIi9zaXRlcy9pbnRyYW5ldC9TaXRlQXNzZXRzL0ltYWdlc19Eb2N1bWVudHNDZW50ZXIvYnJvY2h1cmVzLmpwZ1wiXG4gICAgICAgICAgICAgIGFsdD1cImRvY3VtZW50IHR5cGVzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWxhYmVsXCI+e05hbWV9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgICkpfSAqL31cbiAgICAgIDxhXG4gICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWxpbmsgZG9jdW1lbnQtY2F0ZWdvcnktd3JhcHBlclwiXG4gICAgICAgIHRpdGxlPVwiYnJvY2h1cmVzXCJcbiAgICAgICAgaHJlZj17YCR7c2l0ZVVSTH0vU2hhcmVkJTIwRG9jdW1lbnRzP0ZpbHRlckZpZWxkMT1Eb2N1bWVudENhdGVnb3J5JkZpbHRlclZhbHVlMT1icm9jaHVyZXNgfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbFwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWltYWdlXCJcbiAgICAgICAgICAgIHNyYz1cIi9zaXRlcy9pbnRyYW5ldC9TaXRlQXNzZXRzL0ltYWdlc19Eb2N1bWVudHNDZW50ZXIvYnJvY2h1cmVzLmpwZ1wiXG4gICAgICAgICAgICBhbHQ9XCJkb2N1bWVudCB0eXBlc1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWxhYmVsXCI+YnJvY2h1cmVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGluayBkb2N1bWVudC1jYXRlZ29yeS13cmFwcGVyXCJcbiAgICAgICAgdGl0bGU9XCJjb3Jwb3JhdGUgbWF0ZXJpYWxzXCJcbiAgICAgICAgaHJlZj17YCR7c2l0ZVVSTH0vU2hhcmVkJTIwRG9jdW1lbnRzP0ZpbHRlckZpZWxkMT1Eb2N1bWVudENhdGVnb3J5JkZpbHRlclZhbHVlMT1jb3Jwb3JhdGUgbWF0ZXJpYWxzYH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2xcIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJkb2N1bWVudC1jYXRlZ29yeS1pbWFnZVwiXG4gICAgICAgICAgICBzcmM9XCIvc2l0ZXMvaW50cmFuZXQvU2l0ZUFzc2V0cy9JbWFnZXNfRG9jdW1lbnRzQ2VudGVyL2NvcnBvcmF0ZSBtYXRlcmlhbHMuanBnXCJcbiAgICAgICAgICAgIGFsdD1cImRvY3VtZW50IHR5cGVzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGFiZWxcIj5jb3Jwb3JhdGUgbWF0ZXJpYWxzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGluayBkb2N1bWVudC1jYXRlZ29yeS13cmFwcGVyXCJcbiAgICAgICAgdGl0bGU9XCJmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9uc1wiXG4gICAgICAgIGhyZWY9e2Ake3NpdGVVUkx9L1NoYXJlZCUyMERvY3VtZW50cz9GaWx0ZXJGaWVsZDE9RG9jdW1lbnRDYXRlZ29yeSZGaWx0ZXJWYWx1ZTE9ZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnNgfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbFwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWltYWdlXCJcbiAgICAgICAgICAgIHNyYz1cIi9zaXRlcy9pbnRyYW5ldC9TaXRlQXNzZXRzL0ltYWdlc19Eb2N1bWVudHNDZW50ZXIvZnJlcXVlbnRseSBhc2tlZCBxdWVzdGlvbnMuanBnXCJcbiAgICAgICAgICAgIGFsdD1cImRvY3VtZW50IHR5cGVzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGFiZWxcIj5cbiAgICAgICAgICAgIGZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGluayBkb2N1bWVudC1jYXRlZ29yeS13cmFwcGVyXCJcbiAgICAgICAgdGl0bGU9XCJpdCBzdXBwb3J0XCJcbiAgICAgICAgaHJlZj17YCR7c2l0ZVVSTH0vU2hhcmVkJTIwRG9jdW1lbnRzP0ZpbHRlckZpZWxkMT1Eb2N1bWVudENhdGVnb3J5JkZpbHRlclZhbHVlMT1pdCBzdXBwb3J0YH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2xcIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJkb2N1bWVudC1jYXRlZ29yeS1pbWFnZVwiXG4gICAgICAgICAgICBzcmM9XCIvc2l0ZXMvaW50cmFuZXQvU2l0ZUFzc2V0cy9JbWFnZXNfRG9jdW1lbnRzQ2VudGVyL2l0IHN1cHBvcnQuanBnXCJcbiAgICAgICAgICAgIGFsdD1cImRvY3VtZW50IHR5cGVzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGFiZWxcIj5pdCBzdXBwb3J0PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGluayBkb2N1bWVudC1jYXRlZ29yeS13cmFwcGVyXCJcbiAgICAgICAgdGl0bGU9XCJuZXdzbGV0dGVyc1wiXG4gICAgICAgIGhyZWY9e2Ake3NpdGVVUkx9L1NoYXJlZCUyMERvY3VtZW50cz9GaWx0ZXJGaWVsZDE9RG9jdW1lbnRDYXRlZ29yeSZGaWx0ZXJWYWx1ZTE9bmV3c2xldHRlcnNgfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbFwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWltYWdlXCJcbiAgICAgICAgICAgIHNyYz1cIi9zaXRlcy9pbnRyYW5ldC9TaXRlQXNzZXRzL0ltYWdlc19Eb2N1bWVudHNDZW50ZXIvbmV3c2xldHRlcnMuanBnXCJcbiAgICAgICAgICAgIGFsdD1cImRvY3VtZW50IHR5cGVzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGFiZWxcIj5uZXdzbGV0dGVyczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxhXG4gICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWxpbmsgZG9jdW1lbnQtY2F0ZWdvcnktd3JhcHBlclwiXG4gICAgICAgIHRpdGxlPVwicHJlc2VudGF0aW9uc1wiXG4gICAgICAgIGhyZWY9e2Ake3NpdGVVUkx9L1NoYXJlZCUyMERvY3VtZW50cz9GaWx0ZXJGaWVsZDE9RG9jdW1lbnRDYXRlZ29yeSZGaWx0ZXJWYWx1ZTE9cHJlc2VudGF0aW9uc2B9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sXCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktaW1hZ2VcIlxuICAgICAgICAgICAgc3JjPVwiL3NpdGVzL2ludHJhbmV0L1NpdGVBc3NldHMvSW1hZ2VzX0RvY3VtZW50c0NlbnRlci9wcmVzZW50YXRpb25zLmpwZ1wiXG4gICAgICAgICAgICBhbHQ9XCJkb2N1bWVudCB0eXBlc1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWxhYmVsXCI+cHJlc2VudGF0aW9uczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICAgIDxhXG4gICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWxpbmsgZG9jdW1lbnQtY2F0ZWdvcnktd3JhcHBlclwiXG4gICAgICAgIHRpdGxlPVwidHJhdmVsIGluZm9ybWF0aW9uXCJcbiAgICAgICAgaHJlZj17YCR7c2l0ZVVSTH0vU2hhcmVkJTIwRG9jdW1lbnRzP0ZpbHRlckZpZWxkMT1Eb2N1bWVudENhdGVnb3J5JkZpbHRlclZhbHVlMT10cmF2ZWwgaW5mb3JtYXRpb25gfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbFwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWltYWdlXCJcbiAgICAgICAgICAgIHNyYz1cIi9zaXRlcy9pbnRyYW5ldC9TaXRlQXNzZXRzL0ltYWdlc19Eb2N1bWVudHNDZW50ZXIvdHJhdmVsIGluZm9ybWF0aW9uLmpwZ1wiXG4gICAgICAgICAgICBhbHQ9XCJkb2N1bWVudCB0eXBlc1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWxhYmVsXCI+dHJhdmVsIGluZm9ybWF0aW9uPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuICAgICAgPGFcbiAgICAgICAgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGluayBkb2N1bWVudC1jYXRlZ29yeS13cmFwcGVyXCJcbiAgICAgICAgdGl0bGU9XCJ0cmVuZCBib29rc1wiXG4gICAgICAgIGhyZWY9e2Ake3NpdGVVUkx9L1NoYXJlZCUyMERvY3VtZW50cz9GaWx0ZXJGaWVsZDE9RG9jdW1lbnRDYXRlZ29yeSZGaWx0ZXJWYWx1ZTE9dHJlbmQgYm9va3NgfVxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbFwiPlxuICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImRvY3VtZW50LWNhdGVnb3J5LWltYWdlXCJcbiAgICAgICAgICAgIHNyYz1cIi9zaXRlcy9pbnRyYW5ldC9TaXRlQXNzZXRzL0ltYWdlc19Eb2N1bWVudHNDZW50ZXIvdHJlbmQgYm9va3MuanBnXCJcbiAgICAgICAgICAgIGFsdD1cImRvY3VtZW50IHR5cGVzXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZG9jdW1lbnQtY2F0ZWdvcnktbGFiZWxcIj50cmVuZCBib29rczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4pO1xuXG5Eb2N1bWVudENlbnRlci5wcm9wVHlwZXMgPSB7XG4gIGNhdGVnb3JpZXM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBzaXRlVVJMOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERvY3VtZW50Q2VudGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5jb25zdCBGb290ZXIgPSAoeyBiYXNlVXJsIH0pID0+IHtcbiAgbGV0IHNwYW5TdHlsZXMgPSB7XG4gICAgZm9udFNpemU6IFwiMTFweFwiXG4gIH07XG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IFwiYmxhY2tcIiwgY29sb3I6IFwid2hpdGVcIiB9fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc20tMTIgY29sLW1kXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImQtbm9uZSBkLW1kLWJsb2NrXCIgaWQ9XCJjb2luLXdyYXBcIj5cbiAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIHN0eWxlPXt7IG1heFdpZHRoOiBcIjkwJVwiLCBtYXJnaW5Ub3A6IDIwIH19XG4gICAgICAgICAgICAgICAgc3JjPXtgJHtiYXNlVXJsfS9TdHlsZSUyMExpYnJhcnkvaW1hZ2VzL3J1c2gtY29pbi1mb290ZXIucG5nYH1cbiAgICAgICAgICAgICAgICBhbHQ9XCJSdXNoIENvaW5cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc20tMTIgY29sLW1kXCI+XG4gICAgICAgICAgICA8aDFcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBmb250OlxuICAgICAgICAgICAgICAgICAgXCIyM3B4LzI5cHggd2Fybm9jay1wcm8tZGlzcGxheS1yZWd1bGFyLCBUaW1lcyBOZXcgUm9tYW4sIFRpbWVzLCBzZXJpZlwiLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNlZWIxMTFcIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBBYm91dFxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgIDxuYXYgY2xhc3NOYW1lPVwicm93IGZvb3Rlci1saW5rc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC0xMiBjb2wtc21cIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiPkRyaXZpbmcgUHJpbmNpcGxlczwvYT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiPk91ciBNaXNzaW9uPC9hPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCI+T3VyIEhpc3Rvcnk8L2E+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC0xMiBjb2wtc21cIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiPlJ1c2ggQ29pbjwvYT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiPkNvcnBvcmF0ZSBPcmdhbml6YXRpb248L2E+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIj5Qb2xpY2llcyBhbmQgUHJvY2VkdXJlczwvYT5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiPkVtcGxveWVlIEhhbmRib29rPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmF2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTEyIGNvbC1tZFwiPlxuICAgICAgICAgICAgPGgxXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZm9udDpcbiAgICAgICAgICAgICAgICAgIFwiMjNweC8yOXB4IHdhcm5vY2stcHJvLWRpc3BsYXktcmVndWxhciwgVGltZXMgTmV3IFJvbWFuLCBUaW1lcywgc2VyaWZcIixcbiAgICAgICAgICAgICAgICBjb2xvcjogXCIjZWViMTExXCJcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgSW5mb3JtYXRpb25cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJmb290ZXItaW5mb3JtYXRpb25cIj5cbiAgICAgICAgICAgICAgPHN0cm9uZz5JVCBTZXJ2aWNlIERlc2s8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgODMwLTMwMi01MzAxJm5ic3A7XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3NwYW5TdHlsZXN9Pihmcm9tIGNvbXBhbnkgZXh0ZW5zaW9ucyk8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICA4ODgtNzU4LTQzNTcmbmJzcDtcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17c3BhblN0eWxlc30+KGZyb20gZXh0ZXJuYWwgbGluZXMpPC9zcGFuPlxuICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5Gb290ZXIucHJvcFR5cGVzID0ge1xuICBiYXNlVXJsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvb3RlcjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgUHJlc3NDb3ZlcmFnZSA9ICgpID0+IHtcbiAgY29uc29sZS5sb2coXCIrSW5zaWRlIHRoZSBQcmVzc0NvdmVyYWdlIGNvbXBvbmVudC5cIik7XG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD1cInByZXNzLWNvdmVyYWdlXCIgY2xhc3NOYW1lPVwiQ2FudmFzLXNsaWRlVXBJblwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPVwiY3VzdG9tLWhlYWRpbmdcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgICAgICBmb250RmFtaWx5OlxuICAgICAgICAgICAgXCJ3YXJub2NrLXByby1kaXNwbGF5LXJlZ3VsYXIsIFRpbWVzIE5ldyBSb21hbiwgVGltZXMsIHNlcmlmXCJcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgUHJlc3MgQ292ZXJhZ2VcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibmV3cy13cmFwcGVyXCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cIm5ld3MtbGlua1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRpdGxlLXdyYXBcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly93d3cuY2NqZGlnaXRhbC5jb20vY2FsaWZvcm5pYS1oaWdoLXNjaG9vbC1wcm9ncmFtLW9mZmVycy1ibHVlcHJpbnQtdG8tY29tYmF0LXRlY2huaWNpYW4tc2hvcnRhZ2VcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkNhbGlmb3JuaWEgaGlnaCBzY2hvb2wgcHJvZ3JhbSBvZmZlcnMgYmx1ZXByaW50IHRvIGNvbWJhdCB0ZWNobmljaWFuXG4gICAgICAgICAgICBzaG9ydGFnZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENhbGlmb3JuaWEgaGlnaCBzY2hvb2wgcHJvZ3JhbSBvZmZlcnMgYmx1ZXByaW50IHRvIGNvbWJhdFxuICAgICAgICAgICAgICB0ZWNobmljaWFuIHNob3J0YWdlXG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHsvKiA8c3BhbiBjbGFzc05hbWU9XCJhcnRpY2xlLWRhdGVcIj4wMy8yNjwvc3Bhbj4gKi99XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibmV3LXRhZ1wiPk5ldzwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmcm9tXCI+Q29tbWVyY2lhbCBDYXJyaWVyIEpvdXJuYWw8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibmV3cy1saW5rXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGl0bGUtd3JhcFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy50cnVja2luZ2luZm8uY29tLzMyNzg0MS9jdW1taW5zLXgxMi13aW5zLXRydWNrLXdyaXRlcnMtdGVjaG5pY2FsLWFjaGlldmVtZW50LWF3YXJkXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJDdW1taW5zIFgxMiBXaW5zIFRydWNrIFdyaXRlcnMnIFRlY2huaWNhbCBBY2hpZXZlbWVudCBBd2FyZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEN1bW1pbnMgWDEyIFdpbnMgVHJ1Y2sgV3JpdGVycyZhcG9zOyBUZWNobmljYWwgQWNoaWV2ZW1lbnQgQXdhcmRcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgey8qIDxzcGFuIGNsYXNzTmFtZT1cImFydGljbGUtZGF0ZVwiPjAzLzIyPC9zcGFuPiovfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm5ldy10YWdcIj5OZXc8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZnJvbVwiPlRydWNraW5nSW5mby5jb208L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibmV3cy1saW5rXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGl0bGUtd3JhcFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgIGhyZWY9XCJodHRwOi8vd3d3LmxhbmRsaW5lbWFnLmNvbS9TdG9yeS5hc3B4P1N0b3J5SUQ9NzM5NDAjLlhKdWx5dVJZWmFRXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJDdW1taW5zJyBYMTIgZGllc2VsIGVuZ2luZSB3aW5zIHRlY2ggYWNoaWV2ZW1lbnQgaG9ub3JcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDdW1taW5zJmFwb3M7IFgxMiBkaWVzZWwgZW5naW5lIHdpbnMgdGVjaCBhY2hpZXZlbWVudCBob25vclxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7LyogPHNwYW4gY2xhc3NOYW1lPVwiYXJ0aWNsZS1kYXRlXCI+MDMvMjE8L3NwYW4+Ki99XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibmV3LXRhZ1wiPk5ldzwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmcm9tXCI+TGFuZCBMaW5lIE1hZ2F6aW5lPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cIm5ld3MtbGlua1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRpdGxlLXdyYXBcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly93d3cudHJ1Y2tuZXdzLmNvbS90cmFuc3BvcnRhdGlvbi90cnVja2luZy1qb3VybmFsaXN0cy1wcmVzZW50LWN1bW1pbnMteDEyLXdpdGgtdGVjaC1hd2FyZC8xMDAzMDkwNDk2L1wiXG4gICAgICAgICAgICAgIHRpdGxlPVwiVHJ1Y2tpbmcgam91cm5hbGlzdHMgcHJlc2VudCBDdW1taW5zIFgxMiB3aXRoIHRlY2ggYXdhcmQgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgVHJ1Y2tpbmcgam91cm5hbGlzdHMgcHJlc2VudCBDdW1taW5zIFgxMiB3aXRoIHRlY2ggYXdhcmRcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgey8qIDxzcGFuIGNsYXNzTmFtZT1cImFydGljbGUtZGF0ZVwiPjAzLzIxPC9zcGFuPiovfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm5ldy10YWdcIj5OZXc8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZnJvbVwiPlRydWNrIE5ld3M8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibmV3cy1saW5rXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGl0bGUtd3JhcFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgIGhyZWY9XCJodHRwczovL3d3dy50cnVja3BhcnRzYW5kc2VydmljZS5jb20vc2hvcnQtb24tdGVjaG5pY2lhbnMtYmlnLW9uLW9wcG9ydHVuaXR5L1wiXG4gICAgICAgICAgICAgIHRpdGxlPVwiVHJ1Y2tpbmfigJlzIHRlY2huaWNpYW4gc2hvcnRhZ2UsIFBhcnQgMTogU2hvcnQgb24gdGVjaG5pY2lhbnMsIGJpZyBvbiBvcHBvcnR1bml0eVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFRydWNraW5nJmFwb3M7cyB0ZWNobmljaWFuIHNob3J0YWdlLCBQYXJ0IDE6IFNob3J0IG9uIHRlY2huaWNpYW5zLFxuICAgICAgICAgICAgICBiaWcgb24gb3Bwb3J0dW5pdHlcbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgey8qIDxzcGFuIGNsYXNzTmFtZT1cImFydGljbGUtZGF0ZVwiPjAzLzIwPC9zcGFuPiovfVxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm5ldy10YWdcIj5OZXc8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZnJvbVwiPlRydWNrIFBhcnRzICZhbXA7IFNlcnZpY2U8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJlc3NDb3ZlcmFnZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuY29uc3QgU3RheUluVGhlS25vdyA9ICh7IGJhc2VVcmwgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiQ2FudmFzLXNsaWRlVXBJblwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPVwiY3VzdG9tLWhlYWRpbmdcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgICAgICBmb250RmFtaWx5OlxuICAgICAgICAgICAgXCJ3YXJub2NrLXByby1kaXNwbGF5LXJlZ3VsYXIsIFRpbWVzIE5ldyBSb21hbiwgVGltZXMsIHNlcmlmXCJcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgU3RheSBpbiB0aGUgS25vd1xuICAgICAgPC9zcGFuPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzTmFtZT1cInN0YXlJblRoZUtub3ctaW1hZ2VcIlxuICAgICAgICAgIHNyYz17YCR7YmFzZVVybH0vU3R5bGUlMjBMaWJyYXJ5L2ltYWdlcy9TdGF5SW5UaGVLbm93X1RlbGFkb2MuanBnYH1cbiAgICAgICAgICBhbHQ9XCJTdGF5IGluIHRoZSBLbm93XCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuU3RheUluVGhlS25vdy5wcm9wVHlwZXMgPSB7XG4gIGJhc2VVcmw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU3RheUluVGhlS25vdztcbiIsImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIjtcblxuZnVuY3Rpb24gaW5mbyhtKSB7XG4gIGNvbnNvbGUubG9nKGAlYyR7bX1gLCBcImJhY2tncm91bmQ6IHBlcnU7IGNvbG9yOndoaXRlO1wiKTtcbn1cblxuZnVuY3Rpb24gZXJyb3IobSkge1xuICBjb25zb2xlLmxvZyhgJWMke219YCwgXCJiYWNrZ3JvdW5kOiBkYXJrcmVkOyBjb2xvcjp3aGl0ZTtcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFN0b2NrcygpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICBcImh0dHBzOi8vcnVzaG5ldC1hcGkuYXp1cmV3ZWJzaXRlcy5uZXQvYXBpL3N0b2Nrc1wiLFxuICAgIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXBwbGljYXRpb25JZGVudGl0eTogXCJSdXNoTmV0SW50cmFuZXRcIlxuICAgICAgfVxuICAgIH1cbiAgKTtcblxuICBjb25zdCBzdG9ja3MgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIHJldHVybiBzdG9ja3M7XG59XG5cbmNsYXNzIFN0b2NrVGlja2VyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0geyBzdG9ja0E6IG51bGwsIHN0b2NrQjogbnVsbCB9OyAvLyBzZXR0aW5nIGluaXRpYWwgc3RhdGVcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGdldFN0b2NrcygpLnRoZW4oc3RvY2tzID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdG9ja0E6IHN0b2Nrc1swXSxcbiAgICAgICAgc3RvY2tCOiBzdG9ja3NbMV1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8vIGluZm8oSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSwgbnVsbCwgMikpO1xuICAgIGNvbnN0IHN0b2NrQSA9IHRoaXMuc3RhdGUuc3RvY2tBO1xuICAgIGNvbnN0IHN0b2NrQiA9IHRoaXMuc3RhdGUuc3RvY2tCO1xuXG4gICAgaWYgKCFzdG9ja0EgfHwgIXN0b2NrQikge1xuICAgICAgcmV0dXJuIDxkaXYgc3R5bGU9e3sgaGVpZ2h0OiAxOSB9fSBjbGFzc05hbWU9XCJzdG9ja3RpY2tlci1jb250YWluZXJcIiAvPjtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdG9ja3RpY2tlci1jb250YWluZXJcIj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgPHN0cm9uZz5SVVNIQTwvc3Ryb25nPiAke3N0b2NrQS5sYXN0UHJpY2V9e1wiIFwifVxuICAgICAgICAgIHtzdG9ja0EuY2hhbmdlID4gMCA/IFwiK1wiIDogXCJcIn1cbiAgICAgICAgICB7c3RvY2tBLmNoYW5nZX0gKHtzdG9ja0EucGVyY2VudGFnZSA+IDAgPyBcIitcIiA6IFwiXCJ9XG4gICAgICAgICAge3N0b2NrQS5wZXJjZW50YWdlfSUpXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgPHN0cm9uZz5SVVNIQjwvc3Ryb25nPiAke3N0b2NrQi5sYXN0UHJpY2V9e1wiIFwifVxuICAgICAgICAgIHtzdG9ja0IuY2hhbmdlID4gMCA/IFwiK1wiIDogXCJcIn1cbiAgICAgICAgICB7c3RvY2tCLmNoYW5nZX0gKHtzdG9ja0IucGVyY2VudGFnZSA+IDAgPyBcIitcIiA6IFwiXCJ9XG4gICAgICAgICAge3N0b2NrQi5wZXJjZW50YWdlfSUpXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RvY2tUaWNrZXI7XG5cbi8vIGNvbnN0IFN0b2NrVGlja2VyID0gKCkgPT4ge1xuLy8gICBjb25zb2xlLmxvZyhcbi8vICAgICBcIiVjU3RvY2tUaWNrZXIgQ29tcG9uZW50IExvYWRlZCFcIixcbi8vICAgICBcImJhY2tncm91bmQ6b3JhbmdlOyBjb2xvcjp3aGl0ZVwiXG4vLyAgICk7XG5cbi8vICAgLy8gZ2V0U3RvY2tzKCk7XG4vLyAgIGdldFN0b2NrcygpLnRoZW4oZGF0YSA9PiB7XG4vLyAgICAgLy8gd3JpdGUoSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgNCkpO1xuLy8gICAgIHJldHVybiBkYXRhO1xuLy8gICB9KTtcblxuLy8gICAvLyByZXR1cm4gKFxuLy8gICAvLyAgIDxkaXYgY2xhc3NOYW1lPVwic3RvY2t0aWNrZXItY29udGFpbmVyXCI+XG4vLyAgIC8vICAgICA8c3Bhbj5cbi8vICAgLy8gICAgICAgPHN0cm9uZz5SVVNIQTwvc3Ryb25nPiAzOC42NyAtMC4yNyAoLTAuNjklKVxuLy8gICAvLyAgICAgPC9zcGFuPlxuLy8gICAvLyAgICAgPHNwYW4+XG4vLyAgIC8vICAgICAgIDxzdHJvbmc+UlVTSEI8L3N0cm9uZz4gNDAuMTEgKzAuMjYgKDAuNjUlKVxuLy8gICAvLyAgICAgPC9zcGFuPlxuLy8gICAvLyAgIDwvZGl2PlxuLy8gICAvLyApO1xuLy8gICByZXR1cm4gbnVsbDtcbi8vIH07XG5cbi8vIGV4cG9ydCBkZWZhdWx0IFN0b2NrVGlja2VyO1xuIiwiaW1wb3J0IFwiLi9tYWluLnNjc3NcIjtcbmltcG9ydCB2YXJzIGZyb20gXCIuL19lbnZpcm9ubWVudHMvdmFyaWFibGVzXCI7XG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgU3RvY2tUaWNrZXIgZnJvbSBcIi4vY29tcG9uZW50cy9TdG9ja1RpY2tlclwiO1xuaW1wb3J0IFByZXNzQ292ZXJhZ2UgZnJvbSBcIi4vY29tcG9uZW50cy9QcmVzc0NvdmVyYWdlXCI7IC8vIEhvbWVcbmltcG9ydCBTdGF5SW5UaGVLbm93IGZyb20gXCIuL2NvbXBvbmVudHMvU3RheUluVGhlS25vd1wiOyAvLyBIb21lcGFnZVx0aW1wb3J0IEdldFRvS25vdyBmcm9tIFwiLi9jb21wb25lbnRzL0dldFRvS25vd1wiOyAvLyBIb21lXG5pbXBvcnQgRG9jdW1lbnRDZW50ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9Eb2N1bWVudENlbnRlclwiO1xuaW1wb3J0IEZvb3RlciBmcm9tIFwiLi9jb21wb25lbnRzL0Zvb3RlclwiOyAvLyBGb290ZXJcdGltcG9ydCBGb290ZXIgZnJvbSBcIi4vY29tcG9uZW50cy9Gb290ZXJcIjsgLy8gSG9tZVxuXG4vLyBpbXBvcnQgeyBzcCB9IGZyb20gXCJAcG5wL3NwXCI7XG5pbXBvcnQgeyBTZXNzaW9uIH0gZnJvbSBcIkBwbnAvc3AtdGF4b25vbXlcIjtcblxuZnVuY3Rpb24gcShxdWVyeSkge1xuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihxdWVyeSk7XG59XG5cbmZ1bmN0aW9uIGluZm9NZXNzYWdlKG0pIHtcbiAgY29uc29sZS5sb2coXCIlY1wiICsgbSwgXCJiYWNrZ3JvdW5kOiBwZXJ1OyBjb2xvcjogd2hpdGU7XCIpO1xufVxuXG53aW5kb3cuYXBwbHlCcmFuZGluZyA9IGZ1bmN0aW9uIGFwcGx5QnJhbmRpbmcoKSB7XG4gIHdpbmRvdy5xID0gcTsgLy8gZXhwb3NlIHRvIGJlIGFibGUgdG8gdXNlIGluIHRoZSBicm93c2VyJ3MgY29uc29sZVxuICBjb25zdCBwID0gd2luZG93LnBhZ2VDb250ZXh0OyAvLyBzaG9ydGhhbmQgdmFyaWFibGUgdG8gYmUgcmVmZXJlbmNlZCBiZWxvd1xuICB3aW5kb3cucCA9IHA7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGxldCBtID0gYPCfm6DvuI9EZXZlbG9wbWVudCBNb2Rl8J+boO+4j2A7XG4gICAgY29uc29sZS5sb2coXCIlY1wiICsgbSwgXCJiYWNrZ3JvdW5kOiAjZWViMTExOyBjb2xvcjogYmxhY2s7XCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKGArRW52aXJvbm1lbnQgVmFyaWFibGVzOiAke0pTT04uc3RyaW5naWZ5KHZhcnMsIG51bGwsIDIpfWApO1xuICB9XG5cbiAgLyoqKlxuICAgKiBTZWFyY2hib3hcbiAgICovXG4gIGxldCBzZWFyY2hCb3g7XG4gIGxldCBzZWFyY2hCb3hJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgc2VhcmNoQm94ID0gcShcIiNPMzY1X1NlYXJjaEJveENvbnRhaW5lciBmb3JtIGlucHV0XCIpO1xuICAgIGlmIChzZWFyY2hCb3gpIHtcbiAgICAgIHNlYXJjaEJveC5wbGFjZWhvbGRlciA9IFwiRmluZCBOZXdzLCBQYWdlcyBhbmQgRG9jdW1lbnRzXCI7XG4gICAgICBzZWFyY2hCb3guc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNsZWFySW50ZXJ2YWwoc2VhcmNoQm94SW50ZXJ2YWwpO1xuICAgIH1cbiAgICBpbmZvTWVzc2FnZShcIkluc2lkZSBzZWFyY2hCb3hJbnRlcnZhbFwiKTtcbiAgfSwgNTAwKTtcblxuICAvKioqUkVNT1ZFIGFmdGVyIHRlc3RpbmcqL1xuICAvLyBpbXBvcnQgeyBXZWIgfSBmcm9tIFwiQHBucC9zcFwiO1xuICAvLyBsZXQgdyA9IG5ldyBXZWIoYCR7bG9jYXRpb24ub3JpZ2lufS9zaXRlcy9pbnRyYW5ldGApO1xuXG4gIC8vIGdldCBhbGwgdGhlIGl0ZW1zIGZyb20gYSBsaXN0XG4gIC8vIHcubGlzdHNcbiAgLy8gICAuZ2V0QnlUaXRsZShcIm9wdGlvbnNcIilcbiAgLy8gICAuaXRlbXMuZ2V0KClcbiAgLy8gICAudGhlbihpdGVtcyA9PiB7XG4gIC8vICAgICAvLyBjb25zb2xlLmxvZyhpdGVtcyk7XG4gIC8vICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShpdGVtcy5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKSwgbnVsbCwgNCkpO1xuICAvLyAgIH0pO1xuICAvKioqKioqKi9cblxuICAvKioqXG4gICAqIEdsb2JhbCBjb21wb25lbnRzXG4gICAqL1xuICBsZXQgdG9wUGxhY2Vob2xkZXIgPSBxKFwiZGl2W2RhdGEtc3AtcGxhY2Vob2xkZXI9J1RvcCddXCIpO1xuICAvLyBjb25zb2xlLmxvZyhgdG9wUGxhY2Vob2xkZXI6ICR7dG9wUGxhY2Vob2xkZXJ9YCk7XG4gIGlmICh0b3BQbGFjZWhvbGRlcikge1xuICAgIFJlYWN0RE9NLnJlbmRlcig8U3RvY2tUaWNrZXIgLz4sIHRvcFBsYWNlaG9sZGVyKTtcbiAgfVxuXG4gIC8qKipcbiAgICogQXBwbGllcyB0byBcIkhvbWVcIiBwYWdlXG4gICAqICAqL1xuICBjb25zdCBpc0ludHJhbmV0SG9tZSA9XG4gICAgcC5zaXRlLmFic29sdXRlVXJsLnRvTG93ZXJDYXNlKCkgPT09IHZhcnMuYmFzZVVybC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBob21lUGFnZVBhdGggPSBwLnNpdGUuc2VydmVyUmVxdWVzdFBhdGgudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGlzSW50cmFuZXRIb21lICYmIGhvbWVQYWdlUGF0aC5pbmNsdWRlcyhcImhvbWUuYXNweFwiKSkge1xuICAgIHZhciBpbnRlcnZhbEhvbWVDb21wb25lbnRzID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgLy8gUmVhY3RKUyBDb21wb25lbnRzXG4gICAgICBsZXQgcm9vdEVsZW1lbnRQcmVzc0NvdmVyYWdlID0gcShcbiAgICAgICAgYGRpdltkYXRhLXNwLWExMXktaWQ9XCJDb250cm9sWm9uZV8ke3ZhcnMucHJlc3NDb3ZlcmFnZVdlYlBhcnRJZH1cIl1gXG4gICAgICApLmNoaWxkcmVuWzBdO1xuXG4gICAgICBsZXQgcm9vdEVsZW1lbnRTdGF5SW5UaGVLbm93ID0gcShcbiAgICAgICAgYGRpdltkYXRhLXNwLWExMXktaWQ9XCJDb250cm9sWm9uZV8ke3ZhcnMuc3RheUluVGhlS25vd1dlYlBhcnRJZH1cIl1gXG4gICAgICApLmNoaWxkcmVuWzBdO1xuXG4gICAgICBpZiAocm9vdEVsZW1lbnRQcmVzc0NvdmVyYWdlICYmIHJvb3RFbGVtZW50U3RheUluVGhlS25vdykge1xuICAgICAgICAvLyBNb3VudGluZyBjb21wb25lbnRzXG4gICAgICAgIGNvbnNvbGUubG9nKFwiK0Fib3V0IHRvIG1vdW50IDxQcmVzc0NvdmVyYWdlLyA+XCIpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgK3Jvb3RFbGVtZW50UHJlc3NDb3ZlcmFnZSAke3Jvb3RFbGVtZW50UHJlc3NDb3ZlcmFnZX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYCR7UHJlc3NDb3ZlcmFnZX1gKTtcbiAgICAgICAgUmVhY3RET00ucmVuZGVyKDxQcmVzc0NvdmVyYWdlIC8+LCByb290RWxlbWVudFByZXNzQ292ZXJhZ2UpO1xuICAgICAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICAgICAgPFN0YXlJblRoZUtub3cgYmFzZVVybD17dmFycy5iYXNlVXJsfSAvPixcbiAgICAgICAgICByb290RWxlbWVudFN0YXlJblRoZUtub3dcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCIrQWJvdXQgdG8gY2xlYXJJbnRlcnZhbChpbnRlcnZhbEhvbWVDb21wb25lbnRzKVwiKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbEhvbWVDb21wb25lbnRzKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiK0luc2lkZSBpbnRlcnZhbEhvbWVDb21wb25lbnRzXCIpO1xuICAgIH0sIDMwMCk7IC8vIEl0IHNlZW1zIGxpa2UgIHRoaXMgaW50ZXJ2YWwgaXMgcmVxdWlyZWQgZm9yIHdoZW4gdXNpbmcgT09UQiB3ZWJwYXJ0cyBhcyB0aGUgZWxlbWVudHMgdG8gbW91bnRcblxuICAgIC8vIHZhciBpbnRlcnZhbEV2ZW50c0hlYWRpbmcgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgLy8gRXZlbnRzIFdlYiBQYXJ0ICdTZWUgYWxsJyBsaW5rXG4gICAgdmFyIHNlZUFsbEV2ZW50c0xpbmsgPSBxKCdkaXZbZGF0YS1zcC1mZWF0dXJlLXRhZ149XCJFdmVudHNXZWJQYXJ0XCJdIGEnKTtcblxuICAgIC8vIFRPRE86IE1ha2UgdGhlIFN0YXJ0RGF0ZSAmIEVuZERhdGUgZHluYW1pYyB1c2luZyBtb21lbnQuanMgYW5kIHRoZSBjdXJyZW50IGRhdGVcbiAgICBpZiAoc2VlQWxsRXZlbnRzTGluaykge1xuICAgICAgc2VlQWxsRXZlbnRzTGluay5ocmVmID1cbiAgICAgICAgc2VlQWxsRXZlbnRzTGluay5ocmVmICtcbiAgICAgICAgXCImQ2F0ZWdvcnk9JlN0YXJ0RGF0ZT0yMDE5LTAzLTEzJkVuZERhdGU9MjAxOS0xMi0zMVwiO1xuICAgICAgLy8gY2xlYXJJbnRlcnZhbChpbnRlcnZhbEV2ZW50c0hlYWRpbmcpO1xuICAgIH1cbiAgICAvLyB9LCAzMDApO1xuICB9XG5cbiAgLyoqKlxuICAgKiBPdXQtb2YtdGhlLWJveCBcIkV2ZW50XCIgcGFnZVxuICAgKi9cbiAgY29uc3QgZXZlbnRQYWdlUGF0aCA9IHAuc2l0ZS5zZXJ2ZXJSZXF1ZXN0UGF0aC50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZXZlbnRQYWdlUGF0aC5pbmNsdWRlcyhcImV2ZW50LmFzcHhcIikpIHtcbiAgICBsZXQgc2VlQWxsRXZlbnRzTGluayA9IHEoJ3NlY3Rpb25bY2xhc3NePVwic2VlQWxsRXZlbnRzX1wiXSBhJyk7XG4gICAgLy8gVE9ETzogTWFrZSB0aGUgU3RhcnREYXRlICYgRW5kRGF0ZSBkeW5hbWljIHVzaW5nIG1vbWVudC5qcyBhbmQgdGhlIGN1cnJlbnQgZGF0ZVxuICAgIGlmIChzZWVBbGxFdmVudHNMaW5rKSB7XG4gICAgICBzZWVBbGxFdmVudHNMaW5rLmhyZWYgPVxuICAgICAgICBzZWVBbGxFdmVudHNMaW5rLmhyZWYgK1xuICAgICAgICBcIiZDYXRlZ29yeT0mU3RhcnREYXRlPTIwMTktMDMtMTMmRW5kRGF0ZT0yMDE5LTEyLTMxXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqKlxuICAgKiBcIkRvY3VtZW50IENlbnRlclwiIHBhZ2VcbiAgICovXG4gIGNvbnN0IGRvY3VtZW50c0NlbnRlclBhZ2VQYXRoID0gcC5zaXRlLnNlcnZlclJlcXVlc3RQYXRoLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChkb2N1bWVudHNDZW50ZXJQYWdlUGF0aC5pbmNsdWRlcyhcImRvY3VtZW50Y2VudGVyLmFzcHhcIikpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIisgRG9jdW1lbnRDZW50ZXIuYXNweCBwYWdlIVwiKTtcblxuICAgIC8vIFRPRE86IEdldCBpbmZvcm1hdGlvbiBmcm9tIFwiUGFnZSBkZXRhaWxzXCJcbiAgICBjb25zdCB0YXhvbm9teSA9IG5ldyBTZXNzaW9uKHAubGVnYWN5UGFnZUNvbnRleHQud2ViQWJzb2x1dGVVcmwpO1xuICAgIGNvbnN0IHN0b3JlID0gdGF4b25vbXkudGVybVN0b3Jlcy5nZXRCeU5hbWUoXG4gICAgICBcIlRheG9ub215X1JFK2YvVTd4ckx2VnhsanlZV1RtWGc9PVwiXG4gICAgKTtcblxuICAgIHN0b3JlXG4gICAgICAuZ2V0VGVybVNldEJ5SWQoXCJlN2RmYTQ5ZC01NjI3LTQ3NWQtODM0Mi04M2RmNDJjMDRkY2VcIilcbiAgICAgIC8vIC50ZXJtcy5zZWxlY3QoXCJJZFwiLCBcIk5hbWVcIiwgXCJQYXRoT2ZUZXJtXCIpXG4gICAgICAudGVybXMuc2VsZWN0KClcbiAgICAgIC5nZXQoKVxuICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgIGNvbnN0IGRlcGFydG1lbnQgPSBcIkNvcnBvcmF0ZVwiO1xuICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gZGF0YS5maWx0ZXIodGVybSA9PlxuICAgICAgICAgIHRlcm0uUGF0aE9mVGVybS5pbmNsdWRlcyhgJHtkZXBhcnRtZW50fTtDYXRlZ29yaWVzO2ApXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY2F0ZWdvcmllc1swXSwgbnVsbCwgNCkpO1xuXG4gICAgICAgIGNvbnN0IHNpdGVSZWxhdGl2ZVVybCA9IHAuc2l0ZS5zZXJ2ZXJSZWxhdGl2ZVVybDtcbiAgICAgICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgICAgIDxEb2N1bWVudENlbnRlciBjYXRlZ29yaWVzPXtjYXRlZ29yaWVzfSBzaXRlVVJMPXtzaXRlUmVsYXRpdmVVcmx9IC8+LFxuICAgICAgICAgIHEoXCIjc3BQYWdlQ2FudmFzQ29udGVudCAuQ2FudmFzQ29tcG9uZW50XCIpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKipcbiAgICogVE9ETzogYXBwbHkgdGhpcyB0byBhbGwgQXVkaW8gQXJ0aWNsZXMgdHlwZXNcbiAgICogSGlkZSBhdWRpbyBwbGF5ZXIncyBhZGRpdGlvbmFsIGNvbnRyb2xzXG4gICAqICovXG5cbiAgLy8gaWYgKFxuICAvLyAgIGxvY2F0aW9uLnBhdGhuYW1lID09PSBcIi9zaXRlcy9pbnRyYW5ldC9TaXRlUGFnZXMvUnVzdHktUTMtMjAxOC1NZXNzYWdlLmFzcHhcIlxuICAvLyApIHtcbiAgLy8gICB2YXIgaW50ZXJ2YWxJZnJhbWUgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gIC8vICAgICAvL2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJpZnJhbWVbYWxsb3dmdWxsc2NyZWVuXVwiKS5jb250ZW50V2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21lZGlhUGxheWVyQWRkaXRpb25hbENvbnRyb2xzJylbMF0uc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJkaXNwbGF5Om5vbmVcIik7XG4gIC8vICAgICB2YXIgaWZyYW1lID0gcShcImlmcmFtZVthbGxvd2Z1bGxzY3JlZW5dXCIpO1xuICAvLyAgICAgLy8gY29uc29sZS5sb2coaWZyYW1lKTtcblxuICAvLyAgICAgaWYgKGlmcmFtZSkge1xuICAvLyAgICAgICBsZXQgbWVkaWFDb250cm9scyA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG4gIC8vICAgICAgICAgXCJtZWRpYVBsYXllckFkZGl0aW9uYWxDb250cm9sc1wiXG4gIC8vICAgICAgICk7XG4gIC8vICAgICAgIGlmIChtZWRpYUNvbnRyb2xzLmxlbmd0aCkge1xuICAvLyAgICAgICAgIG1lZGlhQ29udHJvbHNbMF0ucGFyZW50RWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwoXG4gIC8vICAgICAgICAgICBcImFmdGVyYmVnaW5cIixcbiAgLy8gICAgICAgICAgIFwiPHN0eWxlIHNjb3BlZD51bC5tZWRpYVBsYXllckFkZGl0aW9uYWxDb250cm9sc3sgZGlzcGxheTpub25lOyB9PC9zdHlsZT5cIlxuICAvLyAgICAgICAgICk7XG4gIC8vICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElmcmFtZSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9LCAxMDAwKTtcbiAgLy8gfVxuXG4gIC8qKipcbiAgICogRm9vdGVyXG4gICAqL1xuXG4gIHZhciBkb2NzUGFnZSA9IHAubGVnYWN5UGFnZUNvbnRleHQuc2VydmVyUmVxdWVzdFBhdGhcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5pbmNsdWRlcyhcInNoYXJlZCBkb2N1bWVudHNcIik7XG4gIHZhciBldmVudHNQYWdlID1cbiAgICBwLmxlZ2FjeVBhZ2VDb250ZXh0LnNlcnZlclJlcXVlc3RQYXRoXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLmluY2x1ZGVzKFwiZXZlbnRzLmFzcHhcIikgfHxcbiAgICBwLmxlZ2FjeVBhZ2VDb250ZXh0LnNlcnZlclJlcXVlc3RQYXRoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJldmVudC5hc3B4XCIpO1xuICBpZiAoIWRvY3NQYWdlICYmICFldmVudHNQYWdlKSB7XG4gICAgLy8gZG8gbm90IGV4ZWN1dGUgaWYgdmlld2luZyB0aGUgRG9jdW1lbnQgTGlicmFyeSBvciBFdmVudHMgcGFnZVxuICAgIC8vIHZhciBpbnRlcnZhbEZvb3RlciA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIitJbnNpZGUgZm9vdGVyIGludGVydmFsXCIpO1xuICAgIGxldCBjdXN0b21Gb290ZXJBcmVhID0gcShcIiNjdXN0b20tZm9vdGVyLWFyZWFcIik7XG4gICAgaWYgKCFjdXN0b21Gb290ZXJBcmVhKSB7XG4gICAgICBsZXQgY2FudmFzV3JhcHBlckVsZW1lbnQgPSBxKCdkaXZbY2xhc3NePVwiY2FudmFzV3JhcHBlcl9cIl0nKTtcbiAgICAgIGlmIChjYW52YXNXcmFwcGVyRWxlbWVudCkge1xuICAgICAgICBjYW52YXNXcmFwcGVyRWxlbWVudC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgICAgICAgXCJhZnRlcmVuZFwiLFxuICAgICAgICAgICc8ZGl2IGlkPVwiY3VzdG9tLWZvb3Rlci1hcmVhXCI+PC9kaXY+J1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1vdW50IGZvb3RlciBjb21wb25lbnRcbiAgICAgICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgICAgIDxGb290ZXIgYmFzZVVybD17dmFycy5iYXNlVXJsfSAvPixcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImN1c3RvbS1mb290ZXItYXJlYVwiKVxuICAgICAgICApO1xuICAgICAgICAvLyBjbGVhckludGVydmFsKGludGVydmFsRm9vdGVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCBITVIgaXMgYWJsZSB0byByZW5kZXIgdGhlIGNoYW5nZXMgb24gaG90IHVwZGF0ZXMgZHVyaW5nIGRldmVsb3BtZW50XG4gICAgICAvLyBNb3VudCBmb290ZXIgY29tcG9uZW50XG4gICAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICAgIDxGb290ZXIgYmFzZVVybD17dmFycy5iYXNlVXJsfSAvPixcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjdXN0b20tZm9vdGVyLWFyZWFcIilcbiAgICAgICk7XG4gICAgICAvLyBjbGVhckludGVydmFsKGludGVydmFsRm9vdGVyKTtcbiAgICB9XG4gICAgLy8gfSwgMzAwKTtcbiAgfVxufTtcblxuLy8gT24gaW5pdGlhbCBwYWdlIGxvYWQgZXhlY3V0ZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uXG53aW5kb3cuYXBwbHlCcmFuZGluZygpO1xuXG4vLyBFbmFibGVzIEhvdCBNb2R1bGUgUmVsb2FkaW5nIChITVIpIGR1cmluZyBEZXZlbG9wbWVudFxuaWYgKG1vZHVsZS5ob3QpIHtcbiAgbW9kdWxlLmhvdC5hY2NlcHQoKTtcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE1NTg1MzUwMjk2NDVcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiIS4uL25vZGVfbW9kdWxlcy9jc3MtaG90LWxvYWRlci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImZpbGVNYXBcIjpcIntmaWxlTmFtZX1cIn0pO1xuICAgICAgbW9kdWxlLmhvdC5kaXNwb3NlKGNzc1JlbG9hZCk7XG4gICAgICBtb2R1bGUuaG90LmFjY2VwdCh1bmRlZmluZWQsIGNzc1JlbG9hZCk7O1xuICAgIH1cbiAgIl0sInNvdXJjZVJvb3QiOiIifQ==
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment