-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdomo.js
3 lines (3 loc) · 37.6 KB
/
domo.js
1
2
3
/*! For license information please see domo.js.LICENSE.txt */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.domo=t():e.domo=t()}(self,(function(){return(()=>{"use strict";var e={727:(e,t,r)=>{var o=r(554),n=r(206),a=function(){function e(){}return e.post=function(e,t,r){return i(o.RequestMethods.POST,e,r,!0,t)},e.put=function(e,t,r){return i(o.RequestMethods.PUT,e,r,!0,t)},e.get=function(e,t){return i(o.RequestMethods.GET,e,t)},e.delete=function(e,t){return i(o.RequestMethods.DELETE,e,t)},e.getAll=function(t,r){return Promise.all(t.map((function(t){return e.get(t,r)})))},e.onDataUpdate=function(e){function t(t){if(c(t.origin)&&"string"==typeof t.data&&t.data.length>0)try{var r=JSON.parse(t.data);if(!r.hasOwnProperty("alias"))return;var o=r.alias,n=JSON.stringify({event:"ack",alias:o});t.source instanceof MessagePort||t.source instanceof ServiceWorker||t.source.postMessage(n,t.origin),e(o)}catch(e){console.warn("There was an error in onDataUpdate! It may be that our event listener caught a message from another source and tried to parse it, so your update still may have worked. If you would like more info, here is the error: \n",e)}}return window.addEventListener("message",t),function(){return window.removeEventListener("message",t)}},e.navigate=function(e,t){var r=JSON.stringify({event:"navigate",url:e,isNewWindow:t});window.parent.postMessage(r,"*")},e.filterContainer=function(e){var t=window.navigator.userAgent.toLowerCase(),r=/safari/.test(t),o=/iphone|ipod|ipad/.test(t),n=JSON.stringify({event:"filter",filter:e&&e.map((function(e){return{columnName:e.column,operator:e.operator||e.operand,values:e.values,dataType:e.dataType}}))});o&&!r?window.webkit.messageHandlers.domofilter.postMessage(e&&e.map((function(e){return{column:e.column,operand:e.operator||e.operand,values:e.values,dataType:e.dataType}}))):window.parent.postMessage(n,"*")},e.connected=!1,e.listeners={onFiltersUpdate:[]},e.connect=function(){e.connected||(e.connected=!0,e.channel=new MessageChannel,window.parent.postMessage(JSON.stringify({event:"subscribe"}),"*",[e.channel.port2]))},e.onFiltersUpdate=function(t){e.connect();var r=e.listeners.onFiltersUpdate.push(t)-1;return e.channel.port1.onmessage=function(t){var r=t.ports[0];void 0!==r&&"filtersUpdated"===t.data.event&&e.listeners.onFiltersUpdate.length>0&&(r.postMessage({}),e.listeners.onFiltersUpdate.forEach((function(e){return e(t.data.filters)})))},function(){e.listeners.onFiltersUpdate.splice(r,1)}},e.env=d(),e.__util={isVerifiedOrigin:c,getQueryParams:d,setFormatHeaders:p,isSuccess:u},e}(),s=window.__RYUU_SID__;function i(e,t,r,n,a){return r=r||{},new Promise((function(i,c){var d=new XMLHttpRequest;if(n?d.open(e,t,n):d.open(e,t),p(d,t,r),function(e,t){t.contentType?"multipart"!==t.contentType&&e.setRequestHeader("Content-Type",t.contentType):e.setRequestHeader("Content-Type",o.DataFormats.JSON)}(d,r),function(e){s&&e.setRequestHeader("X-DOMO-Ryuu-Session",s)}(d),function(e,t){void 0!==t.responseType&&(e.responseType=t.responseType)}(d,r),d.onload=function(){var e;if(u(d.status)){!["csv","excel"].includes(r.format)&&d.response||i(d.response),"blob"===r.responseType&&i(new Blob([d.response],{type:d.getResponseHeader("content-type")}));var t=d.response;try{e=JSON.parse(t)}catch(e){return void c(Error("Invalid JSON response"))}i(e)}else c(Error(d.statusText))},d.onerror=function(){c(Error("Network Error"))},a)if(r.contentType&&r.contentType!==o.DataFormats.JSON)d.send(a);else{var f=JSON.stringify(a);d.send(f)}else d.send()}))}function u(e){return e>=200&&e<300}function c(e){var t=e.match("^https?://([^/]+[.])?(domo|domotech|domorig).(com|io)?(/.*)?$"),r=e.match("(.*).(domoapps).(.*)");return!!t&&!r}function d(){var e=location.search.substr(1),t={};return e.split("&").forEach((function(e){var r=e.split("=");t[r[0]]=decodeURIComponent(r[1])})),t}function p(e,t,r){if(-1!==t.indexOf("data/v")){var a=void 0!==r.format?(0,n.domoFormatToRequestFormat)(r.format):o.DataFormats.DEFAULT;e.setRequestHeader("Accept",a)}}function f(e){if(e===document.body||e===document.head)return l(e);var t=e.dataset&&e.dataset.domoHref||e.getAttribute("href"),r=e.dataset&&e.dataset.domoSrc||e.getAttribute("src"),o=t?"href":"src",n=t||r;if(n&&s){var a=new URL(n,document.location.origin);a.origin===document.location.origin&&(a.searchParams.append("ryuu-sid",s),e.setAttribute(o,a.href))}}function l(e){for(var t=0;t<e.children.length;t++)f(e.children[t])}var m=new MutationObserver((function(e){for(var t=0,r=e;t<r.length;t++)l(r[t].target)}));m.observe(document.body,{childList:!0,subtree:!0}),m.observe(document.head,{childList:!0,subtree:!0}),e.exports=a},548:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.DataFormats=void 0,(r=t.DataFormats||(t.DataFormats={})).DEFAULT="application/array-of-objects",r.ARRAY_OF_OBJECTS="application/array-of-objects",r.JSON="application/json",r.CSV="text/csv",r.EXCEL="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",r.PLAIN="text/plain"},64:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.RequestMethods=void 0,(r=t.RequestMethods||(t.RequestMethods={})).get="GET",r.GET="GET",r.post="POST",r.POST="POST",r.put="PUT",r.PUT="PUT",r.delete="DELETE",r.DELETE="DELETE"},554:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FilterDataTypes=t.DataFormats=t.RequestMethods=void 0;var o=r(64);Object.defineProperty(t,"RequestMethods",{enumerable:!0,get:function(){return o.RequestMethods}});var n=r(548);Object.defineProperty(t,"DataFormats",{enumerable:!0,get:function(){return n.DataFormats}});var a=r(616);Object.defineProperty(t,"FilterDataTypes",{enumerable:!0,get:function(){return a.FilterDataTypes}})},616:(e,t)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.FilterDataTypes=void 0,(r=t.FilterDataTypes||(t.FilterDataTypes={})).NUMERIC="NUMERIC",r.DATE="DATE",r.DATETIME="DATETIME",r.STRING="STRING"},206:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.domoFormatToRequestFormat=void 0;var o=r(554);t.domoFormatToRequestFormat=function(e){switch(e){case"array-of-objects":return o.DataFormats.ARRAY_OF_OBJECTS;case"array-of-arrays":return o.DataFormats.JSON;case"excel":return o.DataFormats.EXCEL;case"csv":return o.DataFormats.CSV;default:return o.DataFormats.DEFAULT}}}},t={};return function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}(727)})()}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUcvQzNLLEVBQU9ELFFDbEJXNEssQ0FBb0IsTVJPOUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9kb21vL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9kb21vLy4vc3JjL2RvbW8udHMiLCJ3ZWJwYWNrOi8vZG9tby8uL3NyYy9tb2RlbHMvZW51bXMvZGF0YS1mb3JtYXRzLnRzIiwid2VicGFjazovL2RvbW8vLi9zcmMvbW9kZWxzL2VudW1zL3JlcXVlc3QtbWV0aG9kcy50cyIsIndlYnBhY2s6Ly9kb21vLy4vc3JjL21vZGVscy9pbmRleC50cyIsIndlYnBhY2s6Ly9kb21vLy4vc3JjL21vZGVscy9pbnRlcmZhY2VzL2ZpbHRlci1kYXRhLXR5cGVzLnRzIiwid2VicGFjazovL2RvbW8vLi9zcmMvdXRpbHMvZGF0YS1oZWxwZXJzLnRzIiwid2VicGFjazovL2RvbW8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZG9tby93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiZG9tb1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJkb21vXCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiaW1wb3J0IHtcbiAgUmVxdWVzdE1ldGhvZHMsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBPYmplY3RSZXF1ZXN0T3B0aW9ucyxcbiAgQXJyYXlSZXF1ZXN0T3B0aW9ucyxcbiAgRGF0YUZvcm1hdHMsXG4gIFF1ZXJ5UGFyYW1zLFxuICBGaWx0ZXIsXG4gIFJlcXVlc3RCb2R5LFxuICBSZXNwb25zZUJvZHksXG4gIE9iamVjdFJlc3BvbnNlQm9keSxcbiAgQXJyYXlSZXNwb25zZUJvZHksXG59IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgZG9tb0Zvcm1hdFRvUmVxdWVzdEZvcm1hdCB9IGZyb20gXCIuL3V0aWxzL2RhdGEtaGVscGVyc1wiO1xuXG5leHBvcnQgPSBkb21vO1xuXG5jbGFzcyBkb21vIHtcbiAgc3RhdGljIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlc3BvbnNlQm9keT47XG4gIHN0YXRpYyBwb3N0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxUPjtcbiAgc3RhdGljIHBvc3Q8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gZG9tb0h0dHA8VD4oUmVxdWVzdE1ldGhvZHMuUE9TVCwgdXJsLCBvcHRpb25zLCB0cnVlLCBib2R5KTtcbiAgfVxuXG4gIHN0YXRpYyBwdXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFJlc3BvbnNlQm9keT47XG4gIHN0YXRpYyBwdXQ8VD4oXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgYm9keT86IFJlcXVlc3RCb2R5LFxuICAgIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPFQ+O1xuICBzdGF0aWMgcHV0PFQ+KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGJvZHk/OiBSZXF1ZXN0Qm9keSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIGRvbW9IdHRwPFQ+KFJlcXVlc3RNZXRob2RzLlBVVCwgdXJsLCBvcHRpb25zLCB0cnVlLCBib2R5KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogT2JqZWN0UmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxPYmplY3RSZXNwb25zZUJvZHlbXT47XG4gIHN0YXRpYyBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXJyYXlSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPEFycmF5UmVzcG9uc2VCb2R5PjtcbiAgc3RhdGljIGdldCh1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+O1xuICBzdGF0aWMgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xuICBzdGF0aWMgZ2V0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gZG9tb0h0dHA8VD4oUmVxdWVzdE1ldGhvZHMuR0VULCB1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZUJvZHk+O1xuICBzdGF0aWMgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+O1xuICBzdGF0aWMgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gZG9tb0h0dHA8VD4oUmVxdWVzdE1ldGhvZHMuREVMRVRFLCB1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgc3RhdGljIGdldEFsbChcbiAgICB1cmxzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBPYmplY3RSZXF1ZXN0T3B0aW9uc1xuICApOiBQcm9taXNlPE9iamVjdFJlc3BvbnNlQm9keVtdW10+O1xuICBzdGF0aWMgZ2V0QWxsKFxuICAgIHVybHM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM6IEFycmF5UmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxBcnJheVJlc3BvbnNlQm9keVtdPjtcbiAgc3RhdGljIGdldEFsbChcbiAgICB1cmxzOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZXNwb25zZUJvZHlbXT47XG4gIHN0YXRpYyBnZXRBbGw8VD4odXJsczogc3RyaW5nW10sIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VFtdPjtcbiAgc3RhdGljIGdldEFsbDxUPih1cmxzOiBzdHJpbmdbXSwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUW10+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICB1cmxzLm1hcChmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIHJldHVybiBkb21vLmdldDxUPih1cmwsIG9wdGlvbnMpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIExldCB0aGUgZG9tb2FwcCBvcHRpb25hbGx5IGhhbmRsZSBpdHMgb3duIGRhdGEgdXBkYXRlcy5cbiAgICovXG4gIHN0YXRpYyBvbkRhdGFVcGRhdGUoY2I6IChhbGlhczogc3RyaW5nKSA9PiB2b2lkKSB7XG4gICAgZnVuY3Rpb24gaW5uZXJDYWxsYmFjayhldmVudDogTWVzc2FnZUV2ZW50KSB7XG4gICAgICBpZiAoIWlzVmVyaWZpZWRPcmlnaW4oZXZlbnQub3JpZ2luKSkgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiYgZXZlbnQuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XG4gICAgICAgICAgaWYgKCFtZXNzYWdlLmhhc093blByb3BlcnR5KFwiYWxpYXNcIikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhbGlhcyA9IG1lc3NhZ2UuYWxpYXM7XG5cbiAgICAgICAgICAvLyBzZW5kIGFja25vd2xlZGdlbWVudCB0byBwcmV2ZW50IGF1dG9yZWZyZXNoXG4gICAgICAgICAgY29uc3QgYWNrID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZXZlbnQ6IFwiYWNrXCIsXG4gICAgICAgICAgICBhbGlhczogYWxpYXMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBPbmx5IFdpbmRvd1Byb3h5IHwgV2luZG93IGhhdmUgdGhlIHBvc3RNZXNzYWdlIG1ldGhvZCBhbmQgdGhlIHR5cGUgb2YgZXZlbnQuc291cmNlIHZhcmllcyBiZXR3ZWVuIGJyb3dzZXJzXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShldmVudC5zb3VyY2UgaW5zdGFuY2VvZiBNZXNzYWdlUG9ydCkgJiZcbiAgICAgICAgICAgICEoZXZlbnQuc291cmNlIGluc3RhbmNlb2YgU2VydmljZVdvcmtlcilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5wb3N0TWVzc2FnZShhY2ssIGV2ZW50Lm9yaWdpbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaW5mb3JtIGRvbW8gYXBwIHdoaWNoIGFsaWFzIGhhcyBiZWVuIHVwZGF0ZWRcbiAgICAgICAgICBjYihhbGlhcyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnN0IGluZm8gPVxuICAgICAgICAgICAgXCJUaGVyZSB3YXMgYW4gZXJyb3IgaW4gb25EYXRhVXBkYXRlISBJdCBtYXkgYmUgdGhhdCBvdXIgZXZlbnQgbGlzdGVuZXIgY2F1Z2h0IFwiICtcbiAgICAgICAgICAgIFwiYSBtZXNzYWdlIGZyb20gYW5vdGhlciBzb3VyY2UgYW5kIHRyaWVkIHRvIHBhcnNlIGl0LCBzbyB5b3VyIHVwZGF0ZSBzdGlsbCBtYXkgaGF2ZSB3b3JrZWQuIFwiICtcbiAgICAgICAgICAgIFwiSWYgeW91IHdvdWxkIGxpa2UgbW9yZSBpbmZvLCBoZXJlIGlzIHRoZSBlcnJvcjogXFxuXCI7XG4gICAgICAgICAgY29uc29sZS53YXJuKGluZm8sIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGlubmVyQ2FsbGJhY2spO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgaW5uZXJDYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogTGV0IHRoZSBkb21vYXBwIG9wdGlvbmFsbHkgaGFuZGxlIG90aGVyIGV2ZW50c1xuICAgKi9cbiAgc3RhdGljIGNoYW5uZWw/OiBNZXNzYWdlQ2hhbm5lbDtcbiAgc3RhdGljIGNvbm5lY3RlZCA9IGZhbHNlO1xuICBzdGF0aWMgbGlzdGVuZXJzOiB7IFtpbmRleDogc3RyaW5nXTogRnVuY3Rpb25bXSB9ID0ge1xuICAgIG9uRmlsdGVyc1VwZGF0ZTogW10sXG4gIH07XG5cbiAgc3RhdGljIGNvbm5lY3QgPSAoKSA9PiB7XG4gICAgaWYgKGRvbW8uY29ubmVjdGVkKSByZXR1cm47XG4gICAgZG9tby5jb25uZWN0ZWQgPSB0cnVlO1xuICAgIGRvbW8uY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoeyBldmVudDogXCJzdWJzY3JpYmVcIiB9KSwgXCIqXCIsIFtcbiAgICAgIGRvbW8uY2hhbm5lbC5wb3J0MixcbiAgICBdKTtcbiAgfTtcblxuICAvKipcbiAgICogTGV0IHRoZSBkb21vYXBwIGhhbmRsZSBpdHMgb3duIGZpbHRlciB1cGRhdGVzXG4gICAqL1xuICBzdGF0aWMgb25GaWx0ZXJzVXBkYXRlID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4ge1xuICAgIGRvbW8uY29ubmVjdCgpO1xuICAgIGNvbnN0IGluZGV4ID0gZG9tby5saXN0ZW5lcnMub25GaWx0ZXJzVXBkYXRlLnB1c2goY2FsbGJhY2spIC0gMTtcblxuICAgIGRvbW8uY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSAoZTogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBbcmVzcG9uc2VQb3J0XSA9IGUucG9ydHM7XG4gICAgICBpZiAocmVzcG9uc2VQb3J0ID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgICAgaWYgKFxuICAgICAgICBlLmRhdGEuZXZlbnQgPT09IFwiZmlsdGVyc1VwZGF0ZWRcIiAmJlxuICAgICAgICBkb21vLmxpc3RlbmVycy5vbkZpbHRlcnNVcGRhdGUubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlUG9ydC5wb3N0TWVzc2FnZSh7fSk7IC8vIFByZXZlbnRzIHRoZSBhcHAgZnJvbSByZWxvYWRpbmcuIFNheXMgd2UndmUgaGFuZGxlZCBpdFxuICAgICAgICBkb21vLmxpc3RlbmVycy5vbkZpbHRlcnNVcGRhdGUuZm9yRWFjaCgoY2IpID0+IGNiKGUuZGF0YS5maWx0ZXJzKSk7IC8vIDwtIHNwbGl0IG91dCBvbkZpbHRlcnNVcGRhdGUgc28gdGhhdCB5b3UgY2FuIGhhbmRsZSBlYWNoIG1lc3NhZ2UgZGlmZmVyZW50bHkgaGVyZVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyB1bnJlZ2lzdGVyXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvbW8ubGlzdGVuZXJzLm9uRmlsdGVyc1VwZGF0ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSBuYXZpZ2F0aW9uIGNoYW5nZVxuICAgKi9cbiAgc3RhdGljIG5hdmlnYXRlKHVybDogc3RyaW5nLCBpc05ld1dpbmRvdzogYm9vbGVhbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudDogXCJuYXZpZ2F0ZVwiLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBpc05ld1dpbmRvdzogaXNOZXdXaW5kb3csXG4gICAgfSk7XG4gICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtZXNzYWdlLCBcIipcIik7XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyQ29udGFpbmVyKGZpbHRlcnM6IEZpbHRlcltdIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksXG4gICAgICBzYWZhcmkgPSAvc2FmYXJpLy50ZXN0KHVzZXJBZ2VudCksXG4gICAgICBpb3MgPSAvaXBob25lfGlwb2R8aXBhZC8udGVzdCh1c2VyQWdlbnQpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGV2ZW50OiBcImZpbHRlclwiLFxuICAgICAgZmlsdGVyOlxuICAgICAgICBmaWx0ZXJzICYmXG4gICAgICAgIGZpbHRlcnMubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgY29sdW1uTmFtZTogZmlsdGVyLmNvbHVtbixcbiAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yIHx8IChmaWx0ZXIgYXMgYW55KS5vcGVyYW5kLCAvLyBNb3N0IGZpbHRlciBjb2RlIChpbmNsdWRpbmcgUGhvZW5peCkgc3RpbGwgdXNlcyBcIm9wZXJhbmRcIiBpbnN0ZWFkIG9mIFwib3BlcmF0b3JcIlxuICAgICAgICAgIHZhbHVlczogZmlsdGVyLnZhbHVlcyxcbiAgICAgICAgICBkYXRhVHlwZTogZmlsdGVyLmRhdGFUeXBlLFxuICAgICAgICB9KSksXG4gICAgfSk7XG5cbiAgICBpZiAoaW9zICYmICFzYWZhcmkpIHtcbiAgICAgICh3aW5kb3cgYXMgYW55KS53ZWJraXQubWVzc2FnZUhhbmRsZXJzLmRvbW9maWx0ZXIucG9zdE1lc3NhZ2UoXG4gICAgICAgIGZpbHRlcnMgJiZcbiAgICAgICAgICBmaWx0ZXJzLm1hcCgoZmlsdGVyKSA9PiAoe1xuICAgICAgICAgICAgY29sdW1uOiBmaWx0ZXIuY29sdW1uLFxuICAgICAgICAgICAgb3BlcmFuZDogZmlsdGVyLm9wZXJhdG9yIHx8IChmaWx0ZXIgYXMgYW55KS5vcGVyYW5kLFxuICAgICAgICAgICAgdmFsdWVzOiBmaWx0ZXIudmFsdWVzLFxuICAgICAgICAgICAgZGF0YVR5cGU6IGZpbHRlci5kYXRhVHlwZSxcbiAgICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UobWVzc2FnZSwgXCIqXCIpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBlbnYgPSBnZXRRdWVyeVBhcmFtcygpO1xuXG4gIHN0YXRpYyBfX3V0aWwgPSB7XG4gICAgaXNWZXJpZmllZE9yaWdpbixcbiAgICBnZXRRdWVyeVBhcmFtcyxcbiAgICBzZXRGb3JtYXRIZWFkZXJzLFxuICAgIGlzU3VjY2VzcyxcbiAgfTtcbn1cblxuY29uc3QgdG9rZW4gPSAod2luZG93IGFzIGFueSkuX19SWVVVX1NJRF9fO1xuXG5mdW5jdGlvbiBkb21vSHR0cChcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IE9iamVjdFJlcXVlc3RPcHRpb25zLFxuICBhc3luYz86IGJvb2xlYW4sXG4gIGJvZHk/OiBSZXF1ZXN0Qm9keVxuKTogUHJvbWlzZTxPYmplY3RSZXNwb25zZUJvZHlbXT47XG5mdW5jdGlvbiBkb21vSHR0cChcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IEFycmF5UmVxdWVzdE9wdGlvbnMsXG4gIGFzeW5jPzogYm9vbGVhbixcbiAgYm9keT86IFJlcXVlc3RCb2R5XG4pOiBQcm9taXNlPEFycmF5UmVzcG9uc2VCb2R5PjtcbmZ1bmN0aW9uIGRvbW9IdHRwKFxuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzLFxuICB1cmw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMsXG4gIGFzeW5jPzogYm9vbGVhbixcbiAgYm9keT86IFJlcXVlc3RCb2R5XG4pOiBQcm9taXNlPFJlc3BvbnNlQm9keT47XG5mdW5jdGlvbiBkb21vSHR0cDxUPihcbiAgbWV0aG9kOiBSZXF1ZXN0TWV0aG9kcyxcbiAgdXJsOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLFxuICBhc3luYz86IGJvb2xlYW4sXG4gIGJvZHk/OiBSZXF1ZXN0Qm9keVxuKTogUHJvbWlzZTxUPjtcbmZ1bmN0aW9uIGRvbW9IdHRwKFxuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzLFxuICB1cmw6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMsXG4gIGFzeW5jPzogYm9vbGVhbixcbiAgYm9keT86IFJlcXVlc3RCb2R5XG4pOiBQcm9taXNlPFJlc3BvbnNlQm9keT4ge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChcbiAgICByZXNvbHZlOiAodmFsdWU/OiBSZXNwb25zZUJvZHkpID0+IHZvaWQsXG4gICAgcmVqZWN0OiAocmVhc29uPzogRXJyb3IpID0+IHZvaWRcbiAgKSB7XG4gICAgLy8gRG8gdGhlIHVzdWFsIFhIUiBzdHVmZlxuICAgIGxldCByZXE6IFhNTEh0dHBSZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgaWYgKGFzeW5jKSB7XG4gICAgICByZXEub3BlbihtZXRob2QsIHVybCwgYXN5bmMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEub3BlbihtZXRob2QsIHVybCk7XG4gICAgfVxuICAgIHNldEZvcm1hdEhlYWRlcnMocmVxLCB1cmwsIG9wdGlvbnMpO1xuICAgIHNldENvbnRlbnRIZWFkZXJzKHJlcSwgb3B0aW9ucyk7XG4gICAgc2V0QXV0aFRva2VuSGVhZGVyKHJlcSk7XG4gICAgc2V0UmVzcG9uc2VUeXBlKHJlcSwgb3B0aW9ucyk7XG5cbiAgICByZXEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IGRhdGE7XG4gICAgICAvLyBUaGlzIGlzIGNhbGxlZCBldmVuIG9uIDQwNCBldGMgc28gY2hlY2sgdGhlIHN0YXR1c1xuICAgICAgaWYgKGlzU3VjY2VzcyhyZXEuc3RhdHVzKSkge1xuICAgICAgICBpZiAoW1wiY3N2XCIsIFwiZXhjZWxcIl0uaW5jbHVkZXMob3B0aW9ucy5mb3JtYXQpIHx8ICFyZXEucmVzcG9uc2UpIHtcbiAgICAgICAgICByZXNvbHZlKHJlcS5yZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMucmVzcG9uc2VUeXBlID09PSBcImJsb2JcIikge1xuICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICBuZXcgQmxvYihbcmVxLnJlc3BvbnNlXSwge1xuICAgICAgICAgICAgICB0eXBlOiByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJjb250ZW50LXR5cGVcIiksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VTdHIgPSByZXEucmVzcG9uc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gaWYoIXJlc3BvbnNlU3RyKSB7XG4gICAgICAgICAgLy8gICByZXNwb25zZVN0ciA9IFwie31cIjtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UocmVzcG9uc2VTdHIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgSlNPTiByZXNwb25zZVwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgcmVzcG9uc2UgdGV4dFxuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHJlamVjdCB3aXRoIHRoZSBzdGF0dXMgdGV4dFxuICAgICAgICAvLyB3aGljaCB3aWxsIGhvcGVmdWxseSBiZSBhIG1lYW5pbmdmdWwgZXJyb3JcbiAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBuZXR3b3JrIGVycm9yc1xuICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XG4gICAgfTtcblxuICAgIC8vIE1ha2UgdGhlIHJlcXVlc3RcbiAgICBpZiAoYm9keSkge1xuICAgICAgaWYgKCFvcHRpb25zLmNvbnRlbnRUeXBlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgPT09IERhdGFGb3JtYXRzLkpTT04pIHtcbiAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgICAgICAvLyBNYWtlIHRoZSByZXF1ZXN0XG4gICAgICAgIHJlcS5zZW5kKGpzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYm9keSBjYW4gbm8gbG9uZ2VyIGJlIEpTT05cbiAgICAgICAgcmVxLnNlbmQoYm9keSBhcyBEb2N1bWVudCB8IFhNTEh0dHBSZXF1ZXN0Qm9keUluaXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXEuc2VuZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU3VjY2VzcyhzdGF0dXM6IG51bWJlcikge1xuICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG59XG5cbmZ1bmN0aW9uIGlzVmVyaWZpZWRPcmlnaW4ob3JpZ2luOiBzdHJpbmcpIHtcbiAgY29uc3Qgd2hpdGVsaXN0ZWQgPSBvcmlnaW4ubWF0Y2goXG4gICAgXCJeaHR0cHM/Oi8vKFteL10rWy5dKT8oZG9tb3xkb21vdGVjaHxkb21vcmlnKS4oY29tfGlvKT8oLy4qKT8kXCJcbiAgKTtcbiAgY29uc3QgYmxhY2tsaXN0ZWQgPSBvcmlnaW4ubWF0Y2goXCIoLiopLihkb21vYXBwcykuKC4qKVwiKTtcbiAgcmV0dXJuICEhd2hpdGVsaXN0ZWQgJiYgIWJsYWNrbGlzdGVkO1xufVxuXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcygpOiBRdWVyeVBhcmFtcyB7XG4gIGNvbnN0IHF1ZXJ5ID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKTtcbiAgbGV0IHJlc3VsdDogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHF1ZXJ5LnNwbGl0KFwiJlwiKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgY29uc3QgaXRlbSA9IHBhcnQuc3BsaXQoXCI9XCIpO1xuICAgIHJlc3VsdFtpdGVtWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChpdGVtWzFdKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNldEZvcm1hdEhlYWRlcnMoXG4gIHJlcTogWE1MSHR0cFJlcXVlc3QsXG4gIHVybDogc3RyaW5nLFxuICBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnNcbikge1xuICBpZiAodXJsLmluZGV4T2YoXCJkYXRhL3ZcIikgPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIHNldCBmb3JtYXRcbiAgY29uc3QgcmVxdWVzdEZvcm1hdDogRGF0YUZvcm1hdHMgPVxuICAgIG9wdGlvbnMuZm9ybWF0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZG9tb0Zvcm1hdFRvUmVxdWVzdEZvcm1hdChvcHRpb25zLmZvcm1hdClcbiAgICAgIDogRGF0YUZvcm1hdHMuREVGQVVMVDtcblxuICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLCByZXF1ZXN0Rm9ybWF0KTtcbn1cblxuZnVuY3Rpb24gc2V0Q29udGVudEhlYWRlcnMocmVxOiBYTUxIdHRwUmVxdWVzdCwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlKSB7XG4gICAgLy8gc2V0IGNvbnRlbnQgdHlwZSBpZiB1c2VyIHBhc3NlZCBvcHRpb25cbiAgICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSAhPT0gXCJtdWx0aXBhcnRcIikge1xuICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgb3B0aW9ucy5jb250ZW50VHlwZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIERhdGFGb3JtYXRzLkpTT04pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF1dGhUb2tlbkhlYWRlcihyZXE6IFhNTEh0dHBSZXF1ZXN0KSB7XG4gIGlmICh0b2tlbikge1xuICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiWC1ET01PLVJ5dXUtU2Vzc2lvblwiLCB0b2tlbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0UmVzcG9uc2VUeXBlKHJlcTogWE1MSHR0cFJlcXVlc3QsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykge1xuICAvL3NldCByZXNwb25zZSB0eXBlIGlmIHVzZXIgcGFzc2VkIG9wdGlvblxuICBpZiAob3B0aW9ucy5yZXNwb25zZVR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlcS5yZXNwb25zZVR5cGUgPSBvcHRpb25zLnJlc3BvbnNlVHlwZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVOb2RlKG5vZGU6IEhUTUxFbGVtZW50KSB7XG4gIGlmIChub2RlID09PSBkb2N1bWVudC5ib2R5IHx8IG5vZGUgPT09IGRvY3VtZW50LmhlYWQpXG4gICAgcmV0dXJuIHByb2Nlc3NCb2R5KG5vZGUpO1xuXG4gIGNvbnN0IGhyZWZBdHRyaWJ1dGUgPVxuICAgIChub2RlLmRhdGFzZXQgJiYgbm9kZS5kYXRhc2V0LmRvbW9IcmVmKSB8fCBub2RlLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XG4gIGNvbnN0IHNyY0F0dHJpYnV0ZSA9XG4gICAgKG5vZGUuZGF0YXNldCAmJiBub2RlLmRhdGFzZXQuZG9tb1NyYykgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoXCJzcmNcIik7XG4gIGNvbnN0IGF0dHIgPSBocmVmQXR0cmlidXRlID8gXCJocmVmXCIgOiBcInNyY1wiO1xuICBjb25zdCB1cmwgPSBocmVmQXR0cmlidXRlIHx8IHNyY0F0dHJpYnV0ZTtcblxuICBpZiAoIXVybCB8fCAhdG9rZW4pIHJldHVybjtcblxuICBjb25zdCBuZXdVcmwgPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKTtcbiAgY29uc3QgaXNSZWxhdGl2ZVVybCA9IG5ld1VybC5vcmlnaW4gPT09IGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbjtcbiAgaWYgKGlzUmVsYXRpdmVVcmwpIHtcbiAgICBuZXdVcmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcInJ5dXUtc2lkXCIsIHRva2VuKTtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCBuZXdVcmwuaHJlZik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0JvZHkobm9kZTogYW55KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGhhbmRsZU5vZGUoPEhUTUxFbGVtZW50Pm5vZGUuY2hpbGRyZW5baV0pO1xuICB9XG59XG5cbmNvbnN0IG9iID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICBmb3IgKGNvbnN0IHJlY29yZCBvZiBtdXRhdGlvbnMpIHtcbiAgICBwcm9jZXNzQm9keShyZWNvcmQudGFyZ2V0KTtcbiAgfVxufSk7XG5cbm9iLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG5vYi5vYnNlcnZlKGRvY3VtZW50LmhlYWQsIHsgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH0pO1xuIiwiLyoqXG4gKiBTdXBwb3J0ZWQgYGFjY2VwdGAgaGVhZGVycyBmb3IgY29udHJvbGxpbmcgdGhlIGZvcm1hdFxuICogb2YgdGhlIGRhdGEgcmV0dXJuZWQgZnJvbSBEb21vLlxuICpcbiAqIFNlZSBbZGV2ZWxvcGVyLmRvbW8uY29tXShodHRwczovL2RldmVsb3Blci5kb21vLmNvbS9kb2NzL2Rldi1zdHVkaW8tcmVmZXJlbmNlcy9kYXRhLWFwaSNEYXRhJTIwRm9ybWF0cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cbmV4cG9ydCBlbnVtIERhdGFGb3JtYXRzIHtcbiAgREVGQVVMVCA9ICdhcHBsaWNhdGlvbi9hcnJheS1vZi1vYmplY3RzJyxcbiAgQVJSQVlfT0ZfT0JKRUNUUyA9ICdhcHBsaWNhdGlvbi9hcnJheS1vZi1vYmplY3RzJyxcbiAgSlNPTiA9ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgQ1NWID0gJ3RleHQvY3N2JyxcbiAgRVhDRUwgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxuICBQTEFJTiA9ICd0ZXh0L3BsYWluJ1xufSIsImV4cG9ydCBlbnVtIFJlcXVlc3RNZXRob2RzIHtcbiAgZ2V0ID0gJ0dFVCcsXG4gIEdFVCA9ICdHRVQnLFxuICBwb3N0ID0gJ1BPU1QnLFxuICBQT1NUID0gJ1BPU1QnLFxuICBwdXQgPSAnUFVUJyxcbiAgUFVUID0gJ1BVVCcsXG4gIGRlbGV0ZSA9ICdERUxFVEUnLFxuICBERUxFVEUgPSAnREVMRVRFJyxcbn1cbiIsImV4cG9ydCB7IFJlcXVlc3RNZXRob2RzIH0gZnJvbSAnLi9lbnVtcy9yZXF1ZXN0LW1ldGhvZHMnO1xuZXhwb3J0IHsgRG9tb0RhdGFGb3JtYXRzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RvbW8tZGF0YS1mb3JtYXRzJztcbmV4cG9ydCB7IERhdGFGb3JtYXRzIH0gZnJvbSAnLi9lbnVtcy9kYXRhLWZvcm1hdHMnO1xuZXhwb3J0IHsgRmlsdGVyRGF0YVR5cGVzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1kYXRhLXR5cGVzJztcbmV4cG9ydCB7IEZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9maWx0ZXInO1xuXG5leHBvcnQgeyBSZXF1ZXN0T3B0aW9ucywgT2JqZWN0UmVxdWVzdE9wdGlvbnMsIEFycmF5UmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVxdWVzdC1vcHRpb25zJztcbmV4cG9ydCB7IFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3F1ZXJ5LXBhcmFtcyc7XG5leHBvcnQgeyBSZXF1ZXN0Qm9keSB9IGZyb20gJy4vaW50ZXJmYWNlcy9yZXF1ZXN0LWJvZHknO1xuZXhwb3J0IHsgUmVzcG9uc2VCb2R5LCBPYmplY3RSZXNwb25zZUJvZHksIEFycmF5UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3Jlc3BvbnNlLWJvZHknO1xuZXhwb3J0IHsgSnNvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9qc29uJztcbiIsImV4cG9ydCBlbnVtIEZpbHRlckRhdGFUeXBlc3tcbiAgTlVNRVJJQyA9IFwiTlVNRVJJQ1wiLFxuICBEQVRFID0gXCJEQVRFXCIsXG4gIERBVEVUSU1FID0gXCJEQVRFVElNRVwiLFxuICBTVFJJTkcgPSBcIlNUUklOR1wiLFxufVxuIiwiaW1wb3J0IHsgRG9tb0RhdGFGb3JtYXRzLCBEYXRhRm9ybWF0cyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkb21vRm9ybWF0VG9SZXF1ZXN0Rm9ybWF0KGZvcm1hdDogRG9tb0RhdGFGb3JtYXRzKTogRGF0YUZvcm1hdHMge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ2FycmF5LW9mLW9iamVjdHMnOiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuQVJSQVlfT0ZfT0JKRUNUUztcbiAgICB9XG4gICAgY2FzZSAnYXJyYXktb2YtYXJyYXlzJzoge1xuICAgICAgcmV0dXJuIERhdGFGb3JtYXRzLkpTT047XG4gICAgfVxuICAgIGNhc2UgJ2V4Y2VsJzoge1xuICAgICAgcmV0dXJuIERhdGFGb3JtYXRzLkVYQ0VMO1xuICAgIH1cbiAgICBjYXNlICdjc3YnOiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuQ1NWO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gRGF0YUZvcm1hdHMuREVGQVVMVDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzI3KTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwicG9zdCIsInVybCIsImJvZHkiLCJvcHRpb25zIiwiZG9tb0h0dHAiLCJSZXF1ZXN0TWV0aG9kcyIsIlBPU1QiLCJwdXQiLCJQVVQiLCJnZXQiLCJHRVQiLCJkZWxldGUiLCJERUxFVEUiLCJnZXRBbGwiLCJ1cmxzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImRvbW8iLCJvbkRhdGFVcGRhdGUiLCJjYiIsImlubmVyQ2FsbGJhY2siLCJldmVudCIsImlzVmVyaWZpZWRPcmlnaW4iLCJvcmlnaW4iLCJkYXRhIiwibGVuZ3RoIiwibWVzc2FnZSIsIkpTT04iLCJwYXJzZSIsImhhc093blByb3BlcnR5IiwiYWxpYXMiLCJhY2siLCJzdHJpbmdpZnkiLCJzb3VyY2UiLCJNZXNzYWdlUG9ydCIsIlNlcnZpY2VXb3JrZXIiLCJwb3N0TWVzc2FnZSIsImVyciIsImNvbnNvbGUiLCJ3YXJuIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJuYXZpZ2F0ZSIsImlzTmV3V2luZG93IiwicGFyZW50IiwiZmlsdGVyQ29udGFpbmVyIiwiZmlsdGVycyIsInVzZXJBZ2VudCIsIm5hdmlnYXRvciIsInRvTG93ZXJDYXNlIiwic2FmYXJpIiwidGVzdCIsImlvcyIsImZpbHRlciIsImNvbHVtbk5hbWUiLCJjb2x1bW4iLCJvcGVyYXRvciIsIm9wZXJhbmQiLCJ2YWx1ZXMiLCJkYXRhVHlwZSIsIndlYmtpdCIsIm1lc3NhZ2VIYW5kbGVycyIsImRvbW9maWx0ZXIiLCJjb25uZWN0ZWQiLCJsaXN0ZW5lcnMiLCJvbkZpbHRlcnNVcGRhdGUiLCJjb25uZWN0IiwiY2hhbm5lbCIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDIiLCJjYWxsYmFjayIsImluZGV4IiwicHVzaCIsInBvcnQxIiwib25tZXNzYWdlIiwiZSIsInJlc3BvbnNlUG9ydCIsInBvcnRzIiwidW5kZWZpbmVkIiwiZm9yRWFjaCIsInNwbGljZSIsImVudiIsImdldFF1ZXJ5UGFyYW1zIiwiX191dGlsIiwic2V0Rm9ybWF0SGVhZGVycyIsImlzU3VjY2VzcyIsInRva2VuIiwiX19SWVVVX1NJRF9fIiwibWV0aG9kIiwiYXN5bmMiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwiY29udGVudFR5cGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiRGF0YUZvcm1hdHMiLCJzZXRDb250ZW50SGVhZGVycyIsInNldEF1dGhUb2tlbkhlYWRlciIsInJlc3BvbnNlVHlwZSIsInNldFJlc3BvbnNlVHlwZSIsIm9ubG9hZCIsInN0YXR1cyIsImluY2x1ZGVzIiwiZm9ybWF0IiwicmVzcG9uc2UiLCJCbG9iIiwidHlwZSIsImdldFJlc3BvbnNlSGVhZGVyIiwicmVzcG9uc2VTdHIiLCJleCIsIkVycm9yIiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJzZW5kIiwianNvbiIsIndoaXRlbGlzdGVkIiwibWF0Y2giLCJibGFja2xpc3RlZCIsInF1ZXJ5IiwibG9jYXRpb24iLCJzZWFyY2giLCJzdWJzdHIiLCJyZXN1bHQiLCJzcGxpdCIsInBhcnQiLCJpdGVtIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaW5kZXhPZiIsInJlcXVlc3RGb3JtYXQiLCJkb21vRm9ybWF0VG9SZXF1ZXN0Rm9ybWF0IiwiREVGQVVMVCIsImhhbmRsZU5vZGUiLCJub2RlIiwiZG9jdW1lbnQiLCJoZWFkIiwicHJvY2Vzc0JvZHkiLCJocmVmQXR0cmlidXRlIiwiZGF0YXNldCIsImRvbW9IcmVmIiwiZ2V0QXR0cmlidXRlIiwic3JjQXR0cmlidXRlIiwiZG9tb1NyYyIsImF0dHIiLCJuZXdVcmwiLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJhcHBlbmQiLCJzZXRBdHRyaWJ1dGUiLCJocmVmIiwiaSIsImNoaWxkcmVuIiwib2IiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwidGFyZ2V0Iiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJGaWx0ZXJEYXRhVHlwZXMiLCJBUlJBWV9PRl9PQkpFQ1RTIiwiRVhDRUwiLCJDU1YiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sInNvdXJjZVJvb3QiOiIifQ==