mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
132 lines
293 KiB
JavaScript
Executable File
132 lines
293 KiB
JavaScript
Executable File
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
module.exports = factory();
|
|
else if(typeof define === 'function' && define.amd)
|
|
define([], factory);
|
|
else {
|
|
var a = factory();
|
|
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
|
}
|
|
})(self, function() {
|
|
return /******/ (function() { // webpackBootstrap
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
/***/ "./libs/plyr/plyr.js":
|
|
/*!***************************!*\
|
|
!*** ./libs/plyr/plyr.js ***!
|
|
\***************************/
|
|
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Plyr\": function() { return /* reexport default from dynamic */ plyr__WEBPACK_IMPORTED_MODULE_0___default.a; }\n/* harmony export */ });\n/* harmony import */ var plyr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! plyr */ \"./node_modules/plyr/dist/plyr.min.js\");\n/* harmony import */ var plyr__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(plyr__WEBPACK_IMPORTED_MODULE_0__);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWJzL3BseXIvcGx5ci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9WdWV4eS8uL2xpYnMvcGx5ci9wbHlyLmpzPzM5NTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBseXIgZnJvbSAncGx5cic7XG5cbmV4cG9ydCB7IFBseXIgfTtcbiJdLCJuYW1lcyI6WyJQbHlyIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./libs/plyr/plyr.js\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./node_modules/plyr/dist/plyr.min.js":
|
|
/*!********************************************!*\
|
|
!*** ./node_modules/plyr/dist/plyr.min.js ***!
|
|
\********************************************/
|
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
|
|
eval("\"object\"==typeof navigator&&function(e,t){ true?module.exports=t():0}(this,(function(){\"use strict\";function e(e,t,i){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var s=i.call(e,t||\"default\");if(\"object\"!=typeof s)return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function t(e,t){for(var i=0;i<t.length;i++){var s=t[i];s.enumerable=s.enumerable||!1,s.configurable=!0,\"value\"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}function i(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function s(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,s)}return i}function n(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var a={addCSS:!0,thumbWidth:15,watch:!0};var l=function(e){return null!=e?e.constructor:null},r=function(e,t){return!!(e&&t&&e instanceof t)},o=function(e){return null==e},c=function(e){return l(e)===Object},u=function(e){return l(e)===String},h=function(e){return Array.isArray(e)},d=function(e){return r(e,NodeList)},m={nullOrUndefined:o,object:c,number:function(e){return l(e)===Number&&!Number.isNaN(e)},string:u,boolean:function(e){return l(e)===Boolean},function:function(e){return l(e)===Function},array:h,nodeList:d,element:function(e){return r(e,Element)},event:function(e){return r(e,Event)},empty:function(e){return o(e)||(u(e)||h(e)||d(e))&&!e.length||c(e)&&!Object.keys(e).length}};function p(e,t){if(1>t){var i=function(e){var t=\"\".concat(e).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}(t);return parseFloat(e.toFixed(i))}return Math.round(e/t)*t}var g=function(){function e(t,i){(function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")})(this,e),m.element(t)?this.element=t:m.string(t)&&(this.element=document.querySelector(t)),m.element(this.element)&&m.empty(this.element.rangeTouch)&&(this.config=n({},a,{},i),this.init())}return function(e,i,s){i&&t(e.prototype,i),s&&t(e,s)}(e,[{key:\"init\",value:function(){e.enabled&&(this.config.addCSS&&(this.element.style.userSelect=\"none\",this.element.style.webKitUserSelect=\"none\",this.element.style.touchAction=\"manipulation\"),this.listeners(!0),this.element.rangeTouch=this)}},{key:\"destroy\",value:function(){e.enabled&&(this.config.addCSS&&(this.element.style.userSelect=\"\",this.element.style.webKitUserSelect=\"\",this.element.style.touchAction=\"\"),this.listeners(!1),this.element.rangeTouch=null)}},{key:\"listeners\",value:function(e){var t=this,i=e?\"addEventListener\":\"removeEventListener\";[\"touchstart\",\"touchmove\",\"touchend\"].forEach((function(e){t.element[i](e,(function(e){return t.set(e)}),!1)}))}},{key:\"get\",value:function(t){if(!e.enabled||!m.event(t))return null;var i,s=t.target,n=t.changedTouches[0],a=parseFloat(s.getAttribute(\"min\"))||0,l=parseFloat(s.getAttribute(\"max\"))||100,r=parseFloat(s.getAttribute(\"step\"))||1,o=s.getBoundingClientRect(),c=100/o.width*(this.config.thumbWidth/2)/100;return 0>(i=100/o.width*(n.clientX-o.left))?i=0:100<i&&(i=100),50>i?i-=(100-2*i)*c:50<i&&(i+=2*(i-50)*c),a+p(i/100*(l-a),r)}},{key:\"set\",value:function(t){e.enabled&&m.event(t)&&!t.target.disabled&&(t.preventDefault(),t.target.value=this.get(t),function(e,t){if(e&&t){var i=new Event(t,{bubbles:!0});e.dispatchEvent(i)}}(t.target,\"touchend\"===t.type?\"change\":\"input\"))}}],[{key:\"setup\",value:function(t){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},s=null;if(m.empty(t)||m.string(t)?s=Array.from(document.querySelectorAll(m.string(t)?t:'input[type=\"range\"]')):m.element(t)?s=[t]:m.nodeList(t)?s=Array.from(t):m.array(t)&&(s=t.filter(m.element)),m.empty(s))return null;var l=n({},a,{},i);if(m.string(t)&&l.watch){var r=new MutationObserver((function(i){Array.from(i).forEach((function(i){Array.from(i.addedNodes).forEach((function(i){m.element(i)&&function(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}(i,t)&&new e(i,l)}))}))}));r.observe(document.body,{childList:!0,subtree:!0})}return s.map((function(t){return new e(t,i)}))}},{key:\"enabled\",get:function(){return\"ontouchstart\"in document.documentElement}}]),e}();const f=e=>null!=e?e.constructor:null,y=(e,t)=>Boolean(e&&t&&e instanceof t),b=e=>null==e,v=e=>f(e)===Object,w=e=>f(e)===String,T=e=>\"function\"==typeof e,k=e=>Array.isArray(e),C=e=>y(e,NodeList),A=e=>b(e)||(w(e)||k(e)||C(e))&&!e.length||v(e)&&!Object.keys(e).length;var S={nullOrUndefined:b,object:v,number:e=>f(e)===Number&&!Number.isNaN(e),string:w,boolean:e=>f(e)===Boolean,function:T,array:k,weakMap:e=>y(e,WeakMap),nodeList:C,element:e=>null!==e&&\"object\"==typeof e&&1===e.nodeType&&\"object\"==typeof e.style&&\"object\"==typeof e.ownerDocument,textNode:e=>f(e)===Text,event:e=>y(e,Event),keyboardEvent:e=>y(e,KeyboardEvent),cue:e=>y(e,window.TextTrackCue)||y(e,window.VTTCue),track:e=>y(e,TextTrack)||!b(e)&&w(e.kind),promise:e=>y(e,Promise)&&T(e.then),url:e=>{if(y(e,window.URL))return!0;if(!w(e))return!1;let t=e;e.startsWith(\"http://\")&&e.startsWith(\"https://\")||(t=`http://${e}`);try{return!A(new URL(t).hostname)}catch(e){return!1}},empty:A};const E=(()=>{const e=document.createElement(\"span\"),t={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"},i=Object.keys(t).find((t=>void 0!==e.style[t]));return!!S.string(i)&&t[i]})();function P(e,t){setTimeout((()=>{try{e.hidden=!0,e.offsetHeight,e.hidden=!1}catch(e){}}),t)}var M={isIE:Boolean(window.document.documentMode),isEdge:/Edge/g.test(navigator.userAgent),isWebKit:\"WebkitAppearance\"in document.documentElement.style&&!/Edge/g.test(navigator.userAgent),isIPhone:/iPhone|iPod/gi.test(navigator.userAgent)&&navigator.maxTouchPoints>1,isIPadOS:\"MacIntel\"===navigator.platform&&navigator.maxTouchPoints>1,isIos:/iPad|iPhone|iPod/gi.test(navigator.userAgent)&&navigator.maxTouchPoints>1};function N(e,t){return t.split(\".\").reduce(((e,t)=>e&&e[t]),e)}function x(e={},...t){if(!t.length)return e;const i=t.shift();return S.object(i)?(Object.keys(i).forEach((t=>{S.object(i[t])?(Object.keys(e).includes(t)||Object.assign(e,{[t]:{}}),x(e[t],i[t])):Object.assign(e,{[t]:i[t]})})),x(e,...t)):e}function L(e,t){const i=e.length?e:[e];Array.from(i).reverse().forEach(((e,i)=>{const s=i>0?t.cloneNode(!0):t,n=e.parentNode,a=e.nextSibling;s.appendChild(e),a?n.insertBefore(s,a):n.appendChild(s)}))}function I(e,t){S.element(e)&&!S.empty(t)&&Object.entries(t).filter((([,e])=>!S.nullOrUndefined(e))).forEach((([t,i])=>e.setAttribute(t,i)))}function $(e,t,i){const s=document.createElement(e);return S.object(t)&&I(s,t),S.string(i)&&(s.innerText=i),s}function _(e,t,i,s){S.element(t)&&t.appendChild($(e,i,s))}function O(e){S.nodeList(e)||S.array(e)?Array.from(e).forEach(O):S.element(e)&&S.element(e.parentNode)&&e.parentNode.removeChild(e)}function j(e){if(!S.element(e))return;let{length:t}=e.childNodes;for(;t>0;)e.removeChild(e.lastChild),t-=1}function q(e,t){return S.element(t)&&S.element(t.parentNode)&&S.element(e)?(t.parentNode.replaceChild(e,t),e):null}function D(e,t){if(!S.string(e)||S.empty(e))return{};const i={},s=x({},t);return e.split(\",\").forEach((e=>{const t=e.trim(),n=t.replace(\".\",\"\"),a=t.replace(/[[\\]]/g,\"\").split(\"=\"),[l]=a,r=a.length>1?a[1].replace(/[\"']/g,\"\"):\"\";switch(t.charAt(0)){case\".\":S.string(s.class)?i.class=`${s.class} ${n}`:i.class=n;break;case\"#\":i.id=t.replace(\"#\",\"\");break;case\"[\":i[l]=r}})),x(s,i)}function H(e,t){if(!S.element(e))return;let i=t;S.boolean(i)||(i=!e.hidden),e.hidden=i}function R(e,t,i){if(S.nodeList(e))return Array.from(e).map((e=>R(e,t,i)));if(S.element(e)){let s=\"toggle\";return void 0!==i&&(s=i?\"add\":\"remove\"),e.classList[s](t),e.classList.contains(t)}return!1}function F(e,t){return S.element(e)&&e.classList.contains(t)}function V(e,t){const{prototype:i}=Element;return(i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function U(e){return this.elements.container.querySelectorAll(e)}function B(e){return this.elements.container.querySelector(e)}function W(e=null,t=!1){S.element(e)&&e.focus({preventScroll:!0,focusVisible:t})}const z={\"audio/ogg\":\"vorbis\",\"audio/wav\":\"1\",\"video/webm\":\"vp8, vorbis\",\"video/mp4\":\"avc1.42E01E, mp4a.40.2\",\"video/ogg\":\"theora\"},K={audio:\"canPlayType\"in document.createElement(\"audio\"),video:\"canPlayType\"in document.createElement(\"video\"),check(e,t){const i=K[e]||\"html5\"!==t;return{api:i,ui:i&&K.rangeInput}},pip:!(M.isIPhone||!S.function($(\"video\").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||$(\"video\").disablePictureInPicture)),airplay:S.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:\"playsInline\"in document.createElement(\"video\"),mime(e){if(S.empty(e))return!1;const[t]=e.split(\"/\");let i=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(z).includes(i)&&(i+=`; codecs=\"${z[e]}\"`);try{return Boolean(i&&this.media.canPlayType(i).replace(/no/,\"\"))}catch(e){return!1}},textTracks:\"textTracks\"in document.createElement(\"video\"),rangeInput:(()=>{const e=document.createElement(\"input\");return e.type=\"range\",\"range\"===e.type})(),touch:\"ontouchstart\"in document.documentElement,transitions:!1!==E,reducedMotion:\"matchMedia\"in window&&window.matchMedia(\"(prefers-reduced-motion)\").matches},Y=(()=>{let e=!1;try{const t=Object.defineProperty({},\"passive\",{get:()=>(e=!0,null)});window.addEventListener(\"test\",null,t),window.removeEventListener(\"test\",null,t)}catch(e){}return e})();function Q(e,t,i,s=!1,n=!0,a=!1){if(!e||!(\"addEventListener\"in e)||S.empty(t)||!S.function(i))return;const l=t.split(\" \");let r=a;Y&&(r={passive:n,capture:a}),l.forEach((t=>{this&&this.eventListeners&&s&&this.eventListeners.push({element:e,type:t,callback:i,options:r}),e[s?\"addEventListener\":\"removeEventListener\"](t,i,r)}))}function X(e,t=\"\",i,s=!0,n=!1){Q.call(this,e,t,i,!0,s,n)}function J(e,t=\"\",i,s=!0,n=!1){Q.call(this,e,t,i,!1,s,n)}function G(e,t=\"\",i,s=!0,n=!1){const a=(...l)=>{J(e,t,a,s,n),i.apply(this,l)};Q.call(this,e,t,a,!0,s,n)}function Z(e,t=\"\",i=!1,s={}){if(!S.element(e)||S.empty(t))return;const n=new CustomEvent(t,{bubbles:i,detail:{...s,plyr:this}});e.dispatchEvent(n)}function ee(){this&&this.eventListeners&&(this.eventListeners.forEach((e=>{const{element:t,type:i,callback:s,options:n}=e;t.removeEventListener(i,s,n)})),this.eventListeners=[])}function te(){return new Promise((e=>this.ready?setTimeout(e,0):X.call(this,this.elements.container,\"ready\",e))).then((()=>{}))}function ie(e){S.promise(e)&&e.then(null,(()=>{}))}function se(e){return S.array(e)?e.filter(((t,i)=>e.indexOf(t)===i)):e}function ne(e,t){return S.array(e)&&e.length?e.reduce(((e,i)=>Math.abs(i-t)<Math.abs(e-t)?i:e)):null}function ae(e){return!(!window||!window.CSS)&&window.CSS.supports(e)}const le=[[1,1],[4,3],[3,4],[5,4],[4,5],[3,2],[2,3],[16,10],[10,16],[16,9],[9,16],[21,9],[9,21],[32,9],[9,32]].reduce(((e,[t,i])=>({...e,[t/i]:[t,i]})),{});function re(e){if(!(S.array(e)||S.string(e)&&e.includes(\":\")))return!1;return(S.array(e)?e:e.split(\":\")).map(Number).every(S.number)}function oe(e){if(!S.array(e)||!e.every(S.number))return null;const[t,i]=e,s=(e,t)=>0===t?e:s(t,e%t),n=s(t,i);return[t/n,i/n]}function ce(e){const t=e=>re(e)?e.split(\":\").map(Number):null;let i=t(e);if(null===i&&(i=t(this.config.ratio)),null===i&&!S.empty(this.embed)&&S.array(this.embed.ratio)&&({ratio:i}=this.embed),null===i&&this.isHTML5){const{videoWidth:e,videoHeight:t}=this.media;i=[e,t]}return oe(i)}function ue(e){if(!this.isVideo)return{};const{wrapper:t}=this.elements,i=ce.call(this,e);if(!S.array(i))return{};const[s,n]=oe(i),a=100/s*n;if(ae(`aspect-ratio: ${s}/${n}`)?t.style.aspectRatio=`${s}/${n}`:t.style.paddingBottom=`${a}%`,this.isVimeo&&!this.config.vimeo.premium&&this.supported.ui){const e=100/this.media.offsetWidth*parseInt(window.getComputedStyle(this.media).paddingBottom,10),i=(e-a)/(e/50);this.fullscreen.active?t.style.paddingBottom=null:this.media.style.transform=`translateY(-${i}%)`}else this.isHTML5&&t.classList.add(this.config.classNames.videoFixedRatio);return{padding:a,ratio:i}}function he(e,t,i=.05){const s=e/t,n=ne(Object.keys(le),s);return Math.abs(n-s)<=i?le[n]:[e,t]}const de={getSources(){if(!this.isHTML5)return[];return Array.from(this.media.querySelectorAll(\"source\")).filter((e=>{const t=e.getAttribute(\"type\");return!!S.empty(t)||K.mime.call(this,t)}))},getQualityOptions(){return this.config.quality.forced?this.config.quality.options:de.getSources.call(this).map((e=>Number(e.getAttribute(\"size\")))).filter(Boolean)},setup(){if(!this.isHTML5)return;const e=this;e.options.speed=e.config.speed.options,S.empty(this.config.ratio)||ue.call(e),Object.defineProperty(e.media,\"quality\",{get(){const t=de.getSources.call(e).find((t=>t.getAttribute(\"src\")===e.source));return t&&Number(t.getAttribute(\"size\"))},set(t){if(e.quality!==t){if(e.config.quality.forced&&S.function(e.config.quality.onChange))e.config.quality.onChange(t);else{const i=de.getSources.call(e).find((e=>Number(e.getAttribute(\"size\"))===t));if(!i)return;const{currentTime:s,paused:n,preload:a,readyState:l,playbackRate:r}=e.media;e.media.src=i.getAttribute(\"src\"),(\"none\"!==a||l)&&(e.once(\"loadedmetadata\",(()=>{e.speed=r,e.currentTime=s,n||ie(e.play())})),e.media.load())}Z.call(e,e.media,\"qualitychange\",!1,{quality:t})}}})},cancelRequests(){this.isHTML5&&(O(de.getSources.call(this)),this.media.setAttribute(\"src\",this.config.blankVideo),this.media.load(),this.debug.log(\"Cancelled network requests\"))}};function me(e,...t){return S.empty(e)?e:e.toString().replace(/{(\\d+)}/g,((e,i)=>t[i].toString()))}const pe=(e=\"\",t=\"\",i=\"\")=>e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g,\"\\\\$1\"),\"g\"),i.toString()),ge=(e=\"\")=>e.toString().replace(/\\w\\S*/g,(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()));function fe(e=\"\"){let t=e.toString();return t=function(e=\"\"){let t=e.toString();return t=pe(t,\"-\",\" \"),t=pe(t,\"_\",\" \"),t=ge(t),pe(t,\" \",\"\")}(t),t.charAt(0).toLowerCase()+t.slice(1)}function ye(e){const t=document.createElement(\"div\");return t.appendChild(e),t.innerHTML}const be={pip:\"PIP\",airplay:\"AirPlay\",html5:\"HTML5\",vimeo:\"Vimeo\",youtube:\"YouTube\"},ve={get(e=\"\",t={}){if(S.empty(e)||S.empty(t))return\"\";let i=N(t.i18n,e);if(S.empty(i))return Object.keys(be).includes(e)?be[e]:\"\";const s={\"{seektime}\":t.seekTime,\"{title}\":t.title};return Object.entries(s).forEach((([e,t])=>{i=pe(i,e,t)})),i}};class we{constructor(t){e(this,\"get\",(e=>{if(!we.supported||!this.enabled)return null;const t=window.localStorage.getItem(this.key);if(S.empty(t))return null;const i=JSON.parse(t);return S.string(e)&&e.length?i[e]:i})),e(this,\"set\",(e=>{if(!we.supported||!this.enabled)return;if(!S.object(e))return;let t=this.get();S.empty(t)&&(t={}),x(t,e);try{window.localStorage.setItem(this.key,JSON.stringify(t))}catch(e){}})),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}static get supported(){try{if(!(\"localStorage\"in window))return!1;const e=\"___test\";return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}}function Te(e,t=\"text\"){return new Promise(((i,s)=>{try{const s=new XMLHttpRequest;if(!(\"withCredentials\"in s))return;s.addEventListener(\"load\",(()=>{if(\"text\"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)})),s.addEventListener(\"error\",(()=>{throw new Error(s.status)})),s.open(\"GET\",e,!0),s.responseType=t,s.send()}catch(e){s(e)}}))}function ke(e,t){if(!S.string(e))return;const i=\"cache\",s=S.string(t);let n=!1;const a=()=>null!==document.getElementById(t),l=(e,t)=>{e.innerHTML=t,s&&a()||document.body.insertAdjacentElement(\"afterbegin\",e)};if(!s||!a()){const a=we.supported,r=document.createElement(\"div\");if(r.setAttribute(\"hidden\",\"\"),s&&r.setAttribute(\"id\",t),a){const e=window.localStorage.getItem(`${i}-${t}`);if(n=null!==e,n){const t=JSON.parse(e);l(r,t.content)}}Te(e).then((e=>{if(!S.empty(e)){if(a)try{window.localStorage.setItem(`${i}-${t}`,JSON.stringify({content:e}))}catch(e){}l(r,e)}})).catch((()=>{}))}}const Ce=e=>Math.trunc(e/60/60%60,10),Ae=e=>Math.trunc(e/60%60,10),Se=e=>Math.trunc(e%60,10);function Ee(e=0,t=!1,i=!1){if(!S.number(e))return Ee(void 0,t,i);const s=e=>`0${e}`.slice(-2);let n=Ce(e);const a=Ae(e),l=Se(e);return n=t||n>0?`${n}:`:\"\",`${i&&e>0?\"-\":\"\"}${n}${s(a)}:${s(l)}`}const Pe={getIconUrl(){const e=new URL(this.config.iconUrl,window.location),t=window.location.host?window.location.host:window.top.location.host,i=e.host!==t||M.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:i}},findElements(){try{return this.elements.controls=B.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:U.call(this,this.config.selectors.buttons.play),pause:B.call(this,this.config.selectors.buttons.pause),restart:B.call(this,this.config.selectors.buttons.restart),rewind:B.call(this,this.config.selectors.buttons.rewind),fastForward:B.call(this,this.config.selectors.buttons.fastForward),mute:B.call(this,this.config.selectors.buttons.mute),pip:B.call(this,this.config.selectors.buttons.pip),airplay:B.call(this,this.config.selectors.buttons.airplay),settings:B.call(this,this.config.selectors.buttons.settings),captions:B.call(this,this.config.selectors.buttons.captions),fullscreen:B.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=B.call(this,this.config.selectors.progress),this.elements.inputs={seek:B.call(this,this.config.selectors.inputs.seek),volume:B.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:B.call(this,this.config.selectors.display.buffer),currentTime:B.call(this,this.config.selectors.display.currentTime),duration:B.call(this,this.config.selectors.display.duration)},S.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`)),!0}catch(e){return this.debug.warn(\"It looks like there is a problem with your custom controls HTML\",e),this.toggleNativeControls(!0),!1}},createIcon(e,t){const i=\"http://www.w3.org/2000/svg\",s=Pe.getIconUrl.call(this),n=`${s.cors?\"\":s.url}#${this.config.iconPrefix}`,a=document.createElementNS(i,\"svg\");I(a,x(t,{\"aria-hidden\":\"true\",focusable:\"false\"}));const l=document.createElementNS(i,\"use\"),r=`${n}-${e}`;return\"href\"in l&&l.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",r),l.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",r),a.appendChild(l),a},createLabel(e,t={}){const i=ve.get(e,this.config);return $(\"span\",{...t,class:[t.class,this.config.classNames.hidden].filter(Boolean).join(\" \")},i)},createBadge(e){if(S.empty(e))return null;const t=$(\"span\",{class:this.config.classNames.menu.value});return t.appendChild($(\"span\",{class:this.config.classNames.menu.badge},e)),t},createButton(e,t){const i=x({},t);let s=fe(e);const n={element:\"button\",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch([\"element\",\"icon\",\"label\"].forEach((e=>{Object.keys(i).includes(e)&&(n[e]=i[e],delete i[e])})),\"button\"!==n.element||Object.keys(i).includes(\"type\")||(i.type=\"button\"),Object.keys(i).includes(\"class\")?i.class.split(\" \").some((e=>e===this.config.classNames.control))||x(i,{class:`${i.class} ${this.config.classNames.control}`}):i.class=this.config.classNames.control,e){case\"play\":n.toggle=!0,n.label=\"play\",n.labelPressed=\"pause\",n.icon=\"play\",n.iconPressed=\"pause\";break;case\"mute\":n.toggle=!0,n.label=\"mute\",n.labelPressed=\"unmute\",n.icon=\"volume\",n.iconPressed=\"muted\";break;case\"captions\":n.toggle=!0,n.label=\"enableCaptions\",n.labelPressed=\"disableCaptions\",n.icon=\"captions-off\",n.iconPressed=\"captions-on\";break;case\"fullscreen\":n.toggle=!0,n.label=\"enterFullscreen\",n.labelPressed=\"exitFullscreen\",n.icon=\"enter-fullscreen\",n.iconPressed=\"exit-fullscreen\";break;case\"play-large\":i.class+=` ${this.config.classNames.control}--overlaid`,s=\"play\",n.label=\"play\",n.icon=\"play\";break;default:S.empty(n.label)&&(n.label=s),S.empty(n.icon)&&(n.icon=e)}const a=$(n.element);return n.toggle?(a.appendChild(Pe.createIcon.call(this,n.iconPressed,{class:\"icon--pressed\"})),a.appendChild(Pe.createIcon.call(this,n.icon,{class:\"icon--not-pressed\"})),a.appendChild(Pe.createLabel.call(this,n.labelPressed,{class:\"label--pressed\"})),a.appendChild(Pe.createLabel.call(this,n.label,{class:\"label--not-pressed\"}))):(a.appendChild(Pe.createIcon.call(this,n.icon)),a.appendChild(Pe.createLabel.call(this,n.label))),x(i,D(this.config.selectors.buttons[s],i)),I(a,i),\"play\"===s?(S.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(a)):this.elements.buttons[s]=a,a},createRange(e,t){const i=$(\"input\",x(D(this.config.selectors.inputs[e]),{type:\"range\",min:0,max:100,step:.01,value:0,autocomplete:\"off\",role:\"slider\",\"aria-label\":ve.get(e,this.config),\"aria-valuemin\":0,\"aria-valuemax\":100,\"aria-valuenow\":0},t));return this.elements.inputs[e]=i,Pe.updateRangeFill.call(this,i),g.setup(i),i},createProgress(e,t){const i=$(\"progress\",x(D(this.config.selectors.display[e]),{min:0,max:100,value:0,role:\"progressbar\",\"aria-hidden\":!0},t));if(\"volume\"!==e){i.appendChild($(\"span\",null,\"0\"));const t={played:\"played\",buffer:\"buffered\"}[e],s=t?ve.get(t,this.config):\"\";i.innerText=`% ${s.toLowerCase()}`}return this.elements.display[e]=i,i},createTime(e,t){const i=D(this.config.selectors.display[e],t),s=$(\"div\",x(i,{class:`${i.class?i.class:\"\"} ${this.config.classNames.display.time} `.trim(),\"aria-label\":ve.get(e,this.config),role:\"timer\"}),\"00:00\");return this.elements.display[e]=s,s},bindMenuItemShortcuts(e,t){X.call(this,e,\"keydown keyup\",(i=>{if(![\" \",\"ArrowUp\",\"ArrowDown\",\"ArrowRight\"].includes(i.key))return;if(i.preventDefault(),i.stopPropagation(),\"keydown\"===i.type)return;const s=V(e,'[role=\"menuitemradio\"]');if(!s&&[\" \",\"ArrowRight\"].includes(i.key))Pe.showMenuPanel.call(this,t,!0);else{let t;\" \"!==i.key&&(\"ArrowDown\"===i.key||s&&\"ArrowRight\"===i.key?(t=e.nextElementSibling,S.element(t)||(t=e.parentNode.firstElementChild)):(t=e.previousElementSibling,S.element(t)||(t=e.parentNode.lastElementChild)),W.call(this,t,!0))}}),!1),X.call(this,e,\"keyup\",(e=>{\"Return\"===e.key&&Pe.focusFirstMenuItem.call(this,null,!0)}))},createMenuItem({value:e,list:t,type:i,title:s,badge:n=null,checked:a=!1}){const l=D(this.config.selectors.inputs[i]),r=$(\"button\",x(l,{type:\"button\",role:\"menuitemradio\",class:`${this.config.classNames.control} ${l.class?l.class:\"\"}`.trim(),\"aria-checked\":a,value:e})),o=$(\"span\");o.innerHTML=s,S.element(n)&&o.appendChild(n),r.appendChild(o),Object.defineProperty(r,\"checked\",{enumerable:!0,get:()=>\"true\"===r.getAttribute(\"aria-checked\"),set(e){e&&Array.from(r.parentNode.children).filter((e=>V(e,'[role=\"menuitemradio\"]'))).forEach((e=>e.setAttribute(\"aria-checked\",\"false\"))),r.setAttribute(\"aria-checked\",e?\"true\":\"false\")}}),this.listeners.bind(r,\"click keyup\",(t=>{if(!S.keyboardEvent(t)||\" \"===t.key){switch(t.preventDefault(),t.stopPropagation(),r.checked=!0,i){case\"language\":this.currentTrack=Number(e);break;case\"quality\":this.quality=e;break;case\"speed\":this.speed=parseFloat(e)}Pe.showMenuPanel.call(this,\"home\",S.keyboardEvent(t))}}),i,!1),Pe.bindMenuItemShortcuts.call(this,r,i),t.appendChild(r)},formatTime(e=0,t=!1){if(!S.number(e))return e;return Ee(e,Ce(this.duration)>0,t)},updateTimeDisplay(e=null,t=0,i=!1){S.element(e)&&S.number(t)&&(e.innerText=Pe.formatTime(t,i))},updateVolume(){this.supported.ui&&(S.element(this.elements.inputs.volume)&&Pe.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),S.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange(e,t=0){S.element(e)&&(e.value=t,Pe.updateRangeFill.call(this,e))},updateProgress(e){if(!this.supported.ui||!S.event(e))return;let t=0;const i=(e,t)=>{const i=S.number(t)?t:0,s=S.element(e)?e:this.elements.display.buffer;if(S.element(s)){s.value=i;const e=s.getElementsByTagName(\"span\")[0];S.element(e)&&(e.childNodes[0].nodeValue=i)}};if(e)switch(e.type){case\"timeupdate\":case\"seeking\":case\"seeked\":s=this.currentTime,n=this.duration,t=0===s||0===n||Number.isNaN(s)||Number.isNaN(n)?0:(s/n*100).toFixed(2),\"timeupdate\"===e.type&&Pe.setRange.call(this,this.elements.inputs.seek,t);break;case\"playing\":case\"progress\":i(this.elements.display.buffer,100*this.buffered)}var s,n},updateRangeFill(e){const t=S.event(e)?e.target:e;if(S.element(t)&&\"range\"===t.getAttribute(\"type\")){if(V(t,this.config.selectors.inputs.seek)){t.setAttribute(\"aria-valuenow\",this.currentTime);const e=Pe.formatTime(this.currentTime),i=Pe.formatTime(this.duration),s=ve.get(\"seekLabel\",this.config);t.setAttribute(\"aria-valuetext\",s.replace(\"{currentTime}\",e).replace(\"{duration}\",i))}else if(V(t,this.config.selectors.inputs.volume)){const e=100*t.value;t.setAttribute(\"aria-valuenow\",e),t.setAttribute(\"aria-valuetext\",`${e.toFixed(1)}%`)}else t.setAttribute(\"aria-valuenow\",t.value);(M.isWebKit||M.isIPadOS)&&t.style.setProperty(\"--value\",t.value/t.max*100+\"%\")}},updateSeekTooltip(e){var t,i;if(!this.config.tooltips.seek||!S.element(this.elements.inputs.seek)||!S.element(this.elements.display.seekTooltip)||0===this.duration)return;const s=this.elements.display.seekTooltip,n=`${this.config.classNames.tooltip}--visible`,a=e=>R(s,n,e);if(this.touch)return void a(!1);let l=0;const r=this.elements.progress.getBoundingClientRect();if(S.event(e))l=100/r.width*(e.pageX-r.left);else{if(!F(s,n))return;l=parseFloat(s.style.left,10)}l<0?l=0:l>100&&(l=100);const o=this.duration/100*l;s.innerText=Pe.formatTime(o);const c=null===(t=this.config.markers)||void 0===t||null===(i=t.points)||void 0===i?void 0:i.find((({time:e})=>e===Math.round(o)));c&&s.insertAdjacentHTML(\"afterbegin\",`${c.label}<br>`),s.style.left=`${l}%`,S.event(e)&&[\"mouseenter\",\"mouseleave\"].includes(e.type)&&a(\"mouseenter\"===e.type)},timeUpdate(e){const t=!S.element(this.elements.display.duration)&&this.config.invertTime;Pe.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&\"timeupdate\"===e.type&&this.media.seeking||Pe.updateProgress.call(this,e)},durationUpdate(){if(!this.supported.ui||!this.config.invertTime&&this.currentTime)return;if(this.duration>=2**32)return H(this.elements.display.currentTime,!0),void H(this.elements.progress,!0);S.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute(\"aria-valuemax\",this.duration);const e=S.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Pe.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Pe.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),this.config.markers.enabled&&Pe.setMarkers.call(this),Pe.updateSeekTooltip.call(this)},toggleMenuButton(e,t){H(this.elements.settings.buttons[e],!t)},updateSetting(e,t,i){const s=this.elements.settings.panels[e];let n=null,a=t;if(\"captions\"===e)n=this.currentTrack;else{if(n=S.empty(i)?this[e]:i,S.empty(n)&&(n=this.config[e].default),!S.empty(this.options[e])&&!this.options[e].includes(n))return void this.debug.warn(`Unsupported value of '${n}' for ${e}`);if(!this.config[e].options.includes(n))return void this.debug.warn(`Disabled value of '${n}' for ${e}`)}if(S.element(a)||(a=s&&s.querySelector('[role=\"menu\"]')),!S.element(a))return;this.elements.settings.buttons[e].querySelector(`.${this.config.classNames.menu.value}`).innerHTML=Pe.getLabel.call(this,e,n);const l=a&&a.querySelector(`[value=\"${n}\"]`);S.element(l)&&(l.checked=!0)},getLabel(e,t){switch(e){case\"speed\":return 1===t?ve.get(\"normal\",this.config):`${t}×`;case\"quality\":if(S.number(t)){const e=ve.get(`qualityLabel.${t}`,this.config);return e.length?e:`${t}p`}return ge(t);case\"captions\":return xe.getLabel.call(this);default:return null}},setQualityMenu(e){if(!S.element(this.elements.settings.panels.quality))return;const t=\"quality\",i=this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');S.array(e)&&(this.options.quality=se(e).filter((e=>this.config.quality.options.includes(e))));const s=!S.empty(this.options.quality)&&this.options.quality.length>1;if(Pe.toggleMenuButton.call(this,t,s),j(i),Pe.checkMenu.call(this),!s)return;const n=e=>{const t=ve.get(`qualityBadge.${e}`,this.config);return t.length?Pe.createBadge.call(this,t):null};this.options.quality.sort(((e,t)=>{const i=this.config.quality.options;return i.indexOf(e)>i.indexOf(t)?1:-1})).forEach((e=>{Pe.createMenuItem.call(this,{value:e,list:i,type:t,title:Pe.getLabel.call(this,\"quality\",e),badge:n(e)})})),Pe.updateSetting.call(this,t,i)},setCaptionsMenu(){if(!S.element(this.elements.settings.panels.captions))return;const e=\"captions\",t=this.elements.settings.panels.captions.querySelector('[role=\"menu\"]'),i=xe.getTracks.call(this),s=Boolean(i.length);if(Pe.toggleMenuButton.call(this,e,s),j(t),Pe.checkMenu.call(this),!s)return;const n=i.map(((e,i)=>({value:i,checked:this.captions.toggled&&this.currentTrack===i,title:xe.getLabel.call(this,e),badge:e.language&&Pe.createBadge.call(this,e.language.toUpperCase()),list:t,type:\"language\"})));n.unshift({value:-1,checked:!this.captions.toggled,title:ve.get(\"disabled\",this.config),list:t,type:\"language\"}),n.forEach(Pe.createMenuItem.bind(this)),Pe.updateSetting.call(this,e,t)},setSpeedMenu(){if(!S.element(this.elements.settings.panels.speed))return;const e=\"speed\",t=this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');this.options.speed=this.options.speed.filter((e=>e>=this.minimumSpeed&&e<=this.maximumSpeed));const i=!S.empty(this.options.speed)&&this.options.speed.length>1;Pe.toggleMenuButton.call(this,e,i),j(t),Pe.checkMenu.call(this),i&&(this.options.speed.forEach((i=>{Pe.createMenuItem.call(this,{value:i,list:t,type:e,title:Pe.getLabel.call(this,\"speed\",i)})})),Pe.updateSetting.call(this,e,t))},checkMenu(){const{buttons:e}=this.elements.settings,t=!S.empty(e)&&Object.values(e).some((e=>!e.hidden));H(this.elements.settings.menu,!t)},focusFirstMenuItem(e,t=!1){if(this.elements.settings.popup.hidden)return;let i=e;S.element(i)||(i=Object.values(this.elements.settings.panels).find((e=>!e.hidden)));const s=i.querySelector('[role^=\"menuitem\"]');W.call(this,s,t)},toggleMenu(e){const{popup:t}=this.elements.settings,i=this.elements.buttons.settings;if(!S.element(t)||!S.element(i))return;const{hidden:s}=t;let n=s;if(S.boolean(e))n=e;else if(S.keyboardEvent(e)&&\"Escape\"===e.key)n=!1;else if(S.event(e)){const s=S.function(e.composedPath)?e.composedPath()[0]:e.target,a=t.contains(s);if(a||!a&&e.target!==i&&n)return}i.setAttribute(\"aria-expanded\",n),H(t,!n),R(this.elements.container,this.config.classNames.menu.open,n),n&&S.keyboardEvent(e)?Pe.focusFirstMenuItem.call(this,null,!0):n||s||W.call(this,i,S.keyboardEvent(e))},getMenuSize(e){const t=e.cloneNode(!0);t.style.position=\"absolute\",t.style.opacity=0,t.removeAttribute(\"hidden\"),e.parentNode.appendChild(t);const i=t.scrollWidth,s=t.scrollHeight;return O(t),{width:i,height:s}},showMenuPanel(e=\"\",t=!1){const i=this.elements.container.querySelector(`#plyr-settings-${this.id}-${e}`);if(!S.element(i))return;const s=i.parentNode,n=Array.from(s.children).find((e=>!e.hidden));if(K.transitions&&!K.reducedMotion){s.style.width=`${n.scrollWidth}px`,s.style.height=`${n.scrollHeight}px`;const e=Pe.getMenuSize.call(this,i),t=e=>{e.target===s&&[\"width\",\"height\"].includes(e.propertyName)&&(s.style.width=\"\",s.style.height=\"\",J.call(this,s,E,t))};X.call(this,s,E,t),s.style.width=`${e.width}px`,s.style.height=`${e.height}px`}H(n,!0),H(i,!1),Pe.focusFirstMenuItem.call(this,i,t)},setDownloadUrl(){const e=this.elements.buttons.download;S.element(e)&&e.setAttribute(\"href\",this.download)},create(e){const{bindMenuItemShortcuts:t,createButton:i,createProgress:s,createRange:n,createTime:a,setQualityMenu:l,setSpeedMenu:r,showMenuPanel:o}=Pe;this.elements.controls=null,S.array(this.config.controls)&&this.config.controls.includes(\"play-large\")&&this.elements.container.appendChild(i.call(this,\"play-large\"));const c=$(\"div\",D(this.config.selectors.controls.wrapper));this.elements.controls=c;const u={class:\"plyr__controls__item\"};return se(S.array(this.config.controls)?this.config.controls:[]).forEach((l=>{if(\"restart\"===l&&c.appendChild(i.call(this,\"restart\",u)),\"rewind\"===l&&c.appendChild(i.call(this,\"rewind\",u)),\"play\"===l&&c.appendChild(i.call(this,\"play\",u)),\"fast-forward\"===l&&c.appendChild(i.call(this,\"fast-forward\",u)),\"progress\"===l){const t=$(\"div\",{class:`${u.class} plyr__progress__container`}),i=$(\"div\",D(this.config.selectors.progress));if(i.appendChild(n.call(this,\"seek\",{id:`plyr-seek-${e.id}`})),i.appendChild(s.call(this,\"buffer\")),this.config.tooltips.seek){const e=$(\"span\",{class:this.config.classNames.tooltip},\"00:00\");i.appendChild(e),this.elements.display.seekTooltip=e}this.elements.progress=i,t.appendChild(this.elements.progress),c.appendChild(t)}if(\"current-time\"===l&&c.appendChild(a.call(this,\"currentTime\",u)),\"duration\"===l&&c.appendChild(a.call(this,\"duration\",u)),\"mute\"===l||\"volume\"===l){let{volume:t}=this.elements;if(S.element(t)&&c.contains(t)||(t=$(\"div\",x({},u,{class:`${u.class} plyr__volume`.trim()})),this.elements.volume=t,c.appendChild(t)),\"mute\"===l&&t.appendChild(i.call(this,\"mute\")),\"volume\"===l&&!M.isIos&&!M.isIPadOS){const i={max:1,step:.05,value:this.config.volume};t.appendChild(n.call(this,\"volume\",x(i,{id:`plyr-volume-${e.id}`})))}}if(\"captions\"===l&&c.appendChild(i.call(this,\"captions\",u)),\"settings\"===l&&!S.empty(this.config.settings)){const s=$(\"div\",x({},u,{class:`${u.class} plyr__menu`.trim(),hidden:\"\"}));s.appendChild(i.call(this,\"settings\",{\"aria-haspopup\":!0,\"aria-controls\":`plyr-settings-${e.id}`,\"aria-expanded\":!1}));const n=$(\"div\",{class:\"plyr__menu__container\",id:`plyr-settings-${e.id}`,hidden:\"\"}),a=$(\"div\"),l=$(\"div\",{id:`plyr-settings-${e.id}-home`}),r=$(\"div\",{role:\"menu\"});l.appendChild(r),a.appendChild(l),this.elements.settings.panels.home=l,this.config.settings.forEach((i=>{const s=$(\"button\",x(D(this.config.selectors.buttons.settings),{type:\"button\",class:`${this.config.classNames.control} ${this.config.classNames.control}--forward`,role:\"menuitem\",\"aria-haspopup\":!0,hidden:\"\"}));t.call(this,s,i),X.call(this,s,\"click\",(()=>{o.call(this,i,!1)}));const n=$(\"span\",null,ve.get(i,this.config)),l=$(\"span\",{class:this.config.classNames.menu.value});l.innerHTML=e[i],n.appendChild(l),s.appendChild(n),r.appendChild(s);const c=$(\"div\",{id:`plyr-settings-${e.id}-${i}`,hidden:\"\"}),u=$(\"button\",{type:\"button\",class:`${this.config.classNames.control} ${this.config.classNames.control}--back`});u.appendChild($(\"span\",{\"aria-hidden\":!0},ve.get(i,this.config))),u.appendChild($(\"span\",{class:this.config.classNames.hidden},ve.get(\"menuBack\",this.config))),X.call(this,c,\"keydown\",(e=>{\"ArrowLeft\"===e.key&&(e.preventDefault(),e.stopPropagation(),o.call(this,\"home\",!0))}),!1),X.call(this,u,\"click\",(()=>{o.call(this,\"home\",!1)})),c.appendChild(u),c.appendChild($(\"div\",{role:\"menu\"})),a.appendChild(c),this.elements.settings.buttons[i]=s,this.elements.settings.panels[i]=c})),n.appendChild(a),s.appendChild(n),c.appendChild(s),this.elements.settings.popup=n,this.elements.settings.menu=s}if(\"pip\"===l&&K.pip&&c.appendChild(i.call(this,\"pip\",u)),\"airplay\"===l&&K.airplay&&c.appendChild(i.call(this,\"airplay\",u)),\"download\"===l){const e=x({},u,{element:\"a\",href:this.download,target:\"_blank\"});this.isHTML5&&(e.download=\"\");const{download:t}=this.config.urls;!S.url(t)&&this.isEmbed&&x(e,{icon:`logo-${this.provider}`,label:this.provider}),c.appendChild(i.call(this,\"download\",e))}\"fullscreen\"===l&&c.appendChild(i.call(this,\"fullscreen\",u))})),this.isHTML5&&l.call(this,de.getQualityOptions.call(this)),r.call(this),c},inject(){if(this.config.loadSprite){const e=Pe.getIconUrl.call(this);e.cors&&ke(e.url,\"sprite-plyr\")}this.id=Math.floor(1e4*Math.random());let e=null;this.elements.controls=null;const t={id:this.id,seektime:this.config.seekTime,title:this.config.title};let i=!0;S.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,t)),this.config.controls||(this.config.controls=[]),S.element(this.config.controls)||S.string(this.config.controls)?e=this.config.controls:(e=Pe.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:xe.getLabel.call(this)}),i=!1);let s;i&&S.string(this.config.controls)&&(e=(e=>{let i=e;return Object.entries(t).forEach((([e,t])=>{i=pe(i,`{${e}}`,t)})),i})(e)),S.string(this.config.selectors.controls.container)&&(s=document.querySelector(this.config.selectors.controls.container)),S.element(s)||(s=this.elements.container);if(s[S.element(e)?\"insertAdjacentElement\":\"insertAdjacentHTML\"](\"afterbegin\",e),S.element(this.elements.controls)||Pe.findElements.call(this),!S.empty(this.elements.buttons)){const e=e=>{const t=this.config.classNames.controlPressed;e.setAttribute(\"aria-pressed\",\"false\"),Object.defineProperty(e,\"pressed\",{configurable:!0,enumerable:!0,get:()=>F(e,t),set(i=!1){R(e,t,i),e.setAttribute(\"aria-pressed\",i?\"true\":\"false\")}})};Object.values(this.elements.buttons).filter(Boolean).forEach((t=>{S.array(t)||S.nodeList(t)?Array.from(t).filter(Boolean).forEach(e):e(t)}))}if(M.isEdge&&P(s),this.config.tooltips.controls){const{classNames:e,selectors:t}=this.config,i=`${t.controls.wrapper} ${t.labels} .${e.hidden}`,s=U.call(this,i);Array.from(s).forEach((e=>{R(e,this.config.classNames.hidden,!1),R(e,this.config.classNames.tooltip,!0)}))}},setMediaMetadata(){try{\"mediaSession\"in navigator&&(navigator.mediaSession.metadata=new window.MediaMetadata({title:this.config.mediaMetadata.title,artist:this.config.mediaMetadata.artist,album:this.config.mediaMetadata.album,artwork:this.config.mediaMetadata.artwork}))}catch(e){}},setMarkers(){var e,t;if(!this.duration||this.elements.markers)return;const i=null===(e=this.config.markers)||void 0===e||null===(t=e.points)||void 0===t?void 0:t.filter((({time:e})=>e>0&&e<this.duration));if(null==i||!i.length)return;const s=document.createDocumentFragment(),n=document.createDocumentFragment();let a=null;const l=`${this.config.classNames.tooltip}--visible`,r=e=>R(a,l,e);i.forEach((e=>{const t=$(\"span\",{class:this.config.classNames.marker},\"\"),i=e.time/this.duration*100+\"%\";a&&(t.addEventListener(\"mouseenter\",(()=>{e.label||(a.style.left=i,a.innerHTML=e.label,r(!0))})),t.addEventListener(\"mouseleave\",(()=>{r(!1)}))),t.addEventListener(\"click\",(()=>{this.currentTime=e.time})),t.style.left=i,n.appendChild(t)})),s.appendChild(n),this.config.tooltips.seek||(a=$(\"span\",{class:this.config.classNames.tooltip},\"\"),s.appendChild(a)),this.elements.markers={points:n,tip:a},this.elements.progress.appendChild(s)}};function Me(e,t=!0){let i=e;if(t){const e=document.createElement(\"a\");e.href=i,i=e.href}try{return new URL(i)}catch(e){return null}}function Ne(e){const t=new URLSearchParams;return S.object(e)&&Object.entries(e).forEach((([e,i])=>{t.set(e,i)})),t}const xe={setup(){if(!this.supported.ui)return;if(!this.isVideo||this.isYouTube||this.isHTML5&&!K.textTracks)return void(S.array(this.config.controls)&&this.config.controls.includes(\"settings\")&&this.config.settings.includes(\"captions\")&&Pe.setCaptionsMenu.call(this));var e,t;if(S.element(this.elements.captions)||(this.elements.captions=$(\"div\",D(this.config.selectors.captions)),this.elements.captions.setAttribute(\"dir\",\"auto\"),e=this.elements.captions,t=this.elements.wrapper,S.element(e)&&S.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),M.isIE&&window.URL){const e=this.media.querySelectorAll(\"track\");Array.from(e).forEach((e=>{const t=e.getAttribute(\"src\"),i=Me(t);null!==i&&i.hostname!==window.location.href.hostname&&[\"http:\",\"https:\"].includes(i.protocol)&&Te(t,\"blob\").then((t=>{e.setAttribute(\"src\",window.URL.createObjectURL(t))})).catch((()=>{O(e)}))}))}const i=se((navigator.languages||[navigator.language||navigator.userLanguage||\"en\"]).map((e=>e.split(\"-\")[0])));let s=(this.storage.get(\"language\")||this.config.captions.language||\"auto\").toLowerCase();\"auto\"===s&&([s]=i);let n=this.storage.get(\"captions\");if(S.boolean(n)||({active:n}=this.config.captions),Object.assign(this.captions,{toggled:!1,active:n,language:s,languages:i}),this.isHTML5){const e=this.config.captions.update?\"addtrack removetrack\":\"removetrack\";X.call(this,this.media.textTracks,e,xe.update.bind(this))}setTimeout(xe.update.bind(this),0)},update(){const e=xe.getTracks.call(this,!0),{active:t,language:i,meta:s,currentTrackNode:n}=this.captions,a=Boolean(e.find((e=>e.language===i)));this.isHTML5&&this.isVideo&&e.filter((e=>!s.get(e))).forEach((e=>{this.debug.log(\"Track added\",e),s.set(e,{default:\"showing\"===e.mode}),\"showing\"===e.mode&&(e.mode=\"hidden\"),X.call(this,e,\"cuechange\",(()=>xe.updateCues.call(this)))})),(a&&this.language!==i||!e.includes(n))&&(xe.setLanguage.call(this,i),xe.toggle.call(this,t&&a)),this.elements&&R(this.elements.container,this.config.classNames.captions.enabled,!S.empty(e)),S.array(this.config.controls)&&this.config.controls.includes(\"settings\")&&this.config.settings.includes(\"captions\")&&Pe.setCaptionsMenu.call(this)},toggle(e,t=!0){if(!this.supported.ui)return;const{toggled:i}=this.captions,s=this.config.classNames.captions.active,n=S.nullOrUndefined(e)?!i:e;if(n!==i){if(t||(this.captions.active=n,this.storage.set({captions:n})),!this.language&&n&&!t){const e=xe.getTracks.call(this),t=xe.findTrack.call(this,[this.captions.language,...this.captions.languages],!0);return this.captions.language=t.language,void xe.set.call(this,e.indexOf(t))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=n),R(this.elements.container,s,n),this.captions.toggled=n,Pe.updateSetting.call(this,\"captions\"),Z.call(this,this.media,n?\"captionsenabled\":\"captionsdisabled\")}setTimeout((()=>{n&&this.captions.toggled&&(this.captions.currentTrackNode.mode=\"hidden\")}))},set(e,t=!0){const i=xe.getTracks.call(this);if(-1!==e)if(S.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;const s=i[e],{language:n}=s||{};this.captions.currentTrackNode=s,Pe.updateSetting.call(this,\"captions\"),t||(this.captions.language=n,this.storage.set({language:n})),this.isVimeo&&this.embed.enableTextTrack(n),Z.call(this,this.media,\"languagechange\")}xe.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&xe.updateCues.call(this)}else this.debug.warn(\"Track not found\",e);else this.debug.warn(\"Invalid caption argument\",e);else xe.toggle.call(this,!1,t)},setLanguage(e,t=!0){if(!S.string(e))return void this.debug.warn(\"Invalid language argument\",e);const i=e.toLowerCase();this.captions.language=i;const s=xe.getTracks.call(this),n=xe.findTrack.call(this,[i]);xe.set.call(this,s.indexOf(n),t)},getTracks(e=!1){return Array.from((this.media||{}).textTracks||[]).filter((t=>!this.isHTML5||e||this.captions.meta.has(t))).filter((e=>[\"captions\",\"subtitles\"].includes(e.kind)))},findTrack(e,t=!1){const i=xe.getTracks.call(this),s=e=>Number((this.captions.meta.get(e)||{}).default),n=Array.from(i).sort(((e,t)=>s(t)-s(e)));let a;return e.every((e=>(a=n.find((t=>t.language===e)),!a))),a||(t?n[0]:void 0)},getCurrentTrack(){return xe.getTracks.call(this)[this.currentTrack]},getLabel(e){let t=e;return!S.track(t)&&K.textTracks&&this.captions.toggled&&(t=xe.getCurrentTrack.call(this)),S.track(t)?S.empty(t.label)?S.empty(t.language)?ve.get(\"enabled\",this.config):e.language.toUpperCase():t.label:ve.get(\"disabled\",this.config)},updateCues(e){if(!this.supported.ui)return;if(!S.element(this.elements.captions))return void this.debug.warn(\"No captions element to render to\");if(!S.nullOrUndefined(e)&&!Array.isArray(e))return void this.debug.warn(\"updateCues: Invalid input\",e);let t=e;if(!t){const e=xe.getCurrentTrack.call(this);t=Array.from((e||{}).activeCues||[]).map((e=>e.getCueAsHTML())).map(ye)}const i=t.map((e=>e.trim())).join(\"\\n\");if(i!==this.elements.captions.innerHTML){j(this.elements.captions);const e=$(\"span\",D(this.config.selectors.caption));e.innerHTML=i,this.elements.captions.appendChild(e),Z.call(this,this.media,\"cuechange\")}}},Le={enabled:!0,title:\"\",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:null,clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:\"plyr\",iconUrl:\"https://cdn.plyr.io/3.7.8/plyr.svg\",blankVideo:\"https://cdn.plyr.io/static/blank.mp4\",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240],forced:!1,onChange:null},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2,4]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:\"auto\",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:\"plyr\"},controls:[\"play-large\",\"play\",\"progress\",\"current-time\",\"mute\",\"volume\",\"captions\",\"settings\",\"pip\",\"airplay\",\"fullscreen\"],settings:[\"captions\",\"quality\",\"speed\"],i18n:{restart:\"Restart\",rewind:\"Rewind {seektime}s\",play:\"Play\",pause:\"Pause\",fastForward:\"Forward {seektime}s\",seek:\"Seek\",seekLabel:\"{currentTime} of {duration}\",played:\"Played\",buffered:\"Buffered\",currentTime:\"Current time\",duration:\"Duration\",volume:\"Volume\",mute:\"Mute\",unmute:\"Unmute\",enableCaptions:\"Enable captions\",disableCaptions:\"Disable captions\",download:\"Download\",enterFullscreen:\"Enter fullscreen\",exitFullscreen:\"Exit fullscreen\",frameTitle:\"Player for {title}\",captions:\"Captions\",settings:\"Settings\",pip:\"PIP\",menuBack:\"Go back to previous menu\",speed:\"Speed\",normal:\"Normal\",quality:\"Quality\",loop:\"Loop\",start:\"Start\",end:\"End\",all:\"All\",reset:\"Reset\",disabled:\"Disabled\",enabled:\"Enabled\",advertisement:\"Ad\",qualityBadge:{2160:\"4K\",1440:\"HD\",1080:\"HD\",720:\"HD\",576:\"SD\",480:\"SD\"}},urls:{download:null,vimeo:{sdk:\"https://player.vimeo.com/api/player.js\",iframe:\"https://player.vimeo.com/video/{0}?{1}\",api:\"https://vimeo.com/api/oembed.json?url={0}\"},youtube:{sdk:\"https://www.youtube.com/iframe_api\",api:\"https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}\"},googleIMA:{sdk:\"https://imasdk.googleapis.com/js/sdkloader/ima3.js\"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,download:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:[\"ended\",\"progress\",\"stalled\",\"playing\",\"waiting\",\"canplay\",\"canplaythrough\",\"loadstart\",\"loadeddata\",\"loadedmetadata\",\"timeupdate\",\"volumechange\",\"play\",\"pause\",\"error\",\"seeking\",\"seeked\",\"emptied\",\"ratechange\",\"cuechange\",\"download\",\"enterfullscreen\",\"exitfullscreen\",\"captionsenabled\",\"captionsdisabled\",\"languagechange\",\"controlshidden\",\"controlsshown\",\"ready\",\"statechange\",\"qualitychange\",\"adsloaded\",\"adscontentpause\",\"adscontentresume\",\"adstarted\",\"adsmidpoint\",\"adscomplete\",\"adsallcomplete\",\"adsimpression\",\"adsclick\"],selectors:{editable:\"input, textarea, select, [contenteditable]\",container:\".plyr\",controls:{container:null,wrapper:\".plyr__controls\"},labels:\"[data-plyr]\",buttons:{play:'[data-plyr=\"play\"]',pause:'[data-plyr=\"pause\"]',restart:'[data-plyr=\"restart\"]',rewind:'[data-plyr=\"rewind\"]',fastForward:'[data-plyr=\"fast-forward\"]',mute:'[data-plyr=\"mute\"]',captions:'[data-plyr=\"captions\"]',download:'[data-plyr=\"download\"]',fullscreen:'[data-plyr=\"fullscreen\"]',pip:'[data-plyr=\"pip\"]',airplay:'[data-plyr=\"airplay\"]',settings:'[data-plyr=\"settings\"]',loop:'[data-plyr=\"loop\"]'},inputs:{seek:'[data-plyr=\"seek\"]',volume:'[data-plyr=\"volume\"]',speed:'[data-plyr=\"speed\"]',language:'[data-plyr=\"language\"]',quality:'[data-plyr=\"quality\"]'},display:{currentTime:\".plyr__time--current\",duration:\".plyr__time--duration\",buffer:\".plyr__progress__buffer\",loop:\".plyr__progress__loop\",volume:\".plyr__volume--display\"},progress:\".plyr__progress\",captions:\".plyr__captions\",caption:\".plyr__caption\"},classNames:{type:\"plyr--{0}\",provider:\"plyr--{0}\",video:\"plyr__video-wrapper\",embed:\"plyr__video-embed\",videoFixedRatio:\"plyr__video-wrapper--fixed-ratio\",embedContainer:\"plyr__video-embed__container\",poster:\"plyr__poster\",posterEnabled:\"plyr__poster-enabled\",ads:\"plyr__ads\",control:\"plyr__control\",controlPressed:\"plyr__control--pressed\",playing:\"plyr--playing\",paused:\"plyr--paused\",stopped:\"plyr--stopped\",loading:\"plyr--loading\",hover:\"plyr--hover\",tooltip:\"plyr__tooltip\",cues:\"plyr__cues\",marker:\"plyr__progress__marker\",hidden:\"plyr__sr-only\",hideControls:\"plyr--hide-controls\",isTouch:\"plyr--is-touch\",uiSupported:\"plyr--full-ui\",noTransition:\"plyr--no-transition\",display:{time:\"plyr__time\"},menu:{value:\"plyr__menu__value\",badge:\"plyr__badge\",open:\"plyr--menu-open\"},captions:{enabled:\"plyr--captions-enabled\",active:\"plyr--captions-active\"},fullscreen:{enabled:\"plyr--fullscreen-enabled\",fallback:\"plyr--fullscreen-fallback\"},pip:{supported:\"plyr--pip-supported\",active:\"plyr--pip-active\"},airplay:{supported:\"plyr--airplay-supported\",active:\"plyr--airplay-active\"},previewThumbnails:{thumbContainer:\"plyr__preview-thumb\",thumbContainerShown:\"plyr__preview-thumb--is-shown\",imageContainer:\"plyr__preview-thumb__image-container\",timeContainer:\"plyr__preview-thumb__time-container\",scrubbingContainer:\"plyr__preview-scrubbing\",scrubbingContainerShown:\"plyr__preview-scrubbing--is-shown\"}},attributes:{embed:{provider:\"data-plyr-provider\",id:\"data-plyr-embed-id\",hash:\"data-plyr-embed-hash\"}},ads:{enabled:!1,publisherId:\"\",tagUrl:\"\"},previewThumbnails:{enabled:!1,src:\"\"},vimeo:{byline:!1,portrait:!1,title:!1,speed:!0,transparent:!1,customControls:!0,referrerPolicy:null,premium:!1},youtube:{rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,customControls:!0,noCookie:!1},mediaMetadata:{title:\"\",artist:\"\",album:\"\",artwork:[]},markers:{enabled:!1,points:[]}},Ie=\"picture-in-picture\",$e=\"inline\",_e={html5:\"html5\",youtube:\"youtube\",vimeo:\"vimeo\"},Oe=\"audio\",je=\"video\";const qe=()=>{};class De{constructor(e=!1){this.enabled=window.console&&e,this.enabled&&this.log(\"Debugging enabled\")}get log(){return this.enabled?Function.prototype.bind.call(console.log,console):qe}get warn(){return this.enabled?Function.prototype.bind.call(console.warn,console):qe}get error(){return this.enabled?Function.prototype.bind.call(console.error,console):qe}}class He{constructor(t){e(this,\"onChange\",(()=>{if(!this.supported)return;const e=this.player.elements.buttons.fullscreen;S.element(e)&&(e.pressed=this.active);const t=this.target===this.player.media?this.target:this.player.elements.container;Z.call(this.player,t,this.active?\"enterfullscreen\":\"exitfullscreen\",!0)})),e(this,\"toggleFallback\",((e=!1)=>{if(e?this.scrollPosition={x:window.scrollX??0,y:window.scrollY??0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?\"hidden\":\"\",R(this.target,this.player.config.classNames.fullscreen.fallback,e),M.isIos){let t=document.head.querySelector('meta[name=\"viewport\"]');const i=\"viewport-fit=cover\";t||(t=document.createElement(\"meta\"),t.setAttribute(\"name\",\"viewport\"));const s=S.string(t.content)&&t.content.includes(i);e?(this.cleanupViewport=!s,s||(t.content+=`,${i}`)):this.cleanupViewport&&(t.content=t.content.split(\",\").filter((e=>e.trim()!==i)).join(\",\"))}this.onChange()})),e(this,\"trapFocus\",(e=>{if(M.isIos||M.isIPadOS||!this.active||\"Tab\"!==e.key)return;const t=document.activeElement,i=U.call(this.player,\"a[href], button:not(:disabled), input:not(:disabled), [tabindex]\"),[s]=i,n=i[i.length-1];t!==n||e.shiftKey?t===s&&e.shiftKey&&(n.focus(),e.preventDefault()):(s.focus(),e.preventDefault())})),e(this,\"update\",(()=>{if(this.supported){let e;e=this.forceFallback?\"Fallback (forced)\":He.nativeSupported?\"Native\":\"Fallback\",this.player.debug.log(`${e} fullscreen enabled`)}else this.player.debug.log(\"Fullscreen not supported and fallback disabled\");R(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.supported)})),e(this,\"enter\",(()=>{this.supported&&(M.isIos&&this.player.config.fullscreen.iosNative?this.player.isVimeo?this.player.embed.requestFullscreen():this.target.webkitEnterFullscreen():!He.nativeSupported||this.forceFallback?this.toggleFallback(!0):this.prefix?S.empty(this.prefix)||this.target[`${this.prefix}Request${this.property}`]():this.target.requestFullscreen({navigationUI:\"hide\"}))})),e(this,\"exit\",(()=>{if(this.supported)if(M.isIos&&this.player.config.fullscreen.iosNative)this.player.isVimeo?this.player.embed.exitFullscreen():this.target.webkitEnterFullscreen(),ie(this.player.play());else if(!He.nativeSupported||this.forceFallback)this.toggleFallback(!1);else if(this.prefix){if(!S.empty(this.prefix)){const e=\"moz\"===this.prefix?\"Cancel\":\"Exit\";document[`${this.prefix}${e}${this.property}`]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document)})),e(this,\"toggle\",(()=>{this.active?this.exit():this.enter()})),this.player=t,this.prefix=He.prefix,this.property=He.property,this.scrollPosition={x:0,y:0},this.forceFallback=\"force\"===t.config.fullscreen.fallback,this.player.elements.fullscreen=t.config.fullscreen.container&&function(e,t){const{prototype:i}=Element;return(i.closest||function(){let e=this;do{if(V.matches(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}).call(e,t)}(this.player.elements.container,t.config.fullscreen.container),X.call(this.player,document,\"ms\"===this.prefix?\"MSFullscreenChange\":`${this.prefix}fullscreenchange`,(()=>{this.onChange()})),X.call(this.player,this.player.elements.container,\"dblclick\",(e=>{S.element(this.player.elements.controls)&&this.player.elements.controls.contains(e.target)||this.player.listeners.proxy(e,this.toggle,\"fullscreen\")})),X.call(this,this.player.elements.container,\"keydown\",(e=>this.trapFocus(e))),this.update()}static get nativeSupported(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}get useNative(){return He.nativeSupported&&!this.forceFallback}static get prefix(){if(S.function(document.exitFullscreen))return\"\";let e=\"\";return[\"webkit\",\"moz\",\"ms\"].some((t=>!(!S.function(document[`${t}ExitFullscreen`])&&!S.function(document[`${t}CancelFullScreen`]))&&(e=t,!0))),e}static get property(){return\"moz\"===this.prefix?\"FullScreen\":\"Fullscreen\"}get supported(){return[this.player.config.fullscreen.enabled,this.player.isVideo,He.nativeSupported||this.player.config.fullscreen.fallback,!this.player.isYouTube||He.nativeSupported||!M.isIos||this.player.config.playsinline&&!this.player.config.fullscreen.iosNative].every(Boolean)}get active(){if(!this.supported)return!1;if(!He.nativeSupported||this.forceFallback)return F(this.target,this.player.config.classNames.fullscreen.fallback);const e=this.prefix?this.target.getRootNode()[`${this.prefix}${this.property}Element`]:this.target.getRootNode().fullscreenElement;return e&&e.shadowRoot?e===this.target.getRootNode().host:e===this.target}get target(){return M.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.fullscreen??this.player.elements.container}}function Re(e,t=1){return new Promise(((i,s)=>{const n=new Image,a=()=>{delete n.onload,delete n.onerror,(n.naturalWidth>=t?i:s)(n)};Object.assign(n,{onload:a,onerror:a,src:e})}))}const Fe={addStyleHook(){R(this.elements.container,this.config.selectors.container.replace(\".\",\"\"),!0),R(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls(e=!1){e&&this.isHTML5?this.media.setAttribute(\"controls\",\"\"):this.media.removeAttribute(\"controls\")},build(){if(this.listeners.media(),!this.supported.ui)return this.debug.warn(`Basic support only for ${this.provider} ${this.type}`),void Fe.toggleNativeControls.call(this,!0);S.element(this.elements.controls)||(Pe.inject.call(this),this.listeners.controls()),Fe.toggleNativeControls.call(this),this.isHTML5&&xe.setup.call(this),this.volume=null,this.muted=null,this.loop=null,this.quality=null,this.speed=null,Pe.updateVolume.call(this),Pe.timeUpdate.call(this),Pe.durationUpdate.call(this),Fe.checkPlaying.call(this),R(this.elements.container,this.config.classNames.pip.supported,K.pip&&this.isHTML5&&this.isVideo),R(this.elements.container,this.config.classNames.airplay.supported,K.airplay&&this.isHTML5),R(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout((()=>{Z.call(this,this.media,\"ready\")}),0),Fe.setTitle.call(this),this.poster&&Fe.setPoster.call(this,this.poster,!1).catch((()=>{})),this.config.duration&&Pe.durationUpdate.call(this),this.config.mediaMetadata&&Pe.setMediaMetadata.call(this)},setTitle(){let e=ve.get(\"play\",this.config);if(S.string(this.config.title)&&!S.empty(this.config.title)&&(e+=`, ${this.config.title}`),Array.from(this.elements.buttons.play||[]).forEach((t=>{t.setAttribute(\"aria-label\",e)})),this.isEmbed){const e=B.call(this,\"iframe\");if(!S.element(e))return;const t=S.empty(this.config.title)?\"video\":this.config.title,i=ve.get(\"frameTitle\",this.config);e.setAttribute(\"title\",i.replace(\"{title}\",t))}},togglePoster(e){R(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster(e,t=!0){return t&&this.poster?Promise.reject(new Error(\"Poster already set\")):(this.media.setAttribute(\"data-poster\",e),this.elements.poster.removeAttribute(\"hidden\"),te.call(this).then((()=>Re(e))).catch((t=>{throw e===this.poster&&Fe.togglePoster.call(this,!1),t})).then((()=>{if(e!==this.poster)throw new Error(\"setPoster cancelled by later call to setPoster\")})).then((()=>(Object.assign(this.elements.poster.style,{backgroundImage:`url('${e}')`,backgroundSize:\"\"}),Fe.togglePoster.call(this,!0),e))))},checkPlaying(e){R(this.elements.container,this.config.classNames.playing,this.playing),R(this.elements.container,this.config.classNames.paused,this.paused),R(this.elements.container,this.config.classNames.stopped,this.stopped),Array.from(this.elements.buttons.play||[]).forEach((e=>{Object.assign(e,{pressed:this.playing}),e.setAttribute(\"aria-label\",ve.get(this.playing?\"pause\":\"play\",this.config))})),S.event(e)&&\"timeupdate\"===e.type||Fe.toggleControls.call(this)},checkLoading(e){this.loading=[\"stalled\",\"waiting\"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout((()=>{R(this.elements.container,this.config.classNames.loading,this.loading),Fe.toggleControls.call(this)}),this.loading?250:0)},toggleControls(e){const{controls:t}=this.elements;if(t&&this.config.hideControls){const i=this.touch&&this.lastSeekTime+2e3>Date.now();this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover||i))}},migrateStyles(){Object.values({...this.media.style}).filter((e=>!S.empty(e)&&S.string(e)&&e.startsWith(\"--plyr\"))).forEach((e=>{this.elements.container.style.setProperty(e,this.media.style.getPropertyValue(e)),this.media.style.removeProperty(e)})),S.empty(this.media.style)&&this.media.removeAttribute(\"style\")}};class Ve{constructor(t){e(this,\"firstTouch\",(()=>{const{player:e}=this,{elements:t}=e;e.touch=!0,R(t.container,e.config.classNames.isTouch,!0)})),e(this,\"global\",((e=!0)=>{const{player:t}=this;t.config.keyboard.global&&Q.call(t,window,\"keydown keyup\",this.handleKey,e,!1),Q.call(t,document.body,\"click\",this.toggleMenu,e),G.call(t,document.body,\"touchstart\",this.firstTouch)})),e(this,\"container\",(()=>{const{player:e}=this,{config:t,elements:i,timers:s}=e;!t.keyboard.global&&t.keyboard.focused&&X.call(e,i.container,\"keydown keyup\",this.handleKey,!1),X.call(e,i.container,\"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen\",(t=>{const{controls:n}=i;n&&\"enterfullscreen\"===t.type&&(n.pressed=!1,n.hover=!1);let a=0;[\"touchstart\",\"touchmove\",\"mousemove\"].includes(t.type)&&(Fe.toggleControls.call(e,!0),a=e.touch?3e3:2e3),clearTimeout(s.controls),s.controls=setTimeout((()=>Fe.toggleControls.call(e,!1)),a)}));const n=()=>{if(!e.isVimeo||e.config.vimeo.premium)return;const t=i.wrapper,{active:s}=e.fullscreen,[n,a]=ce.call(e),l=ae(`aspect-ratio: ${n} / ${a}`);if(!s)return void(l?(t.style.width=null,t.style.height=null):(t.style.maxWidth=null,t.style.margin=null));const[r,o]=[Math.max(document.documentElement.clientWidth||0,window.innerWidth||0),Math.max(document.documentElement.clientHeight||0,window.innerHeight||0)],c=r/o>n/a;l?(t.style.width=c?\"auto\":\"100%\",t.style.height=c?\"100%\":\"auto\"):(t.style.maxWidth=c?o/a*n+\"px\":null,t.style.margin=c?\"0 auto\":null)},a=()=>{clearTimeout(s.resized),s.resized=setTimeout(n,50)};X.call(e,i.container,\"enterfullscreen exitfullscreen\",(t=>{const{target:s}=e.fullscreen;if(s!==i.container)return;if(!e.isEmbed&&S.empty(e.config.ratio))return;n();(\"enterfullscreen\"===t.type?X:J).call(e,window,\"resize\",a)}))})),e(this,\"media\",(()=>{const{player:e}=this,{elements:t}=e;if(X.call(e,e.media,\"timeupdate seeking seeked\",(t=>Pe.timeUpdate.call(e,t))),X.call(e,e.media,\"durationchange loadeddata loadedmetadata\",(t=>Pe.durationUpdate.call(e,t))),X.call(e,e.media,\"ended\",(()=>{e.isHTML5&&e.isVideo&&e.config.resetOnEnd&&(e.restart(),e.pause())})),X.call(e,e.media,\"progress playing seeking seeked\",(t=>Pe.updateProgress.call(e,t))),X.call(e,e.media,\"volumechange\",(t=>Pe.updateVolume.call(e,t))),X.call(e,e.media,\"playing play pause ended emptied timeupdate\",(t=>Fe.checkPlaying.call(e,t))),X.call(e,e.media,\"waiting canplay seeked playing\",(t=>Fe.checkLoading.call(e,t))),e.supported.ui&&e.config.clickToPlay&&!e.isAudio){const i=B.call(e,`.${e.config.classNames.video}`);if(!S.element(i))return;X.call(e,t.container,\"click\",(s=>{([t.container,i].includes(s.target)||i.contains(s.target))&&(e.touch&&e.config.hideControls||(e.ended?(this.proxy(s,e.restart,\"restart\"),this.proxy(s,(()=>{ie(e.play())}),\"play\")):this.proxy(s,(()=>{ie(e.togglePlay())}),\"play\")))}))}e.supported.ui&&e.config.disableContextMenu&&X.call(e,t.wrapper,\"contextmenu\",(e=>{e.preventDefault()}),!1),X.call(e,e.media,\"volumechange\",(()=>{e.storage.set({volume:e.volume,muted:e.muted})})),X.call(e,e.media,\"ratechange\",(()=>{Pe.updateSetting.call(e,\"speed\"),e.storage.set({speed:e.speed})})),X.call(e,e.media,\"qualitychange\",(t=>{Pe.updateSetting.call(e,\"quality\",null,t.detail.quality)})),X.call(e,e.media,\"ready qualitychange\",(()=>{Pe.setDownloadUrl.call(e)}));const i=e.config.events.concat([\"keyup\",\"keydown\"]).join(\" \");X.call(e,e.media,i,(i=>{let{detail:s={}}=i;\"error\"===i.type&&(s=e.media.error),Z.call(e,t.container,i.type,!0,s)}))})),e(this,\"proxy\",((e,t,i)=>{const{player:s}=this,n=s.config.listeners[i];let a=!0;S.function(n)&&(a=n.call(s,e)),!1!==a&&S.function(t)&&t.call(s,e)})),e(this,\"bind\",((e,t,i,s,n=!0)=>{const{player:a}=this,l=a.config.listeners[s],r=S.function(l);X.call(a,e,t,(e=>this.proxy(e,i,s)),n&&!r)})),e(this,\"controls\",(()=>{const{player:e}=this,{elements:t}=e,i=M.isIE?\"change\":\"input\";if(t.buttons.play&&Array.from(t.buttons.play).forEach((t=>{this.bind(t,\"click\",(()=>{ie(e.togglePlay())}),\"play\")})),this.bind(t.buttons.restart,\"click\",e.restart,\"restart\"),this.bind(t.buttons.rewind,\"click\",(()=>{e.lastSeekTime=Date.now(),e.rewind()}),\"rewind\"),this.bind(t.buttons.fastForward,\"click\",(()=>{e.lastSeekTime=Date.now(),e.forward()}),\"fastForward\"),this.bind(t.buttons.mute,\"click\",(()=>{e.muted=!e.muted}),\"mute\"),this.bind(t.buttons.captions,\"click\",(()=>e.toggleCaptions())),this.bind(t.buttons.download,\"click\",(()=>{Z.call(e,e.media,\"download\")}),\"download\"),this.bind(t.buttons.fullscreen,\"click\",(()=>{e.fullscreen.toggle()}),\"fullscreen\"),this.bind(t.buttons.pip,\"click\",(()=>{e.pip=\"toggle\"}),\"pip\"),this.bind(t.buttons.airplay,\"click\",e.airplay,\"airplay\"),this.bind(t.buttons.settings,\"click\",(t=>{t.stopPropagation(),t.preventDefault(),Pe.toggleMenu.call(e,t)}),null,!1),this.bind(t.buttons.settings,\"keyup\",(t=>{[\" \",\"Enter\"].includes(t.key)&&(\"Enter\"!==t.key?(t.preventDefault(),t.stopPropagation(),Pe.toggleMenu.call(e,t)):Pe.focusFirstMenuItem.call(e,null,!0))}),null,!1),this.bind(t.settings.menu,\"keydown\",(t=>{\"Escape\"===t.key&&Pe.toggleMenu.call(e,t)})),this.bind(t.inputs.seek,\"mousedown mousemove\",(e=>{const i=t.progress.getBoundingClientRect(),s=100/i.width*(e.pageX-i.left);e.currentTarget.setAttribute(\"seek-value\",s)})),this.bind(t.inputs.seek,\"mousedown mouseup keydown keyup touchstart touchend\",(t=>{const i=t.currentTarget,s=\"play-on-seeked\";if(S.keyboardEvent(t)&&![\"ArrowLeft\",\"ArrowRight\"].includes(t.key))return;e.lastSeekTime=Date.now();const n=i.hasAttribute(s),a=[\"mouseup\",\"touchend\",\"keyup\"].includes(t.type);n&&a?(i.removeAttribute(s),ie(e.play())):!a&&e.playing&&(i.setAttribute(s,\"\"),e.pause())})),M.isIos){const t=U.call(e,'input[type=\"range\"]');Array.from(t).forEach((e=>this.bind(e,i,(e=>P(e.target)))))}this.bind(t.inputs.seek,i,(t=>{const i=t.currentTarget;let s=i.getAttribute(\"seek-value\");S.empty(s)&&(s=i.value),i.removeAttribute(\"seek-value\"),e.currentTime=s/i.max*e.duration}),\"seek\"),this.bind(t.progress,\"mouseenter mouseleave mousemove\",(t=>Pe.updateSeekTooltip.call(e,t))),this.bind(t.progress,\"mousemove touchmove\",(t=>{const{previewThumbnails:i}=e;i&&i.loaded&&i.startMove(t)})),this.bind(t.progress,\"mouseleave touchend click\",(()=>{const{previewThumbnails:t}=e;t&&t.loaded&&t.endMove(!1,!0)})),this.bind(t.progress,\"mousedown touchstart\",(t=>{const{previewThumbnails:i}=e;i&&i.loaded&&i.startScrubbing(t)})),this.bind(t.progress,\"mouseup touchend\",(t=>{const{previewThumbnails:i}=e;i&&i.loaded&&i.endScrubbing(t)})),M.isWebKit&&Array.from(U.call(e,'input[type=\"range\"]')).forEach((t=>{this.bind(t,\"input\",(t=>Pe.updateRangeFill.call(e,t.target)))})),e.config.toggleInvert&&!S.element(t.display.duration)&&this.bind(t.display.currentTime,\"click\",(()=>{0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,Pe.timeUpdate.call(e))})),this.bind(t.inputs.volume,i,(t=>{e.volume=t.target.value}),\"volume\"),this.bind(t.controls,\"mouseenter mouseleave\",(i=>{t.controls.hover=!e.touch&&\"mouseenter\"===i.type})),t.fullscreen&&Array.from(t.fullscreen.children).filter((e=>!e.contains(t.container))).forEach((i=>{this.bind(i,\"mouseenter mouseleave\",(i=>{t.controls&&(t.controls.hover=!e.touch&&\"mouseenter\"===i.type)}))})),this.bind(t.controls,\"mousedown mouseup touchstart touchend touchcancel\",(e=>{t.controls.pressed=[\"mousedown\",\"touchstart\"].includes(e.type)})),this.bind(t.controls,\"focusin\",(()=>{const{config:i,timers:s}=e;R(t.controls,i.classNames.noTransition,!0),Fe.toggleControls.call(e,!0),setTimeout((()=>{R(t.controls,i.classNames.noTransition,!1)}),0);const n=this.touch?3e3:4e3;clearTimeout(s.controls),s.controls=setTimeout((()=>Fe.toggleControls.call(e,!1)),n)})),this.bind(t.inputs.volume,\"wheel\",(t=>{const i=t.webkitDirectionInvertedFromDevice,[s,n]=[t.deltaX,-t.deltaY].map((e=>i?-e:e)),a=Math.sign(Math.abs(s)>Math.abs(n)?s:n);e.increaseVolume(a/50);const{volume:l}=e.media;(1===a&&l<1||-1===a&&l>0)&&t.preventDefault()}),\"volume\",!1)})),this.player=t,this.lastKey=null,this.focusTimer=null,this.lastKeyDown=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}handleKey(e){const{player:t}=this,{elements:i}=t,{key:s,type:n,altKey:a,ctrlKey:l,metaKey:r,shiftKey:o}=e,c=\"keydown\"===n,u=c&&s===this.lastKey;if(a||l||r||o)return;if(!s)return;if(c){const n=document.activeElement;if(S.element(n)){const{editable:s}=t.config.selectors,{seek:a}=i.inputs;if(n!==a&&V(n,s))return;if(\" \"===e.key&&V(n,'button, [role^=\"menuitem\"]'))return}switch([\" \",\"ArrowLeft\",\"ArrowUp\",\"ArrowRight\",\"ArrowDown\",\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"c\",\"f\",\"k\",\"l\",\"m\"].includes(s)&&(e.preventDefault(),e.stopPropagation()),s){case\"0\":case\"1\":case\"2\":case\"3\":case\"4\":case\"5\":case\"6\":case\"7\":case\"8\":case\"9\":u||(h=parseInt(s,10),t.currentTime=t.duration/10*h);break;case\" \":case\"k\":u||ie(t.togglePlay());break;case\"ArrowUp\":t.increaseVolume(.1);break;case\"ArrowDown\":t.decreaseVolume(.1);break;case\"m\":u||(t.muted=!t.muted);break;case\"ArrowRight\":t.forward();break;case\"ArrowLeft\":t.rewind();break;case\"f\":t.fullscreen.toggle();break;case\"c\":u||t.toggleCaptions();break;case\"l\":t.loop=!t.loop}\"Escape\"===s&&!t.fullscreen.usingNative&&t.fullscreen.active&&t.fullscreen.toggle(),this.lastKey=s}else this.lastKey=null;var h}toggleMenu(e){Pe.toggleMenu.call(this.player,e)}}\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof __webpack_require__.g?__webpack_require__.g:\"undefined\"!=typeof self&&self;var Ue=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){e.exports=function(){var e=function(){},t={},i={},s={};function n(e,t){e=e.push?e:[e];var n,a,l,r=[],o=e.length,c=o;for(n=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?n(a,l):(s[a]=s[a]||[]).push(n)}function a(e,t){if(e){var n=s[e];if(i[e]=t,n)for(;n.length;)n[0](e,t),n.splice(0,1)}}function l(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function r(t,i,s,n){var a,l,o=document,c=s.async,u=(s.numRetries||0)+1,h=s.before||e,d=t.replace(/[\\?|#].*$/,\"\"),m=t.replace(/^(css|img)!/,\"\");n=n||0,/(^css!|\\.css$)/.test(d)?((l=o.createElement(\"link\")).rel=\"stylesheet\",l.href=m,(a=\"hideFocus\"in l)&&l.relList&&(a=0,l.rel=\"preload\",l.as=\"style\")):/(^img!|\\.(png|gif|jpg|svg|webp)$)/.test(d)?(l=o.createElement(\"img\")).src=m:((l=o.createElement(\"script\")).src=t,l.async=void 0===c||c),l.onload=l.onerror=l.onbeforeload=function(e){var o=e.type[0];if(a)try{l.sheet.cssText.length||(o=\"e\")}catch(e){18!=e.code&&(o=\"e\")}if(\"e\"==o){if((n+=1)<u)return r(t,i,s,n)}else if(\"preload\"==l.rel&&\"style\"==l.as)return l.rel=\"stylesheet\";i(t,o,e.defaultPrevented)},!1!==h(t,l)&&o.head.appendChild(l)}function o(e,t,i){var s,n,a=(e=e.push?e:[e]).length,l=a,o=[];for(s=function(e,i,s){if(\"e\"==i&&o.push(e),\"b\"==i){if(!s)return;o.push(e)}--a||t(o)},n=0;n<l;n++)r(e[n],s,i)}function c(e,i,s){var n,r;if(i&&i.trim&&(n=i),r=(n?s:i)||{},n){if(n in t)throw\"LoadJS\";t[n]=!0}function c(t,i){o(e,(function(e){l(r,e),t&&l({success:t,error:i},e),a(n,e)}),r)}if(r.returnPromise)return new Promise(c);c()}return c.ready=function(e,t){return n(e,(function(e){l(t,e)})),c},c.done=function(e){a(e,[])},c.reset=function(){t={},i={},s={}},c.isDefined=function(e){return e in t},c}()}));function Be(e){return new Promise(((t,i)=>{Ue(e,{success:t,error:i})}))}function We(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Z.call(this,this.media,e?\"play\":\"pause\"))}const ze={setup(){const e=this;R(e.elements.wrapper,e.config.classNames.embed,!0),e.options.speed=e.config.speed.options,ue.call(e),S.object(window.Vimeo)?ze.ready.call(e):Be(e.config.urls.vimeo.sdk).then((()=>{ze.ready.call(e)})).catch((t=>{e.debug.warn(\"Vimeo SDK (player.js) failed to load\",t)}))},ready(){const e=this,t=e.config.vimeo,{premium:i,referrerPolicy:s,...n}=t;let a=e.media.getAttribute(\"src\"),l=\"\";S.empty(a)?(a=e.media.getAttribute(e.config.attributes.embed.id),l=e.media.getAttribute(e.config.attributes.embed.hash)):l=function(e){const t=e.match(/^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/);return t&&5===t.length?t[4]:null}(a);const r=l?{h:l}:{};i&&Object.assign(n,{controls:!1,sidedock:!1});const o=Ne({loop:e.config.loop.active,autoplay:e.autoplay,muted:e.muted,gesture:\"media\",playsinline:e.config.playsinline,...r,...n}),c=(u=a,S.empty(u)?null:S.number(Number(u))?u:u.match(/^.*(vimeo.com\\/|video\\/)(\\d+).*/)?RegExp.$2:u);var u;const h=$(\"iframe\"),d=me(e.config.urls.vimeo.iframe,c,o);if(h.setAttribute(\"src\",d),h.setAttribute(\"allowfullscreen\",\"\"),h.setAttribute(\"allow\",[\"autoplay\",\"fullscreen\",\"picture-in-picture\",\"encrypted-media\",\"accelerometer\",\"gyroscope\"].join(\"; \")),S.empty(s)||h.setAttribute(\"referrerPolicy\",s),i||!t.customControls)h.setAttribute(\"data-poster\",e.poster),e.media=q(h,e.media);else{const t=$(\"div\",{class:e.config.classNames.embedContainer,\"data-poster\":e.poster});t.appendChild(h),e.media=q(t,e.media)}t.customControls||Te(me(e.config.urls.vimeo.api,d)).then((t=>{!S.empty(t)&&t.thumbnail_url&&Fe.setPoster.call(e,t.thumbnail_url).catch((()=>{}))})),e.embed=new window.Vimeo.Player(h,{autopause:e.config.autopause,muted:e.muted}),e.media.paused=!0,e.media.currentTime=0,e.supported.ui&&e.embed.disableTextTrack(),e.media.play=()=>(We.call(e,!0),e.embed.play()),e.media.pause=()=>(We.call(e,!1),e.embed.pause()),e.media.stop=()=>{e.pause(),e.currentTime=0};let{currentTime:m}=e.media;Object.defineProperty(e.media,\"currentTime\",{get:()=>m,set(t){const{embed:i,media:s,paused:n,volume:a}=e,l=n&&!i.hasPlayed;s.seeking=!0,Z.call(e,s,\"seeking\"),Promise.resolve(l&&i.setVolume(0)).then((()=>i.setCurrentTime(t))).then((()=>l&&i.pause())).then((()=>l&&i.setVolume(a))).catch((()=>{}))}});let p=e.config.speed.selected;Object.defineProperty(e.media,\"playbackRate\",{get:()=>p,set(t){e.embed.setPlaybackRate(t).then((()=>{p=t,Z.call(e,e.media,\"ratechange\")})).catch((()=>{e.options.speed=[1]}))}});let{volume:g}=e.config;Object.defineProperty(e.media,\"volume\",{get:()=>g,set(t){e.embed.setVolume(t).then((()=>{g=t,Z.call(e,e.media,\"volumechange\")}))}});let{muted:f}=e.config;Object.defineProperty(e.media,\"muted\",{get:()=>f,set(t){const i=!!S.boolean(t)&&t;e.embed.setMuted(!!i||e.config.muted).then((()=>{f=i,Z.call(e,e.media,\"volumechange\")}))}});let y,{loop:b}=e.config;Object.defineProperty(e.media,\"loop\",{get:()=>b,set(t){const i=S.boolean(t)?t:e.config.loop.active;e.embed.setLoop(i).then((()=>{b=i}))}}),e.embed.getVideoUrl().then((t=>{y=t,Pe.setDownloadUrl.call(e)})).catch((e=>{this.debug.warn(e)})),Object.defineProperty(e.media,\"currentSrc\",{get:()=>y}),Object.defineProperty(e.media,\"ended\",{get:()=>e.currentTime===e.duration}),Promise.all([e.embed.getVideoWidth(),e.embed.getVideoHeight()]).then((t=>{const[i,s]=t;e.embed.ratio=he(i,s),ue.call(this)})),e.embed.setAutopause(e.config.autopause).then((t=>{e.config.autopause=t})),e.embed.getVideoTitle().then((t=>{e.config.title=t,Fe.setTitle.call(this)})),e.embed.getCurrentTime().then((t=>{m=t,Z.call(e,e.media,\"timeupdate\")})),e.embed.getDuration().then((t=>{e.media.duration=t,Z.call(e,e.media,\"durationchange\")})),e.embed.getTextTracks().then((t=>{e.media.textTracks=t,xe.setup.call(e)})),e.embed.on(\"cuechange\",(({cues:t=[]})=>{const i=t.map((e=>function(e){const t=document.createDocumentFragment(),i=document.createElement(\"div\");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText}(e.text)));xe.updateCues.call(e,i)})),e.embed.on(\"loaded\",(()=>{if(e.embed.getPaused().then((t=>{We.call(e,!t),t||Z.call(e,e.media,\"playing\")})),S.element(e.embed.element)&&e.supported.ui){e.embed.element.setAttribute(\"tabindex\",-1)}})),e.embed.on(\"bufferstart\",(()=>{Z.call(e,e.media,\"waiting\")})),e.embed.on(\"bufferend\",(()=>{Z.call(e,e.media,\"playing\")})),e.embed.on(\"play\",(()=>{We.call(e,!0),Z.call(e,e.media,\"playing\")})),e.embed.on(\"pause\",(()=>{We.call(e,!1)})),e.embed.on(\"timeupdate\",(t=>{e.media.seeking=!1,m=t.seconds,Z.call(e,e.media,\"timeupdate\")})),e.embed.on(\"progress\",(t=>{e.media.buffered=t.percent,Z.call(e,e.media,\"progress\"),1===parseInt(t.percent,10)&&Z.call(e,e.media,\"canplaythrough\"),e.embed.getDuration().then((t=>{t!==e.media.duration&&(e.media.duration=t,Z.call(e,e.media,\"durationchange\"))}))})),e.embed.on(\"seeked\",(()=>{e.media.seeking=!1,Z.call(e,e.media,\"seeked\")})),e.embed.on(\"ended\",(()=>{e.media.paused=!0,Z.call(e,e.media,\"ended\")})),e.embed.on(\"error\",(t=>{e.media.error=t,Z.call(e,e.media,\"error\")})),t.customControls&&setTimeout((()=>Fe.build.call(e)),0)}};function Ke(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Z.call(this,this.media,e?\"play\":\"pause\"))}function Ye(e){return e.noCookie?\"https://www.youtube-nocookie.com\":\"http:\"===window.location.protocol?\"http://www.youtube.com\":void 0}const Qe={setup(){if(R(this.elements.wrapper,this.config.classNames.embed,!0),S.object(window.YT)&&S.function(window.YT.Player))Qe.ready.call(this);else{const e=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=()=>{S.function(e)&&e(),Qe.ready.call(this)},Be(this.config.urls.youtube.sdk).catch((e=>{this.debug.warn(\"YouTube API failed to load\",e)}))}},getTitle(e){Te(me(this.config.urls.youtube.api,e)).then((e=>{if(S.object(e)){const{title:t,height:i,width:s}=e;this.config.title=t,Fe.setTitle.call(this),this.embed.ratio=he(s,i)}ue.call(this)})).catch((()=>{ue.call(this)}))},ready(){const e=this,t=e.config.youtube,i=e.media&&e.media.getAttribute(\"id\");if(!S.empty(i)&&i.startsWith(\"youtube-\"))return;let s=e.media.getAttribute(\"src\");S.empty(s)&&(s=e.media.getAttribute(this.config.attributes.embed.id));const n=(a=s,S.empty(a)?null:a.match(/^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/)?RegExp.$2:a);var a;const l=$(\"div\",{id:`${e.provider}-${Math.floor(1e4*Math.random())}`,\"data-poster\":t.customControls?e.poster:void 0});if(e.media=q(l,e.media),t.customControls){const t=e=>`https://i.ytimg.com/vi/${n}/${e}default.jpg`;Re(t(\"maxres\"),121).catch((()=>Re(t(\"sd\"),121))).catch((()=>Re(t(\"hq\")))).then((t=>Fe.setPoster.call(e,t.src))).then((t=>{t.includes(\"maxres\")||(e.elements.poster.style.backgroundSize=\"cover\")})).catch((()=>{}))}e.embed=new window.YT.Player(e.media,{videoId:n,host:Ye(t),playerVars:x({},{autoplay:e.config.autoplay?1:0,hl:e.config.hl,controls:e.supported.ui&&t.customControls?0:1,disablekb:1,playsinline:e.config.playsinline&&!e.config.fullscreen.iosNative?1:0,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language,widget_referrer:window?window.location.href:null},t),events:{onError(t){if(!e.media.error){const i=t.data,s={2:\"The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.\",5:\"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.\",100:\"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.\",101:\"The owner of the requested video does not allow it to be played in embedded players.\",150:\"The owner of the requested video does not allow it to be played in embedded players.\"}[i]||\"An unknown error occurred\";e.media.error={code:i,message:s},Z.call(e,e.media,\"error\")}},onPlaybackRateChange(t){const i=t.target;e.media.playbackRate=i.getPlaybackRate(),Z.call(e,e.media,\"ratechange\")},onReady(i){if(S.function(e.media.play))return;const s=i.target;Qe.getTitle.call(e,n),e.media.play=()=>{Ke.call(e,!0),s.playVideo()},e.media.pause=()=>{Ke.call(e,!1),s.pauseVideo()},e.media.stop=()=>{s.stopVideo()},e.media.duration=s.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,\"currentTime\",{get:()=>Number(s.getCurrentTime()),set(t){e.paused&&!e.embed.hasPlayed&&e.embed.mute(),e.media.seeking=!0,Z.call(e,e.media,\"seeking\"),s.seekTo(t)}}),Object.defineProperty(e.media,\"playbackRate\",{get:()=>s.getPlaybackRate(),set(e){s.setPlaybackRate(e)}});let{volume:a}=e.config;Object.defineProperty(e.media,\"volume\",{get:()=>a,set(t){a=t,s.setVolume(100*a),Z.call(e,e.media,\"volumechange\")}});let{muted:l}=e.config;Object.defineProperty(e.media,\"muted\",{get:()=>l,set(t){const i=S.boolean(t)?t:l;l=i,s[i?\"mute\":\"unMute\"](),s.setVolume(100*a),Z.call(e,e.media,\"volumechange\")}}),Object.defineProperty(e.media,\"currentSrc\",{get:()=>s.getVideoUrl()}),Object.defineProperty(e.media,\"ended\",{get:()=>e.currentTime===e.duration});const r=s.getAvailablePlaybackRates();e.options.speed=r.filter((t=>e.config.speed.options.includes(t))),e.supported.ui&&t.customControls&&e.media.setAttribute(\"tabindex\",-1),Z.call(e,e.media,\"timeupdate\"),Z.call(e,e.media,\"durationchange\"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval((()=>{e.media.buffered=s.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Z.call(e,e.media,\"progress\"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Z.call(e,e.media,\"canplaythrough\"))}),200),t.customControls&&setTimeout((()=>Fe.build.call(e)),50)},onStateChange(i){const s=i.target;clearInterval(e.timers.playing);switch(e.media.seeking&&[1,2].includes(i.data)&&(e.media.seeking=!1,Z.call(e,e.media,\"seeked\")),i.data){case-1:Z.call(e,e.media,\"timeupdate\"),e.media.buffered=s.getVideoLoadedFraction(),Z.call(e,e.media,\"progress\");break;case 0:Ke.call(e,!1),e.media.loop?(s.stopVideo(),s.playVideo()):Z.call(e,e.media,\"ended\");break;case 1:t.customControls&&!e.config.autoplay&&e.media.paused&&!e.embed.hasPlayed?e.media.pause():(Ke.call(e,!0),Z.call(e,e.media,\"playing\"),e.timers.playing=setInterval((()=>{Z.call(e,e.media,\"timeupdate\")}),50),e.media.duration!==s.getDuration()&&(e.media.duration=s.getDuration(),Z.call(e,e.media,\"durationchange\")));break;case 2:e.muted||e.embed.unMute(),Ke.call(e,!1);break;case 3:Z.call(e,e.media,\"waiting\")}Z.call(e,e.elements.container,\"statechange\",!1,{code:i.data})}}})}},Xe={setup(){this.media?(R(this.elements.container,this.config.classNames.type.replace(\"{0}\",this.type),!0),R(this.elements.container,this.config.classNames.provider.replace(\"{0}\",this.provider),!0),this.isEmbed&&R(this.elements.container,this.config.classNames.type.replace(\"{0}\",\"video\"),!0),this.isVideo&&(this.elements.wrapper=$(\"div\",{class:this.config.classNames.video}),L(this.media,this.elements.wrapper),this.elements.poster=$(\"div\",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isHTML5?de.setup.call(this):this.isYouTube?Qe.setup.call(this):this.isVimeo&&ze.setup.call(this)):this.debug.warn(\"No media element found!\")}};class Je{constructor(t){e(this,\"load\",(()=>{this.enabled&&(S.object(window.google)&&S.object(window.google.ima)?this.ready():Be(this.player.config.urls.googleIMA.sdk).then((()=>{this.ready()})).catch((()=>{this.trigger(\"error\",new Error(\"Google IMA SDK failed to load\"))})))})),e(this,\"ready\",(()=>{var e;this.enabled||((e=this).manager&&e.manager.destroy(),e.elements.displayContainer&&e.elements.displayContainer.destroy(),e.elements.container.remove()),this.startSafetyTimer(12e3,\"ready()\"),this.managerPromise.then((()=>{this.clearSafetyTimer(\"onAdsManagerLoaded()\")})),this.listeners(),this.setupIMA()})),e(this,\"setupIMA\",(()=>{this.elements.container=$(\"div\",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container,this.player.media),this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,(e=>this.onAdsManagerLoaded(e)),!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,(e=>this.onAdError(e)),!1),this.requestAds()})),e(this,\"requestAds\",(()=>{const{container:e}=this.player.elements;try{const t=new google.ima.AdsRequest;t.adTagUrl=this.tagUrl,t.linearAdSlotWidth=e.offsetWidth,t.linearAdSlotHeight=e.offsetHeight,t.nonLinearAdSlotWidth=e.offsetWidth,t.nonLinearAdSlotHeight=e.offsetHeight,t.forceNonLinearFullSlot=!1,t.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(t)}catch(e){this.onAdError(e)}})),e(this,\"pollCountdown\",((e=!1)=>{if(!e)return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute(\"data-badge-text\");this.countdownTimer=setInterval((()=>{const e=Ee(Math.max(this.manager.getRemainingTime(),0)),t=`${ve.get(\"advertisement\",this.player.config)} - ${e}`;this.elements.container.setAttribute(\"data-badge-text\",t)}),100)})),e(this,\"onAdsManagerLoaded\",(e=>{if(!this.enabled)return;const t=new google.ima.AdsRenderingSettings;t.restoreCustomPlaybackStateOnAdBreakComplete=!0,t.enablePreloading=!0,this.manager=e.getAdsManager(this.player,t),this.cuePoints=this.manager.getCuePoints(),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,(e=>this.onAdError(e))),Object.keys(google.ima.AdEvent.Type).forEach((e=>{this.manager.addEventListener(google.ima.AdEvent.Type[e],(e=>this.onAdEvent(e)))})),this.trigger(\"loaded\")})),e(this,\"addCuePoints\",(()=>{S.empty(this.cuePoints)||this.cuePoints.forEach((e=>{if(0!==e&&-1!==e&&e<this.player.duration){const t=this.player.elements.progress;if(S.element(t)){const i=100/this.player.duration*e,s=$(\"span\",{class:this.player.config.classNames.cues});s.style.left=`${i.toString()}%`,t.appendChild(s)}}}))})),e(this,\"onAdEvent\",(e=>{const{container:t}=this.player.elements,i=e.getAd(),s=e.getAdData();switch((e=>{Z.call(this.player,this.player.media,`ads${e.replace(/_/g,\"\").toLowerCase()}`)})(e.type),e.type){case google.ima.AdEvent.Type.LOADED:this.trigger(\"loaded\"),this.pollCountdown(!0),i.isLinear()||(i.width=t.offsetWidth,i.height=t.offsetHeight);break;case google.ima.AdEvent.Type.STARTED:this.manager.setVolume(this.player.volume);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.player.ended?this.loadAds():this.loader.contentComplete();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.LOG:s.adError&&this.player.debug.warn(`Non-fatal ad error: ${s.adError.getMessage()}`)}})),e(this,\"onAdError\",(e=>{this.cancel(),this.player.debug.warn(\"Ads error\",e)})),e(this,\"listeners\",(()=>{const{container:e}=this.player.elements;let t;this.player.on(\"canplay\",(()=>{this.addCuePoints()})),this.player.on(\"ended\",(()=>{this.loader.contentComplete()})),this.player.on(\"timeupdate\",(()=>{t=this.player.currentTime})),this.player.on(\"seeked\",(()=>{const e=this.player.currentTime;S.empty(this.cuePoints)||this.cuePoints.forEach(((i,s)=>{t<i&&i<e&&(this.manager.discardAdBreak(),this.cuePoints.splice(s,1))}))})),window.addEventListener(\"resize\",(()=>{this.manager&&this.manager.resize(e.offsetWidth,e.offsetHeight,google.ima.ViewMode.NORMAL)}))})),e(this,\"play\",(()=>{const{container:e}=this.player.elements;this.managerPromise||this.resumeContent(),this.managerPromise.then((()=>{this.manager.setVolume(this.player.volume),this.elements.displayContainer.initialize();try{this.initialized||(this.manager.init(e.offsetWidth,e.offsetHeight,google.ima.ViewMode.NORMAL),this.manager.start()),this.initialized=!0}catch(e){this.onAdError(e)}})).catch((()=>{}))})),e(this,\"resumeContent\",(()=>{this.elements.container.style.zIndex=\"\",this.playing=!1,ie(this.player.media.play())})),e(this,\"pauseContent\",(()=>{this.elements.container.style.zIndex=3,this.playing=!0,this.player.media.pause()})),e(this,\"cancel\",(()=>{this.initialized&&this.resumeContent(),this.trigger(\"error\"),this.loadAds()})),e(this,\"loadAds\",(()=>{this.managerPromise.then((()=>{this.manager&&this.manager.destroy(),this.managerPromise=new Promise((e=>{this.on(\"loaded\",e),this.player.debug.log(this.manager)})),this.initialized=!1,this.requestAds()})).catch((()=>{}))})),e(this,\"trigger\",((e,...t)=>{const i=this.events[e];S.array(i)&&i.forEach((e=>{S.function(e)&&e.apply(this,t)}))})),e(this,\"on\",((e,t)=>(S.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this))),e(this,\"startSafetyTimer\",((e,t)=>{this.player.debug.log(`Safety timer invoked from: ${t}`),this.safetyTimer=setTimeout((()=>{this.cancel(),this.clearSafetyTimer(\"startSafetyTimer()\")}),e)})),e(this,\"clearSafetyTimer\",(e=>{S.nullOrUndefined(this.safetyTimer)||(this.player.debug.log(`Safety timer cleared from: ${e}`),clearTimeout(this.safetyTimer),this.safetyTimer=null)})),this.player=t,this.config=t.config.ads,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(((e,t)=>{this.on(\"loaded\",e),this.on(\"error\",t)})),this.load()}get enabled(){const{config:e}=this;return this.player.isHTML5&&this.player.isVideo&&e.enabled&&(!S.empty(e.publisherId)||S.url(e.tagUrl))}get tagUrl(){const{config:e}=this;if(S.url(e.tagUrl))return e.tagUrl;return`https://go.aniview.com/api/adserver6/vast/?${Ne({AV_PUBLISHERID:\"58c25bb0073ef448b1087ad6\",AV_CHANNELID:\"5a0458dc28a06145e4519d21\",AV_URL:window.location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:e.publisherId})}`}}function Ge(e=0,t=0,i=255){return Math.min(Math.max(e,t),i)}const Ze=e=>{const t=[];return e.split(/\\r\\n\\r\\n|\\n\\n|\\r\\r/).forEach((e=>{const i={};e.split(/\\r\\n|\\n|\\r/).forEach((e=>{if(S.number(i.startTime)){if(!S.empty(e.trim())&&S.empty(i.text)){const t=e.trim().split(\"#xywh=\");[i.text]=t,t[1]&&([i.x,i.y,i.w,i.h]=t[1].split(\",\"))}}else{const t=e.match(/([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})( ?--> ?)([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})/);t&&(i.startTime=60*Number(t[1]||0)*60+60*Number(t[2])+Number(t[3])+Number(`0.${t[4]}`),i.endTime=60*Number(t[6]||0)*60+60*Number(t[7])+Number(t[8])+Number(`0.${t[9]}`))}})),i.text&&t.push(i)})),t},et=(e,t)=>{const i={};return e>t.width/t.height?(i.width=t.width,i.height=1/e*t.width):(i.height=t.height,i.width=e*t.height),i};class tt{constructor(t){e(this,\"load\",(()=>{this.player.elements.display.seekTooltip&&(this.player.elements.display.seekTooltip.hidden=this.enabled),this.enabled&&this.getThumbnails().then((()=>{this.enabled&&(this.render(),this.determineContainerAutoSizing(),this.listeners(),this.loaded=!0)}))})),e(this,\"getThumbnails\",(()=>new Promise((e=>{const{src:t}=this.player.config.previewThumbnails;if(S.empty(t))throw new Error(\"Missing previewThumbnails.src config attribute\");const i=()=>{this.thumbnails.sort(((e,t)=>e.height-t.height)),this.player.debug.log(\"Preview thumbnails\",this.thumbnails),e()};if(S.function(t))t((e=>{this.thumbnails=e,i()}));else{const e=(S.string(t)?[t]:t).map((e=>this.getThumbnail(e)));Promise.all(e).then(i)}})))),e(this,\"getThumbnail\",(e=>new Promise((t=>{Te(e).then((i=>{const s={frames:Ze(i),height:null,urlPrefix:\"\"};s.frames[0].text.startsWith(\"/\")||s.frames[0].text.startsWith(\"http://\")||s.frames[0].text.startsWith(\"https://\")||(s.urlPrefix=e.substring(0,e.lastIndexOf(\"/\")+1));const n=new Image;n.onload=()=>{s.height=n.naturalHeight,s.width=n.naturalWidth,this.thumbnails.push(s),t()},n.src=s.urlPrefix+s.frames[0].text}))})))),e(this,\"startMove\",(e=>{if(this.loaded&&S.event(e)&&[\"touchmove\",\"mousemove\"].includes(e.type)&&this.player.media.duration){if(\"touchmove\"===e.type)this.seekTime=this.player.media.duration*(this.player.elements.inputs.seek.value/100);else{var t,i;const s=this.player.elements.progress.getBoundingClientRect(),n=100/s.width*(e.pageX-s.left);this.seekTime=this.player.media.duration*(n/100),this.seekTime<0&&(this.seekTime=0),this.seekTime>this.player.media.duration-1&&(this.seekTime=this.player.media.duration-1),this.mousePosX=e.pageX,this.elements.thumb.time.innerText=Ee(this.seekTime);const a=null===(t=this.player.config.markers)||void 0===t||null===(i=t.points)||void 0===i?void 0:i.find((({time:e})=>e===Math.round(this.seekTime)));a&&this.elements.thumb.time.insertAdjacentHTML(\"afterbegin\",`${a.label}<br>`)}this.showImageAtCurrentTime()}})),e(this,\"endMove\",(()=>{this.toggleThumbContainer(!1,!0)})),e(this,\"startScrubbing\",(e=>{(S.nullOrUndefined(e.button)||!1===e.button||0===e.button)&&(this.mouseDown=!0,this.player.media.duration&&(this.toggleScrubbingContainer(!0),this.toggleThumbContainer(!1,!0),this.showImageAtCurrentTime()))})),e(this,\"endScrubbing\",(()=>{this.mouseDown=!1,Math.ceil(this.lastTime)===Math.ceil(this.player.media.currentTime)?this.toggleScrubbingContainer(!1):G.call(this.player,this.player.media,\"timeupdate\",(()=>{this.mouseDown||this.toggleScrubbingContainer(!1)}))})),e(this,\"listeners\",(()=>{this.player.on(\"play\",(()=>{this.toggleThumbContainer(!1,!0)})),this.player.on(\"seeked\",(()=>{this.toggleThumbContainer(!1)})),this.player.on(\"timeupdate\",(()=>{this.lastTime=this.player.media.currentTime}))})),e(this,\"render\",(()=>{this.elements.thumb.container=$(\"div\",{class:this.player.config.classNames.previewThumbnails.thumbContainer}),this.elements.thumb.imageContainer=$(\"div\",{class:this.player.config.classNames.previewThumbnails.imageContainer}),this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer);const e=$(\"div\",{class:this.player.config.classNames.previewThumbnails.timeContainer});this.elements.thumb.time=$(\"span\",{},\"00:00\"),e.appendChild(this.elements.thumb.time),this.elements.thumb.imageContainer.appendChild(e),S.element(this.player.elements.progress)&&this.player.elements.progress.appendChild(this.elements.thumb.container),this.elements.scrubbing.container=$(\"div\",{class:this.player.config.classNames.previewThumbnails.scrubbingContainer}),this.player.elements.wrapper.appendChild(this.elements.scrubbing.container)})),e(this,\"destroy\",(()=>{this.elements.thumb.container&&this.elements.thumb.container.remove(),this.elements.scrubbing.container&&this.elements.scrubbing.container.remove()})),e(this,\"showImageAtCurrentTime\",(()=>{this.mouseDown?this.setScrubbingContainerSize():this.setThumbContainerSizeAndPos();const e=this.thumbnails[0].frames.findIndex((e=>this.seekTime>=e.startTime&&this.seekTime<=e.endTime)),t=e>=0;let i=0;this.mouseDown||this.toggleThumbContainer(t),t&&(this.thumbnails.forEach(((t,s)=>{this.loadedImages.includes(t.frames[e].text)&&(i=s)})),e!==this.showingThumb&&(this.showingThumb=e,this.loadImage(i)))})),e(this,\"loadImage\",((e=0)=>{const t=this.showingThumb,i=this.thumbnails[e],{urlPrefix:s}=i,n=i.frames[t],a=i.frames[t].text,l=s+a;if(this.currentImageElement&&this.currentImageElement.dataset.filename===a)this.showImage(this.currentImageElement,n,e,t,a,!1),this.currentImageElement.dataset.index=t,this.removeOldImages(this.currentImageElement);else{this.loadingImage&&this.usingSprites&&(this.loadingImage.onload=null);const i=new Image;i.src=l,i.dataset.index=t,i.dataset.filename=a,this.showingThumbFilename=a,this.player.debug.log(`Loading image: ${l}`),i.onload=()=>this.showImage(i,n,e,t,a,!0),this.loadingImage=i,this.removeOldImages(i)}})),e(this,\"showImage\",((e,t,i,s,n,a=!0)=>{this.player.debug.log(`Showing thumb: ${n}. num: ${s}. qual: ${i}. newimg: ${a}`),this.setImageSizeAndOffset(e,t),a&&(this.currentImageContainer.appendChild(e),this.currentImageElement=e,this.loadedImages.includes(n)||this.loadedImages.push(n)),this.preloadNearby(s,!0).then(this.preloadNearby(s,!1)).then(this.getHigherQuality(i,e,t,n))})),e(this,\"removeOldImages\",(e=>{Array.from(this.currentImageContainer.children).forEach((t=>{if(\"img\"!==t.tagName.toLowerCase())return;const i=this.usingSprites?500:1e3;if(t.dataset.index!==e.dataset.index&&!t.dataset.deleting){t.dataset.deleting=!0;const{currentImageContainer:e}=this;setTimeout((()=>{e.removeChild(t),this.player.debug.log(`Removing thumb: ${t.dataset.filename}`)}),i)}}))})),e(this,\"preloadNearby\",((e,t=!0)=>new Promise((i=>{setTimeout((()=>{const s=this.thumbnails[0].frames[e].text;if(this.showingThumbFilename===s){let n;n=t?this.thumbnails[0].frames.slice(e):this.thumbnails[0].frames.slice(0,e).reverse();let a=!1;n.forEach((e=>{const t=e.text;if(t!==s&&!this.loadedImages.includes(t)){a=!0,this.player.debug.log(`Preloading thumb filename: ${t}`);const{urlPrefix:e}=this.thumbnails[0],s=e+t,n=new Image;n.src=s,n.onload=()=>{this.player.debug.log(`Preloaded thumb filename: ${t}`),this.loadedImages.includes(t)||this.loadedImages.push(t),i()}}})),a||i()}}),300)})))),e(this,\"getHigherQuality\",((e,t,i,s)=>{if(e<this.thumbnails.length-1){let n=t.naturalHeight;this.usingSprites&&(n=i.h),n<this.thumbContainerHeight&&setTimeout((()=>{this.showingThumbFilename===s&&(this.player.debug.log(`Showing higher quality thumb for: ${s}`),this.loadImage(e+1))}),300)}})),e(this,\"toggleThumbContainer\",((e=!1,t=!1)=>{const i=this.player.config.classNames.previewThumbnails.thumbContainerShown;this.elements.thumb.container.classList.toggle(i,e),!e&&t&&(this.showingThumb=null,this.showingThumbFilename=null)})),e(this,\"toggleScrubbingContainer\",((e=!1)=>{const t=this.player.config.classNames.previewThumbnails.scrubbingContainerShown;this.elements.scrubbing.container.classList.toggle(t,e),e||(this.showingThumb=null,this.showingThumbFilename=null)})),e(this,\"determineContainerAutoSizing\",(()=>{(this.elements.thumb.imageContainer.clientHeight>20||this.elements.thumb.imageContainer.clientWidth>20)&&(this.sizeSpecifiedInCSS=!0)})),e(this,\"setThumbContainerSizeAndPos\",(()=>{const{imageContainer:e}=this.elements.thumb;if(this.sizeSpecifiedInCSS){if(e.clientHeight>20&&e.clientWidth<20){const t=Math.floor(e.clientHeight*this.thumbAspectRatio);e.style.width=`${t}px`}else if(e.clientHeight<20&&e.clientWidth>20){const t=Math.floor(e.clientWidth/this.thumbAspectRatio);e.style.height=`${t}px`}}else{const t=Math.floor(this.thumbContainerHeight*this.thumbAspectRatio);e.style.height=`${this.thumbContainerHeight}px`,e.style.width=`${t}px`}this.setThumbContainerPos()})),e(this,\"setThumbContainerPos\",(()=>{const e=this.player.elements.progress.getBoundingClientRect(),t=this.player.elements.container.getBoundingClientRect(),{container:i}=this.elements.thumb,s=t.left-e.left+10,n=t.right-e.left-i.clientWidth-10,a=this.mousePosX-e.left-i.clientWidth/2,l=Ge(a,s,n);i.style.left=`${l}px`,i.style.setProperty(\"--preview-arrow-offset\",a-l+\"px\")})),e(this,\"setScrubbingContainerSize\",(()=>{const{width:e,height:t}=et(this.thumbAspectRatio,{width:this.player.media.clientWidth,height:this.player.media.clientHeight});this.elements.scrubbing.container.style.width=`${e}px`,this.elements.scrubbing.container.style.height=`${t}px`})),e(this,\"setImageSizeAndOffset\",((e,t)=>{if(!this.usingSprites)return;const i=this.thumbContainerHeight/t.h;e.style.height=e.naturalHeight*i+\"px\",e.style.width=e.naturalWidth*i+\"px\",e.style.left=`-${t.x*i}px`,e.style.top=`-${t.y*i}px`})),this.player=t,this.thumbnails=[],this.loaded=!1,this.lastMouseMoveTime=Date.now(),this.mouseDown=!1,this.loadedImages=[],this.elements={thumb:{},scrubbing:{}},this.load()}get enabled(){return this.player.isHTML5&&this.player.isVideo&&this.player.config.previewThumbnails.enabled}get currentImageContainer(){return this.mouseDown?this.elements.scrubbing.container:this.elements.thumb.imageContainer}get usingSprites(){return Object.keys(this.thumbnails[0].frames[0]).includes(\"w\")}get thumbAspectRatio(){return this.usingSprites?this.thumbnails[0].frames[0].w/this.thumbnails[0].frames[0].h:this.thumbnails[0].width/this.thumbnails[0].height}get thumbContainerHeight(){if(this.mouseDown){const{height:e}=et(this.thumbAspectRatio,{width:this.player.media.clientWidth,height:this.player.media.clientHeight});return e}return this.sizeSpecifiedInCSS?this.elements.thumb.imageContainer.clientHeight:Math.floor(this.player.media.clientWidth/this.thumbAspectRatio/4)}get currentImageElement(){return this.mouseDown?this.currentScrubbingImageElement:this.currentThumbnailImageElement}set currentImageElement(e){this.mouseDown?this.currentScrubbingImageElement=e:this.currentThumbnailImageElement=e}}const it={insertElements(e,t){S.string(t)?_(e,this.media,{src:t}):S.array(t)&&t.forEach((t=>{_(e,this.media,t)}))},change(e){N(e,\"sources.length\")?(de.cancelRequests.call(this),this.destroy.call(this,(()=>{this.options.quality=[],O(this.media),this.media=null,S.element(this.elements.container)&&this.elements.container.removeAttribute(\"class\");const{sources:t,type:i}=e,[{provider:s=_e.html5,src:n}]=t,a=\"html5\"===s?i:\"div\",l=\"html5\"===s?{}:{src:n};Object.assign(this,{provider:s,type:i,supported:K.check(i,s,this.config.playsinline),media:$(a,l)}),this.elements.container.appendChild(this.media),S.boolean(e.autoplay)&&(this.config.autoplay=e.autoplay),this.isHTML5&&(this.config.crossorigin&&this.media.setAttribute(\"crossorigin\",\"\"),this.config.autoplay&&this.media.setAttribute(\"autoplay\",\"\"),S.empty(e.poster)||(this.poster=e.poster),this.config.loop.active&&this.media.setAttribute(\"loop\",\"\"),this.config.muted&&this.media.setAttribute(\"muted\",\"\"),this.config.playsinline&&this.media.setAttribute(\"playsinline\",\"\")),Fe.addStyleHook.call(this),this.isHTML5&&it.insertElements.call(this,\"source\",t),this.config.title=e.title,Xe.setup.call(this),this.isHTML5&&Object.keys(e).includes(\"tracks\")&&it.insertElements.call(this,\"track\",e.tracks),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Fe.build.call(this),this.isHTML5&&this.media.load(),S.empty(e.previewThumbnails)||(Object.assign(this.config.previewThumbnails,e.previewThumbnails),this.previewThumbnails&&this.previewThumbnails.loaded&&(this.previewThumbnails.destroy(),this.previewThumbnails=null),this.config.previewThumbnails.enabled&&(this.previewThumbnails=new tt(this))),this.fullscreen.update()}),!0)):this.debug.warn(\"Invalid source format\")}};class st{constructor(t,i){if(e(this,\"play\",(()=>S.function(this.media.play)?(this.ads&&this.ads.enabled&&this.ads.managerPromise.then((()=>this.ads.play())).catch((()=>ie(this.media.play()))),this.media.play()):null)),e(this,\"pause\",(()=>this.playing&&S.function(this.media.pause)?this.media.pause():null)),e(this,\"togglePlay\",(e=>(S.boolean(e)?e:!this.playing)?this.play():this.pause())),e(this,\"stop\",(()=>{this.isHTML5?(this.pause(),this.restart()):S.function(this.media.stop)&&this.media.stop()})),e(this,\"restart\",(()=>{this.currentTime=0})),e(this,\"rewind\",(e=>{this.currentTime-=S.number(e)?e:this.config.seekTime})),e(this,\"forward\",(e=>{this.currentTime+=S.number(e)?e:this.config.seekTime})),e(this,\"increaseVolume\",(e=>{const t=this.media.muted?0:this.volume;this.volume=t+(S.number(e)?e:0)})),e(this,\"decreaseVolume\",(e=>{this.increaseVolume(-e)})),e(this,\"airplay\",(()=>{K.airplay&&this.media.webkitShowPlaybackTargetPicker()})),e(this,\"toggleControls\",(e=>{if(this.supported.ui&&!this.isAudio){const t=F(this.elements.container,this.config.classNames.hideControls),i=void 0===e?void 0:!e,s=R(this.elements.container,this.config.classNames.hideControls,i);if(s&&S.array(this.config.controls)&&this.config.controls.includes(\"settings\")&&!S.empty(this.config.settings)&&Pe.toggleMenu.call(this,!1),s!==t){const e=s?\"controlshidden\":\"controlsshown\";Z.call(this,this.media,e)}return!s}return!1})),e(this,\"on\",((e,t)=>{X.call(this,this.elements.container,e,t)})),e(this,\"once\",((e,t)=>{G.call(this,this.elements.container,e,t)})),e(this,\"off\",((e,t)=>{J(this.elements.container,e,t)})),e(this,\"destroy\",((e,t=!1)=>{if(!this.ready)return;const i=()=>{document.body.style.overflow=\"\",this.embed=null,t?(Object.keys(this.elements).length&&(O(this.elements.buttons.play),O(this.elements.captions),O(this.elements.controls),O(this.elements.wrapper),this.elements.buttons.play=null,this.elements.captions=null,this.elements.controls=null,this.elements.wrapper=null),S.function(e)&&e()):(ee.call(this),de.cancelRequests.call(this),q(this.elements.original,this.elements.container),Z.call(this,this.elements.original,\"destroyed\",!0),S.function(e)&&e.call(this.elements.original),this.ready=!1,setTimeout((()=>{this.elements=null,this.media=null}),200))};this.stop(),clearTimeout(this.timers.loading),clearTimeout(this.timers.controls),clearTimeout(this.timers.resized),this.isHTML5?(Fe.toggleNativeControls.call(this,!0),i()):this.isYouTube?(clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&S.function(this.embed.destroy)&&this.embed.destroy(),i()):this.isVimeo&&(null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200))})),e(this,\"supports\",(e=>K.mime.call(this,e))),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=K.touch,this.media=t,S.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||S.nodeList(this.media)||S.array(this.media))&&(this.media=this.media[0]),this.config=x({},Le,st.defaults,i||{},(()=>{try{return JSON.parse(this.media.getAttribute(\"data-plyr-config\"))}catch(e){return{}}})()),this.elements={container:null,fullscreen:null,captions:null,buttons:{},display:{},progress:{},inputs:{},settings:{popup:null,menu:null,panels:{},buttons:{}}},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new De(this.config.debug),this.debug.log(\"Config\",this.config),this.debug.log(\"Support\",K),S.nullOrUndefined(this.media)||!S.element(this.media))return void this.debug.error(\"Setup failed: no suitable element passed\");if(this.media.plyr)return void this.debug.warn(\"Target already setup\");if(!this.config.enabled)return void this.debug.error(\"Setup failed: disabled by config\");if(!K.check().api)return void this.debug.error(\"Setup failed: no support\");const s=this.media.cloneNode(!0);s.autoplay=!1,this.elements.original=s;const n=this.media.tagName.toLowerCase();let a=null,l=null;switch(n){case\"div\":if(a=this.media.querySelector(\"iframe\"),S.element(a)){if(l=Me(a.getAttribute(\"src\")),this.provider=function(e){return/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(e)?_e.youtube:/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(e)?_e.vimeo:null}(l.toString()),this.elements.container=this.media,this.media=a,this.elements.container.className=\"\",l.search.length){const e=[\"1\",\"true\"];e.includes(l.searchParams.get(\"autoplay\"))&&(this.config.autoplay=!0),e.includes(l.searchParams.get(\"loop\"))&&(this.config.loop.active=!0),this.isYouTube?(this.config.playsinline=e.includes(l.searchParams.get(\"playsinline\")),this.config.youtube.hl=l.searchParams.get(\"hl\")):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(S.empty(this.provider)||!Object.values(_e).includes(this.provider))return void this.debug.error(\"Setup failed: Invalid provider\");this.type=je;break;case\"video\":case\"audio\":this.type=n,this.provider=_e.html5,this.media.hasAttribute(\"crossorigin\")&&(this.config.crossorigin=!0),this.media.hasAttribute(\"autoplay\")&&(this.config.autoplay=!0),(this.media.hasAttribute(\"playsinline\")||this.media.hasAttribute(\"webkit-playsinline\"))&&(this.config.playsinline=!0),this.media.hasAttribute(\"muted\")&&(this.config.muted=!0),this.media.hasAttribute(\"loop\")&&(this.config.loop.active=!0);break;default:return void this.debug.error(\"Setup failed: unsupported type\")}this.supported=K.check(this.type,this.provider),this.supported.api?(this.eventListeners=[],this.listeners=new Ve(this),this.storage=new we(this),this.media.plyr=this,S.element(this.elements.container)||(this.elements.container=$(\"div\"),L(this.media,this.elements.container)),Fe.migrateStyles.call(this),Fe.addStyleHook.call(this),Xe.setup.call(this),this.config.debug&&X.call(this,this.elements.container,this.config.events.join(\" \"),(e=>{this.debug.log(`event: ${e.type}`)})),this.fullscreen=new He(this),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Fe.build.call(this),this.listeners.container(),this.listeners.global(),this.config.ads.enabled&&(this.ads=new Je(this)),this.isHTML5&&this.config.autoplay&&this.once(\"canplay\",(()=>ie(this.play()))),this.lastSeekTime=0,this.config.previewThumbnails.enabled&&(this.previewThumbnails=new tt(this))):this.debug.error(\"Setup failed: no support\")}get isHTML5(){return this.provider===_e.html5}get isEmbed(){return this.isYouTube||this.isVimeo}get isYouTube(){return this.provider===_e.youtube}get isVimeo(){return this.provider===_e.vimeo}get isVideo(){return this.type===je}get isAudio(){return this.type===Oe}get playing(){return Boolean(this.ready&&!this.paused&&!this.ended)}get paused(){return Boolean(this.media.paused)}get stopped(){return Boolean(this.paused&&0===this.currentTime)}get ended(){return Boolean(this.media.ended)}set currentTime(e){if(!this.duration)return;const t=S.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log(`Seeking to ${this.currentTime} seconds`)}get currentTime(){return Number(this.media.currentTime)}get buffered(){const{buffered:e}=this.media;return S.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}get seeking(){return Boolean(this.media.seeking)}get duration(){const e=parseFloat(this.config.duration),t=(this.media||{}).duration,i=S.number(t)&&t!==1/0?t:0;return e||i}set volume(e){let t=e;S.string(t)&&(t=Number(t)),S.number(t)||(t=this.storage.get(\"volume\")),S.number(t)||({volume:t}=this.config),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!S.empty(e)&&this.muted&&t>0&&(this.muted=!1)}get volume(){return Number(this.media.volume)}set muted(e){let t=e;S.boolean(t)||(t=this.storage.get(\"muted\")),S.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t}get muted(){return Boolean(this.media.muted)}get hasAudio(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}set speed(e){let t=null;S.number(e)&&(t=e),S.number(t)||(t=this.storage.get(\"speed\")),S.number(t)||(t=this.config.speed.selected);const{minimumSpeed:i,maximumSpeed:s}=this;t=Ge(t,i,s),this.config.speed.selected=t,setTimeout((()=>{this.media&&(this.media.playbackRate=t)}),0)}get speed(){return Number(this.media.playbackRate)}get minimumSpeed(){return this.isYouTube?Math.min(...this.options.speed):this.isVimeo?.5:.0625}get maximumSpeed(){return this.isYouTube?Math.max(...this.options.speed):this.isVimeo?2:16}set quality(e){const t=this.config.quality,i=this.options.quality;if(!i.length)return;let s=[!S.empty(e)&&Number(e),this.storage.get(\"quality\"),t.selected,t.default].find(S.number),n=!0;if(!i.includes(s)){const e=ne(i,s);this.debug.warn(`Unsupported quality option: ${s}, using ${e} instead`),s=e,n=!1}t.selected=s,this.media.quality=s,n&&this.storage.set({quality:s})}get quality(){return this.media.quality}set loop(e){const t=S.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t}get loop(){return Boolean(this.media.loop)}set source(e){it.change.call(this,e)}get source(){return this.media.currentSrc}get download(){const{download:e}=this.config.urls;return S.url(e)?e:this.source}set download(e){S.url(e)&&(this.config.urls.download=e,Pe.setDownloadUrl.call(this))}set poster(e){this.isVideo?Fe.setPoster.call(this,e,!1).catch((()=>{})):this.debug.warn(\"Poster can only be set for video\")}get poster(){return this.isVideo?this.media.getAttribute(\"poster\")||this.media.getAttribute(\"data-poster\"):null}get ratio(){if(!this.isVideo)return null;const e=oe(ce.call(this));return S.array(e)?e.join(\":\"):e}set ratio(e){this.isVideo?S.string(e)&&re(e)?(this.config.ratio=oe(e),ue.call(this)):this.debug.error(`Invalid aspect ratio specified (${e})`):this.debug.warn(\"Aspect ratio can only be set for video\")}set autoplay(e){this.config.autoplay=S.boolean(e)?e:this.config.autoplay}get autoplay(){return Boolean(this.config.autoplay)}toggleCaptions(e){xe.toggle.call(this,e,!1)}set currentTrack(e){xe.set.call(this,e,!1),xe.setup.call(this)}get currentTrack(){const{toggled:e,currentTrack:t}=this.captions;return e?t:-1}set language(e){xe.setLanguage.call(this,e,!1)}get language(){return(xe.getCurrentTrack.call(this)||{}).language}set pip(e){if(!K.pip)return;const t=S.boolean(e)?e:!this.pip;S.function(this.media.webkitSetPresentationMode)&&this.media.webkitSetPresentationMode(t?Ie:$e),S.function(this.media.requestPictureInPicture)&&(!this.pip&&t?this.media.requestPictureInPicture():this.pip&&!t&&document.exitPictureInPicture())}get pip(){return K.pip?S.empty(this.media.webkitPresentationMode)?this.media===document.pictureInPictureElement:this.media.webkitPresentationMode===Ie:null}setPreviewThumbnails(e){this.previewThumbnails&&this.previewThumbnails.loaded&&(this.previewThumbnails.destroy(),this.previewThumbnails=null),Object.assign(this.config.previewThumbnails,e),this.config.previewThumbnails.enabled&&(this.previewThumbnails=new tt(this))}static supported(e,t){return K.check(e,t)}static loadSprite(e,t){return ke(e,t)}static setup(e,t={}){let i=null;return S.string(e)?i=Array.from(document.querySelectorAll(e)):S.nodeList(e)?i=Array.from(e):S.array(e)&&(i=e.filter(S.element)),S.empty(i)?null:i.map((e=>new st(e,t)))}}var nt;return st.defaults=(nt=Le,JSON.parse(JSON.stringify(nt))),st}));\n//# sourceMappingURL=plyr.min.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUEwRyxNQUFNLDhCQUE4QixNQUFNLDBEQUEwRCx3Q0FBd0MsS0FBSyxZQUFZLHVDQUF1QyxtQkFBbUIsNEVBQTRFLG1CQUFtQix3RUFBd0UsZUFBZSxtREFBbUQsb0JBQW9CLG9HQUFvRyxtQkFBbUIsZ0JBQWdCLCtDQUErQyxFQUFFLFVBQVUsR0FBRyxtQkFBbUIsdURBQXVELFVBQVUsRUFBRSxjQUFjLDBCQUEwQixZQUFZLCtDQUErQyw0Q0FBNEMsV0FBVyxnQ0FBZ0MsY0FBYyx1QkFBdUIsYUFBYSw2QkFBNkIsZUFBZSxNQUFNLFdBQVcsa0JBQWtCLDhCQUE4QixnQkFBZ0IscUVBQXFFLGNBQWMsdURBQXVELHVEQUF1RCxhQUFhLG1HQUFtRyxZQUFZLDZCQUE2QiwwQkFBMEIsZ0NBQWdDLGFBQWEsNEhBQTRILEVBQUUsOERBQThELGdCQUFnQix5REFBeUQsZUFBZSxxQ0FBcUMsa0JBQWtCLDBCQUEwQixvQkFBb0IsMkNBQTJDLG1CQUFtQixNQUFNLHlCQUF5QixlQUFlLGNBQWMsZ0JBQWdCLCtCQUErQixlQUFlLHdDQUF3QyxXQUFXLFdBQVcsaUJBQWlCLGlDQUFpQyxrUEFBa1AsVUFBVSxrSkFBa0osd0JBQXdCLGtQQUFrUCxzQkFBc0Isb0JBQW9CLHVCQUF1QixlQUFlLG1CQUFtQixFQUFFLFdBQVcseUtBQXlLLE9BQU8sNkRBQTZEO0FBQzEvOEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9WdWV4eS8uL25vZGVfbW9kdWxlcy9wbHlyL2Rpc3QvcGx5ci5taW4uanM/NGZiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJcIm9iamVjdFwiPT10eXBlb2YgbmF2aWdhdG9yJiZmdW5jdGlvbihlLHQpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFwiUGx5clwiLHQpOihlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6ZXx8c2VsZikuUGx5cj10KCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlLHQsaSl7cmV0dXJuKHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIGk9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWkpe3ZhciBzPWkuY2FsbChlLHR8fFwiZGVmYXVsdFwiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgcylyZXR1cm4gczt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuKFwic3RyaW5nXCI9PT10P1N0cmluZzpOdW1iZXIpKGUpfShlLFwic3RyaW5nXCIpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOmksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPWksZX1mdW5jdGlvbiB0KGUsdCl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBzPXRbaV07cy5lbnVtZXJhYmxlPXMuZW51bWVyYWJsZXx8ITEscy5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gcyYmKHMud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHMua2V5LHMpfX1mdW5jdGlvbiBpKGUsdCxpKXtyZXR1cm4gdCBpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOmksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPWksZX1mdW5jdGlvbiBzKGUsdCl7dmFyIGk9T2JqZWN0LmtleXMoZSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTt0JiYocz1zLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KS5lbnVtZXJhYmxlfSkpKSxpLnB1c2guYXBwbHkoaSxzKX1yZXR1cm4gaX1mdW5jdGlvbiBuKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPW51bGwhPWFyZ3VtZW50c1t0XT9hcmd1bWVudHNbdF06e307dCUyP3MoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKChmdW5jdGlvbih0KXtpKGUsdCxuW3RdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG4pKTpzKE9iamVjdChuKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCkpfSkpfXJldHVybiBlfXZhciBhPXthZGRDU1M6ITAsdGh1bWJXaWR0aDoxNSx3YXRjaDohMH07dmFyIGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/ZS5jb25zdHJ1Y3RvcjpudWxsfSxyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISEoZSYmdCYmZSBpbnN0YW5jZW9mIHQpfSxvPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfSxjPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpPT09T2JqZWN0fSx1PWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpPT09U3RyaW5nfSxoPWZ1bmN0aW9uKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpfSxkPWZ1bmN0aW9uKGUpe3JldHVybiByKGUsTm9kZUxpc3QpfSxtPXtudWxsT3JVbmRlZmluZWQ6byxvYmplY3Q6YyxudW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSk9PT1OdW1iZXImJiFOdW1iZXIuaXNOYU4oZSl9LHN0cmluZzp1LGJvb2xlYW46ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSk9PT1Cb29sZWFufSxmdW5jdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gbChlKT09PUZ1bmN0aW9ufSxhcnJheTpoLG5vZGVMaXN0OmQsZWxlbWVudDpmdW5jdGlvbihlKXtyZXR1cm4gcihlLEVsZW1lbnQpfSxldmVudDpmdW5jdGlvbihlKXtyZXR1cm4gcihlLEV2ZW50KX0sZW1wdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl8fCh1KGUpfHxoKGUpfHxkKGUpKSYmIWUubGVuZ3RofHxjKGUpJiYhT2JqZWN0LmtleXMoZSkubGVuZ3RofX07ZnVuY3Rpb24gcChlLHQpe2lmKDE+dCl7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJcIi5jb25jYXQoZSkubWF0Y2goLyg/OlxcLihcXGQrKSk/KD86W2VFXShbKy1dP1xcZCspKT8kLyk7cmV0dXJuIHQ/TWF0aC5tYXgoMCwodFsxXT90WzFdLmxlbmd0aDowKS0odFsyXT8rdFsyXTowKSk6MH0odCk7cmV0dXJuIHBhcnNlRmxvYXQoZS50b0ZpeGVkKGkpKX1yZXR1cm4gTWF0aC5yb3VuZChlL3QpKnR9dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsaSl7KGZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0pKHRoaXMsZSksbS5lbGVtZW50KHQpP3RoaXMuZWxlbWVudD10Om0uc3RyaW5nKHQpJiYodGhpcy5lbGVtZW50PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCkpLG0uZWxlbWVudCh0aGlzLmVsZW1lbnQpJiZtLmVtcHR5KHRoaXMuZWxlbWVudC5yYW5nZVRvdWNoKSYmKHRoaXMuY29uZmlnPW4oe30sYSx7fSxpKSx0aGlzLmluaXQoKSl9cmV0dXJuIGZ1bmN0aW9uKGUsaSxzKXtpJiZ0KGUucHJvdG90eXBlLGkpLHMmJnQoZSxzKX0oZSxbe2tleTpcImluaXRcIix2YWx1ZTpmdW5jdGlvbigpe2UuZW5hYmxlZCYmKHRoaXMuY29uZmlnLmFkZENTUyYmKHRoaXMuZWxlbWVudC5zdHlsZS51c2VyU2VsZWN0PVwibm9uZVwiLHRoaXMuZWxlbWVudC5zdHlsZS53ZWJLaXRVc2VyU2VsZWN0PVwibm9uZVwiLHRoaXMuZWxlbWVudC5zdHlsZS50b3VjaEFjdGlvbj1cIm1hbmlwdWxhdGlvblwiKSx0aGlzLmxpc3RlbmVycyghMCksdGhpcy5lbGVtZW50LnJhbmdlVG91Y2g9dGhpcyl9fSx7a2V5OlwiZGVzdHJveVwiLHZhbHVlOmZ1bmN0aW9uKCl7ZS5lbmFibGVkJiYodGhpcy5jb25maWcuYWRkQ1NTJiYodGhpcy5lbGVtZW50LnN0eWxlLnVzZXJTZWxlY3Q9XCJcIix0aGlzLmVsZW1lbnQuc3R5bGUud2ViS2l0VXNlclNlbGVjdD1cIlwiLHRoaXMuZWxlbWVudC5zdHlsZS50b3VjaEFjdGlvbj1cIlwiKSx0aGlzLmxpc3RlbmVycyghMSksdGhpcy5lbGVtZW50LnJhbmdlVG91Y2g9bnVsbCl9fSx7a2V5OlwibGlzdGVuZXJzXCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxpPWU/XCJhZGRFdmVudExpc3RlbmVyXCI6XCJyZW1vdmVFdmVudExpc3RlbmVyXCI7W1widG91Y2hzdGFydFwiLFwidG91Y2htb3ZlXCIsXCJ0b3VjaGVuZFwiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmVsZW1lbnRbaV0oZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuc2V0KGUpfSksITEpfSkpfX0se2tleTpcImdldFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmVuYWJsZWR8fCFtLmV2ZW50KHQpKXJldHVybiBudWxsO3ZhciBpLHM9dC50YXJnZXQsbj10LmNoYW5nZWRUb3VjaGVzWzBdLGE9cGFyc2VGbG9hdChzLmdldEF0dHJpYnV0ZShcIm1pblwiKSl8fDAsbD1wYXJzZUZsb2F0KHMuZ2V0QXR0cmlidXRlKFwibWF4XCIpKXx8MTAwLHI9cGFyc2VGbG9hdChzLmdldEF0dHJpYnV0ZShcInN0ZXBcIikpfHwxLG89cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPTEwMC9vLndpZHRoKih0aGlzLmNvbmZpZy50aHVtYldpZHRoLzIpLzEwMDtyZXR1cm4gMD4oaT0xMDAvby53aWR0aCoobi5jbGllbnRYLW8ubGVmdCkpP2k9MDoxMDA8aSYmKGk9MTAwKSw1MD5pP2ktPSgxMDAtMippKSpjOjUwPGkmJihpKz0yKihpLTUwKSpjKSxhK3AoaS8xMDAqKGwtYSkscil9fSx7a2V5Olwic2V0XCIsdmFsdWU6ZnVuY3Rpb24odCl7ZS5lbmFibGVkJiZtLmV2ZW50KHQpJiYhdC50YXJnZXQuZGlzYWJsZWQmJih0LnByZXZlbnREZWZhdWx0KCksdC50YXJnZXQudmFsdWU9dGhpcy5nZXQodCksZnVuY3Rpb24oZSx0KXtpZihlJiZ0KXt2YXIgaT1uZXcgRXZlbnQodCx7YnViYmxlczohMH0pO2UuZGlzcGF0Y2hFdmVudChpKX19KHQudGFyZ2V0LFwidG91Y2hlbmRcIj09PXQudHlwZT9cImNoYW5nZVwiOlwiaW5wdXRcIikpfX1dLFt7a2V5Olwic2V0dXBcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgaT0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scz1udWxsO2lmKG0uZW1wdHkodCl8fG0uc3RyaW5nKHQpP3M9QXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG0uc3RyaW5nKHQpP3Q6J2lucHV0W3R5cGU9XCJyYW5nZVwiXScpKTptLmVsZW1lbnQodCk/cz1bdF06bS5ub2RlTGlzdCh0KT9zPUFycmF5LmZyb20odCk6bS5hcnJheSh0KSYmKHM9dC5maWx0ZXIobS5lbGVtZW50KSksbS5lbXB0eShzKSlyZXR1cm4gbnVsbDt2YXIgbD1uKHt9LGEse30saSk7aWYobS5zdHJpbmcodCkmJmwud2F0Y2gpe3ZhciByPW5ldyBNdXRhdGlvbk9ic2VydmVyKChmdW5jdGlvbihpKXtBcnJheS5mcm9tKGkpLmZvckVhY2goKGZ1bmN0aW9uKGkpe0FycmF5LmZyb20oaS5hZGRlZE5vZGVzKS5mb3JFYWNoKChmdW5jdGlvbihpKXttLmVsZW1lbnQoaSkmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KSkuaW5jbHVkZXModGhpcyl9LmNhbGwoZSx0KX0oaSx0KSYmbmV3IGUoaSxsKX0pKX0pKX0pKTtyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KX1yZXR1cm4gcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LGkpfSkpfX0se2tleTpcImVuYWJsZWRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fX1dKSxlfSgpO2NvbnN0IGY9ZT0+bnVsbCE9ZT9lLmNvbnN0cnVjdG9yOm51bGwseT0oZSx0KT0+Qm9vbGVhbihlJiZ0JiZlIGluc3RhbmNlb2YgdCksYj1lPT5udWxsPT1lLHY9ZT0+ZihlKT09PU9iamVjdCx3PWU9PmYoZSk9PT1TdHJpbmcsVD1lPT5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlLGs9ZT0+QXJyYXkuaXNBcnJheShlKSxDPWU9PnkoZSxOb2RlTGlzdCksQT1lPT5iKGUpfHwodyhlKXx8ayhlKXx8QyhlKSkmJiFlLmxlbmd0aHx8dihlKSYmIU9iamVjdC5rZXlzKGUpLmxlbmd0aDt2YXIgUz17bnVsbE9yVW5kZWZpbmVkOmIsb2JqZWN0OnYsbnVtYmVyOmU9PmYoZSk9PT1OdW1iZXImJiFOdW1iZXIuaXNOYU4oZSksc3RyaW5nOncsYm9vbGVhbjplPT5mKGUpPT09Qm9vbGVhbixmdW5jdGlvbjpULGFycmF5Omssd2Vha01hcDplPT55KGUsV2Vha01hcCksbm9kZUxpc3Q6QyxlbGVtZW50OmU9Pm51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmMT09PWUubm9kZVR5cGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLnN0eWxlJiZcIm9iamVjdFwiPT10eXBlb2YgZS5vd25lckRvY3VtZW50LHRleHROb2RlOmU9PmYoZSk9PT1UZXh0LGV2ZW50OmU9PnkoZSxFdmVudCksa2V5Ym9hcmRFdmVudDplPT55KGUsS2V5Ym9hcmRFdmVudCksY3VlOmU9PnkoZSx3aW5kb3cuVGV4dFRyYWNrQ3VlKXx8eShlLHdpbmRvdy5WVFRDdWUpLHRyYWNrOmU9PnkoZSxUZXh0VHJhY2spfHwhYihlKSYmdyhlLmtpbmQpLHByb21pc2U6ZT0+eShlLFByb21pc2UpJiZUKGUudGhlbiksdXJsOmU9PntpZih5KGUsd2luZG93LlVSTCkpcmV0dXJuITA7aWYoIXcoZSkpcmV0dXJuITE7bGV0IHQ9ZTtlLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpJiZlLnN0YXJ0c1dpdGgoXCJodHRwczovL1wiKXx8KHQ9YGh0dHA6Ly8ke2V9YCk7dHJ5e3JldHVybiFBKG5ldyBVUkwodCkuaG9zdG5hbWUpfWNhdGNoKGUpe3JldHVybiExfX0sZW1wdHk6QX07Y29uc3QgRT0oKCk9Pntjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLHQ9e1dlYmtpdFRyYW5zaXRpb246XCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIsTW96VHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIixPVHJhbnNpdGlvbjpcIm9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kXCIsdHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIn0saT1PYmplY3Qua2V5cyh0KS5maW5kKCh0PT52b2lkIDAhPT1lLnN0eWxlW3RdKSk7cmV0dXJuISFTLnN0cmluZyhpKSYmdFtpXX0pKCk7ZnVuY3Rpb24gUChlLHQpe3NldFRpbWVvdXQoKCgpPT57dHJ5e2UuaGlkZGVuPSEwLGUub2Zmc2V0SGVpZ2h0LGUuaGlkZGVuPSExfWNhdGNoKGUpe319KSx0KX12YXIgTT17aXNJRTpCb29sZWFuKHdpbmRvdy5kb2N1bWVudC5kb2N1bWVudE1vZGUpLGlzRWRnZTovRWRnZS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaXNXZWJLaXQ6XCJXZWJraXRBcHBlYXJhbmNlXCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUmJiEvRWRnZS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaXNJUGhvbmU6L2lQaG9uZXxpUG9kL2dpLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xLGlzSVBhZE9TOlwiTWFjSW50ZWxcIj09PW5hdmlnYXRvci5wbGF0Zm9ybSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEsaXNJb3M6L2lQYWR8aVBob25lfGlQb2QvZ2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjF9O2Z1bmN0aW9uIE4oZSx0KXtyZXR1cm4gdC5zcGxpdChcIi5cIikucmVkdWNlKCgoZSx0KT0+ZSYmZVt0XSksZSl9ZnVuY3Rpb24geChlPXt9LC4uLnQpe2lmKCF0Lmxlbmd0aClyZXR1cm4gZTtjb25zdCBpPXQuc2hpZnQoKTtyZXR1cm4gUy5vYmplY3QoaSk/KE9iamVjdC5rZXlzKGkpLmZvckVhY2goKHQ9PntTLm9iamVjdChpW3RdKT8oT2JqZWN0LmtleXMoZSkuaW5jbHVkZXModCl8fE9iamVjdC5hc3NpZ24oZSx7W3RdOnt9fSkseChlW3RdLGlbdF0pKTpPYmplY3QuYXNzaWduKGUse1t0XTppW3RdfSl9KSkseChlLC4uLnQpKTplfWZ1bmN0aW9uIEwoZSx0KXtjb25zdCBpPWUubGVuZ3RoP2U6W2VdO0FycmF5LmZyb20oaSkucmV2ZXJzZSgpLmZvckVhY2goKChlLGkpPT57Y29uc3Qgcz1pPjA/dC5jbG9uZU5vZGUoITApOnQsbj1lLnBhcmVudE5vZGUsYT1lLm5leHRTaWJsaW5nO3MuYXBwZW5kQ2hpbGQoZSksYT9uLmluc2VydEJlZm9yZShzLGEpOm4uYXBwZW5kQ2hpbGQocyl9KSl9ZnVuY3Rpb24gSShlLHQpe1MuZWxlbWVudChlKSYmIVMuZW1wdHkodCkmJk9iamVjdC5lbnRyaWVzKHQpLmZpbHRlcigoKFssZV0pPT4hUy5udWxsT3JVbmRlZmluZWQoZSkpKS5mb3JFYWNoKCgoW3QsaV0pPT5lLnNldEF0dHJpYnV0ZSh0LGkpKSl9ZnVuY3Rpb24gJChlLHQsaSl7Y29uc3Qgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiBTLm9iamVjdCh0KSYmSShzLHQpLFMuc3RyaW5nKGkpJiYocy5pbm5lclRleHQ9aSksc31mdW5jdGlvbiBfKGUsdCxpLHMpe1MuZWxlbWVudCh0KSYmdC5hcHBlbmRDaGlsZCgkKGUsaSxzKSl9ZnVuY3Rpb24gTyhlKXtTLm5vZGVMaXN0KGUpfHxTLmFycmF5KGUpP0FycmF5LmZyb20oZSkuZm9yRWFjaChPKTpTLmVsZW1lbnQoZSkmJlMuZWxlbWVudChlLnBhcmVudE5vZGUpJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9ZnVuY3Rpb24gaihlKXtpZighUy5lbGVtZW50KGUpKXJldHVybjtsZXR7bGVuZ3RoOnR9PWUuY2hpbGROb2Rlcztmb3IoO3Q+MDspZS5yZW1vdmVDaGlsZChlLmxhc3RDaGlsZCksdC09MX1mdW5jdGlvbiBxKGUsdCl7cmV0dXJuIFMuZWxlbWVudCh0KSYmUy5lbGVtZW50KHQucGFyZW50Tm9kZSkmJlMuZWxlbWVudChlKT8odC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLHQpLGUpOm51bGx9ZnVuY3Rpb24gRChlLHQpe2lmKCFTLnN0cmluZyhlKXx8Uy5lbXB0eShlKSlyZXR1cm57fTtjb25zdCBpPXt9LHM9eCh7fSx0KTtyZXR1cm4gZS5zcGxpdChcIixcIikuZm9yRWFjaCgoZT0+e2NvbnN0IHQ9ZS50cmltKCksbj10LnJlcGxhY2UoXCIuXCIsXCJcIiksYT10LnJlcGxhY2UoL1tbXFxdXS9nLFwiXCIpLnNwbGl0KFwiPVwiKSxbbF09YSxyPWEubGVuZ3RoPjE/YVsxXS5yZXBsYWNlKC9bXCInXS9nLFwiXCIpOlwiXCI7c3dpdGNoKHQuY2hhckF0KDApKXtjYXNlXCIuXCI6Uy5zdHJpbmcocy5jbGFzcyk/aS5jbGFzcz1gJHtzLmNsYXNzfSAke259YDppLmNsYXNzPW47YnJlYWs7Y2FzZVwiI1wiOmkuaWQ9dC5yZXBsYWNlKFwiI1wiLFwiXCIpO2JyZWFrO2Nhc2VcIltcIjppW2xdPXJ9fSkpLHgocyxpKX1mdW5jdGlvbiBIKGUsdCl7aWYoIVMuZWxlbWVudChlKSlyZXR1cm47bGV0IGk9dDtTLmJvb2xlYW4oaSl8fChpPSFlLmhpZGRlbiksZS5oaWRkZW49aX1mdW5jdGlvbiBSKGUsdCxpKXtpZihTLm5vZGVMaXN0KGUpKXJldHVybiBBcnJheS5mcm9tKGUpLm1hcCgoZT0+UihlLHQsaSkpKTtpZihTLmVsZW1lbnQoZSkpe2xldCBzPVwidG9nZ2xlXCI7cmV0dXJuIHZvaWQgMCE9PWkmJihzPWk/XCJhZGRcIjpcInJlbW92ZVwiKSxlLmNsYXNzTGlzdFtzXSh0KSxlLmNsYXNzTGlzdC5jb250YWlucyh0KX1yZXR1cm4hMX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuIFMuZWxlbWVudChlKSYmZS5jbGFzc0xpc3QuY29udGFpbnModCl9ZnVuY3Rpb24gVihlLHQpe2NvbnN0e3Byb3RvdHlwZTppfT1FbGVtZW50O3JldHVybihpLm1hdGNoZXN8fGkud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxpLm1vek1hdGNoZXNTZWxlY3Rvcnx8aS5tc01hdGNoZXNTZWxlY3Rvcnx8ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpKS5pbmNsdWRlcyh0aGlzKX0pLmNhbGwoZSx0KX1mdW5jdGlvbiBVKGUpe3JldHVybiB0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKGUpfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIHRoaXMuZWxlbWVudHMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoZSl9ZnVuY3Rpb24gVyhlPW51bGwsdD0hMSl7Uy5lbGVtZW50KGUpJiZlLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwLGZvY3VzVmlzaWJsZTp0fSl9Y29uc3Qgej17XCJhdWRpby9vZ2dcIjpcInZvcmJpc1wiLFwiYXVkaW8vd2F2XCI6XCIxXCIsXCJ2aWRlby93ZWJtXCI6XCJ2cDgsIHZvcmJpc1wiLFwidmlkZW8vbXA0XCI6XCJhdmMxLjQyRTAxRSwgbXA0YS40MC4yXCIsXCJ2aWRlby9vZ2dcIjpcInRoZW9yYVwifSxLPXthdWRpbzpcImNhblBsYXlUeXBlXCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYXVkaW9cIiksdmlkZW86XCJjYW5QbGF5VHlwZVwiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpLGNoZWNrKGUsdCl7Y29uc3QgaT1LW2VdfHxcImh0bWw1XCIhPT10O3JldHVybnthcGk6aSx1aTppJiZLLnJhbmdlSW5wdXR9fSxwaXA6IShNLmlzSVBob25lfHwhUy5mdW5jdGlvbigkKFwidmlkZW9cIikud2Via2l0U2V0UHJlc2VudGF0aW9uTW9kZSkmJighZG9jdW1lbnQucGljdHVyZUluUGljdHVyZUVuYWJsZWR8fCQoXCJ2aWRlb1wiKS5kaXNhYmxlUGljdHVyZUluUGljdHVyZSkpLGFpcnBsYXk6Uy5mdW5jdGlvbih3aW5kb3cuV2ViS2l0UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVudCkscGxheXNpbmxpbmU6XCJwbGF5c0lubGluZVwiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInZpZGVvXCIpLG1pbWUoZSl7aWYoUy5lbXB0eShlKSlyZXR1cm4hMTtjb25zdFt0XT1lLnNwbGl0KFwiL1wiKTtsZXQgaT1lO2lmKCF0aGlzLmlzSFRNTDV8fHQhPT10aGlzLnR5cGUpcmV0dXJuITE7T2JqZWN0LmtleXMoeikuaW5jbHVkZXMoaSkmJihpKz1gOyBjb2RlY3M9XCIke3pbZV19XCJgKTt0cnl7cmV0dXJuIEJvb2xlYW4oaSYmdGhpcy5tZWRpYS5jYW5QbGF5VHlwZShpKS5yZXBsYWNlKC9uby8sXCJcIikpfWNhdGNoKGUpe3JldHVybiExfX0sdGV4dFRyYWNrczpcInRleHRUcmFja3NcImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ2aWRlb1wiKSxyYW5nZUlucHV0OigoKT0+e2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3JldHVybiBlLnR5cGU9XCJyYW5nZVwiLFwicmFuZ2VcIj09PWUudHlwZX0pKCksdG91Y2g6XCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0cmFuc2l0aW9uczohMSE9PUUscmVkdWNlZE1vdGlvbjpcIm1hdGNoTWVkaWFcImluIHdpbmRvdyYmd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlc30sWT0oKCk9PntsZXQgZT0hMTt0cnl7Y29uc3QgdD1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJwYXNzaXZlXCIse2dldDooKT0+KGU9ITAsbnVsbCl9KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixudWxsLHQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLG51bGwsdCl9Y2F0Y2goZSl7fXJldHVybiBlfSkoKTtmdW5jdGlvbiBRKGUsdCxpLHM9ITEsbj0hMCxhPSExKXtpZighZXx8IShcImFkZEV2ZW50TGlzdGVuZXJcImluIGUpfHxTLmVtcHR5KHQpfHwhUy5mdW5jdGlvbihpKSlyZXR1cm47Y29uc3QgbD10LnNwbGl0KFwiIFwiKTtsZXQgcj1hO1kmJihyPXtwYXNzaXZlOm4sY2FwdHVyZTphfSksbC5mb3JFYWNoKCh0PT57dGhpcyYmdGhpcy5ldmVudExpc3RlbmVycyYmcyYmdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHtlbGVtZW50OmUsdHlwZTp0LGNhbGxiYWNrOmksb3B0aW9uczpyfSksZVtzP1wiYWRkRXZlbnRMaXN0ZW5lclwiOlwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiXSh0LGkscil9KSl9ZnVuY3Rpb24gWChlLHQ9XCJcIixpLHM9ITAsbj0hMSl7US5jYWxsKHRoaXMsZSx0LGksITAscyxuKX1mdW5jdGlvbiBKKGUsdD1cIlwiLGkscz0hMCxuPSExKXtRLmNhbGwodGhpcyxlLHQsaSwhMSxzLG4pfWZ1bmN0aW9uIEcoZSx0PVwiXCIsaSxzPSEwLG49ITEpe2NvbnN0IGE9KC4uLmwpPT57SihlLHQsYSxzLG4pLGkuYXBwbHkodGhpcyxsKX07US5jYWxsKHRoaXMsZSx0LGEsITAscyxuKX1mdW5jdGlvbiBaKGUsdD1cIlwiLGk9ITEscz17fSl7aWYoIVMuZWxlbWVudChlKXx8Uy5lbXB0eSh0KSlyZXR1cm47Y29uc3Qgbj1uZXcgQ3VzdG9tRXZlbnQodCx7YnViYmxlczppLGRldGFpbDp7Li4ucyxwbHlyOnRoaXN9fSk7ZS5kaXNwYXRjaEV2ZW50KG4pfWZ1bmN0aW9uIGVlKCl7dGhpcyYmdGhpcy5ldmVudExpc3RlbmVycyYmKHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZT0+e2NvbnN0e2VsZW1lbnQ6dCx0eXBlOmksY2FsbGJhY2s6cyxvcHRpb25zOm59PWU7dC5yZW1vdmVFdmVudExpc3RlbmVyKGkscyxuKX0pKSx0aGlzLmV2ZW50TGlzdGVuZXJzPVtdKX1mdW5jdGlvbiB0ZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoZT0+dGhpcy5yZWFkeT9zZXRUaW1lb3V0KGUsMCk6WC5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5jb250YWluZXIsXCJyZWFkeVwiLGUpKSkudGhlbigoKCk9Pnt9KSl9ZnVuY3Rpb24gaWUoZSl7Uy5wcm9taXNlKGUpJiZlLnRoZW4obnVsbCwoKCk9Pnt9KSl9ZnVuY3Rpb24gc2UoZSl7cmV0dXJuIFMuYXJyYXkoZSk/ZS5maWx0ZXIoKCh0LGkpPT5lLmluZGV4T2YodCk9PT1pKSk6ZX1mdW5jdGlvbiBuZShlLHQpe3JldHVybiBTLmFycmF5KGUpJiZlLmxlbmd0aD9lLnJlZHVjZSgoKGUsaSk9Pk1hdGguYWJzKGktdCk8TWF0aC5hYnMoZS10KT9pOmUpKTpudWxsfWZ1bmN0aW9uIGFlKGUpe3JldHVybiEoIXdpbmRvd3x8IXdpbmRvdy5DU1MpJiZ3aW5kb3cuQ1NTLnN1cHBvcnRzKGUpfWNvbnN0IGxlPVtbMSwxXSxbNCwzXSxbMyw0XSxbNSw0XSxbNCw1XSxbMywyXSxbMiwzXSxbMTYsMTBdLFsxMCwxNl0sWzE2LDldLFs5LDE2XSxbMjEsOV0sWzksMjFdLFszMiw5XSxbOSwzMl1dLnJlZHVjZSgoKGUsW3QsaV0pPT4oey4uLmUsW3QvaV06W3QsaV19KSkse30pO2Z1bmN0aW9uIHJlKGUpe2lmKCEoUy5hcnJheShlKXx8Uy5zdHJpbmcoZSkmJmUuaW5jbHVkZXMoXCI6XCIpKSlyZXR1cm4hMTtyZXR1cm4oUy5hcnJheShlKT9lOmUuc3BsaXQoXCI6XCIpKS5tYXAoTnVtYmVyKS5ldmVyeShTLm51bWJlcil9ZnVuY3Rpb24gb2UoZSl7aWYoIVMuYXJyYXkoZSl8fCFlLmV2ZXJ5KFMubnVtYmVyKSlyZXR1cm4gbnVsbDtjb25zdFt0LGldPWUscz0oZSx0KT0+MD09PXQ/ZTpzKHQsZSV0KSxuPXModCxpKTtyZXR1cm5bdC9uLGkvbl19ZnVuY3Rpb24gY2UoZSl7Y29uc3QgdD1lPT5yZShlKT9lLnNwbGl0KFwiOlwiKS5tYXAoTnVtYmVyKTpudWxsO2xldCBpPXQoZSk7aWYobnVsbD09PWkmJihpPXQodGhpcy5jb25maWcucmF0aW8pKSxudWxsPT09aSYmIVMuZW1wdHkodGhpcy5lbWJlZCkmJlMuYXJyYXkodGhpcy5lbWJlZC5yYXRpbykmJih7cmF0aW86aX09dGhpcy5lbWJlZCksbnVsbD09PWkmJnRoaXMuaXNIVE1MNSl7Y29uc3R7dmlkZW9XaWR0aDplLHZpZGVvSGVpZ2h0OnR9PXRoaXMubWVkaWE7aT1bZSx0XX1yZXR1cm4gb2UoaSl9ZnVuY3Rpb24gdWUoZSl7aWYoIXRoaXMuaXNWaWRlbylyZXR1cm57fTtjb25zdHt3cmFwcGVyOnR9PXRoaXMuZWxlbWVudHMsaT1jZS5jYWxsKHRoaXMsZSk7aWYoIVMuYXJyYXkoaSkpcmV0dXJue307Y29uc3RbcyxuXT1vZShpKSxhPTEwMC9zKm47aWYoYWUoYGFzcGVjdC1yYXRpbzogJHtzfS8ke259YCk/dC5zdHlsZS5hc3BlY3RSYXRpbz1gJHtzfS8ke259YDp0LnN0eWxlLnBhZGRpbmdCb3R0b209YCR7YX0lYCx0aGlzLmlzVmltZW8mJiF0aGlzLmNvbmZpZy52aW1lby5wcmVtaXVtJiZ0aGlzLnN1cHBvcnRlZC51aSl7Y29uc3QgZT0xMDAvdGhpcy5tZWRpYS5vZmZzZXRXaWR0aCpwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm1lZGlhKS5wYWRkaW5nQm90dG9tLDEwKSxpPShlLWEpLyhlLzUwKTt0aGlzLmZ1bGxzY3JlZW4uYWN0aXZlP3Quc3R5bGUucGFkZGluZ0JvdHRvbT1udWxsOnRoaXMubWVkaWEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKC0ke2l9JSlgfWVsc2UgdGhpcy5pc0hUTUw1JiZ0LmNsYXNzTGlzdC5hZGQodGhpcy5jb25maWcuY2xhc3NOYW1lcy52aWRlb0ZpeGVkUmF0aW8pO3JldHVybntwYWRkaW5nOmEscmF0aW86aX19ZnVuY3Rpb24gaGUoZSx0LGk9LjA1KXtjb25zdCBzPWUvdCxuPW5lKE9iamVjdC5rZXlzKGxlKSxzKTtyZXR1cm4gTWF0aC5hYnMobi1zKTw9aT9sZVtuXTpbZSx0XX1jb25zdCBkZT17Z2V0U291cmNlcygpe2lmKCF0aGlzLmlzSFRNTDUpcmV0dXJuW107cmV0dXJuIEFycmF5LmZyb20odGhpcy5tZWRpYS5xdWVyeVNlbGVjdG9yQWxsKFwic291cmNlXCIpKS5maWx0ZXIoKGU9Pntjb25zdCB0PWUuZ2V0QXR0cmlidXRlKFwidHlwZVwiKTtyZXR1cm4hIVMuZW1wdHkodCl8fEsubWltZS5jYWxsKHRoaXMsdCl9KSl9LGdldFF1YWxpdHlPcHRpb25zKCl7cmV0dXJuIHRoaXMuY29uZmlnLnF1YWxpdHkuZm9yY2VkP3RoaXMuY29uZmlnLnF1YWxpdHkub3B0aW9uczpkZS5nZXRTb3VyY2VzLmNhbGwodGhpcykubWFwKChlPT5OdW1iZXIoZS5nZXRBdHRyaWJ1dGUoXCJzaXplXCIpKSkpLmZpbHRlcihCb29sZWFuKX0sc2V0dXAoKXtpZighdGhpcy5pc0hUTUw1KXJldHVybjtjb25zdCBlPXRoaXM7ZS5vcHRpb25zLnNwZWVkPWUuY29uZmlnLnNwZWVkLm9wdGlvbnMsUy5lbXB0eSh0aGlzLmNvbmZpZy5yYXRpbyl8fHVlLmNhbGwoZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJxdWFsaXR5XCIse2dldCgpe2NvbnN0IHQ9ZGUuZ2V0U291cmNlcy5jYWxsKGUpLmZpbmQoKHQ9PnQuZ2V0QXR0cmlidXRlKFwic3JjXCIpPT09ZS5zb3VyY2UpKTtyZXR1cm4gdCYmTnVtYmVyKHQuZ2V0QXR0cmlidXRlKFwic2l6ZVwiKSl9LHNldCh0KXtpZihlLnF1YWxpdHkhPT10KXtpZihlLmNvbmZpZy5xdWFsaXR5LmZvcmNlZCYmUy5mdW5jdGlvbihlLmNvbmZpZy5xdWFsaXR5Lm9uQ2hhbmdlKSllLmNvbmZpZy5xdWFsaXR5Lm9uQ2hhbmdlKHQpO2Vsc2V7Y29uc3QgaT1kZS5nZXRTb3VyY2VzLmNhbGwoZSkuZmluZCgoZT0+TnVtYmVyKGUuZ2V0QXR0cmlidXRlKFwic2l6ZVwiKSk9PT10KSk7aWYoIWkpcmV0dXJuO2NvbnN0e2N1cnJlbnRUaW1lOnMscGF1c2VkOm4scHJlbG9hZDphLHJlYWR5U3RhdGU6bCxwbGF5YmFja1JhdGU6cn09ZS5tZWRpYTtlLm1lZGlhLnNyYz1pLmdldEF0dHJpYnV0ZShcInNyY1wiKSwoXCJub25lXCIhPT1hfHxsKSYmKGUub25jZShcImxvYWRlZG1ldGFkYXRhXCIsKCgpPT57ZS5zcGVlZD1yLGUuY3VycmVudFRpbWU9cyxufHxpZShlLnBsYXkoKSl9KSksZS5tZWRpYS5sb2FkKCkpfVouY2FsbChlLGUubWVkaWEsXCJxdWFsaXR5Y2hhbmdlXCIsITEse3F1YWxpdHk6dH0pfX19KX0sY2FuY2VsUmVxdWVzdHMoKXt0aGlzLmlzSFRNTDUmJihPKGRlLmdldFNvdXJjZXMuY2FsbCh0aGlzKSksdGhpcy5tZWRpYS5zZXRBdHRyaWJ1dGUoXCJzcmNcIix0aGlzLmNvbmZpZy5ibGFua1ZpZGVvKSx0aGlzLm1lZGlhLmxvYWQoKSx0aGlzLmRlYnVnLmxvZyhcIkNhbmNlbGxlZCBuZXR3b3JrIHJlcXVlc3RzXCIpKX19O2Z1bmN0aW9uIG1lKGUsLi4udCl7cmV0dXJuIFMuZW1wdHkoZSk/ZTplLnRvU3RyaW5nKCkucmVwbGFjZSgveyhcXGQrKX0vZywoKGUsaSk9PnRbaV0udG9TdHJpbmcoKSkpfWNvbnN0IHBlPShlPVwiXCIsdD1cIlwiLGk9XCJcIik9PmUucmVwbGFjZShuZXcgUmVnRXhwKHQudG9TdHJpbmcoKS5yZXBsYWNlKC8oWy4qKz9ePSE6JHt9KCl8W1xcXS9cXFxcXSkvZyxcIlxcXFwkMVwiKSxcImdcIiksaS50b1N0cmluZygpKSxnZT0oZT1cIlwiKT0+ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcd1xcUyovZywoZT0+ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCkpKTtmdW5jdGlvbiBmZShlPVwiXCIpe2xldCB0PWUudG9TdHJpbmcoKTtyZXR1cm4gdD1mdW5jdGlvbihlPVwiXCIpe2xldCB0PWUudG9TdHJpbmcoKTtyZXR1cm4gdD1wZSh0LFwiLVwiLFwiIFwiKSx0PXBlKHQsXCJfXCIsXCIgXCIpLHQ9Z2UodCkscGUodCxcIiBcIixcIlwiKX0odCksdC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSt0LnNsaWNlKDEpfWZ1bmN0aW9uIHllKGUpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gdC5hcHBlbmRDaGlsZChlKSx0LmlubmVySFRNTH1jb25zdCBiZT17cGlwOlwiUElQXCIsYWlycGxheTpcIkFpclBsYXlcIixodG1sNTpcIkhUTUw1XCIsdmltZW86XCJWaW1lb1wiLHlvdXR1YmU6XCJZb3VUdWJlXCJ9LHZlPXtnZXQoZT1cIlwiLHQ9e30pe2lmKFMuZW1wdHkoZSl8fFMuZW1wdHkodCkpcmV0dXJuXCJcIjtsZXQgaT1OKHQuaTE4bixlKTtpZihTLmVtcHR5KGkpKXJldHVybiBPYmplY3Qua2V5cyhiZSkuaW5jbHVkZXMoZSk/YmVbZV06XCJcIjtjb25zdCBzPXtcIntzZWVrdGltZX1cIjp0LnNlZWtUaW1lLFwie3RpdGxlfVwiOnQudGl0bGV9O3JldHVybiBPYmplY3QuZW50cmllcyhzKS5mb3JFYWNoKCgoW2UsdF0pPT57aT1wZShpLGUsdCl9KSksaX19O2NsYXNzIHdle2NvbnN0cnVjdG9yKHQpe2UodGhpcyxcImdldFwiLChlPT57aWYoIXdlLnN1cHBvcnRlZHx8IXRoaXMuZW5hYmxlZClyZXR1cm4gbnVsbDtjb25zdCB0PXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmtleSk7aWYoUy5lbXB0eSh0KSlyZXR1cm4gbnVsbDtjb25zdCBpPUpTT04ucGFyc2UodCk7cmV0dXJuIFMuc3RyaW5nKGUpJiZlLmxlbmd0aD9pW2VdOml9KSksZSh0aGlzLFwic2V0XCIsKGU9PntpZighd2Uuc3VwcG9ydGVkfHwhdGhpcy5lbmFibGVkKXJldHVybjtpZighUy5vYmplY3QoZSkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0KCk7Uy5lbXB0eSh0KSYmKHQ9e30pLHgodCxlKTt0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMua2V5LEpTT04uc3RyaW5naWZ5KHQpKX1jYXRjaChlKXt9fSkpLHRoaXMuZW5hYmxlZD10LmNvbmZpZy5zdG9yYWdlLmVuYWJsZWQsdGhpcy5rZXk9dC5jb25maWcuc3RvcmFnZS5rZXl9c3RhdGljIGdldCBzdXBwb3J0ZWQoKXt0cnl7aWYoIShcImxvY2FsU3RvcmFnZVwiaW4gd2luZG93KSlyZXR1cm4hMTtjb25zdCBlPVwiX19fdGVzdFwiO3JldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oZSxlKSx3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fX1mdW5jdGlvbiBUZShlLHQ9XCJ0ZXh0XCIpe3JldHVybiBuZXcgUHJvbWlzZSgoKGkscyk9Pnt0cnl7Y29uc3Qgcz1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoIShcIndpdGhDcmVkZW50aWFsc1wiaW4gcykpcmV0dXJuO3MuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwoKCk9PntpZihcInRleHRcIj09PXQpdHJ5e2koSlNPTi5wYXJzZShzLnJlc3BvbnNlVGV4dCkpfWNhdGNoKGUpe2kocy5yZXNwb25zZVRleHQpfWVsc2UgaShzLnJlc3BvbnNlKX0pKSxzLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCgoKT0+e3Rocm93IG5ldyBFcnJvcihzLnN0YXR1cyl9KSkscy5vcGVuKFwiR0VUXCIsZSwhMCkscy5yZXNwb25zZVR5cGU9dCxzLnNlbmQoKX1jYXRjaChlKXtzKGUpfX0pKX1mdW5jdGlvbiBrZShlLHQpe2lmKCFTLnN0cmluZyhlKSlyZXR1cm47Y29uc3QgaT1cImNhY2hlXCIscz1TLnN0cmluZyh0KTtsZXQgbj0hMTtjb25zdCBhPSgpPT5udWxsIT09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCksbD0oZSx0KT0+e2UuaW5uZXJIVE1MPXQscyYmYSgpfHxkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIixlKX07aWYoIXN8fCFhKCkpe2NvbnN0IGE9d2Uuc3VwcG9ydGVkLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtpZihyLnNldEF0dHJpYnV0ZShcImhpZGRlblwiLFwiXCIpLHMmJnIuc2V0QXR0cmlidXRlKFwiaWRcIix0KSxhKXtjb25zdCBlPXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtpfS0ke3R9YCk7aWYobj1udWxsIT09ZSxuKXtjb25zdCB0PUpTT04ucGFyc2UoZSk7bChyLHQuY29udGVudCl9fVRlKGUpLnRoZW4oKGU9PntpZighUy5lbXB0eShlKSl7aWYoYSl0cnl7d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2l9LSR7dH1gLEpTT04uc3RyaW5naWZ5KHtjb250ZW50OmV9KSl9Y2F0Y2goZSl7fWwocixlKX19KSkuY2F0Y2goKCgpPT57fSkpfX1jb25zdCBDZT1lPT5NYXRoLnRydW5jKGUvNjAvNjAlNjAsMTApLEFlPWU9Pk1hdGgudHJ1bmMoZS82MCU2MCwxMCksU2U9ZT0+TWF0aC50cnVuYyhlJTYwLDEwKTtmdW5jdGlvbiBFZShlPTAsdD0hMSxpPSExKXtpZighUy5udW1iZXIoZSkpcmV0dXJuIEVlKHZvaWQgMCx0LGkpO2NvbnN0IHM9ZT0+YDAke2V9YC5zbGljZSgtMik7bGV0IG49Q2UoZSk7Y29uc3QgYT1BZShlKSxsPVNlKGUpO3JldHVybiBuPXR8fG4+MD9gJHtufTpgOlwiXCIsYCR7aSYmZT4wP1wiLVwiOlwiXCJ9JHtufSR7cyhhKX06JHtzKGwpfWB9Y29uc3QgUGU9e2dldEljb25VcmwoKXtjb25zdCBlPW5ldyBVUkwodGhpcy5jb25maWcuaWNvblVybCx3aW5kb3cubG9jYXRpb24pLHQ9d2luZG93LmxvY2F0aW9uLmhvc3Q/d2luZG93LmxvY2F0aW9uLmhvc3Q6d2luZG93LnRvcC5sb2NhdGlvbi5ob3N0LGk9ZS5ob3N0IT09dHx8TS5pc0lFJiYhd2luZG93LnN2ZzRldmVyeWJvZHk7cmV0dXJue3VybDp0aGlzLmNvbmZpZy5pY29uVXJsLGNvcnM6aX19LGZpbmRFbGVtZW50cygpe3RyeXtyZXR1cm4gdGhpcy5lbGVtZW50cy5jb250cm9scz1CLmNhbGwodGhpcyx0aGlzLmNvbmZpZy5zZWxlY3RvcnMuY29udHJvbHMud3JhcHBlciksdGhpcy5lbGVtZW50cy5idXR0b25zPXtwbGF5OlUuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLnBsYXkpLHBhdXNlOkIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLnBhdXNlKSxyZXN0YXJ0OkIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLnJlc3RhcnQpLHJld2luZDpCLmNhbGwodGhpcyx0aGlzLmNvbmZpZy5zZWxlY3RvcnMuYnV0dG9ucy5yZXdpbmQpLGZhc3RGb3J3YXJkOkIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLmZhc3RGb3J3YXJkKSxtdXRlOkIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLm11dGUpLHBpcDpCLmNhbGwodGhpcyx0aGlzLmNvbmZpZy5zZWxlY3RvcnMuYnV0dG9ucy5waXApLGFpcnBsYXk6Qi5jYWxsKHRoaXMsdGhpcy5jb25maWcuc2VsZWN0b3JzLmJ1dHRvbnMuYWlycGxheSksc2V0dGluZ3M6Qi5jYWxsKHRoaXMsdGhpcy5jb25maWcuc2VsZWN0b3JzLmJ1dHRvbnMuc2V0dGluZ3MpLGNhcHRpb25zOkIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLmNhcHRpb25zKSxmdWxsc2NyZWVuOkIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLmZ1bGxzY3JlZW4pfSx0aGlzLmVsZW1lbnRzLnByb2dyZXNzPUIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5wcm9ncmVzcyksdGhpcy5lbGVtZW50cy5pbnB1dHM9e3NlZWs6Qi5jYWxsKHRoaXMsdGhpcy5jb25maWcuc2VsZWN0b3JzLmlucHV0cy5zZWVrKSx2b2x1bWU6Qi5jYWxsKHRoaXMsdGhpcy5jb25maWcuc2VsZWN0b3JzLmlucHV0cy52b2x1bWUpfSx0aGlzLmVsZW1lbnRzLmRpc3BsYXk9e2J1ZmZlcjpCLmNhbGwodGhpcyx0aGlzLmNvbmZpZy5zZWxlY3RvcnMuZGlzcGxheS5idWZmZXIpLGN1cnJlbnRUaW1lOkIuY2FsbCh0aGlzLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5kaXNwbGF5LmN1cnJlbnRUaW1lKSxkdXJhdGlvbjpCLmNhbGwodGhpcyx0aGlzLmNvbmZpZy5zZWxlY3RvcnMuZGlzcGxheS5kdXJhdGlvbil9LFMuZWxlbWVudCh0aGlzLmVsZW1lbnRzLnByb2dyZXNzKSYmKHRoaXMuZWxlbWVudHMuZGlzcGxheS5zZWVrVG9vbHRpcD10aGlzLmVsZW1lbnRzLnByb2dyZXNzLnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMuY29uZmlnLmNsYXNzTmFtZXMudG9vbHRpcH1gKSksITB9Y2F0Y2goZSl7cmV0dXJuIHRoaXMuZGVidWcud2FybihcIkl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggeW91ciBjdXN0b20gY29udHJvbHMgSFRNTFwiLGUpLHRoaXMudG9nZ2xlTmF0aXZlQ29udHJvbHMoITApLCExfX0sY3JlYXRlSWNvbihlLHQpe2NvbnN0IGk9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHM9UGUuZ2V0SWNvblVybC5jYWxsKHRoaXMpLG49YCR7cy5jb3JzP1wiXCI6cy51cmx9IyR7dGhpcy5jb25maWcuaWNvblByZWZpeH1gLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGksXCJzdmdcIik7SShhLHgodCx7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLGZvY3VzYWJsZTpcImZhbHNlXCJ9KSk7Y29uc3QgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoaSxcInVzZVwiKSxyPWAke259LSR7ZX1gO3JldHVyblwiaHJlZlwiaW4gbCYmbC5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcImhyZWZcIixyKSxsLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwieGxpbms6aHJlZlwiLHIpLGEuYXBwZW5kQ2hpbGQobCksYX0sY3JlYXRlTGFiZWwoZSx0PXt9KXtjb25zdCBpPXZlLmdldChlLHRoaXMuY29uZmlnKTtyZXR1cm4gJChcInNwYW5cIix7Li4udCxjbGFzczpbdC5jbGFzcyx0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmhpZGRlbl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfSxpKX0sY3JlYXRlQmFkZ2UoZSl7aWYoUy5lbXB0eShlKSlyZXR1cm4gbnVsbDtjb25zdCB0PSQoXCJzcGFuXCIse2NsYXNzOnRoaXMuY29uZmlnLmNsYXNzTmFtZXMubWVudS52YWx1ZX0pO3JldHVybiB0LmFwcGVuZENoaWxkKCQoXCJzcGFuXCIse2NsYXNzOnRoaXMuY29uZmlnLmNsYXNzTmFtZXMubWVudS5iYWRnZX0sZSkpLHR9LGNyZWF0ZUJ1dHRvbihlLHQpe2NvbnN0IGk9eCh7fSx0KTtsZXQgcz1mZShlKTtjb25zdCBuPXtlbGVtZW50OlwiYnV0dG9uXCIsdG9nZ2xlOiExLGxhYmVsOm51bGwsaWNvbjpudWxsLGxhYmVsUHJlc3NlZDpudWxsLGljb25QcmVzc2VkOm51bGx9O3N3aXRjaChbXCJlbGVtZW50XCIsXCJpY29uXCIsXCJsYWJlbFwiXS5mb3JFYWNoKChlPT57T2JqZWN0LmtleXMoaSkuaW5jbHVkZXMoZSkmJihuW2VdPWlbZV0sZGVsZXRlIGlbZV0pfSkpLFwiYnV0dG9uXCIhPT1uLmVsZW1lbnR8fE9iamVjdC5rZXlzKGkpLmluY2x1ZGVzKFwidHlwZVwiKXx8KGkudHlwZT1cImJ1dHRvblwiKSxPYmplY3Qua2V5cyhpKS5pbmNsdWRlcyhcImNsYXNzXCIpP2kuY2xhc3Muc3BsaXQoXCIgXCIpLnNvbWUoKGU9PmU9PT10aGlzLmNvbmZpZy5jbGFzc05hbWVzLmNvbnRyb2wpKXx8eChpLHtjbGFzczpgJHtpLmNsYXNzfSAke3RoaXMuY29uZmlnLmNsYXNzTmFtZXMuY29udHJvbH1gfSk6aS5jbGFzcz10aGlzLmNvbmZpZy5jbGFzc05hbWVzLmNvbnRyb2wsZSl7Y2FzZVwicGxheVwiOm4udG9nZ2xlPSEwLG4ubGFiZWw9XCJwbGF5XCIsbi5sYWJlbFByZXNzZWQ9XCJwYXVzZVwiLG4uaWNvbj1cInBsYXlcIixuLmljb25QcmVzc2VkPVwicGF1c2VcIjticmVhaztjYXNlXCJtdXRlXCI6bi50b2dnbGU9ITAsbi5sYWJlbD1cIm11dGVcIixuLmxhYmVsUHJlc3NlZD1cInVubXV0ZVwiLG4uaWNvbj1cInZvbHVtZVwiLG4uaWNvblByZXNzZWQ9XCJtdXRlZFwiO2JyZWFrO2Nhc2VcImNhcHRpb25zXCI6bi50b2dnbGU9ITAsbi5sYWJlbD1cImVuYWJsZUNhcHRpb25zXCIsbi5sYWJlbFByZXNzZWQ9XCJkaXNhYmxlQ2FwdGlvbnNcIixuLmljb249XCJjYXB0aW9ucy1vZmZcIixuLmljb25QcmVzc2VkPVwiY2FwdGlvbnMtb25cIjticmVhaztjYXNlXCJmdWxsc2NyZWVuXCI6bi50b2dnbGU9ITAsbi5sYWJlbD1cImVudGVyRnVsbHNjcmVlblwiLG4ubGFiZWxQcmVzc2VkPVwiZXhpdEZ1bGxzY3JlZW5cIixuLmljb249XCJlbnRlci1mdWxsc2NyZWVuXCIsbi5pY29uUHJlc3NlZD1cImV4aXQtZnVsbHNjcmVlblwiO2JyZWFrO2Nhc2VcInBsYXktbGFyZ2VcIjppLmNsYXNzKz1gICR7dGhpcy5jb25maWcuY2xhc3NOYW1lcy5jb250cm9sfS0tb3ZlcmxhaWRgLHM9XCJwbGF5XCIsbi5sYWJlbD1cInBsYXlcIixuLmljb249XCJwbGF5XCI7YnJlYWs7ZGVmYXVsdDpTLmVtcHR5KG4ubGFiZWwpJiYobi5sYWJlbD1zKSxTLmVtcHR5KG4uaWNvbikmJihuLmljb249ZSl9Y29uc3QgYT0kKG4uZWxlbWVudCk7cmV0dXJuIG4udG9nZ2xlPyhhLmFwcGVuZENoaWxkKFBlLmNyZWF0ZUljb24uY2FsbCh0aGlzLG4uaWNvblByZXNzZWQse2NsYXNzOlwiaWNvbi0tcHJlc3NlZFwifSkpLGEuYXBwZW5kQ2hpbGQoUGUuY3JlYXRlSWNvbi5jYWxsKHRoaXMsbi5pY29uLHtjbGFzczpcImljb24tLW5vdC1wcmVzc2VkXCJ9KSksYS5hcHBlbmRDaGlsZChQZS5jcmVhdGVMYWJlbC5jYWxsKHRoaXMsbi5sYWJlbFByZXNzZWQse2NsYXNzOlwibGFiZWwtLXByZXNzZWRcIn0pKSxhLmFwcGVuZENoaWxkKFBlLmNyZWF0ZUxhYmVsLmNhbGwodGhpcyxuLmxhYmVsLHtjbGFzczpcImxhYmVsLS1ub3QtcHJlc3NlZFwifSkpKTooYS5hcHBlbmRDaGlsZChQZS5jcmVhdGVJY29uLmNhbGwodGhpcyxuLmljb24pKSxhLmFwcGVuZENoaWxkKFBlLmNyZWF0ZUxhYmVsLmNhbGwodGhpcyxuLmxhYmVsKSkpLHgoaSxEKHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zW3NdLGkpKSxJKGEsaSksXCJwbGF5XCI9PT1zPyhTLmFycmF5KHRoaXMuZWxlbWVudHMuYnV0dG9uc1tzXSl8fCh0aGlzLmVsZW1lbnRzLmJ1dHRvbnNbc109W10pLHRoaXMuZWxlbWVudHMuYnV0dG9uc1tzXS5wdXNoKGEpKTp0aGlzLmVsZW1lbnRzLmJ1dHRvbnNbc109YSxhfSxjcmVhdGVSYW5nZShlLHQpe2NvbnN0IGk9JChcImlucHV0XCIseChEKHRoaXMuY29uZmlnLnNlbGVjdG9ycy5pbnB1dHNbZV0pLHt0eXBlOlwicmFuZ2VcIixtaW46MCxtYXg6MTAwLHN0ZXA6LjAxLHZhbHVlOjAsYXV0b2NvbXBsZXRlOlwib2ZmXCIscm9sZTpcInNsaWRlclwiLFwiYXJpYS1sYWJlbFwiOnZlLmdldChlLHRoaXMuY29uZmlnKSxcImFyaWEtdmFsdWVtaW5cIjowLFwiYXJpYS12YWx1ZW1heFwiOjEwMCxcImFyaWEtdmFsdWVub3dcIjowfSx0KSk7cmV0dXJuIHRoaXMuZWxlbWVudHMuaW5wdXRzW2VdPWksUGUudXBkYXRlUmFuZ2VGaWxsLmNhbGwodGhpcyxpKSxnLnNldHVwKGkpLGl9LGNyZWF0ZVByb2dyZXNzKGUsdCl7Y29uc3QgaT0kKFwicHJvZ3Jlc3NcIix4KEQodGhpcy5jb25maWcuc2VsZWN0b3JzLmRpc3BsYXlbZV0pLHttaW46MCxtYXg6MTAwLHZhbHVlOjAscm9sZTpcInByb2dyZXNzYmFyXCIsXCJhcmlhLWhpZGRlblwiOiEwfSx0KSk7aWYoXCJ2b2x1bWVcIiE9PWUpe2kuYXBwZW5kQ2hpbGQoJChcInNwYW5cIixudWxsLFwiMFwiKSk7Y29uc3QgdD17cGxheWVkOlwicGxheWVkXCIsYnVmZmVyOlwiYnVmZmVyZWRcIn1bZV0scz10P3ZlLmdldCh0LHRoaXMuY29uZmlnKTpcIlwiO2kuaW5uZXJUZXh0PWAlICR7cy50b0xvd2VyQ2FzZSgpfWB9cmV0dXJuIHRoaXMuZWxlbWVudHMuZGlzcGxheVtlXT1pLGl9LGNyZWF0ZVRpbWUoZSx0KXtjb25zdCBpPUQodGhpcy5jb25maWcuc2VsZWN0b3JzLmRpc3BsYXlbZV0sdCkscz0kKFwiZGl2XCIseChpLHtjbGFzczpgJHtpLmNsYXNzP2kuY2xhc3M6XCJcIn0gJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmRpc3BsYXkudGltZX0gYC50cmltKCksXCJhcmlhLWxhYmVsXCI6dmUuZ2V0KGUsdGhpcy5jb25maWcpLHJvbGU6XCJ0aW1lclwifSksXCIwMDowMFwiKTtyZXR1cm4gdGhpcy5lbGVtZW50cy5kaXNwbGF5W2VdPXMsc30sYmluZE1lbnVJdGVtU2hvcnRjdXRzKGUsdCl7WC5jYWxsKHRoaXMsZSxcImtleWRvd24ga2V5dXBcIiwoaT0+e2lmKCFbXCIgXCIsXCJBcnJvd1VwXCIsXCJBcnJvd0Rvd25cIixcIkFycm93UmlnaHRcIl0uaW5jbHVkZXMoaS5rZXkpKXJldHVybjtpZihpLnByZXZlbnREZWZhdWx0KCksaS5zdG9wUHJvcGFnYXRpb24oKSxcImtleWRvd25cIj09PWkudHlwZSlyZXR1cm47Y29uc3Qgcz1WKGUsJ1tyb2xlPVwibWVudWl0ZW1yYWRpb1wiXScpO2lmKCFzJiZbXCIgXCIsXCJBcnJvd1JpZ2h0XCJdLmluY2x1ZGVzKGkua2V5KSlQZS5zaG93TWVudVBhbmVsLmNhbGwodGhpcyx0LCEwKTtlbHNle2xldCB0O1wiIFwiIT09aS5rZXkmJihcIkFycm93RG93blwiPT09aS5rZXl8fHMmJlwiQXJyb3dSaWdodFwiPT09aS5rZXk/KHQ9ZS5uZXh0RWxlbWVudFNpYmxpbmcsUy5lbGVtZW50KHQpfHwodD1lLnBhcmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQpKToodD1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsUy5lbGVtZW50KHQpfHwodD1lLnBhcmVudE5vZGUubGFzdEVsZW1lbnRDaGlsZCkpLFcuY2FsbCh0aGlzLHQsITApKX19KSwhMSksWC5jYWxsKHRoaXMsZSxcImtleXVwXCIsKGU9PntcIlJldHVyblwiPT09ZS5rZXkmJlBlLmZvY3VzRmlyc3RNZW51SXRlbS5jYWxsKHRoaXMsbnVsbCwhMCl9KSl9LGNyZWF0ZU1lbnVJdGVtKHt2YWx1ZTplLGxpc3Q6dCx0eXBlOmksdGl0bGU6cyxiYWRnZTpuPW51bGwsY2hlY2tlZDphPSExfSl7Y29uc3QgbD1EKHRoaXMuY29uZmlnLnNlbGVjdG9ycy5pbnB1dHNbaV0pLHI9JChcImJ1dHRvblwiLHgobCx7dHlwZTpcImJ1dHRvblwiLHJvbGU6XCJtZW51aXRlbXJhZGlvXCIsY2xhc3M6YCR7dGhpcy5jb25maWcuY2xhc3NOYW1lcy5jb250cm9sfSAke2wuY2xhc3M/bC5jbGFzczpcIlwifWAudHJpbSgpLFwiYXJpYS1jaGVja2VkXCI6YSx2YWx1ZTplfSkpLG89JChcInNwYW5cIik7by5pbm5lckhUTUw9cyxTLmVsZW1lbnQobikmJm8uYXBwZW5kQ2hpbGQobiksci5hcHBlbmRDaGlsZChvKSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcImNoZWNrZWRcIix7ZW51bWVyYWJsZTohMCxnZXQ6KCk9PlwidHJ1ZVwiPT09ci5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNoZWNrZWRcIiksc2V0KGUpe2UmJkFycmF5LmZyb20oci5wYXJlbnROb2RlLmNoaWxkcmVuKS5maWx0ZXIoKGU9PlYoZSwnW3JvbGU9XCJtZW51aXRlbXJhZGlvXCJdJykpKS5mb3JFYWNoKChlPT5lLnNldEF0dHJpYnV0ZShcImFyaWEtY2hlY2tlZFwiLFwiZmFsc2VcIikpKSxyLnNldEF0dHJpYnV0ZShcImFyaWEtY2hlY2tlZFwiLGU/XCJ0cnVlXCI6XCJmYWxzZVwiKX19KSx0aGlzLmxpc3RlbmVycy5iaW5kKHIsXCJjbGljayBrZXl1cFwiLCh0PT57aWYoIVMua2V5Ym9hcmRFdmVudCh0KXx8XCIgXCI9PT10LmtleSl7c3dpdGNoKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLHIuY2hlY2tlZD0hMCxpKXtjYXNlXCJsYW5ndWFnZVwiOnRoaXMuY3VycmVudFRyYWNrPU51bWJlcihlKTticmVhaztjYXNlXCJxdWFsaXR5XCI6dGhpcy5xdWFsaXR5PWU7YnJlYWs7Y2FzZVwic3BlZWRcIjp0aGlzLnNwZWVkPXBhcnNlRmxvYXQoZSl9UGUuc2hvd01lbnVQYW5lbC5jYWxsKHRoaXMsXCJob21lXCIsUy5rZXlib2FyZEV2ZW50KHQpKX19KSxpLCExKSxQZS5iaW5kTWVudUl0ZW1TaG9ydGN1dHMuY2FsbCh0aGlzLHIsaSksdC5hcHBlbmRDaGlsZChyKX0sZm9ybWF0VGltZShlPTAsdD0hMSl7aWYoIVMubnVtYmVyKGUpKXJldHVybiBlO3JldHVybiBFZShlLENlKHRoaXMuZHVyYXRpb24pPjAsdCl9LHVwZGF0ZVRpbWVEaXNwbGF5KGU9bnVsbCx0PTAsaT0hMSl7Uy5lbGVtZW50KGUpJiZTLm51bWJlcih0KSYmKGUuaW5uZXJUZXh0PVBlLmZvcm1hdFRpbWUodCxpKSl9LHVwZGF0ZVZvbHVtZSgpe3RoaXMuc3VwcG9ydGVkLnVpJiYoUy5lbGVtZW50KHRoaXMuZWxlbWVudHMuaW5wdXRzLnZvbHVtZSkmJlBlLnNldFJhbmdlLmNhbGwodGhpcyx0aGlzLmVsZW1lbnRzLmlucHV0cy52b2x1bWUsdGhpcy5tdXRlZD8wOnRoaXMudm9sdW1lKSxTLmVsZW1lbnQodGhpcy5lbGVtZW50cy5idXR0b25zLm11dGUpJiYodGhpcy5lbGVtZW50cy5idXR0b25zLm11dGUucHJlc3NlZD10aGlzLm11dGVkfHwwPT09dGhpcy52b2x1bWUpKX0sc2V0UmFuZ2UoZSx0PTApe1MuZWxlbWVudChlKSYmKGUudmFsdWU9dCxQZS51cGRhdGVSYW5nZUZpbGwuY2FsbCh0aGlzLGUpKX0sdXBkYXRlUHJvZ3Jlc3MoZSl7aWYoIXRoaXMuc3VwcG9ydGVkLnVpfHwhUy5ldmVudChlKSlyZXR1cm47bGV0IHQ9MDtjb25zdCBpPShlLHQpPT57Y29uc3QgaT1TLm51bWJlcih0KT90OjAscz1TLmVsZW1lbnQoZSk/ZTp0aGlzLmVsZW1lbnRzLmRpc3BsYXkuYnVmZmVyO2lmKFMuZWxlbWVudChzKSl7cy52YWx1ZT1pO2NvbnN0IGU9cy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNwYW5cIilbMF07Uy5lbGVtZW50KGUpJiYoZS5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZT1pKX19O2lmKGUpc3dpdGNoKGUudHlwZSl7Y2FzZVwidGltZXVwZGF0ZVwiOmNhc2VcInNlZWtpbmdcIjpjYXNlXCJzZWVrZWRcIjpzPXRoaXMuY3VycmVudFRpbWUsbj10aGlzLmR1cmF0aW9uLHQ9MD09PXN8fDA9PT1ufHxOdW1iZXIuaXNOYU4ocyl8fE51bWJlci5pc05hTihuKT8wOihzL24qMTAwKS50b0ZpeGVkKDIpLFwidGltZXVwZGF0ZVwiPT09ZS50eXBlJiZQZS5zZXRSYW5nZS5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5pbnB1dHMuc2Vlayx0KTticmVhaztjYXNlXCJwbGF5aW5nXCI6Y2FzZVwicHJvZ3Jlc3NcIjppKHRoaXMuZWxlbWVudHMuZGlzcGxheS5idWZmZXIsMTAwKnRoaXMuYnVmZmVyZWQpfXZhciBzLG59LHVwZGF0ZVJhbmdlRmlsbChlKXtjb25zdCB0PVMuZXZlbnQoZSk/ZS50YXJnZXQ6ZTtpZihTLmVsZW1lbnQodCkmJlwicmFuZ2VcIj09PXQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSl7aWYoVih0LHRoaXMuY29uZmlnLnNlbGVjdG9ycy5pbnB1dHMuc2Vlaykpe3Quc2V0QXR0cmlidXRlKFwiYXJpYS12YWx1ZW5vd1wiLHRoaXMuY3VycmVudFRpbWUpO2NvbnN0IGU9UGUuZm9ybWF0VGltZSh0aGlzLmN1cnJlbnRUaW1lKSxpPVBlLmZvcm1hdFRpbWUodGhpcy5kdXJhdGlvbikscz12ZS5nZXQoXCJzZWVrTGFiZWxcIix0aGlzLmNvbmZpZyk7dC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXZhbHVldGV4dFwiLHMucmVwbGFjZShcIntjdXJyZW50VGltZX1cIixlKS5yZXBsYWNlKFwie2R1cmF0aW9ufVwiLGkpKX1lbHNlIGlmKFYodCx0aGlzLmNvbmZpZy5zZWxlY3RvcnMuaW5wdXRzLnZvbHVtZSkpe2NvbnN0IGU9MTAwKnQudmFsdWU7dC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXZhbHVlbm93XCIsZSksdC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXZhbHVldGV4dFwiLGAke2UudG9GaXhlZCgxKX0lYCl9ZWxzZSB0LnNldEF0dHJpYnV0ZShcImFyaWEtdmFsdWVub3dcIix0LnZhbHVlKTsoTS5pc1dlYktpdHx8TS5pc0lQYWRPUykmJnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLXZhbHVlXCIsdC52YWx1ZS90Lm1heCoxMDArXCIlXCIpfX0sdXBkYXRlU2Vla1Rvb2x0aXAoZSl7dmFyIHQsaTtpZighdGhpcy5jb25maWcudG9vbHRpcHMuc2Vla3x8IVMuZWxlbWVudCh0aGlzLmVsZW1lbnRzLmlucHV0cy5zZWVrKXx8IVMuZWxlbWVudCh0aGlzLmVsZW1lbnRzLmRpc3BsYXkuc2Vla1Rvb2x0aXApfHwwPT09dGhpcy5kdXJhdGlvbilyZXR1cm47Y29uc3Qgcz10aGlzLmVsZW1lbnRzLmRpc3BsYXkuc2Vla1Rvb2x0aXAsbj1gJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnRvb2x0aXB9LS12aXNpYmxlYCxhPWU9PlIocyxuLGUpO2lmKHRoaXMudG91Y2gpcmV0dXJuIHZvaWQgYSghMSk7bGV0IGw9MDtjb25zdCByPXRoaXMuZWxlbWVudHMucHJvZ3Jlc3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoUy5ldmVudChlKSlsPTEwMC9yLndpZHRoKihlLnBhZ2VYLXIubGVmdCk7ZWxzZXtpZighRihzLG4pKXJldHVybjtsPXBhcnNlRmxvYXQocy5zdHlsZS5sZWZ0LDEwKX1sPDA/bD0wOmw+MTAwJiYobD0xMDApO2NvbnN0IG89dGhpcy5kdXJhdGlvbi8xMDAqbDtzLmlubmVyVGV4dD1QZS5mb3JtYXRUaW1lKG8pO2NvbnN0IGM9bnVsbD09PSh0PXRoaXMuY29uZmlnLm1hcmtlcnMpfHx2b2lkIDA9PT10fHxudWxsPT09KGk9dC5wb2ludHMpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLmZpbmQoKCh7dGltZTplfSk9PmU9PT1NYXRoLnJvdW5kKG8pKSk7YyYmcy5pbnNlcnRBZGphY2VudEhUTUwoXCJhZnRlcmJlZ2luXCIsYCR7Yy5sYWJlbH08YnI+YCkscy5zdHlsZS5sZWZ0PWAke2x9JWAsUy5ldmVudChlKSYmW1wibW91c2VlbnRlclwiLFwibW91c2VsZWF2ZVwiXS5pbmNsdWRlcyhlLnR5cGUpJiZhKFwibW91c2VlbnRlclwiPT09ZS50eXBlKX0sdGltZVVwZGF0ZShlKXtjb25zdCB0PSFTLmVsZW1lbnQodGhpcy5lbGVtZW50cy5kaXNwbGF5LmR1cmF0aW9uKSYmdGhpcy5jb25maWcuaW52ZXJ0VGltZTtQZS51cGRhdGVUaW1lRGlzcGxheS5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5kaXNwbGF5LmN1cnJlbnRUaW1lLHQ/dGhpcy5kdXJhdGlvbi10aGlzLmN1cnJlbnRUaW1lOnRoaXMuY3VycmVudFRpbWUsdCksZSYmXCJ0aW1ldXBkYXRlXCI9PT1lLnR5cGUmJnRoaXMubWVkaWEuc2Vla2luZ3x8UGUudXBkYXRlUHJvZ3Jlc3MuY2FsbCh0aGlzLGUpfSxkdXJhdGlvblVwZGF0ZSgpe2lmKCF0aGlzLnN1cHBvcnRlZC51aXx8IXRoaXMuY29uZmlnLmludmVydFRpbWUmJnRoaXMuY3VycmVudFRpbWUpcmV0dXJuO2lmKHRoaXMuZHVyYXRpb24+PTIqKjMyKXJldHVybiBIKHRoaXMuZWxlbWVudHMuZGlzcGxheS5jdXJyZW50VGltZSwhMCksdm9pZCBIKHRoaXMuZWxlbWVudHMucHJvZ3Jlc3MsITApO1MuZWxlbWVudCh0aGlzLmVsZW1lbnRzLmlucHV0cy5zZWVrKSYmdGhpcy5lbGVtZW50cy5pbnB1dHMuc2Vlay5zZXRBdHRyaWJ1dGUoXCJhcmlhLXZhbHVlbWF4XCIsdGhpcy5kdXJhdGlvbik7Y29uc3QgZT1TLmVsZW1lbnQodGhpcy5lbGVtZW50cy5kaXNwbGF5LmR1cmF0aW9uKTshZSYmdGhpcy5jb25maWcuZGlzcGxheUR1cmF0aW9uJiZ0aGlzLnBhdXNlZCYmUGUudXBkYXRlVGltZURpc3BsYXkuY2FsbCh0aGlzLHRoaXMuZWxlbWVudHMuZGlzcGxheS5jdXJyZW50VGltZSx0aGlzLmR1cmF0aW9uKSxlJiZQZS51cGRhdGVUaW1lRGlzcGxheS5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5kaXNwbGF5LmR1cmF0aW9uLHRoaXMuZHVyYXRpb24pLHRoaXMuY29uZmlnLm1hcmtlcnMuZW5hYmxlZCYmUGUuc2V0TWFya2Vycy5jYWxsKHRoaXMpLFBlLnVwZGF0ZVNlZWtUb29sdGlwLmNhbGwodGhpcyl9LHRvZ2dsZU1lbnVCdXR0b24oZSx0KXtIKHRoaXMuZWxlbWVudHMuc2V0dGluZ3MuYnV0dG9uc1tlXSwhdCl9LHVwZGF0ZVNldHRpbmcoZSx0LGkpe2NvbnN0IHM9dGhpcy5lbGVtZW50cy5zZXR0aW5ncy5wYW5lbHNbZV07bGV0IG49bnVsbCxhPXQ7aWYoXCJjYXB0aW9uc1wiPT09ZSluPXRoaXMuY3VycmVudFRyYWNrO2Vsc2V7aWYobj1TLmVtcHR5KGkpP3RoaXNbZV06aSxTLmVtcHR5KG4pJiYobj10aGlzLmNvbmZpZ1tlXS5kZWZhdWx0KSwhUy5lbXB0eSh0aGlzLm9wdGlvbnNbZV0pJiYhdGhpcy5vcHRpb25zW2VdLmluY2x1ZGVzKG4pKXJldHVybiB2b2lkIHRoaXMuZGVidWcud2FybihgVW5zdXBwb3J0ZWQgdmFsdWUgb2YgJyR7bn0nIGZvciAke2V9YCk7aWYoIXRoaXMuY29uZmlnW2VdLm9wdGlvbnMuaW5jbHVkZXMobikpcmV0dXJuIHZvaWQgdGhpcy5kZWJ1Zy53YXJuKGBEaXNhYmxlZCB2YWx1ZSBvZiAnJHtufScgZm9yICR7ZX1gKX1pZihTLmVsZW1lbnQoYSl8fChhPXMmJnMucXVlcnlTZWxlY3RvcignW3JvbGU9XCJtZW51XCJdJykpLCFTLmVsZW1lbnQoYSkpcmV0dXJuO3RoaXMuZWxlbWVudHMuc2V0dGluZ3MuYnV0dG9uc1tlXS5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLm1lbnUudmFsdWV9YCkuaW5uZXJIVE1MPVBlLmdldExhYmVsLmNhbGwodGhpcyxlLG4pO2NvbnN0IGw9YSYmYS5xdWVyeVNlbGVjdG9yKGBbdmFsdWU9XCIke259XCJdYCk7Uy5lbGVtZW50KGwpJiYobC5jaGVja2VkPSEwKX0sZ2V0TGFiZWwoZSx0KXtzd2l0Y2goZSl7Y2FzZVwic3BlZWRcIjpyZXR1cm4gMT09PXQ/dmUuZ2V0KFwibm9ybWFsXCIsdGhpcy5jb25maWcpOmAke3R9JnRpbWVzO2A7Y2FzZVwicXVhbGl0eVwiOmlmKFMubnVtYmVyKHQpKXtjb25zdCBlPXZlLmdldChgcXVhbGl0eUxhYmVsLiR7dH1gLHRoaXMuY29uZmlnKTtyZXR1cm4gZS5sZW5ndGg/ZTpgJHt0fXBgfXJldHVybiBnZSh0KTtjYXNlXCJjYXB0aW9uc1wiOnJldHVybiB4ZS5nZXRMYWJlbC5jYWxsKHRoaXMpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fSxzZXRRdWFsaXR5TWVudShlKXtpZighUy5lbGVtZW50KHRoaXMuZWxlbWVudHMuc2V0dGluZ3MucGFuZWxzLnF1YWxpdHkpKXJldHVybjtjb25zdCB0PVwicXVhbGl0eVwiLGk9dGhpcy5lbGVtZW50cy5zZXR0aW5ncy5wYW5lbHMucXVhbGl0eS5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cIm1lbnVcIl0nKTtTLmFycmF5KGUpJiYodGhpcy5vcHRpb25zLnF1YWxpdHk9c2UoZSkuZmlsdGVyKChlPT50aGlzLmNvbmZpZy5xdWFsaXR5Lm9wdGlvbnMuaW5jbHVkZXMoZSkpKSk7Y29uc3Qgcz0hUy5lbXB0eSh0aGlzLm9wdGlvbnMucXVhbGl0eSkmJnRoaXMub3B0aW9ucy5xdWFsaXR5Lmxlbmd0aD4xO2lmKFBlLnRvZ2dsZU1lbnVCdXR0b24uY2FsbCh0aGlzLHQscyksaihpKSxQZS5jaGVja01lbnUuY2FsbCh0aGlzKSwhcylyZXR1cm47Y29uc3Qgbj1lPT57Y29uc3QgdD12ZS5nZXQoYHF1YWxpdHlCYWRnZS4ke2V9YCx0aGlzLmNvbmZpZyk7cmV0dXJuIHQubGVuZ3RoP1BlLmNyZWF0ZUJhZGdlLmNhbGwodGhpcyx0KTpudWxsfTt0aGlzLm9wdGlvbnMucXVhbGl0eS5zb3J0KCgoZSx0KT0+e2NvbnN0IGk9dGhpcy5jb25maWcucXVhbGl0eS5vcHRpb25zO3JldHVybiBpLmluZGV4T2YoZSk+aS5pbmRleE9mKHQpPzE6LTF9KSkuZm9yRWFjaCgoZT0+e1BlLmNyZWF0ZU1lbnVJdGVtLmNhbGwodGhpcyx7dmFsdWU6ZSxsaXN0OmksdHlwZTp0LHRpdGxlOlBlLmdldExhYmVsLmNhbGwodGhpcyxcInF1YWxpdHlcIixlKSxiYWRnZTpuKGUpfSl9KSksUGUudXBkYXRlU2V0dGluZy5jYWxsKHRoaXMsdCxpKX0sc2V0Q2FwdGlvbnNNZW51KCl7aWYoIVMuZWxlbWVudCh0aGlzLmVsZW1lbnRzLnNldHRpbmdzLnBhbmVscy5jYXB0aW9ucykpcmV0dXJuO2NvbnN0IGU9XCJjYXB0aW9uc1wiLHQ9dGhpcy5lbGVtZW50cy5zZXR0aW5ncy5wYW5lbHMuY2FwdGlvbnMucXVlcnlTZWxlY3RvcignW3JvbGU9XCJtZW51XCJdJyksaT14ZS5nZXRUcmFja3MuY2FsbCh0aGlzKSxzPUJvb2xlYW4oaS5sZW5ndGgpO2lmKFBlLnRvZ2dsZU1lbnVCdXR0b24uY2FsbCh0aGlzLGUscyksaih0KSxQZS5jaGVja01lbnUuY2FsbCh0aGlzKSwhcylyZXR1cm47Y29uc3Qgbj1pLm1hcCgoKGUsaSk9Pih7dmFsdWU6aSxjaGVja2VkOnRoaXMuY2FwdGlvbnMudG9nZ2xlZCYmdGhpcy5jdXJyZW50VHJhY2s9PT1pLHRpdGxlOnhlLmdldExhYmVsLmNhbGwodGhpcyxlKSxiYWRnZTplLmxhbmd1YWdlJiZQZS5jcmVhdGVCYWRnZS5jYWxsKHRoaXMsZS5sYW5ndWFnZS50b1VwcGVyQ2FzZSgpKSxsaXN0OnQsdHlwZTpcImxhbmd1YWdlXCJ9KSkpO24udW5zaGlmdCh7dmFsdWU6LTEsY2hlY2tlZDohdGhpcy5jYXB0aW9ucy50b2dnbGVkLHRpdGxlOnZlLmdldChcImRpc2FibGVkXCIsdGhpcy5jb25maWcpLGxpc3Q6dCx0eXBlOlwibGFuZ3VhZ2VcIn0pLG4uZm9yRWFjaChQZS5jcmVhdGVNZW51SXRlbS5iaW5kKHRoaXMpKSxQZS51cGRhdGVTZXR0aW5nLmNhbGwodGhpcyxlLHQpfSxzZXRTcGVlZE1lbnUoKXtpZighUy5lbGVtZW50KHRoaXMuZWxlbWVudHMuc2V0dGluZ3MucGFuZWxzLnNwZWVkKSlyZXR1cm47Y29uc3QgZT1cInNwZWVkXCIsdD10aGlzLmVsZW1lbnRzLnNldHRpbmdzLnBhbmVscy5zcGVlZC5xdWVyeVNlbGVjdG9yKCdbcm9sZT1cIm1lbnVcIl0nKTt0aGlzLm9wdGlvbnMuc3BlZWQ9dGhpcy5vcHRpb25zLnNwZWVkLmZpbHRlcigoZT0+ZT49dGhpcy5taW5pbXVtU3BlZWQmJmU8PXRoaXMubWF4aW11bVNwZWVkKSk7Y29uc3QgaT0hUy5lbXB0eSh0aGlzLm9wdGlvbnMuc3BlZWQpJiZ0aGlzLm9wdGlvbnMuc3BlZWQubGVuZ3RoPjE7UGUudG9nZ2xlTWVudUJ1dHRvbi5jYWxsKHRoaXMsZSxpKSxqKHQpLFBlLmNoZWNrTWVudS5jYWxsKHRoaXMpLGkmJih0aGlzLm9wdGlvbnMuc3BlZWQuZm9yRWFjaCgoaT0+e1BlLmNyZWF0ZU1lbnVJdGVtLmNhbGwodGhpcyx7dmFsdWU6aSxsaXN0OnQsdHlwZTplLHRpdGxlOlBlLmdldExhYmVsLmNhbGwodGhpcyxcInNwZWVkXCIsaSl9KX0pKSxQZS51cGRhdGVTZXR0aW5nLmNhbGwodGhpcyxlLHQpKX0sY2hlY2tNZW51KCl7Y29uc3R7YnV0dG9uczplfT10aGlzLmVsZW1lbnRzLnNldHRpbmdzLHQ9IVMuZW1wdHkoZSkmJk9iamVjdC52YWx1ZXMoZSkuc29tZSgoZT0+IWUuaGlkZGVuKSk7SCh0aGlzLmVsZW1lbnRzLnNldHRpbmdzLm1lbnUsIXQpfSxmb2N1c0ZpcnN0TWVudUl0ZW0oZSx0PSExKXtpZih0aGlzLmVsZW1lbnRzLnNldHRpbmdzLnBvcHVwLmhpZGRlbilyZXR1cm47bGV0IGk9ZTtTLmVsZW1lbnQoaSl8fChpPU9iamVjdC52YWx1ZXModGhpcy5lbGVtZW50cy5zZXR0aW5ncy5wYW5lbHMpLmZpbmQoKGU9PiFlLmhpZGRlbikpKTtjb25zdCBzPWkucXVlcnlTZWxlY3RvcignW3JvbGVePVwibWVudWl0ZW1cIl0nKTtXLmNhbGwodGhpcyxzLHQpfSx0b2dnbGVNZW51KGUpe2NvbnN0e3BvcHVwOnR9PXRoaXMuZWxlbWVudHMuc2V0dGluZ3MsaT10aGlzLmVsZW1lbnRzLmJ1dHRvbnMuc2V0dGluZ3M7aWYoIVMuZWxlbWVudCh0KXx8IVMuZWxlbWVudChpKSlyZXR1cm47Y29uc3R7aGlkZGVuOnN9PXQ7bGV0IG49cztpZihTLmJvb2xlYW4oZSkpbj1lO2Vsc2UgaWYoUy5rZXlib2FyZEV2ZW50KGUpJiZcIkVzY2FwZVwiPT09ZS5rZXkpbj0hMTtlbHNlIGlmKFMuZXZlbnQoZSkpe2NvbnN0IHM9Uy5mdW5jdGlvbihlLmNvbXBvc2VkUGF0aCk/ZS5jb21wb3NlZFBhdGgoKVswXTplLnRhcmdldCxhPXQuY29udGFpbnMocyk7aWYoYXx8IWEmJmUudGFyZ2V0IT09aSYmbilyZXR1cm59aS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWV4cGFuZGVkXCIsbiksSCh0LCFuKSxSKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLHRoaXMuY29uZmlnLmNsYXNzTmFtZXMubWVudS5vcGVuLG4pLG4mJlMua2V5Ym9hcmRFdmVudChlKT9QZS5mb2N1c0ZpcnN0TWVudUl0ZW0uY2FsbCh0aGlzLG51bGwsITApOm58fHN8fFcuY2FsbCh0aGlzLGksUy5rZXlib2FyZEV2ZW50KGUpKX0sZ2V0TWVudVNpemUoZSl7Y29uc3QgdD1lLmNsb25lTm9kZSghMCk7dC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsdC5zdHlsZS5vcGFjaXR5PTAsdC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIiksZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpO2NvbnN0IGk9dC5zY3JvbGxXaWR0aCxzPXQuc2Nyb2xsSGVpZ2h0O3JldHVybiBPKHQpLHt3aWR0aDppLGhlaWdodDpzfX0sc2hvd01lbnVQYW5lbChlPVwiXCIsdD0hMSl7Y29uc3QgaT10aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGAjcGx5ci1zZXR0aW5ncy0ke3RoaXMuaWR9LSR7ZX1gKTtpZighUy5lbGVtZW50KGkpKXJldHVybjtjb25zdCBzPWkucGFyZW50Tm9kZSxuPUFycmF5LmZyb20ocy5jaGlsZHJlbikuZmluZCgoZT0+IWUuaGlkZGVuKSk7aWYoSy50cmFuc2l0aW9ucyYmIUsucmVkdWNlZE1vdGlvbil7cy5zdHlsZS53aWR0aD1gJHtuLnNjcm9sbFdpZHRofXB4YCxzLnN0eWxlLmhlaWdodD1gJHtuLnNjcm9sbEhlaWdodH1weGA7Y29uc3QgZT1QZS5nZXRNZW51U2l6ZS5jYWxsKHRoaXMsaSksdD1lPT57ZS50YXJnZXQ9PT1zJiZbXCJ3aWR0aFwiLFwiaGVpZ2h0XCJdLmluY2x1ZGVzKGUucHJvcGVydHlOYW1lKSYmKHMuc3R5bGUud2lkdGg9XCJcIixzLnN0eWxlLmhlaWdodD1cIlwiLEouY2FsbCh0aGlzLHMsRSx0KSl9O1guY2FsbCh0aGlzLHMsRSx0KSxzLnN0eWxlLndpZHRoPWAke2Uud2lkdGh9cHhgLHMuc3R5bGUuaGVpZ2h0PWAke2UuaGVpZ2h0fXB4YH1IKG4sITApLEgoaSwhMSksUGUuZm9jdXNGaXJzdE1lbnVJdGVtLmNhbGwodGhpcyxpLHQpfSxzZXREb3dubG9hZFVybCgpe2NvbnN0IGU9dGhpcy5lbGVtZW50cy5idXR0b25zLmRvd25sb2FkO1MuZWxlbWVudChlKSYmZS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsdGhpcy5kb3dubG9hZCl9LGNyZWF0ZShlKXtjb25zdHtiaW5kTWVudUl0ZW1TaG9ydGN1dHM6dCxjcmVhdGVCdXR0b246aSxjcmVhdGVQcm9ncmVzczpzLGNyZWF0ZVJhbmdlOm4sY3JlYXRlVGltZTphLHNldFF1YWxpdHlNZW51Omwsc2V0U3BlZWRNZW51OnIsc2hvd01lbnVQYW5lbDpvfT1QZTt0aGlzLmVsZW1lbnRzLmNvbnRyb2xzPW51bGwsUy5hcnJheSh0aGlzLmNvbmZpZy5jb250cm9scykmJnRoaXMuY29uZmlnLmNvbnRyb2xzLmluY2x1ZGVzKFwicGxheS1sYXJnZVwiKSYmdGhpcy5lbGVtZW50cy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaS5jYWxsKHRoaXMsXCJwbGF5LWxhcmdlXCIpKTtjb25zdCBjPSQoXCJkaXZcIixEKHRoaXMuY29uZmlnLnNlbGVjdG9ycy5jb250cm9scy53cmFwcGVyKSk7dGhpcy5lbGVtZW50cy5jb250cm9scz1jO2NvbnN0IHU9e2NsYXNzOlwicGx5cl9fY29udHJvbHNfX2l0ZW1cIn07cmV0dXJuIHNlKFMuYXJyYXkodGhpcy5jb25maWcuY29udHJvbHMpP3RoaXMuY29uZmlnLmNvbnRyb2xzOltdKS5mb3JFYWNoKChsPT57aWYoXCJyZXN0YXJ0XCI9PT1sJiZjLmFwcGVuZENoaWxkKGkuY2FsbCh0aGlzLFwicmVzdGFydFwiLHUpKSxcInJld2luZFwiPT09bCYmYy5hcHBlbmRDaGlsZChpLmNhbGwodGhpcyxcInJld2luZFwiLHUpKSxcInBsYXlcIj09PWwmJmMuYXBwZW5kQ2hpbGQoaS5jYWxsKHRoaXMsXCJwbGF5XCIsdSkpLFwiZmFzdC1mb3J3YXJkXCI9PT1sJiZjLmFwcGVuZENoaWxkKGkuY2FsbCh0aGlzLFwiZmFzdC1mb3J3YXJkXCIsdSkpLFwicHJvZ3Jlc3NcIj09PWwpe2NvbnN0IHQ9JChcImRpdlwiLHtjbGFzczpgJHt1LmNsYXNzfSBwbHlyX19wcm9ncmVzc19fY29udGFpbmVyYH0pLGk9JChcImRpdlwiLEQodGhpcy5jb25maWcuc2VsZWN0b3JzLnByb2dyZXNzKSk7aWYoaS5hcHBlbmRDaGlsZChuLmNhbGwodGhpcyxcInNlZWtcIix7aWQ6YHBseXItc2Vlay0ke2UuaWR9YH0pKSxpLmFwcGVuZENoaWxkKHMuY2FsbCh0aGlzLFwiYnVmZmVyXCIpKSx0aGlzLmNvbmZpZy50b29sdGlwcy5zZWVrKXtjb25zdCBlPSQoXCJzcGFuXCIse2NsYXNzOnRoaXMuY29uZmlnLmNsYXNzTmFtZXMudG9vbHRpcH0sXCIwMDowMFwiKTtpLmFwcGVuZENoaWxkKGUpLHRoaXMuZWxlbWVudHMuZGlzcGxheS5zZWVrVG9vbHRpcD1lfXRoaXMuZWxlbWVudHMucHJvZ3Jlc3M9aSx0LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudHMucHJvZ3Jlc3MpLGMuYXBwZW5kQ2hpbGQodCl9aWYoXCJjdXJyZW50LXRpbWVcIj09PWwmJmMuYXBwZW5kQ2hpbGQoYS5jYWxsKHRoaXMsXCJjdXJyZW50VGltZVwiLHUpKSxcImR1cmF0aW9uXCI9PT1sJiZjLmFwcGVuZENoaWxkKGEuY2FsbCh0aGlzLFwiZHVyYXRpb25cIix1KSksXCJtdXRlXCI9PT1sfHxcInZvbHVtZVwiPT09bCl7bGV0e3ZvbHVtZTp0fT10aGlzLmVsZW1lbnRzO2lmKFMuZWxlbWVudCh0KSYmYy5jb250YWlucyh0KXx8KHQ9JChcImRpdlwiLHgoe30sdSx7Y2xhc3M6YCR7dS5jbGFzc30gcGx5cl9fdm9sdW1lYC50cmltKCl9KSksdGhpcy5lbGVtZW50cy52b2x1bWU9dCxjLmFwcGVuZENoaWxkKHQpKSxcIm11dGVcIj09PWwmJnQuYXBwZW5kQ2hpbGQoaS5jYWxsKHRoaXMsXCJtdXRlXCIpKSxcInZvbHVtZVwiPT09bCYmIU0uaXNJb3MmJiFNLmlzSVBhZE9TKXtjb25zdCBpPXttYXg6MSxzdGVwOi4wNSx2YWx1ZTp0aGlzLmNvbmZpZy52b2x1bWV9O3QuYXBwZW5kQ2hpbGQobi5jYWxsKHRoaXMsXCJ2b2x1bWVcIix4KGkse2lkOmBwbHlyLXZvbHVtZS0ke2UuaWR9YH0pKSl9fWlmKFwiY2FwdGlvbnNcIj09PWwmJmMuYXBwZW5kQ2hpbGQoaS5jYWxsKHRoaXMsXCJjYXB0aW9uc1wiLHUpKSxcInNldHRpbmdzXCI9PT1sJiYhUy5lbXB0eSh0aGlzLmNvbmZpZy5zZXR0aW5ncykpe2NvbnN0IHM9JChcImRpdlwiLHgoe30sdSx7Y2xhc3M6YCR7dS5jbGFzc30gcGx5cl9fbWVudWAudHJpbSgpLGhpZGRlbjpcIlwifSkpO3MuYXBwZW5kQ2hpbGQoaS5jYWxsKHRoaXMsXCJzZXR0aW5nc1wiLHtcImFyaWEtaGFzcG9wdXBcIjohMCxcImFyaWEtY29udHJvbHNcIjpgcGx5ci1zZXR0aW5ncy0ke2UuaWR9YCxcImFyaWEtZXhwYW5kZWRcIjohMX0pKTtjb25zdCBuPSQoXCJkaXZcIix7Y2xhc3M6XCJwbHlyX19tZW51X19jb250YWluZXJcIixpZDpgcGx5ci1zZXR0aW5ncy0ke2UuaWR9YCxoaWRkZW46XCJcIn0pLGE9JChcImRpdlwiKSxsPSQoXCJkaXZcIix7aWQ6YHBseXItc2V0dGluZ3MtJHtlLmlkfS1ob21lYH0pLHI9JChcImRpdlwiLHtyb2xlOlwibWVudVwifSk7bC5hcHBlbmRDaGlsZChyKSxhLmFwcGVuZENoaWxkKGwpLHRoaXMuZWxlbWVudHMuc2V0dGluZ3MucGFuZWxzLmhvbWU9bCx0aGlzLmNvbmZpZy5zZXR0aW5ncy5mb3JFYWNoKChpPT57Y29uc3Qgcz0kKFwiYnV0dG9uXCIseChEKHRoaXMuY29uZmlnLnNlbGVjdG9ycy5idXR0b25zLnNldHRpbmdzKSx7dHlwZTpcImJ1dHRvblwiLGNsYXNzOmAke3RoaXMuY29uZmlnLmNsYXNzTmFtZXMuY29udHJvbH0gJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmNvbnRyb2x9LS1mb3J3YXJkYCxyb2xlOlwibWVudWl0ZW1cIixcImFyaWEtaGFzcG9wdXBcIjohMCxoaWRkZW46XCJcIn0pKTt0LmNhbGwodGhpcyxzLGkpLFguY2FsbCh0aGlzLHMsXCJjbGlja1wiLCgoKT0+e28uY2FsbCh0aGlzLGksITEpfSkpO2NvbnN0IG49JChcInNwYW5cIixudWxsLHZlLmdldChpLHRoaXMuY29uZmlnKSksbD0kKFwic3BhblwiLHtjbGFzczp0aGlzLmNvbmZpZy5jbGFzc05hbWVzLm1lbnUudmFsdWV9KTtsLmlubmVySFRNTD1lW2ldLG4uYXBwZW5kQ2hpbGQobCkscy5hcHBlbmRDaGlsZChuKSxyLmFwcGVuZENoaWxkKHMpO2NvbnN0IGM9JChcImRpdlwiLHtpZDpgcGx5ci1zZXR0aW5ncy0ke2UuaWR9LSR7aX1gLGhpZGRlbjpcIlwifSksdT0kKFwiYnV0dG9uXCIse3R5cGU6XCJidXR0b25cIixjbGFzczpgJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmNvbnRyb2x9ICR7dGhpcy5jb25maWcuY2xhc3NOYW1lcy5jb250cm9sfS0tYmFja2B9KTt1LmFwcGVuZENoaWxkKCQoXCJzcGFuXCIse1wiYXJpYS1oaWRkZW5cIjohMH0sdmUuZ2V0KGksdGhpcy5jb25maWcpKSksdS5hcHBlbmRDaGlsZCgkKFwic3BhblwiLHtjbGFzczp0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmhpZGRlbn0sdmUuZ2V0KFwibWVudUJhY2tcIix0aGlzLmNvbmZpZykpKSxYLmNhbGwodGhpcyxjLFwia2V5ZG93blwiLChlPT57XCJBcnJvd0xlZnRcIj09PWUua2V5JiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksby5jYWxsKHRoaXMsXCJob21lXCIsITApKX0pLCExKSxYLmNhbGwodGhpcyx1LFwiY2xpY2tcIiwoKCk9PntvLmNhbGwodGhpcyxcImhvbWVcIiwhMSl9KSksYy5hcHBlbmRDaGlsZCh1KSxjLmFwcGVuZENoaWxkKCQoXCJkaXZcIix7cm9sZTpcIm1lbnVcIn0pKSxhLmFwcGVuZENoaWxkKGMpLHRoaXMuZWxlbWVudHMuc2V0dGluZ3MuYnV0dG9uc1tpXT1zLHRoaXMuZWxlbWVudHMuc2V0dGluZ3MucGFuZWxzW2ldPWN9KSksbi5hcHBlbmRDaGlsZChhKSxzLmFwcGVuZENoaWxkKG4pLGMuYXBwZW5kQ2hpbGQocyksdGhpcy5lbGVtZW50cy5zZXR0aW5ncy5wb3B1cD1uLHRoaXMuZWxlbWVudHMuc2V0dGluZ3MubWVudT1zfWlmKFwicGlwXCI9PT1sJiZLLnBpcCYmYy5hcHBlbmRDaGlsZChpLmNhbGwodGhpcyxcInBpcFwiLHUpKSxcImFpcnBsYXlcIj09PWwmJksuYWlycGxheSYmYy5hcHBlbmRDaGlsZChpLmNhbGwodGhpcyxcImFpcnBsYXlcIix1KSksXCJkb3dubG9hZFwiPT09bCl7Y29uc3QgZT14KHt9LHUse2VsZW1lbnQ6XCJhXCIsaHJlZjp0aGlzLmRvd25sb2FkLHRhcmdldDpcIl9ibGFua1wifSk7dGhpcy5pc0hUTUw1JiYoZS5kb3dubG9hZD1cIlwiKTtjb25zdHtkb3dubG9hZDp0fT10aGlzLmNvbmZpZy51cmxzOyFTLnVybCh0KSYmdGhpcy5pc0VtYmVkJiZ4KGUse2ljb246YGxvZ28tJHt0aGlzLnByb3ZpZGVyfWAsbGFiZWw6dGhpcy5wcm92aWRlcn0pLGMuYXBwZW5kQ2hpbGQoaS5jYWxsKHRoaXMsXCJkb3dubG9hZFwiLGUpKX1cImZ1bGxzY3JlZW5cIj09PWwmJmMuYXBwZW5kQ2hpbGQoaS5jYWxsKHRoaXMsXCJmdWxsc2NyZWVuXCIsdSkpfSkpLHRoaXMuaXNIVE1MNSYmbC5jYWxsKHRoaXMsZGUuZ2V0UXVhbGl0eU9wdGlvbnMuY2FsbCh0aGlzKSksci5jYWxsKHRoaXMpLGN9LGluamVjdCgpe2lmKHRoaXMuY29uZmlnLmxvYWRTcHJpdGUpe2NvbnN0IGU9UGUuZ2V0SWNvblVybC5jYWxsKHRoaXMpO2UuY29ycyYma2UoZS51cmwsXCJzcHJpdGUtcGx5clwiKX10aGlzLmlkPU1hdGguZmxvb3IoMWU0Kk1hdGgucmFuZG9tKCkpO2xldCBlPW51bGw7dGhpcy5lbGVtZW50cy5jb250cm9scz1udWxsO2NvbnN0IHQ9e2lkOnRoaXMuaWQsc2Vla3RpbWU6dGhpcy5jb25maWcuc2Vla1RpbWUsdGl0bGU6dGhpcy5jb25maWcudGl0bGV9O2xldCBpPSEwO1MuZnVuY3Rpb24odGhpcy5jb25maWcuY29udHJvbHMpJiYodGhpcy5jb25maWcuY29udHJvbHM9dGhpcy5jb25maWcuY29udHJvbHMuY2FsbCh0aGlzLHQpKSx0aGlzLmNvbmZpZy5jb250cm9sc3x8KHRoaXMuY29uZmlnLmNvbnRyb2xzPVtdKSxTLmVsZW1lbnQodGhpcy5jb25maWcuY29udHJvbHMpfHxTLnN0cmluZyh0aGlzLmNvbmZpZy5jb250cm9scyk/ZT10aGlzLmNvbmZpZy5jb250cm9sczooZT1QZS5jcmVhdGUuY2FsbCh0aGlzLHtpZDp0aGlzLmlkLHNlZWt0aW1lOnRoaXMuY29uZmlnLnNlZWtUaW1lLHNwZWVkOnRoaXMuc3BlZWQscXVhbGl0eTp0aGlzLnF1YWxpdHksY2FwdGlvbnM6eGUuZ2V0TGFiZWwuY2FsbCh0aGlzKX0pLGk9ITEpO2xldCBzO2kmJlMuc3RyaW5nKHRoaXMuY29uZmlnLmNvbnRyb2xzKSYmKGU9KGU9PntsZXQgaT1lO3JldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKCgoW2UsdF0pPT57aT1wZShpLGB7JHtlfX1gLHQpfSkpLGl9KShlKSksUy5zdHJpbmcodGhpcy5jb25maWcuc2VsZWN0b3JzLmNvbnRyb2xzLmNvbnRhaW5lcikmJihzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcuc2VsZWN0b3JzLmNvbnRyb2xzLmNvbnRhaW5lcikpLFMuZWxlbWVudChzKXx8KHM9dGhpcy5lbGVtZW50cy5jb250YWluZXIpO2lmKHNbUy5lbGVtZW50KGUpP1wiaW5zZXJ0QWRqYWNlbnRFbGVtZW50XCI6XCJpbnNlcnRBZGphY2VudEhUTUxcIl0oXCJhZnRlcmJlZ2luXCIsZSksUy5lbGVtZW50KHRoaXMuZWxlbWVudHMuY29udHJvbHMpfHxQZS5maW5kRWxlbWVudHMuY2FsbCh0aGlzKSwhUy5lbXB0eSh0aGlzLmVsZW1lbnRzLmJ1dHRvbnMpKXtjb25zdCBlPWU9Pntjb25zdCB0PXRoaXMuY29uZmlnLmNsYXNzTmFtZXMuY29udHJvbFByZXNzZWQ7ZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIixcImZhbHNlXCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwicHJlc3NlZFwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6KCk9PkYoZSx0KSxzZXQoaT0hMSl7UihlLHQsaSksZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIixpP1widHJ1ZVwiOlwiZmFsc2VcIil9fSl9O09iamVjdC52YWx1ZXModGhpcy5lbGVtZW50cy5idXR0b25zKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaCgodD0+e1MuYXJyYXkodCl8fFMubm9kZUxpc3QodCk/QXJyYXkuZnJvbSh0KS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChlKTplKHQpfSkpfWlmKE0uaXNFZGdlJiZQKHMpLHRoaXMuY29uZmlnLnRvb2x0aXBzLmNvbnRyb2xzKXtjb25zdHtjbGFzc05hbWVzOmUsc2VsZWN0b3JzOnR9PXRoaXMuY29uZmlnLGk9YCR7dC5jb250cm9scy53cmFwcGVyfSAke3QubGFiZWxzfSAuJHtlLmhpZGRlbn1gLHM9VS5jYWxsKHRoaXMsaSk7QXJyYXkuZnJvbShzKS5mb3JFYWNoKChlPT57UihlLHRoaXMuY29uZmlnLmNsYXNzTmFtZXMuaGlkZGVuLCExKSxSKGUsdGhpcy5jb25maWcuY2xhc3NOYW1lcy50b29sdGlwLCEwKX0pKX19LHNldE1lZGlhTWV0YWRhdGEoKXt0cnl7XCJtZWRpYVNlc3Npb25cImluIG5hdmlnYXRvciYmKG5hdmlnYXRvci5tZWRpYVNlc3Npb24ubWV0YWRhdGE9bmV3IHdpbmRvdy5NZWRpYU1ldGFkYXRhKHt0aXRsZTp0aGlzLmNvbmZpZy5tZWRpYU1ldGFkYXRhLnRpdGxlLGFydGlzdDp0aGlzLmNvbmZpZy5tZWRpYU1ldGFkYXRhLmFydGlzdCxhbGJ1bTp0aGlzLmNvbmZpZy5tZWRpYU1ldGFkYXRhLmFsYnVtLGFydHdvcms6dGhpcy5jb25maWcubWVkaWFNZXRhZGF0YS5hcnR3b3JrfSkpfWNhdGNoKGUpe319LHNldE1hcmtlcnMoKXt2YXIgZSx0O2lmKCF0aGlzLmR1cmF0aW9ufHx0aGlzLmVsZW1lbnRzLm1hcmtlcnMpcmV0dXJuO2NvbnN0IGk9bnVsbD09PShlPXRoaXMuY29uZmlnLm1hcmtlcnMpfHx2b2lkIDA9PT1lfHxudWxsPT09KHQ9ZS5wb2ludHMpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmZpbHRlcigoKHt0aW1lOmV9KT0+ZT4wJiZlPHRoaXMuZHVyYXRpb24pKTtpZihudWxsPT1pfHwhaS5sZW5ndGgpcmV0dXJuO2NvbnN0IHM9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLG49ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2xldCBhPW51bGw7Y29uc3QgbD1gJHt0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnRvb2x0aXB9LS12aXNpYmxlYCxyPWU9PlIoYSxsLGUpO2kuZm9yRWFjaCgoZT0+e2NvbnN0IHQ9JChcInNwYW5cIix7Y2xhc3M6dGhpcy5jb25maWcuY2xhc3NOYW1lcy5tYXJrZXJ9LFwiXCIpLGk9ZS50aW1lL3RoaXMuZHVyYXRpb24qMTAwK1wiJVwiO2EmJih0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsKCgpPT57ZS5sYWJlbHx8KGEuc3R5bGUubGVmdD1pLGEuaW5uZXJIVE1MPWUubGFiZWwscighMCkpfSkpLHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwoKCk9PntyKCExKX0pKSksdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoKCk9Pnt0aGlzLmN1cnJlbnRUaW1lPWUudGltZX0pKSx0LnN0eWxlLmxlZnQ9aSxuLmFwcGVuZENoaWxkKHQpfSkpLHMuYXBwZW5kQ2hpbGQobiksdGhpcy5jb25maWcudG9vbHRpcHMuc2Vla3x8KGE9JChcInNwYW5cIix7Y2xhc3M6dGhpcy5jb25maWcuY2xhc3NOYW1lcy50b29sdGlwfSxcIlwiKSxzLmFwcGVuZENoaWxkKGEpKSx0aGlzLmVsZW1lbnRzLm1hcmtlcnM9e3BvaW50czpuLHRpcDphfSx0aGlzLmVsZW1lbnRzLnByb2dyZXNzLmFwcGVuZENoaWxkKHMpfX07ZnVuY3Rpb24gTWUoZSx0PSEwKXtsZXQgaT1lO2lmKHQpe2NvbnN0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7ZS5ocmVmPWksaT1lLmhyZWZ9dHJ5e3JldHVybiBuZXcgVVJMKGkpfWNhdGNoKGUpe3JldHVybiBudWxsfX1mdW5jdGlvbiBOZShlKXtjb25zdCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIFMub2JqZWN0KGUpJiZPYmplY3QuZW50cmllcyhlKS5mb3JFYWNoKCgoW2UsaV0pPT57dC5zZXQoZSxpKX0pKSx0fWNvbnN0IHhlPXtzZXR1cCgpe2lmKCF0aGlzLnN1cHBvcnRlZC51aSlyZXR1cm47aWYoIXRoaXMuaXNWaWRlb3x8dGhpcy5pc1lvdVR1YmV8fHRoaXMuaXNIVE1MNSYmIUsudGV4dFRyYWNrcylyZXR1cm4gdm9pZChTLmFycmF5KHRoaXMuY29uZmlnLmNvbnRyb2xzKSYmdGhpcy5jb25maWcuY29udHJvbHMuaW5jbHVkZXMoXCJzZXR0aW5nc1wiKSYmdGhpcy5jb25maWcuc2V0dGluZ3MuaW5jbHVkZXMoXCJjYXB0aW9uc1wiKSYmUGUuc2V0Q2FwdGlvbnNNZW51LmNhbGwodGhpcykpO3ZhciBlLHQ7aWYoUy5lbGVtZW50KHRoaXMuZWxlbWVudHMuY2FwdGlvbnMpfHwodGhpcy5lbGVtZW50cy5jYXB0aW9ucz0kKFwiZGl2XCIsRCh0aGlzLmNvbmZpZy5zZWxlY3RvcnMuY2FwdGlvbnMpKSx0aGlzLmVsZW1lbnRzLmNhcHRpb25zLnNldEF0dHJpYnV0ZShcImRpclwiLFwiYXV0b1wiKSxlPXRoaXMuZWxlbWVudHMuY2FwdGlvbnMsdD10aGlzLmVsZW1lbnRzLndyYXBwZXIsUy5lbGVtZW50KGUpJiZTLmVsZW1lbnQodCkmJnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0Lm5leHRTaWJsaW5nKSksTS5pc0lFJiZ3aW5kb3cuVVJMKXtjb25zdCBlPXRoaXMubWVkaWEucXVlcnlTZWxlY3RvckFsbChcInRyYWNrXCIpO0FycmF5LmZyb20oZSkuZm9yRWFjaCgoZT0+e2NvbnN0IHQ9ZS5nZXRBdHRyaWJ1dGUoXCJzcmNcIiksaT1NZSh0KTtudWxsIT09aSYmaS5ob3N0bmFtZSE9PXdpbmRvdy5sb2NhdGlvbi5ocmVmLmhvc3RuYW1lJiZbXCJodHRwOlwiLFwiaHR0cHM6XCJdLmluY2x1ZGVzKGkucHJvdG9jb2wpJiZUZSh0LFwiYmxvYlwiKS50aGVuKCh0PT57ZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIix3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCh0KSl9KSkuY2F0Y2goKCgpPT57TyhlKX0pKX0pKX1jb25zdCBpPXNlKChuYXZpZ2F0b3IubGFuZ3VhZ2VzfHxbbmF2aWdhdG9yLmxhbmd1YWdlfHxuYXZpZ2F0b3IudXNlckxhbmd1YWdlfHxcImVuXCJdKS5tYXAoKGU9PmUuc3BsaXQoXCItXCIpWzBdKSkpO2xldCBzPSh0aGlzLnN0b3JhZ2UuZ2V0KFwibGFuZ3VhZ2VcIil8fHRoaXMuY29uZmlnLmNhcHRpb25zLmxhbmd1YWdlfHxcImF1dG9cIikudG9Mb3dlckNhc2UoKTtcImF1dG9cIj09PXMmJihbc109aSk7bGV0IG49dGhpcy5zdG9yYWdlLmdldChcImNhcHRpb25zXCIpO2lmKFMuYm9vbGVhbihuKXx8KHthY3RpdmU6bn09dGhpcy5jb25maWcuY2FwdGlvbnMpLE9iamVjdC5hc3NpZ24odGhpcy5jYXB0aW9ucyx7dG9nZ2xlZDohMSxhY3RpdmU6bixsYW5ndWFnZTpzLGxhbmd1YWdlczppfSksdGhpcy5pc0hUTUw1KXtjb25zdCBlPXRoaXMuY29uZmlnLmNhcHRpb25zLnVwZGF0ZT9cImFkZHRyYWNrIHJlbW92ZXRyYWNrXCI6XCJyZW1vdmV0cmFja1wiO1guY2FsbCh0aGlzLHRoaXMubWVkaWEudGV4dFRyYWNrcyxlLHhlLnVwZGF0ZS5iaW5kKHRoaXMpKX1zZXRUaW1lb3V0KHhlLnVwZGF0ZS5iaW5kKHRoaXMpLDApfSx1cGRhdGUoKXtjb25zdCBlPXhlLmdldFRyYWNrcy5jYWxsKHRoaXMsITApLHthY3RpdmU6dCxsYW5ndWFnZTppLG1ldGE6cyxjdXJyZW50VHJhY2tOb2RlOm59PXRoaXMuY2FwdGlvbnMsYT1Cb29sZWFuKGUuZmluZCgoZT0+ZS5sYW5ndWFnZT09PWkpKSk7dGhpcy5pc0hUTUw1JiZ0aGlzLmlzVmlkZW8mJmUuZmlsdGVyKChlPT4hcy5nZXQoZSkpKS5mb3JFYWNoKChlPT57dGhpcy5kZWJ1Zy5sb2coXCJUcmFjayBhZGRlZFwiLGUpLHMuc2V0KGUse2RlZmF1bHQ6XCJzaG93aW5nXCI9PT1lLm1vZGV9KSxcInNob3dpbmdcIj09PWUubW9kZSYmKGUubW9kZT1cImhpZGRlblwiKSxYLmNhbGwodGhpcyxlLFwiY3VlY2hhbmdlXCIsKCgpPT54ZS51cGRhdGVDdWVzLmNhbGwodGhpcykpKX0pKSwoYSYmdGhpcy5sYW5ndWFnZSE9PWl8fCFlLmluY2x1ZGVzKG4pKSYmKHhlLnNldExhbmd1YWdlLmNhbGwodGhpcyxpKSx4ZS50b2dnbGUuY2FsbCh0aGlzLHQmJmEpKSx0aGlzLmVsZW1lbnRzJiZSKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLHRoaXMuY29uZmlnLmNsYXNzTmFtZXMuY2FwdGlvbnMuZW5hYmxlZCwhUy5lbXB0eShlKSksUy5hcnJheSh0aGlzLmNvbmZpZy5jb250cm9scykmJnRoaXMuY29uZmlnLmNvbnRyb2xzLmluY2x1ZGVzKFwic2V0dGluZ3NcIikmJnRoaXMuY29uZmlnLnNldHRpbmdzLmluY2x1ZGVzKFwiY2FwdGlvbnNcIikmJlBlLnNldENhcHRpb25zTWVudS5jYWxsKHRoaXMpfSx0b2dnbGUoZSx0PSEwKXtpZighdGhpcy5zdXBwb3J0ZWQudWkpcmV0dXJuO2NvbnN0e3RvZ2dsZWQ6aX09dGhpcy5jYXB0aW9ucyxzPXRoaXMuY29uZmlnLmNsYXNzTmFtZXMuY2FwdGlvbnMuYWN0aXZlLG49Uy5udWxsT3JVbmRlZmluZWQoZSk/IWk6ZTtpZihuIT09aSl7aWYodHx8KHRoaXMuY2FwdGlvbnMuYWN0aXZlPW4sdGhpcy5zdG9yYWdlLnNldCh7Y2FwdGlvbnM6bn0pKSwhdGhpcy5sYW5ndWFnZSYmbiYmIXQpe2NvbnN0IGU9eGUuZ2V0VHJhY2tzLmNhbGwodGhpcyksdD14ZS5maW5kVHJhY2suY2FsbCh0aGlzLFt0aGlzLmNhcHRpb25zLmxhbmd1YWdlLC4uLnRoaXMuY2FwdGlvbnMubGFuZ3VhZ2VzXSwhMCk7cmV0dXJuIHRoaXMuY2FwdGlvbnMubGFuZ3VhZ2U9dC5sYW5ndWFnZSx2b2lkIHhlLnNldC5jYWxsKHRoaXMsZS5pbmRleE9mKHQpKX10aGlzLmVsZW1lbnRzLmJ1dHRvbnMuY2FwdGlvbnMmJih0aGlzLmVsZW1lbnRzLmJ1dHRvbnMuY2FwdGlvbnMucHJlc3NlZD1uKSxSKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLHMsbiksdGhpcy5jYXB0aW9ucy50b2dnbGVkPW4sUGUudXBkYXRlU2V0dGluZy5jYWxsKHRoaXMsXCJjYXB0aW9uc1wiKSxaLmNhbGwodGhpcyx0aGlzLm1lZGlhLG4/XCJjYXB0aW9uc2VuYWJsZWRcIjpcImNhcHRpb25zZGlzYWJsZWRcIil9c2V0VGltZW91dCgoKCk9PntuJiZ0aGlzLmNhcHRpb25zLnRvZ2dsZWQmJih0aGlzLmNhcHRpb25zLmN1cnJlbnRUcmFja05vZGUubW9kZT1cImhpZGRlblwiKX0pKX0sc2V0KGUsdD0hMCl7Y29uc3QgaT14ZS5nZXRUcmFja3MuY2FsbCh0aGlzKTtpZigtMSE9PWUpaWYoUy5udW1iZXIoZSkpaWYoZSBpbiBpKXtpZih0aGlzLmNhcHRpb25zLmN1cnJlbnRUcmFjayE9PWUpe3RoaXMuY2FwdGlvbnMuY3VycmVudFRyYWNrPWU7Y29uc3Qgcz1pW2VdLHtsYW5ndWFnZTpufT1zfHx7fTt0aGlzLmNhcHRpb25zLmN1cnJlbnRUcmFja05vZGU9cyxQZS51cGRhdGVTZXR0aW5nLmNhbGwodGhpcyxcImNhcHRpb25zXCIpLHR8fCh0aGlzLmNhcHRpb25zLmxhbmd1YWdlPW4sdGhpcy5zdG9yYWdlLnNldCh7bGFuZ3VhZ2U6bn0pKSx0aGlzLmlzVmltZW8mJnRoaXMuZW1iZWQuZW5hYmxlVGV4dFRyYWNrKG4pLFouY2FsbCh0aGlzLHRoaXMubWVkaWEsXCJsYW5ndWFnZWNoYW5nZVwiKX14ZS50b2dnbGUuY2FsbCh0aGlzLCEwLHQpLHRoaXMuaXNIVE1MNSYmdGhpcy5pc1ZpZGVvJiZ4ZS51cGRhdGVDdWVzLmNhbGwodGhpcyl9ZWxzZSB0aGlzLmRlYnVnLndhcm4oXCJUcmFjayBub3QgZm91bmRcIixlKTtlbHNlIHRoaXMuZGVidWcud2FybihcIkludmFsaWQgY2FwdGlvbiBhcmd1bWVudFwiLGUpO2Vsc2UgeGUudG9nZ2xlLmNhbGwodGhpcywhMSx0KX0sc2V0TGFuZ3VhZ2UoZSx0PSEwKXtpZighUy5zdHJpbmcoZSkpcmV0dXJuIHZvaWQgdGhpcy5kZWJ1Zy53YXJuKFwiSW52YWxpZCBsYW5ndWFnZSBhcmd1bWVudFwiLGUpO2NvbnN0IGk9ZS50b0xvd2VyQ2FzZSgpO3RoaXMuY2FwdGlvbnMubGFuZ3VhZ2U9aTtjb25zdCBzPXhlLmdldFRyYWNrcy5jYWxsKHRoaXMpLG49eGUuZmluZFRyYWNrLmNhbGwodGhpcyxbaV0pO3hlLnNldC5jYWxsKHRoaXMscy5pbmRleE9mKG4pLHQpfSxnZXRUcmFja3MoZT0hMSl7cmV0dXJuIEFycmF5LmZyb20oKHRoaXMubWVkaWF8fHt9KS50ZXh0VHJhY2tzfHxbXSkuZmlsdGVyKCh0PT4hdGhpcy5pc0hUTUw1fHxlfHx0aGlzLmNhcHRpb25zLm1ldGEuaGFzKHQpKSkuZmlsdGVyKChlPT5bXCJjYXB0aW9uc1wiLFwic3VidGl0bGVzXCJdLmluY2x1ZGVzKGUua2luZCkpKX0sZmluZFRyYWNrKGUsdD0hMSl7Y29uc3QgaT14ZS5nZXRUcmFja3MuY2FsbCh0aGlzKSxzPWU9Pk51bWJlcigodGhpcy5jYXB0aW9ucy5tZXRhLmdldChlKXx8e30pLmRlZmF1bHQpLG49QXJyYXkuZnJvbShpKS5zb3J0KCgoZSx0KT0+cyh0KS1zKGUpKSk7bGV0IGE7cmV0dXJuIGUuZXZlcnkoKGU9PihhPW4uZmluZCgodD0+dC5sYW5ndWFnZT09PWUpKSwhYSkpKSxhfHwodD9uWzBdOnZvaWQgMCl9LGdldEN1cnJlbnRUcmFjaygpe3JldHVybiB4ZS5nZXRUcmFja3MuY2FsbCh0aGlzKVt0aGlzLmN1cnJlbnRUcmFja119LGdldExhYmVsKGUpe2xldCB0PWU7cmV0dXJuIVMudHJhY2sodCkmJksudGV4dFRyYWNrcyYmdGhpcy5jYXB0aW9ucy50b2dnbGVkJiYodD14ZS5nZXRDdXJyZW50VHJhY2suY2FsbCh0aGlzKSksUy50cmFjayh0KT9TLmVtcHR5KHQubGFiZWwpP1MuZW1wdHkodC5sYW5ndWFnZSk/dmUuZ2V0KFwiZW5hYmxlZFwiLHRoaXMuY29uZmlnKTplLmxhbmd1YWdlLnRvVXBwZXJDYXNlKCk6dC5sYWJlbDp2ZS5nZXQoXCJkaXNhYmxlZFwiLHRoaXMuY29uZmlnKX0sdXBkYXRlQ3VlcyhlKXtpZighdGhpcy5zdXBwb3J0ZWQudWkpcmV0dXJuO2lmKCFTLmVsZW1lbnQodGhpcy5lbGVtZW50cy5jYXB0aW9ucykpcmV0dXJuIHZvaWQgdGhpcy5kZWJ1Zy53YXJuKFwiTm8gY2FwdGlvbnMgZWxlbWVudCB0byByZW5kZXIgdG9cIik7aWYoIVMubnVsbE9yVW5kZWZpbmVkKGUpJiYhQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdm9pZCB0aGlzLmRlYnVnLndhcm4oXCJ1cGRhdGVDdWVzOiBJbnZhbGlkIGlucHV0XCIsZSk7bGV0IHQ9ZTtpZighdCl7Y29uc3QgZT14ZS5nZXRDdXJyZW50VHJhY2suY2FsbCh0aGlzKTt0PUFycmF5LmZyb20oKGV8fHt9KS5hY3RpdmVDdWVzfHxbXSkubWFwKChlPT5lLmdldEN1ZUFzSFRNTCgpKSkubWFwKHllKX1jb25zdCBpPXQubWFwKChlPT5lLnRyaW0oKSkpLmpvaW4oXCJcXG5cIik7aWYoaSE9PXRoaXMuZWxlbWVudHMuY2FwdGlvbnMuaW5uZXJIVE1MKXtqKHRoaXMuZWxlbWVudHMuY2FwdGlvbnMpO2NvbnN0IGU9JChcInNwYW5cIixEKHRoaXMuY29uZmlnLnNlbGVjdG9ycy5jYXB0aW9uKSk7ZS5pbm5lckhUTUw9aSx0aGlzLmVsZW1lbnRzLmNhcHRpb25zLmFwcGVuZENoaWxkKGUpLFouY2FsbCh0aGlzLHRoaXMubWVkaWEsXCJjdWVjaGFuZ2VcIil9fX0sTGU9e2VuYWJsZWQ6ITAsdGl0bGU6XCJcIixkZWJ1ZzohMSxhdXRvcGxheTohMSxhdXRvcGF1c2U6ITAscGxheXNpbmxpbmU6ITAsc2Vla1RpbWU6MTAsdm9sdW1lOjEsbXV0ZWQ6ITEsZHVyYXRpb246bnVsbCxkaXNwbGF5RHVyYXRpb246ITAsaW52ZXJ0VGltZTohMCx0b2dnbGVJbnZlcnQ6ITAscmF0aW86bnVsbCxjbGlja1RvUGxheTohMCxoaWRlQ29udHJvbHM6ITAscmVzZXRPbkVuZDohMSxkaXNhYmxlQ29udGV4dE1lbnU6ITAsbG9hZFNwcml0ZTohMCxpY29uUHJlZml4OlwicGx5clwiLGljb25Vcmw6XCJodHRwczovL2Nkbi5wbHlyLmlvLzMuNy44L3BseXIuc3ZnXCIsYmxhbmtWaWRlbzpcImh0dHBzOi8vY2RuLnBseXIuaW8vc3RhdGljL2JsYW5rLm1wNFwiLHF1YWxpdHk6e2RlZmF1bHQ6NTc2LG9wdGlvbnM6WzQzMjAsMjg4MCwyMTYwLDE0NDAsMTA4MCw3MjAsNTc2LDQ4MCwzNjAsMjQwXSxmb3JjZWQ6ITEsb25DaGFuZ2U6bnVsbH0sbG9vcDp7YWN0aXZlOiExfSxzcGVlZDp7c2VsZWN0ZWQ6MSxvcHRpb25zOlsuNSwuNzUsMSwxLjI1LDEuNSwxLjc1LDIsNF19LGtleWJvYXJkOntmb2N1c2VkOiEwLGdsb2JhbDohMX0sdG9vbHRpcHM6e2NvbnRyb2xzOiExLHNlZWs6ITB9LGNhcHRpb25zOnthY3RpdmU6ITEsbGFuZ3VhZ2U6XCJhdXRvXCIsdXBkYXRlOiExfSxmdWxsc2NyZWVuOntlbmFibGVkOiEwLGZhbGxiYWNrOiEwLGlvc05hdGl2ZTohMX0sc3RvcmFnZTp7ZW5hYmxlZDohMCxrZXk6XCJwbHlyXCJ9LGNvbnRyb2xzOltcInBsYXktbGFyZ2VcIixcInBsYXlcIixcInByb2dyZXNzXCIsXCJjdXJyZW50LXRpbWVcIixcIm11dGVcIixcInZvbHVtZVwiLFwiY2FwdGlvbnNcIixcInNldHRpbmdzXCIsXCJwaXBcIixcImFpcnBsYXlcIixcImZ1bGxzY3JlZW5cIl0sc2V0dGluZ3M6W1wiY2FwdGlvbnNcIixcInF1YWxpdHlcIixcInNwZWVkXCJdLGkxOG46e3Jlc3RhcnQ6XCJSZXN0YXJ0XCIscmV3aW5kOlwiUmV3aW5kIHtzZWVrdGltZX1zXCIscGxheTpcIlBsYXlcIixwYXVzZTpcIlBhdXNlXCIsZmFzdEZvcndhcmQ6XCJGb3J3YXJkIHtzZWVrdGltZX1zXCIsc2VlazpcIlNlZWtcIixzZWVrTGFiZWw6XCJ7Y3VycmVudFRpbWV9IG9mIHtkdXJhdGlvbn1cIixwbGF5ZWQ6XCJQbGF5ZWRcIixidWZmZXJlZDpcIkJ1ZmZlcmVkXCIsY3VycmVudFRpbWU6XCJDdXJyZW50IHRpbWVcIixkdXJhdGlvbjpcIkR1cmF0aW9uXCIsdm9sdW1lOlwiVm9sdW1lXCIsbXV0ZTpcIk11dGVcIix1bm11dGU6XCJVbm11dGVcIixlbmFibGVDYXB0aW9uczpcIkVuYWJsZSBjYXB0aW9uc1wiLGRpc2FibGVDYXB0aW9uczpcIkRpc2FibGUgY2FwdGlvbnNcIixkb3dubG9hZDpcIkRvd25sb2FkXCIsZW50ZXJGdWxsc2NyZWVuOlwiRW50ZXIgZnVsbHNjcmVlblwiLGV4aXRGdWxsc2NyZWVuOlwiRXhpdCBmdWxsc2NyZWVuXCIsZnJhbWVUaXRsZTpcIlBsYXllciBmb3Ige3RpdGxlfVwiLGNhcHRpb25zOlwiQ2FwdGlvbnNcIixzZXR0aW5nczpcIlNldHRpbmdzXCIscGlwOlwiUElQXCIsbWVudUJhY2s6XCJHbyBiYWNrIHRvIHByZXZpb3VzIG1lbnVcIixzcGVlZDpcIlNwZWVkXCIsbm9ybWFsOlwiTm9ybWFsXCIscXVhbGl0eTpcIlF1YWxpdHlcIixsb29wOlwiTG9vcFwiLHN0YXJ0OlwiU3RhcnRcIixlbmQ6XCJFbmRcIixhbGw6XCJBbGxcIixyZXNldDpcIlJlc2V0XCIsZGlzYWJsZWQ6XCJEaXNhYmxlZFwiLGVuYWJsZWQ6XCJFbmFibGVkXCIsYWR2ZXJ0aXNlbWVudDpcIkFkXCIscXVhbGl0eUJhZGdlOnsyMTYwOlwiNEtcIiwxNDQwOlwiSERcIiwxMDgwOlwiSERcIiw3MjA6XCJIRFwiLDU3NjpcIlNEXCIsNDgwOlwiU0RcIn19LHVybHM6e2Rvd25sb2FkOm51bGwsdmltZW86e3NkazpcImh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbS9hcGkvcGxheWVyLmpzXCIsaWZyYW1lOlwiaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvL3swfT97MX1cIixhcGk6XCJodHRwczovL3ZpbWVvLmNvbS9hcGkvb2VtYmVkLmpzb24/dXJsPXswfVwifSx5b3V0dWJlOntzZGs6XCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpXCIsYXBpOlwiaHR0cHM6Ly9ub2VtYmVkLmNvbS9lbWJlZD91cmw9aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj17MH1cIn0sZ29vZ2xlSU1BOntzZGs6XCJodHRwczovL2ltYXNkay5nb29nbGVhcGlzLmNvbS9qcy9zZGtsb2FkZXIvaW1hMy5qc1wifX0sbGlzdGVuZXJzOntzZWVrOm51bGwscGxheTpudWxsLHBhdXNlOm51bGwscmVzdGFydDpudWxsLHJld2luZDpudWxsLGZhc3RGb3J3YXJkOm51bGwsbXV0ZTpudWxsLHZvbHVtZTpudWxsLGNhcHRpb25zOm51bGwsZG93bmxvYWQ6bnVsbCxmdWxsc2NyZWVuOm51bGwscGlwOm51bGwsYWlycGxheTpudWxsLHNwZWVkOm51bGwscXVhbGl0eTpudWxsLGxvb3A6bnVsbCxsYW5ndWFnZTpudWxsfSxldmVudHM6W1wiZW5kZWRcIixcInByb2dyZXNzXCIsXCJzdGFsbGVkXCIsXCJwbGF5aW5nXCIsXCJ3YWl0aW5nXCIsXCJjYW5wbGF5XCIsXCJjYW5wbGF5dGhyb3VnaFwiLFwibG9hZHN0YXJ0XCIsXCJsb2FkZWRkYXRhXCIsXCJsb2FkZWRtZXRhZGF0YVwiLFwidGltZXVwZGF0ZVwiLFwidm9sdW1lY2hhbmdlXCIsXCJwbGF5XCIsXCJwYXVzZVwiLFwiZXJyb3JcIixcInNlZWtpbmdcIixcInNlZWtlZFwiLFwiZW1wdGllZFwiLFwicmF0ZWNoYW5nZVwiLFwiY3VlY2hhbmdlXCIsXCJkb3dubG9hZFwiLFwiZW50ZXJmdWxsc2NyZWVuXCIsXCJleGl0ZnVsbHNjcmVlblwiLFwiY2FwdGlvbnNlbmFibGVkXCIsXCJjYXB0aW9uc2Rpc2FibGVkXCIsXCJsYW5ndWFnZWNoYW5nZVwiLFwiY29udHJvbHNoaWRkZW5cIixcImNvbnRyb2xzc2hvd25cIixcInJlYWR5XCIsXCJzdGF0ZWNoYW5nZVwiLFwicXVhbGl0eWNoYW5nZVwiLFwiYWRzbG9hZGVkXCIsXCJhZHNjb250ZW50cGF1c2VcIixcImFkc2NvbnRlbnRyZXN1bWVcIixcImFkc3RhcnRlZFwiLFwiYWRzbWlkcG9pbnRcIixcImFkc2NvbXBsZXRlXCIsXCJhZHNhbGxjb21wbGV0ZVwiLFwiYWRzaW1wcmVzc2lvblwiLFwiYWRzY2xpY2tcIl0sc2VsZWN0b3JzOntlZGl0YWJsZTpcImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbY29udGVudGVkaXRhYmxlXVwiLGNvbnRhaW5lcjpcIi5wbHlyXCIsY29udHJvbHM6e2NvbnRhaW5lcjpudWxsLHdyYXBwZXI6XCIucGx5cl9fY29udHJvbHNcIn0sbGFiZWxzOlwiW2RhdGEtcGx5cl1cIixidXR0b25zOntwbGF5OidbZGF0YS1wbHlyPVwicGxheVwiXScscGF1c2U6J1tkYXRhLXBseXI9XCJwYXVzZVwiXScscmVzdGFydDonW2RhdGEtcGx5cj1cInJlc3RhcnRcIl0nLHJld2luZDonW2RhdGEtcGx5cj1cInJld2luZFwiXScsZmFzdEZvcndhcmQ6J1tkYXRhLXBseXI9XCJmYXN0LWZvcndhcmRcIl0nLG11dGU6J1tkYXRhLXBseXI9XCJtdXRlXCJdJyxjYXB0aW9uczonW2RhdGEtcGx5cj1cImNhcHRpb25zXCJdJyxkb3dubG9hZDonW2RhdGEtcGx5cj1cImRvd25sb2FkXCJdJyxmdWxsc2NyZWVuOidbZGF0YS1wbHlyPVwiZnVsbHNjcmVlblwiXScscGlwOidbZGF0YS1wbHlyPVwicGlwXCJdJyxhaXJwbGF5OidbZGF0YS1wbHlyPVwiYWlycGxheVwiXScsc2V0dGluZ3M6J1tkYXRhLXBseXI9XCJzZXR0aW5nc1wiXScsbG9vcDonW2RhdGEtcGx5cj1cImxvb3BcIl0nfSxpbnB1dHM6e3NlZWs6J1tkYXRhLXBseXI9XCJzZWVrXCJdJyx2b2x1bWU6J1tkYXRhLXBseXI9XCJ2b2x1bWVcIl0nLHNwZWVkOidbZGF0YS1wbHlyPVwic3BlZWRcIl0nLGxhbmd1YWdlOidbZGF0YS1wbHlyPVwibGFuZ3VhZ2VcIl0nLHF1YWxpdHk6J1tkYXRhLXBseXI9XCJxdWFsaXR5XCJdJ30sZGlzcGxheTp7Y3VycmVudFRpbWU6XCIucGx5cl9fdGltZS0tY3VycmVudFwiLGR1cmF0aW9uOlwiLnBseXJfX3RpbWUtLWR1cmF0aW9uXCIsYnVmZmVyOlwiLnBseXJfX3Byb2dyZXNzX19idWZmZXJcIixsb29wOlwiLnBseXJfX3Byb2dyZXNzX19sb29wXCIsdm9sdW1lOlwiLnBseXJfX3ZvbHVtZS0tZGlzcGxheVwifSxwcm9ncmVzczpcIi5wbHlyX19wcm9ncmVzc1wiLGNhcHRpb25zOlwiLnBseXJfX2NhcHRpb25zXCIsY2FwdGlvbjpcIi5wbHlyX19jYXB0aW9uXCJ9LGNsYXNzTmFtZXM6e3R5cGU6XCJwbHlyLS17MH1cIixwcm92aWRlcjpcInBseXItLXswfVwiLHZpZGVvOlwicGx5cl9fdmlkZW8td3JhcHBlclwiLGVtYmVkOlwicGx5cl9fdmlkZW8tZW1iZWRcIix2aWRlb0ZpeGVkUmF0aW86XCJwbHlyX192aWRlby13cmFwcGVyLS1maXhlZC1yYXRpb1wiLGVtYmVkQ29udGFpbmVyOlwicGx5cl9fdmlkZW8tZW1iZWRfX2NvbnRhaW5lclwiLHBvc3RlcjpcInBseXJfX3Bvc3RlclwiLHBvc3RlckVuYWJsZWQ6XCJwbHlyX19wb3N0ZXItZW5hYmxlZFwiLGFkczpcInBseXJfX2Fkc1wiLGNvbnRyb2w6XCJwbHlyX19jb250cm9sXCIsY29udHJvbFByZXNzZWQ6XCJwbHlyX19jb250cm9sLS1wcmVzc2VkXCIscGxheWluZzpcInBseXItLXBsYXlpbmdcIixwYXVzZWQ6XCJwbHlyLS1wYXVzZWRcIixzdG9wcGVkOlwicGx5ci0tc3RvcHBlZFwiLGxvYWRpbmc6XCJwbHlyLS1sb2FkaW5nXCIsaG92ZXI6XCJwbHlyLS1ob3ZlclwiLHRvb2x0aXA6XCJwbHlyX190b29sdGlwXCIsY3VlczpcInBseXJfX2N1ZXNcIixtYXJrZXI6XCJwbHlyX19wcm9ncmVzc19fbWFya2VyXCIsaGlkZGVuOlwicGx5cl9fc3Itb25seVwiLGhpZGVDb250cm9sczpcInBseXItLWhpZGUtY29udHJvbHNcIixpc1RvdWNoOlwicGx5ci0taXMtdG91Y2hcIix1aVN1cHBvcnRlZDpcInBseXItLWZ1bGwtdWlcIixub1RyYW5zaXRpb246XCJwbHlyLS1uby10cmFuc2l0aW9uXCIsZGlzcGxheTp7dGltZTpcInBseXJfX3RpbWVcIn0sbWVudTp7dmFsdWU6XCJwbHlyX19tZW51X192YWx1ZVwiLGJhZGdlOlwicGx5cl9fYmFkZ2VcIixvcGVuOlwicGx5ci0tbWVudS1vcGVuXCJ9LGNhcHRpb25zOntlbmFibGVkOlwicGx5ci0tY2FwdGlvbnMtZW5hYmxlZFwiLGFjdGl2ZTpcInBseXItLWNhcHRpb25zLWFjdGl2ZVwifSxmdWxsc2NyZWVuOntlbmFibGVkOlwicGx5ci0tZnVsbHNjcmVlbi1lbmFibGVkXCIsZmFsbGJhY2s6XCJwbHlyLS1mdWxsc2NyZWVuLWZhbGxiYWNrXCJ9LHBpcDp7c3VwcG9ydGVkOlwicGx5ci0tcGlwLXN1cHBvcnRlZFwiLGFjdGl2ZTpcInBseXItLXBpcC1hY3RpdmVcIn0sYWlycGxheTp7c3VwcG9ydGVkOlwicGx5ci0tYWlycGxheS1zdXBwb3J0ZWRcIixhY3RpdmU6XCJwbHlyLS1haXJwbGF5LWFjdGl2ZVwifSxwcmV2aWV3VGh1bWJuYWlsczp7dGh1bWJDb250YWluZXI6XCJwbHlyX19wcmV2aWV3LXRodW1iXCIsdGh1bWJDb250YWluZXJTaG93bjpcInBseXJfX3ByZXZpZXctdGh1bWItLWlzLXNob3duXCIsaW1hZ2VDb250YWluZXI6XCJwbHlyX19wcmV2aWV3LXRodW1iX19pbWFnZS1jb250YWluZXJcIix0aW1lQ29udGFpbmVyOlwicGx5cl9fcHJldmlldy10aHVtYl9fdGltZS1jb250YWluZXJcIixzY3J1YmJpbmdDb250YWluZXI6XCJwbHlyX19wcmV2aWV3LXNjcnViYmluZ1wiLHNjcnViYmluZ0NvbnRhaW5lclNob3duOlwicGx5cl9fcHJldmlldy1zY3J1YmJpbmctLWlzLXNob3duXCJ9fSxhdHRyaWJ1dGVzOntlbWJlZDp7cHJvdmlkZXI6XCJkYXRhLXBseXItcHJvdmlkZXJcIixpZDpcImRhdGEtcGx5ci1lbWJlZC1pZFwiLGhhc2g6XCJkYXRhLXBseXItZW1iZWQtaGFzaFwifX0sYWRzOntlbmFibGVkOiExLHB1Ymxpc2hlcklkOlwiXCIsdGFnVXJsOlwiXCJ9LHByZXZpZXdUaHVtYm5haWxzOntlbmFibGVkOiExLHNyYzpcIlwifSx2aW1lbzp7YnlsaW5lOiExLHBvcnRyYWl0OiExLHRpdGxlOiExLHNwZWVkOiEwLHRyYW5zcGFyZW50OiExLGN1c3RvbUNvbnRyb2xzOiEwLHJlZmVycmVyUG9saWN5Om51bGwscHJlbWl1bTohMX0seW91dHViZTp7cmVsOjAsc2hvd2luZm86MCxpdl9sb2FkX3BvbGljeTozLG1vZGVzdGJyYW5kaW5nOjEsY3VzdG9tQ29udHJvbHM6ITAsbm9Db29raWU6ITF9LG1lZGlhTWV0YWRhdGE6e3RpdGxlOlwiXCIsYXJ0aXN0OlwiXCIsYWxidW06XCJcIixhcnR3b3JrOltdfSxtYXJrZXJzOntlbmFibGVkOiExLHBvaW50czpbXX19LEllPVwicGljdHVyZS1pbi1waWN0dXJlXCIsJGU9XCJpbmxpbmVcIixfZT17aHRtbDU6XCJodG1sNVwiLHlvdXR1YmU6XCJ5b3V0dWJlXCIsdmltZW86XCJ2aW1lb1wifSxPZT1cImF1ZGlvXCIsamU9XCJ2aWRlb1wiO2NvbnN0IHFlPSgpPT57fTtjbGFzcyBEZXtjb25zdHJ1Y3RvcihlPSExKXt0aGlzLmVuYWJsZWQ9d2luZG93LmNvbnNvbGUmJmUsdGhpcy5lbmFibGVkJiZ0aGlzLmxvZyhcIkRlYnVnZ2luZyBlbmFibGVkXCIpfWdldCBsb2coKXtyZXR1cm4gdGhpcy5lbmFibGVkP0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoY29uc29sZS5sb2csY29uc29sZSk6cWV9Z2V0IHdhcm4oKXtyZXR1cm4gdGhpcy5lbmFibGVkP0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmNhbGwoY29uc29sZS53YXJuLGNvbnNvbGUpOnFlfWdldCBlcnJvcigpe3JldHVybiB0aGlzLmVuYWJsZWQ/RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuY2FsbChjb25zb2xlLmVycm9yLGNvbnNvbGUpOnFlfX1jbGFzcyBIZXtjb25zdHJ1Y3Rvcih0KXtlKHRoaXMsXCJvbkNoYW5nZVwiLCgoKT0+e2lmKCF0aGlzLnN1cHBvcnRlZClyZXR1cm47Y29uc3QgZT10aGlzLnBsYXllci5lbGVtZW50cy5idXR0b25zLmZ1bGxzY3JlZW47Uy5lbGVtZW50KGUpJiYoZS5wcmVzc2VkPXRoaXMuYWN0aXZlKTtjb25zdCB0PXRoaXMudGFyZ2V0PT09dGhpcy5wbGF5ZXIubWVkaWE/dGhpcy50YXJnZXQ6dGhpcy5wbGF5ZXIuZWxlbWVudHMuY29udGFpbmVyO1ouY2FsbCh0aGlzLnBsYXllcix0LHRoaXMuYWN0aXZlP1wiZW50ZXJmdWxsc2NyZWVuXCI6XCJleGl0ZnVsbHNjcmVlblwiLCEwKX0pKSxlKHRoaXMsXCJ0b2dnbGVGYWxsYmFja1wiLCgoZT0hMSk9PntpZihlP3RoaXMuc2Nyb2xsUG9zaXRpb249e3g6d2luZG93LnNjcm9sbFg/PzAseTp3aW5kb3cuc2Nyb2xsWT8/MH06d2luZG93LnNjcm9sbFRvKHRoaXMuc2Nyb2xsUG9zaXRpb24ueCx0aGlzLnNjcm9sbFBvc2l0aW9uLnkpLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ZT9cImhpZGRlblwiOlwiXCIsUih0aGlzLnRhcmdldCx0aGlzLnBsYXllci5jb25maWcuY2xhc3NOYW1lcy5mdWxsc2NyZWVuLmZhbGxiYWNrLGUpLE0uaXNJb3Mpe2xldCB0PWRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwidmlld3BvcnRcIl0nKTtjb25zdCBpPVwidmlld3BvcnQtZml0PWNvdmVyXCI7dHx8KHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm1ldGFcIiksdC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJ2aWV3cG9ydFwiKSk7Y29uc3Qgcz1TLnN0cmluZyh0LmNvbnRlbnQpJiZ0LmNvbnRlbnQuaW5jbHVkZXMoaSk7ZT8odGhpcy5jbGVhbnVwVmlld3BvcnQ9IXMsc3x8KHQuY29udGVudCs9YCwke2l9YCkpOnRoaXMuY2xlYW51cFZpZXdwb3J0JiYodC5jb250ZW50PXQuY29udGVudC5zcGxpdChcIixcIikuZmlsdGVyKChlPT5lLnRyaW0oKSE9PWkpKS5qb2luKFwiLFwiKSl9dGhpcy5vbkNoYW5nZSgpfSkpLGUodGhpcyxcInRyYXBGb2N1c1wiLChlPT57aWYoTS5pc0lvc3x8TS5pc0lQYWRPU3x8IXRoaXMuYWN0aXZlfHxcIlRhYlwiIT09ZS5rZXkpcmV0dXJuO2NvbnN0IHQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCxpPVUuY2FsbCh0aGlzLnBsYXllcixcImFbaHJlZl0sIGJ1dHRvbjpub3QoOmRpc2FibGVkKSwgaW5wdXQ6bm90KDpkaXNhYmxlZCksIFt0YWJpbmRleF1cIiksW3NdPWksbj1pW2kubGVuZ3RoLTFdO3QhPT1ufHxlLnNoaWZ0S2V5P3Q9PT1zJiZlLnNoaWZ0S2V5JiYobi5mb2N1cygpLGUucHJldmVudERlZmF1bHQoKSk6KHMuZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCkpfSkpLGUodGhpcyxcInVwZGF0ZVwiLCgoKT0+e2lmKHRoaXMuc3VwcG9ydGVkKXtsZXQgZTtlPXRoaXMuZm9yY2VGYWxsYmFjaz9cIkZhbGxiYWNrIChmb3JjZWQpXCI6SGUubmF0aXZlU3VwcG9ydGVkP1wiTmF0aXZlXCI6XCJGYWxsYmFja1wiLHRoaXMucGxheWVyLmRlYnVnLmxvZyhgJHtlfSBmdWxsc2NyZWVuIGVuYWJsZWRgKX1lbHNlIHRoaXMucGxheWVyLmRlYnVnLmxvZyhcIkZ1bGxzY3JlZW4gbm90IHN1cHBvcnRlZCBhbmQgZmFsbGJhY2sgZGlzYWJsZWRcIik7Uih0aGlzLnBsYXllci5lbGVtZW50cy5jb250YWluZXIsdGhpcy5wbGF5ZXIuY29uZmlnLmNsYXNzTmFtZXMuZnVsbHNjcmVlbi5lbmFibGVkLHRoaXMuc3VwcG9ydGVkKX0pKSxlKHRoaXMsXCJlbnRlclwiLCgoKT0+e3RoaXMuc3VwcG9ydGVkJiYoTS5pc0lvcyYmdGhpcy5wbGF5ZXIuY29uZmlnLmZ1bGxzY3JlZW4uaW9zTmF0aXZlP3RoaXMucGxheWVyLmlzVmltZW8/dGhpcy5wbGF5ZXIuZW1iZWQucmVxdWVzdEZ1bGxzY3JlZW4oKTp0aGlzLnRhcmdldC53ZWJraXRFbnRlckZ1bGxzY3JlZW4oKTohSGUubmF0aXZlU3VwcG9ydGVkfHx0aGlzLmZvcmNlRmFsbGJhY2s/dGhpcy50b2dnbGVGYWxsYmFjayghMCk6dGhpcy5wcmVmaXg/Uy5lbXB0eSh0aGlzLnByZWZpeCl8fHRoaXMudGFyZ2V0W2Ake3RoaXMucHJlZml4fVJlcXVlc3Qke3RoaXMucHJvcGVydHl9YF0oKTp0aGlzLnRhcmdldC5yZXF1ZXN0RnVsbHNjcmVlbih7bmF2aWdhdGlvblVJOlwiaGlkZVwifSkpfSkpLGUodGhpcyxcImV4aXRcIiwoKCk9PntpZih0aGlzLnN1cHBvcnRlZClpZihNLmlzSW9zJiZ0aGlzLnBsYXllci5jb25maWcuZnVsbHNjcmVlbi5pb3NOYXRpdmUpdGhpcy5wbGF5ZXIuaXNWaW1lbz90aGlzLnBsYXllci5lbWJlZC5leGl0RnVsbHNjcmVlbigpOnRoaXMudGFyZ2V0LndlYmtpdEVudGVyRnVsbHNjcmVlbigpLGllKHRoaXMucGxheWVyLnBsYXkoKSk7ZWxzZSBpZighSGUubmF0aXZlU3VwcG9ydGVkfHx0aGlzLmZvcmNlRmFsbGJhY2spdGhpcy50b2dnbGVGYWxsYmFjayghMSk7ZWxzZSBpZih0aGlzLnByZWZpeCl7aWYoIVMuZW1wdHkodGhpcy5wcmVmaXgpKXtjb25zdCBlPVwibW96XCI9PT10aGlzLnByZWZpeD9cIkNhbmNlbFwiOlwiRXhpdFwiO2RvY3VtZW50W2Ake3RoaXMucHJlZml4fSR7ZX0ke3RoaXMucHJvcGVydHl9YF0oKX19ZWxzZShkb2N1bWVudC5jYW5jZWxGdWxsU2NyZWVufHxkb2N1bWVudC5leGl0RnVsbHNjcmVlbikuY2FsbChkb2N1bWVudCl9KSksZSh0aGlzLFwidG9nZ2xlXCIsKCgpPT57dGhpcy5hY3RpdmU/dGhpcy5leGl0KCk6dGhpcy5lbnRlcigpfSkpLHRoaXMucGxheWVyPXQsdGhpcy5wcmVmaXg9SGUucHJlZml4LHRoaXMucHJvcGVydHk9SGUucHJvcGVydHksdGhpcy5zY3JvbGxQb3NpdGlvbj17eDowLHk6MH0sdGhpcy5mb3JjZUZhbGxiYWNrPVwiZm9yY2VcIj09PXQuY29uZmlnLmZ1bGxzY3JlZW4uZmFsbGJhY2ssdGhpcy5wbGF5ZXIuZWxlbWVudHMuZnVsbHNjcmVlbj10LmNvbmZpZy5mdWxsc2NyZWVuLmNvbnRhaW5lciYmZnVuY3Rpb24oZSx0KXtjb25zdHtwcm90b3R5cGU6aX09RWxlbWVudDtyZXR1cm4oaS5jbG9zZXN0fHxmdW5jdGlvbigpe2xldCBlPXRoaXM7ZG97aWYoVi5tYXRjaGVzKGUsdCkpcmV0dXJuIGU7ZT1lLnBhcmVudEVsZW1lbnR8fGUucGFyZW50Tm9kZX13aGlsZShudWxsIT09ZSYmMT09PWUubm9kZVR5cGUpO3JldHVybiBudWxsfSkuY2FsbChlLHQpfSh0aGlzLnBsYXllci5lbGVtZW50cy5jb250YWluZXIsdC5jb25maWcuZnVsbHNjcmVlbi5jb250YWluZXIpLFguY2FsbCh0aGlzLnBsYXllcixkb2N1bWVudCxcIm1zXCI9PT10aGlzLnByZWZpeD9cIk1TRnVsbHNjcmVlbkNoYW5nZVwiOmAke3RoaXMucHJlZml4fWZ1bGxzY3JlZW5jaGFuZ2VgLCgoKT0+e3RoaXMub25DaGFuZ2UoKX0pKSxYLmNhbGwodGhpcy5wbGF5ZXIsdGhpcy5wbGF5ZXIuZWxlbWVudHMuY29udGFpbmVyLFwiZGJsY2xpY2tcIiwoZT0+e1MuZWxlbWVudCh0aGlzLnBsYXllci5lbGVtZW50cy5jb250cm9scykmJnRoaXMucGxheWVyLmVsZW1lbnRzLmNvbnRyb2xzLmNvbnRhaW5zKGUudGFyZ2V0KXx8dGhpcy5wbGF5ZXIubGlzdGVuZXJzLnByb3h5KGUsdGhpcy50b2dnbGUsXCJmdWxsc2NyZWVuXCIpfSkpLFguY2FsbCh0aGlzLHRoaXMucGxheWVyLmVsZW1lbnRzLmNvbnRhaW5lcixcImtleWRvd25cIiwoZT0+dGhpcy50cmFwRm9jdXMoZSkpKSx0aGlzLnVwZGF0ZSgpfXN0YXRpYyBnZXQgbmF0aXZlU3VwcG9ydGVkKCl7cmV0dXJuISEoZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZCl9Z2V0IHVzZU5hdGl2ZSgpe3JldHVybiBIZS5uYXRpdmVTdXBwb3J0ZWQmJiF0aGlzLmZvcmNlRmFsbGJhY2t9c3RhdGljIGdldCBwcmVmaXgoKXtpZihTLmZ1bmN0aW9uKGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSlyZXR1cm5cIlwiO2xldCBlPVwiXCI7cmV0dXJuW1wid2Via2l0XCIsXCJtb3pcIixcIm1zXCJdLnNvbWUoKHQ9PiEoIVMuZnVuY3Rpb24oZG9jdW1lbnRbYCR7dH1FeGl0RnVsbHNjcmVlbmBdKSYmIVMuZnVuY3Rpb24oZG9jdW1lbnRbYCR7dH1DYW5jZWxGdWxsU2NyZWVuYF0pKSYmKGU9dCwhMCkpKSxlfXN0YXRpYyBnZXQgcHJvcGVydHkoKXtyZXR1cm5cIm1velwiPT09dGhpcy5wcmVmaXg/XCJGdWxsU2NyZWVuXCI6XCJGdWxsc2NyZWVuXCJ9Z2V0IHN1cHBvcnRlZCgpe3JldHVyblt0aGlzLnBsYXllci5jb25maWcuZnVsbHNjcmVlbi5lbmFibGVkLHRoaXMucGxheWVyLmlzVmlkZW8sSGUubmF0aXZlU3VwcG9ydGVkfHx0aGlzLnBsYXllci5jb25maWcuZnVsbHNjcmVlbi5mYWxsYmFjaywhdGhpcy5wbGF5ZXIuaXNZb3VUdWJlfHxIZS5uYXRpdmVTdXBwb3J0ZWR8fCFNLmlzSW9zfHx0aGlzLnBsYXllci5jb25maWcucGxheXNpbmxpbmUmJiF0aGlzLnBsYXllci5jb25maWcuZnVsbHNjcmVlbi5pb3NOYXRpdmVdLmV2ZXJ5KEJvb2xlYW4pfWdldCBhY3RpdmUoKXtpZighdGhpcy5zdXBwb3J0ZWQpcmV0dXJuITE7aWYoIUhlLm5hdGl2ZVN1cHBvcnRlZHx8dGhpcy5mb3JjZUZhbGxiYWNrKXJldHVybiBGKHRoaXMudGFyZ2V0LHRoaXMucGxheWVyLmNvbmZpZy5jbGFzc05hbWVzLmZ1bGxzY3JlZW4uZmFsbGJhY2spO2NvbnN0IGU9dGhpcy5wcmVmaXg/dGhpcy50YXJnZXQuZ2V0Um9vdE5vZGUoKVtgJHt0aGlzLnByZWZpeH0ke3RoaXMucHJvcGVydHl9RWxlbWVudGBdOnRoaXMudGFyZ2V0LmdldFJvb3ROb2RlKCkuZnVsbHNjcmVlbkVsZW1lbnQ7cmV0dXJuIGUmJmUuc2hhZG93Um9vdD9lPT09dGhpcy50YXJnZXQuZ2V0Um9vdE5vZGUoKS5ob3N0OmU9PT10aGlzLnRhcmdldH1nZXQgdGFyZ2V0KCl7cmV0dXJuIE0uaXNJb3MmJnRoaXMucGxheWVyLmNvbmZpZy5mdWxsc2NyZWVuLmlvc05hdGl2ZT90aGlzLnBsYXllci5tZWRpYTp0aGlzLnBsYXllci5lbGVtZW50cy5mdWxsc2NyZWVuPz90aGlzLnBsYXllci5lbGVtZW50cy5jb250YWluZXJ9fWZ1bmN0aW9uIFJlKGUsdD0xKXtyZXR1cm4gbmV3IFByb21pc2UoKChpLHMpPT57Y29uc3Qgbj1uZXcgSW1hZ2UsYT0oKT0+e2RlbGV0ZSBuLm9ubG9hZCxkZWxldGUgbi5vbmVycm9yLChuLm5hdHVyYWxXaWR0aD49dD9pOnMpKG4pfTtPYmplY3QuYXNzaWduKG4se29ubG9hZDphLG9uZXJyb3I6YSxzcmM6ZX0pfSkpfWNvbnN0IEZlPXthZGRTdHlsZUhvb2soKXtSKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLHRoaXMuY29uZmlnLnNlbGVjdG9ycy5jb250YWluZXIucmVwbGFjZShcIi5cIixcIlwiKSwhMCksUih0aGlzLmVsZW1lbnRzLmNvbnRhaW5lcix0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnVpU3VwcG9ydGVkLHRoaXMuc3VwcG9ydGVkLnVpKX0sdG9nZ2xlTmF0aXZlQ29udHJvbHMoZT0hMSl7ZSYmdGhpcy5pc0hUTUw1P3RoaXMubWVkaWEuc2V0QXR0cmlidXRlKFwiY29udHJvbHNcIixcIlwiKTp0aGlzLm1lZGlhLnJlbW92ZUF0dHJpYnV0ZShcImNvbnRyb2xzXCIpfSxidWlsZCgpe2lmKHRoaXMubGlzdGVuZXJzLm1lZGlhKCksIXRoaXMuc3VwcG9ydGVkLnVpKXJldHVybiB0aGlzLmRlYnVnLndhcm4oYEJhc2ljIHN1cHBvcnQgb25seSBmb3IgJHt0aGlzLnByb3ZpZGVyfSAke3RoaXMudHlwZX1gKSx2b2lkIEZlLnRvZ2dsZU5hdGl2ZUNvbnRyb2xzLmNhbGwodGhpcywhMCk7Uy5lbGVtZW50KHRoaXMuZWxlbWVudHMuY29udHJvbHMpfHwoUGUuaW5qZWN0LmNhbGwodGhpcyksdGhpcy5saXN0ZW5lcnMuY29udHJvbHMoKSksRmUudG9nZ2xlTmF0aXZlQ29udHJvbHMuY2FsbCh0aGlzKSx0aGlzLmlzSFRNTDUmJnhlLnNldHVwLmNhbGwodGhpcyksdGhpcy52b2x1bWU9bnVsbCx0aGlzLm11dGVkPW51bGwsdGhpcy5sb29wPW51bGwsdGhpcy5xdWFsaXR5PW51bGwsdGhpcy5zcGVlZD1udWxsLFBlLnVwZGF0ZVZvbHVtZS5jYWxsKHRoaXMpLFBlLnRpbWVVcGRhdGUuY2FsbCh0aGlzKSxQZS5kdXJhdGlvblVwZGF0ZS5jYWxsKHRoaXMpLEZlLmNoZWNrUGxheWluZy5jYWxsKHRoaXMpLFIodGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5jb25maWcuY2xhc3NOYW1lcy5waXAuc3VwcG9ydGVkLEsucGlwJiZ0aGlzLmlzSFRNTDUmJnRoaXMuaXNWaWRlbyksUih0aGlzLmVsZW1lbnRzLmNvbnRhaW5lcix0aGlzLmNvbmZpZy5jbGFzc05hbWVzLmFpcnBsYXkuc3VwcG9ydGVkLEsuYWlycGxheSYmdGhpcy5pc0hUTUw1KSxSKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLHRoaXMuY29uZmlnLmNsYXNzTmFtZXMuaXNUb3VjaCx0aGlzLnRvdWNoKSx0aGlzLnJlYWR5PSEwLHNldFRpbWVvdXQoKCgpPT57Wi5jYWxsKHRoaXMsdGhpcy5tZWRpYSxcInJlYWR5XCIpfSksMCksRmUuc2V0VGl0bGUuY2FsbCh0aGlzKSx0aGlzLnBvc3RlciYmRmUuc2V0UG9zdGVyLmNhbGwodGhpcyx0aGlzLnBvc3RlciwhMSkuY2F0Y2goKCgpPT57fSkpLHRoaXMuY29uZmlnLmR1cmF0aW9uJiZQZS5kdXJhdGlvblVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuY29uZmlnLm1lZGlhTWV0YWRhdGEmJlBlLnNldE1lZGlhTWV0YWRhdGEuY2FsbCh0aGlzKX0sc2V0VGl0bGUoKXtsZXQgZT12ZS5nZXQoXCJwbGF5XCIsdGhpcy5jb25maWcpO2lmKFMuc3RyaW5nKHRoaXMuY29uZmlnLnRpdGxlKSYmIVMuZW1wdHkodGhpcy5jb25maWcudGl0bGUpJiYoZSs9YCwgJHt0aGlzLmNvbmZpZy50aXRsZX1gKSxBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuYnV0dG9ucy5wbGF5fHxbXSkuZm9yRWFjaCgodD0+e3Quc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLGUpfSkpLHRoaXMuaXNFbWJlZCl7Y29uc3QgZT1CLmNhbGwodGhpcyxcImlmcmFtZVwiKTtpZighUy5lbGVtZW50KGUpKXJldHVybjtjb25zdCB0PVMuZW1wdHkodGhpcy5jb25maWcudGl0bGUpP1widmlkZW9cIjp0aGlzLmNvbmZpZy50aXRsZSxpPXZlLmdldChcImZyYW1lVGl0bGVcIix0aGlzLmNvbmZpZyk7ZS5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLGkucmVwbGFjZShcInt0aXRsZX1cIix0KSl9fSx0b2dnbGVQb3N0ZXIoZSl7Uih0aGlzLmVsZW1lbnRzLmNvbnRhaW5lcix0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnBvc3RlckVuYWJsZWQsZSl9LHNldFBvc3RlcihlLHQ9ITApe3JldHVybiB0JiZ0aGlzLnBvc3Rlcj9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJQb3N0ZXIgYWxyZWFkeSBzZXRcIikpOih0aGlzLm1lZGlhLnNldEF0dHJpYnV0ZShcImRhdGEtcG9zdGVyXCIsZSksdGhpcy5lbGVtZW50cy5wb3N0ZXIucmVtb3ZlQXR0cmlidXRlKFwiaGlkZGVuXCIpLHRlLmNhbGwodGhpcykudGhlbigoKCk9PlJlKGUpKSkuY2F0Y2goKHQ9Pnt0aHJvdyBlPT09dGhpcy5wb3N0ZXImJkZlLnRvZ2dsZVBvc3Rlci5jYWxsKHRoaXMsITEpLHR9KSkudGhlbigoKCk9PntpZihlIT09dGhpcy5wb3N0ZXIpdGhyb3cgbmV3IEVycm9yKFwic2V0UG9zdGVyIGNhbmNlbGxlZCBieSBsYXRlciBjYWxsIHRvIHNldFBvc3RlclwiKX0pKS50aGVuKCgoKT0+KE9iamVjdC5hc3NpZ24odGhpcy5lbGVtZW50cy5wb3N0ZXIuc3R5bGUse2JhY2tncm91bmRJbWFnZTpgdXJsKCcke2V9JylgLGJhY2tncm91bmRTaXplOlwiXCJ9KSxGZS50b2dnbGVQb3N0ZXIuY2FsbCh0aGlzLCEwKSxlKSkpKX0sY2hlY2tQbGF5aW5nKGUpe1IodGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5jb25maWcuY2xhc3NOYW1lcy5wbGF5aW5nLHRoaXMucGxheWluZyksUih0aGlzLmVsZW1lbnRzLmNvbnRhaW5lcix0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnBhdXNlZCx0aGlzLnBhdXNlZCksUih0aGlzLmVsZW1lbnRzLmNvbnRhaW5lcix0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnN0b3BwZWQsdGhpcy5zdG9wcGVkKSxBcnJheS5mcm9tKHRoaXMuZWxlbWVudHMuYnV0dG9ucy5wbGF5fHxbXSkuZm9yRWFjaCgoZT0+e09iamVjdC5hc3NpZ24oZSx7cHJlc3NlZDp0aGlzLnBsYXlpbmd9KSxlLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIix2ZS5nZXQodGhpcy5wbGF5aW5nP1wicGF1c2VcIjpcInBsYXlcIix0aGlzLmNvbmZpZykpfSkpLFMuZXZlbnQoZSkmJlwidGltZXVwZGF0ZVwiPT09ZS50eXBlfHxGZS50b2dnbGVDb250cm9scy5jYWxsKHRoaXMpfSxjaGVja0xvYWRpbmcoZSl7dGhpcy5sb2FkaW5nPVtcInN0YWxsZWRcIixcIndhaXRpbmdcIl0uaW5jbHVkZXMoZS50eXBlKSxjbGVhclRpbWVvdXQodGhpcy50aW1lcnMubG9hZGluZyksdGhpcy50aW1lcnMubG9hZGluZz1zZXRUaW1lb3V0KCgoKT0+e1IodGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5jb25maWcuY2xhc3NOYW1lcy5sb2FkaW5nLHRoaXMubG9hZGluZyksRmUudG9nZ2xlQ29udHJvbHMuY2FsbCh0aGlzKX0pLHRoaXMubG9hZGluZz8yNTA6MCl9LHRvZ2dsZUNvbnRyb2xzKGUpe2NvbnN0e2NvbnRyb2xzOnR9PXRoaXMuZWxlbWVudHM7aWYodCYmdGhpcy5jb25maWcuaGlkZUNvbnRyb2xzKXtjb25zdCBpPXRoaXMudG91Y2gmJnRoaXMubGFzdFNlZWtUaW1lKzJlMz5EYXRlLm5vdygpO3RoaXMudG9nZ2xlQ29udHJvbHMoQm9vbGVhbihlfHx0aGlzLmxvYWRpbmd8fHRoaXMucGF1c2VkfHx0LnByZXNzZWR8fHQuaG92ZXJ8fGkpKX19LG1pZ3JhdGVTdHlsZXMoKXtPYmplY3QudmFsdWVzKHsuLi50aGlzLm1lZGlhLnN0eWxlfSkuZmlsdGVyKChlPT4hUy5lbXB0eShlKSYmUy5zdHJpbmcoZSkmJmUuc3RhcnRzV2l0aChcIi0tcGx5clwiKSkpLmZvckVhY2goKGU9Pnt0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShlLHRoaXMubWVkaWEuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKSksdGhpcy5tZWRpYS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX0pKSxTLmVtcHR5KHRoaXMubWVkaWEuc3R5bGUpJiZ0aGlzLm1lZGlhLnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpfX07Y2xhc3MgVmV7Y29uc3RydWN0b3IodCl7ZSh0aGlzLFwiZmlyc3RUb3VjaFwiLCgoKT0+e2NvbnN0e3BsYXllcjplfT10aGlzLHtlbGVtZW50czp0fT1lO2UudG91Y2g9ITAsUih0LmNvbnRhaW5lcixlLmNvbmZpZy5jbGFzc05hbWVzLmlzVG91Y2gsITApfSkpLGUodGhpcyxcImdsb2JhbFwiLCgoZT0hMCk9Pntjb25zdHtwbGF5ZXI6dH09dGhpczt0LmNvbmZpZy5rZXlib2FyZC5nbG9iYWwmJlEuY2FsbCh0LHdpbmRvdyxcImtleWRvd24ga2V5dXBcIix0aGlzLmhhbmRsZUtleSxlLCExKSxRLmNhbGwodCxkb2N1bWVudC5ib2R5LFwiY2xpY2tcIix0aGlzLnRvZ2dsZU1lbnUsZSksRy5jYWxsKHQsZG9jdW1lbnQuYm9keSxcInRvdWNoc3RhcnRcIix0aGlzLmZpcnN0VG91Y2gpfSkpLGUodGhpcyxcImNvbnRhaW5lclwiLCgoKT0+e2NvbnN0e3BsYXllcjplfT10aGlzLHtjb25maWc6dCxlbGVtZW50czppLHRpbWVyczpzfT1lOyF0LmtleWJvYXJkLmdsb2JhbCYmdC5rZXlib2FyZC5mb2N1c2VkJiZYLmNhbGwoZSxpLmNvbnRhaW5lcixcImtleWRvd24ga2V5dXBcIix0aGlzLmhhbmRsZUtleSwhMSksWC5jYWxsKGUsaS5jb250YWluZXIsXCJtb3VzZW1vdmUgbW91c2VsZWF2ZSB0b3VjaHN0YXJ0IHRvdWNobW92ZSBlbnRlcmZ1bGxzY3JlZW4gZXhpdGZ1bGxzY3JlZW5cIiwodD0+e2NvbnN0e2NvbnRyb2xzOm59PWk7biYmXCJlbnRlcmZ1bGxzY3JlZW5cIj09PXQudHlwZSYmKG4ucHJlc3NlZD0hMSxuLmhvdmVyPSExKTtsZXQgYT0wO1tcInRvdWNoc3RhcnRcIixcInRvdWNobW92ZVwiLFwibW91c2Vtb3ZlXCJdLmluY2x1ZGVzKHQudHlwZSkmJihGZS50b2dnbGVDb250cm9scy5jYWxsKGUsITApLGE9ZS50b3VjaD8zZTM6MmUzKSxjbGVhclRpbWVvdXQocy5jb250cm9scykscy5jb250cm9scz1zZXRUaW1lb3V0KCgoKT0+RmUudG9nZ2xlQ29udHJvbHMuY2FsbChlLCExKSksYSl9KSk7Y29uc3Qgbj0oKT0+e2lmKCFlLmlzVmltZW98fGUuY29uZmlnLnZpbWVvLnByZW1pdW0pcmV0dXJuO2NvbnN0IHQ9aS53cmFwcGVyLHthY3RpdmU6c309ZS5mdWxsc2NyZWVuLFtuLGFdPWNlLmNhbGwoZSksbD1hZShgYXNwZWN0LXJhdGlvOiAke259IC8gJHthfWApO2lmKCFzKXJldHVybiB2b2lkKGw/KHQuc3R5bGUud2lkdGg9bnVsbCx0LnN0eWxlLmhlaWdodD1udWxsKToodC5zdHlsZS5tYXhXaWR0aD1udWxsLHQuc3R5bGUubWFyZ2luPW51bGwpKTtjb25zdFtyLG9dPVtNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGh8fDAsd2luZG93LmlubmVyV2lkdGh8fDApLE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR8fDAsd2luZG93LmlubmVySGVpZ2h0fHwwKV0sYz1yL28+bi9hO2w/KHQuc3R5bGUud2lkdGg9Yz9cImF1dG9cIjpcIjEwMCVcIix0LnN0eWxlLmhlaWdodD1jP1wiMTAwJVwiOlwiYXV0b1wiKToodC5zdHlsZS5tYXhXaWR0aD1jP28vYSpuK1wicHhcIjpudWxsLHQuc3R5bGUubWFyZ2luPWM/XCIwIGF1dG9cIjpudWxsKX0sYT0oKT0+e2NsZWFyVGltZW91dChzLnJlc2l6ZWQpLHMucmVzaXplZD1zZXRUaW1lb3V0KG4sNTApfTtYLmNhbGwoZSxpLmNvbnRhaW5lcixcImVudGVyZnVsbHNjcmVlbiBleGl0ZnVsbHNjcmVlblwiLCh0PT57Y29uc3R7dGFyZ2V0OnN9PWUuZnVsbHNjcmVlbjtpZihzIT09aS5jb250YWluZXIpcmV0dXJuO2lmKCFlLmlzRW1iZWQmJlMuZW1wdHkoZS5jb25maWcucmF0aW8pKXJldHVybjtuKCk7KFwiZW50ZXJmdWxsc2NyZWVuXCI9PT10LnR5cGU/WDpKKS5jYWxsKGUsd2luZG93LFwicmVzaXplXCIsYSl9KSl9KSksZSh0aGlzLFwibWVkaWFcIiwoKCk9Pntjb25zdHtwbGF5ZXI6ZX09dGhpcyx7ZWxlbWVudHM6dH09ZTtpZihYLmNhbGwoZSxlLm1lZGlhLFwidGltZXVwZGF0ZSBzZWVraW5nIHNlZWtlZFwiLCh0PT5QZS50aW1lVXBkYXRlLmNhbGwoZSx0KSkpLFguY2FsbChlLGUubWVkaWEsXCJkdXJhdGlvbmNoYW5nZSBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhXCIsKHQ9PlBlLmR1cmF0aW9uVXBkYXRlLmNhbGwoZSx0KSkpLFguY2FsbChlLGUubWVkaWEsXCJlbmRlZFwiLCgoKT0+e2UuaXNIVE1MNSYmZS5pc1ZpZGVvJiZlLmNvbmZpZy5yZXNldE9uRW5kJiYoZS5yZXN0YXJ0KCksZS5wYXVzZSgpKX0pKSxYLmNhbGwoZSxlLm1lZGlhLFwicHJvZ3Jlc3MgcGxheWluZyBzZWVraW5nIHNlZWtlZFwiLCh0PT5QZS51cGRhdGVQcm9ncmVzcy5jYWxsKGUsdCkpKSxYLmNhbGwoZSxlLm1lZGlhLFwidm9sdW1lY2hhbmdlXCIsKHQ9PlBlLnVwZGF0ZVZvbHVtZS5jYWxsKGUsdCkpKSxYLmNhbGwoZSxlLm1lZGlhLFwicGxheWluZyBwbGF5IHBhdXNlIGVuZGVkIGVtcHRpZWQgdGltZXVwZGF0ZVwiLCh0PT5GZS5jaGVja1BsYXlpbmcuY2FsbChlLHQpKSksWC5jYWxsKGUsZS5tZWRpYSxcIndhaXRpbmcgY2FucGxheSBzZWVrZWQgcGxheWluZ1wiLCh0PT5GZS5jaGVja0xvYWRpbmcuY2FsbChlLHQpKSksZS5zdXBwb3J0ZWQudWkmJmUuY29uZmlnLmNsaWNrVG9QbGF5JiYhZS5pc0F1ZGlvKXtjb25zdCBpPUIuY2FsbChlLGAuJHtlLmNvbmZpZy5jbGFzc05hbWVzLnZpZGVvfWApO2lmKCFTLmVsZW1lbnQoaSkpcmV0dXJuO1guY2FsbChlLHQuY29udGFpbmVyLFwiY2xpY2tcIiwocz0+eyhbdC5jb250YWluZXIsaV0uaW5jbHVkZXMocy50YXJnZXQpfHxpLmNvbnRhaW5zKHMudGFyZ2V0KSkmJihlLnRvdWNoJiZlLmNvbmZpZy5oaWRlQ29udHJvbHN8fChlLmVuZGVkPyh0aGlzLnByb3h5KHMsZS5yZXN0YXJ0LFwicmVzdGFydFwiKSx0aGlzLnByb3h5KHMsKCgpPT57aWUoZS5wbGF5KCkpfSksXCJwbGF5XCIpKTp0aGlzLnByb3h5KHMsKCgpPT57aWUoZS50b2dnbGVQbGF5KCkpfSksXCJwbGF5XCIpKSl9KSl9ZS5zdXBwb3J0ZWQudWkmJmUuY29uZmlnLmRpc2FibGVDb250ZXh0TWVudSYmWC5jYWxsKGUsdC53cmFwcGVyLFwiY29udGV4dG1lbnVcIiwoZT0+e2UucHJldmVudERlZmF1bHQoKX0pLCExKSxYLmNhbGwoZSxlLm1lZGlhLFwidm9sdW1lY2hhbmdlXCIsKCgpPT57ZS5zdG9yYWdlLnNldCh7dm9sdW1lOmUudm9sdW1lLG11dGVkOmUubXV0ZWR9KX0pKSxYLmNhbGwoZSxlLm1lZGlhLFwicmF0ZWNoYW5nZVwiLCgoKT0+e1BlLnVwZGF0ZVNldHRpbmcuY2FsbChlLFwic3BlZWRcIiksZS5zdG9yYWdlLnNldCh7c3BlZWQ6ZS5zcGVlZH0pfSkpLFguY2FsbChlLGUubWVkaWEsXCJxdWFsaXR5Y2hhbmdlXCIsKHQ9PntQZS51cGRhdGVTZXR0aW5nLmNhbGwoZSxcInF1YWxpdHlcIixudWxsLHQuZGV0YWlsLnF1YWxpdHkpfSkpLFguY2FsbChlLGUubWVkaWEsXCJyZWFkeSBxdWFsaXR5Y2hhbmdlXCIsKCgpPT57UGUuc2V0RG93bmxvYWRVcmwuY2FsbChlKX0pKTtjb25zdCBpPWUuY29uZmlnLmV2ZW50cy5jb25jYXQoW1wia2V5dXBcIixcImtleWRvd25cIl0pLmpvaW4oXCIgXCIpO1guY2FsbChlLGUubWVkaWEsaSwoaT0+e2xldHtkZXRhaWw6cz17fX09aTtcImVycm9yXCI9PT1pLnR5cGUmJihzPWUubWVkaWEuZXJyb3IpLFouY2FsbChlLHQuY29udGFpbmVyLGkudHlwZSwhMCxzKX0pKX0pKSxlKHRoaXMsXCJwcm94eVwiLCgoZSx0LGkpPT57Y29uc3R7cGxheWVyOnN9PXRoaXMsbj1zLmNvbmZpZy5saXN0ZW5lcnNbaV07bGV0IGE9ITA7Uy5mdW5jdGlvbihuKSYmKGE9bi5jYWxsKHMsZSkpLCExIT09YSYmUy5mdW5jdGlvbih0KSYmdC5jYWxsKHMsZSl9KSksZSh0aGlzLFwiYmluZFwiLCgoZSx0LGkscyxuPSEwKT0+e2NvbnN0e3BsYXllcjphfT10aGlzLGw9YS5jb25maWcubGlzdGVuZXJzW3NdLHI9Uy5mdW5jdGlvbihsKTtYLmNhbGwoYSxlLHQsKGU9PnRoaXMucHJveHkoZSxpLHMpKSxuJiYhcil9KSksZSh0aGlzLFwiY29udHJvbHNcIiwoKCk9Pntjb25zdHtwbGF5ZXI6ZX09dGhpcyx7ZWxlbWVudHM6dH09ZSxpPU0uaXNJRT9cImNoYW5nZVwiOlwiaW5wdXRcIjtpZih0LmJ1dHRvbnMucGxheSYmQXJyYXkuZnJvbSh0LmJ1dHRvbnMucGxheSkuZm9yRWFjaCgodD0+e3RoaXMuYmluZCh0LFwiY2xpY2tcIiwoKCk9PntpZShlLnRvZ2dsZVBsYXkoKSl9KSxcInBsYXlcIil9KSksdGhpcy5iaW5kKHQuYnV0dG9ucy5yZXN0YXJ0LFwiY2xpY2tcIixlLnJlc3RhcnQsXCJyZXN0YXJ0XCIpLHRoaXMuYmluZCh0LmJ1dHRvbnMucmV3aW5kLFwiY2xpY2tcIiwoKCk9PntlLmxhc3RTZWVrVGltZT1EYXRlLm5vdygpLGUucmV3aW5kKCl9KSxcInJld2luZFwiKSx0aGlzLmJpbmQodC5idXR0b25zLmZhc3RGb3J3YXJkLFwiY2xpY2tcIiwoKCk9PntlLmxhc3RTZWVrVGltZT1EYXRlLm5vdygpLGUuZm9yd2FyZCgpfSksXCJmYXN0Rm9yd2FyZFwiKSx0aGlzLmJpbmQodC5idXR0b25zLm11dGUsXCJjbGlja1wiLCgoKT0+e2UubXV0ZWQ9IWUubXV0ZWR9KSxcIm11dGVcIiksdGhpcy5iaW5kKHQuYnV0dG9ucy5jYXB0aW9ucyxcImNsaWNrXCIsKCgpPT5lLnRvZ2dsZUNhcHRpb25zKCkpKSx0aGlzLmJpbmQodC5idXR0b25zLmRvd25sb2FkLFwiY2xpY2tcIiwoKCk9PntaLmNhbGwoZSxlLm1lZGlhLFwiZG93bmxvYWRcIil9KSxcImRvd25sb2FkXCIpLHRoaXMuYmluZCh0LmJ1dHRvbnMuZnVsbHNjcmVlbixcImNsaWNrXCIsKCgpPT57ZS5mdWxsc2NyZWVuLnRvZ2dsZSgpfSksXCJmdWxsc2NyZWVuXCIpLHRoaXMuYmluZCh0LmJ1dHRvbnMucGlwLFwiY2xpY2tcIiwoKCk9PntlLnBpcD1cInRvZ2dsZVwifSksXCJwaXBcIiksdGhpcy5iaW5kKHQuYnV0dG9ucy5haXJwbGF5LFwiY2xpY2tcIixlLmFpcnBsYXksXCJhaXJwbGF5XCIpLHRoaXMuYmluZCh0LmJ1dHRvbnMuc2V0dGluZ3MsXCJjbGlja1wiLCh0PT57dC5zdG9wUHJvcGFnYXRpb24oKSx0LnByZXZlbnREZWZhdWx0KCksUGUudG9nZ2xlTWVudS5jYWxsKGUsdCl9KSxudWxsLCExKSx0aGlzLmJpbmQodC5idXR0b25zLnNldHRpbmdzLFwia2V5dXBcIiwodD0+e1tcIiBcIixcIkVudGVyXCJdLmluY2x1ZGVzKHQua2V5KSYmKFwiRW50ZXJcIiE9PXQua2V5Pyh0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxQZS50b2dnbGVNZW51LmNhbGwoZSx0KSk6UGUuZm9jdXNGaXJzdE1lbnVJdGVtLmNhbGwoZSxudWxsLCEwKSl9KSxudWxsLCExKSx0aGlzLmJpbmQodC5zZXR0aW5ncy5tZW51LFwia2V5ZG93blwiLCh0PT57XCJFc2NhcGVcIj09PXQua2V5JiZQZS50b2dnbGVNZW51LmNhbGwoZSx0KX0pKSx0aGlzLmJpbmQodC5pbnB1dHMuc2VlayxcIm1vdXNlZG93biBtb3VzZW1vdmVcIiwoZT0+e2NvbnN0IGk9dC5wcm9ncmVzcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPTEwMC9pLndpZHRoKihlLnBhZ2VYLWkubGVmdCk7ZS5jdXJyZW50VGFyZ2V0LnNldEF0dHJpYnV0ZShcInNlZWstdmFsdWVcIixzKX0pKSx0aGlzLmJpbmQodC5pbnB1dHMuc2VlayxcIm1vdXNlZG93biBtb3VzZXVwIGtleWRvd24ga2V5dXAgdG91Y2hzdGFydCB0b3VjaGVuZFwiLCh0PT57Y29uc3QgaT10LmN1cnJlbnRUYXJnZXQscz1cInBsYXktb24tc2Vla2VkXCI7aWYoUy5rZXlib2FyZEV2ZW50KHQpJiYhW1wiQXJyb3dMZWZ0XCIsXCJBcnJvd1JpZ2h0XCJdLmluY2x1ZGVzKHQua2V5KSlyZXR1cm47ZS5sYXN0U2Vla1RpbWU9RGF0ZS5ub3coKTtjb25zdCBuPWkuaGFzQXR0cmlidXRlKHMpLGE9W1wibW91c2V1cFwiLFwidG91Y2hlbmRcIixcImtleXVwXCJdLmluY2x1ZGVzKHQudHlwZSk7biYmYT8oaS5yZW1vdmVBdHRyaWJ1dGUocyksaWUoZS5wbGF5KCkpKTohYSYmZS5wbGF5aW5nJiYoaS5zZXRBdHRyaWJ1dGUocyxcIlwiKSxlLnBhdXNlKCkpfSkpLE0uaXNJb3Mpe2NvbnN0IHQ9VS5jYWxsKGUsJ2lucHV0W3R5cGU9XCJyYW5nZVwiXScpO0FycmF5LmZyb20odCkuZm9yRWFjaCgoZT0+dGhpcy5iaW5kKGUsaSwoZT0+UChlLnRhcmdldCkpKSkpfXRoaXMuYmluZCh0LmlucHV0cy5zZWVrLGksKHQ9Pntjb25zdCBpPXQuY3VycmVudFRhcmdldDtsZXQgcz1pLmdldEF0dHJpYnV0ZShcInNlZWstdmFsdWVcIik7Uy5lbXB0eShzKSYmKHM9aS52YWx1ZSksaS5yZW1vdmVBdHRyaWJ1dGUoXCJzZWVrLXZhbHVlXCIpLGUuY3VycmVudFRpbWU9cy9pLm1heCplLmR1cmF0aW9ufSksXCJzZWVrXCIpLHRoaXMuYmluZCh0LnByb2dyZXNzLFwibW91c2VlbnRlciBtb3VzZWxlYXZlIG1vdXNlbW92ZVwiLCh0PT5QZS51cGRhdGVTZWVrVG9vbHRpcC5jYWxsKGUsdCkpKSx0aGlzLmJpbmQodC5wcm9ncmVzcyxcIm1vdXNlbW92ZSB0b3VjaG1vdmVcIiwodD0+e2NvbnN0e3ByZXZpZXdUaHVtYm5haWxzOml9PWU7aSYmaS5sb2FkZWQmJmkuc3RhcnRNb3ZlKHQpfSkpLHRoaXMuYmluZCh0LnByb2dyZXNzLFwibW91c2VsZWF2ZSB0b3VjaGVuZCBjbGlja1wiLCgoKT0+e2NvbnN0e3ByZXZpZXdUaHVtYm5haWxzOnR9PWU7dCYmdC5sb2FkZWQmJnQuZW5kTW92ZSghMSwhMCl9KSksdGhpcy5iaW5kKHQucHJvZ3Jlc3MsXCJtb3VzZWRvd24gdG91Y2hzdGFydFwiLCh0PT57Y29uc3R7cHJldmlld1RodW1ibmFpbHM6aX09ZTtpJiZpLmxvYWRlZCYmaS5zdGFydFNjcnViYmluZyh0KX0pKSx0aGlzLmJpbmQodC5wcm9ncmVzcyxcIm1vdXNldXAgdG91Y2hlbmRcIiwodD0+e2NvbnN0e3ByZXZpZXdUaHVtYm5haWxzOml9PWU7aSYmaS5sb2FkZWQmJmkuZW5kU2NydWJiaW5nKHQpfSkpLE0uaXNXZWJLaXQmJkFycmF5LmZyb20oVS5jYWxsKGUsJ2lucHV0W3R5cGU9XCJyYW5nZVwiXScpKS5mb3JFYWNoKCh0PT57dGhpcy5iaW5kKHQsXCJpbnB1dFwiLCh0PT5QZS51cGRhdGVSYW5nZUZpbGwuY2FsbChlLHQudGFyZ2V0KSkpfSkpLGUuY29uZmlnLnRvZ2dsZUludmVydCYmIVMuZWxlbWVudCh0LmRpc3BsYXkuZHVyYXRpb24pJiZ0aGlzLmJpbmQodC5kaXNwbGF5LmN1cnJlbnRUaW1lLFwiY2xpY2tcIiwoKCk9PnswIT09ZS5jdXJyZW50VGltZSYmKGUuY29uZmlnLmludmVydFRpbWU9IWUuY29uZmlnLmludmVydFRpbWUsUGUudGltZVVwZGF0ZS5jYWxsKGUpKX0pKSx0aGlzLmJpbmQodC5pbnB1dHMudm9sdW1lLGksKHQ9PntlLnZvbHVtZT10LnRhcmdldC52YWx1ZX0pLFwidm9sdW1lXCIpLHRoaXMuYmluZCh0LmNvbnRyb2xzLFwibW91c2VlbnRlciBtb3VzZWxlYXZlXCIsKGk9Pnt0LmNvbnRyb2xzLmhvdmVyPSFlLnRvdWNoJiZcIm1vdXNlZW50ZXJcIj09PWkudHlwZX0pKSx0LmZ1bGxzY3JlZW4mJkFycmF5LmZyb20odC5mdWxsc2NyZWVuLmNoaWxkcmVuKS5maWx0ZXIoKGU9PiFlLmNvbnRhaW5zKHQuY29udGFpbmVyKSkpLmZvckVhY2goKGk9Pnt0aGlzLmJpbmQoaSxcIm1vdXNlZW50ZXIgbW91c2VsZWF2ZVwiLChpPT57dC5jb250cm9scyYmKHQuY29udHJvbHMuaG92ZXI9IWUudG91Y2gmJlwibW91c2VlbnRlclwiPT09aS50eXBlKX0pKX0pKSx0aGlzLmJpbmQodC5jb250cm9scyxcIm1vdXNlZG93biBtb3VzZXVwIHRvdWNoc3RhcnQgdG91Y2hlbmQgdG91Y2hjYW5jZWxcIiwoZT0+e3QuY29udHJvbHMucHJlc3NlZD1bXCJtb3VzZWRvd25cIixcInRvdWNoc3RhcnRcIl0uaW5jbHVkZXMoZS50eXBlKX0pKSx0aGlzLmJpbmQodC5jb250cm9scyxcImZvY3VzaW5cIiwoKCk9Pntjb25zdHtjb25maWc6aSx0aW1lcnM6c309ZTtSKHQuY29udHJvbHMsaS5jbGFzc05hbWVzLm5vVHJhbnNpdGlvbiwhMCksRmUudG9nZ2xlQ29udHJvbHMuY2FsbChlLCEwKSxzZXRUaW1lb3V0KCgoKT0+e1IodC5jb250cm9scyxpLmNsYXNzTmFtZXMubm9UcmFuc2l0aW9uLCExKX0pLDApO2NvbnN0IG49dGhpcy50b3VjaD8zZTM6NGUzO2NsZWFyVGltZW91dChzLmNvbnRyb2xzKSxzLmNvbnRyb2xzPXNldFRpbWVvdXQoKCgpPT5GZS50b2dnbGVDb250cm9scy5jYWxsKGUsITEpKSxuKX0pKSx0aGlzLmJpbmQodC5pbnB1dHMudm9sdW1lLFwid2hlZWxcIiwodD0+e2NvbnN0IGk9dC53ZWJraXREaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UsW3Msbl09W3QuZGVsdGFYLC10LmRlbHRhWV0ubWFwKChlPT5pPy1lOmUpKSxhPU1hdGguc2lnbihNYXRoLmFicyhzKT5NYXRoLmFicyhuKT9zOm4pO2UuaW5jcmVhc2VWb2x1bWUoYS81MCk7Y29uc3R7dm9sdW1lOmx9PWUubWVkaWE7KDE9PT1hJiZsPDF8fC0xPT09YSYmbD4wKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSksXCJ2b2x1bWVcIiwhMSl9KSksdGhpcy5wbGF5ZXI9dCx0aGlzLmxhc3RLZXk9bnVsbCx0aGlzLmZvY3VzVGltZXI9bnVsbCx0aGlzLmxhc3RLZXlEb3duPW51bGwsdGhpcy5oYW5kbGVLZXk9dGhpcy5oYW5kbGVLZXkuYmluZCh0aGlzKSx0aGlzLnRvZ2dsZU1lbnU9dGhpcy50b2dnbGVNZW51LmJpbmQodGhpcyksdGhpcy5maXJzdFRvdWNoPXRoaXMuZmlyc3RUb3VjaC5iaW5kKHRoaXMpfWhhbmRsZUtleShlKXtjb25zdHtwbGF5ZXI6dH09dGhpcyx7ZWxlbWVudHM6aX09dCx7a2V5OnMsdHlwZTpuLGFsdEtleTphLGN0cmxLZXk6bCxtZXRhS2V5OnIsc2hpZnRLZXk6b309ZSxjPVwia2V5ZG93blwiPT09bix1PWMmJnM9PT10aGlzLmxhc3RLZXk7aWYoYXx8bHx8cnx8bylyZXR1cm47aWYoIXMpcmV0dXJuO2lmKGMpe2NvbnN0IG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihTLmVsZW1lbnQobikpe2NvbnN0e2VkaXRhYmxlOnN9PXQuY29uZmlnLnNlbGVjdG9ycyx7c2VlazphfT1pLmlucHV0cztpZihuIT09YSYmVihuLHMpKXJldHVybjtpZihcIiBcIj09PWUua2V5JiZWKG4sJ2J1dHRvbiwgW3JvbGVePVwibWVudWl0ZW1cIl0nKSlyZXR1cm59c3dpdGNoKFtcIiBcIixcIkFycm93TGVmdFwiLFwiQXJyb3dVcFwiLFwiQXJyb3dSaWdodFwiLFwiQXJyb3dEb3duXCIsXCIwXCIsXCIxXCIsXCIyXCIsXCIzXCIsXCI0XCIsXCI1XCIsXCI2XCIsXCI3XCIsXCI4XCIsXCI5XCIsXCJjXCIsXCJmXCIsXCJrXCIsXCJsXCIsXCJtXCJdLmluY2x1ZGVzKHMpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpLHMpe2Nhc2VcIjBcIjpjYXNlXCIxXCI6Y2FzZVwiMlwiOmNhc2VcIjNcIjpjYXNlXCI0XCI6Y2FzZVwiNVwiOmNhc2VcIjZcIjpjYXNlXCI3XCI6Y2FzZVwiOFwiOmNhc2VcIjlcIjp1fHwoaD1wYXJzZUludChzLDEwKSx0LmN1cnJlbnRUaW1lPXQuZHVyYXRpb24vMTAqaCk7YnJlYWs7Y2FzZVwiIFwiOmNhc2VcImtcIjp1fHxpZSh0LnRvZ2dsZVBsYXkoKSk7YnJlYWs7Y2FzZVwiQXJyb3dVcFwiOnQuaW5jcmVhc2VWb2x1bWUoLjEpO2JyZWFrO2Nhc2VcIkFycm93RG93blwiOnQuZGVjcmVhc2VWb2x1bWUoLjEpO2JyZWFrO2Nhc2VcIm1cIjp1fHwodC5tdXRlZD0hdC5tdXRlZCk7YnJlYWs7Y2FzZVwiQXJyb3dSaWdodFwiOnQuZm9yd2FyZCgpO2JyZWFrO2Nhc2VcIkFycm93TGVmdFwiOnQucmV3aW5kKCk7YnJlYWs7Y2FzZVwiZlwiOnQuZnVsbHNjcmVlbi50b2dnbGUoKTticmVhaztjYXNlXCJjXCI6dXx8dC50b2dnbGVDYXB0aW9ucygpO2JyZWFrO2Nhc2VcImxcIjp0Lmxvb3A9IXQubG9vcH1cIkVzY2FwZVwiPT09cyYmIXQuZnVsbHNjcmVlbi51c2luZ05hdGl2ZSYmdC5mdWxsc2NyZWVuLmFjdGl2ZSYmdC5mdWxsc2NyZWVuLnRvZ2dsZSgpLHRoaXMubGFzdEtleT1zfWVsc2UgdGhpcy5sYXN0S2V5PW51bGw7dmFyIGh9dG9nZ2xlTWVudShlKXtQZS50b2dnbGVNZW51LmNhbGwodGhpcy5wbGF5ZXIsZSl9fVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGY7dmFyIFVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUodD17ZXhwb3J0czp7fX0sdC5leHBvcnRzKSx0LmV4cG9ydHN9KChmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7fSx0PXt9LGk9e30scz17fTtmdW5jdGlvbiBuKGUsdCl7ZT1lLnB1c2g/ZTpbZV07dmFyIG4sYSxsLHI9W10sbz1lLmxlbmd0aCxjPW87Zm9yKG49ZnVuY3Rpb24oZSxpKXtpLmxlbmd0aCYmci5wdXNoKGUpLC0tY3x8dChyKX07by0tOylhPWVbb10sKGw9aVthXSk/bihhLGwpOihzW2FdPXNbYV18fFtdKS5wdXNoKG4pfWZ1bmN0aW9uIGEoZSx0KXtpZihlKXt2YXIgbj1zW2VdO2lmKGlbZV09dCxuKWZvcig7bi5sZW5ndGg7KW5bMF0oZSx0KSxuLnNwbGljZSgwLDEpfX1mdW5jdGlvbiBsKHQsaSl7dC5jYWxsJiYodD17c3VjY2Vzczp0fSksaS5sZW5ndGg/KHQuZXJyb3J8fGUpKGkpOih0LnN1Y2Nlc3N8fGUpKHQpfWZ1bmN0aW9uIHIodCxpLHMsbil7dmFyIGEsbCxvPWRvY3VtZW50LGM9cy5hc3luYyx1PShzLm51bVJldHJpZXN8fDApKzEsaD1zLmJlZm9yZXx8ZSxkPXQucmVwbGFjZSgvW1xcP3wjXS4qJC8sXCJcIiksbT10LnJlcGxhY2UoL14oY3NzfGltZykhLyxcIlwiKTtuPW58fDAsLyheY3NzIXxcXC5jc3MkKS8udGVzdChkKT8oKGw9by5jcmVhdGVFbGVtZW50KFwibGlua1wiKSkucmVsPVwic3R5bGVzaGVldFwiLGwuaHJlZj1tLChhPVwiaGlkZUZvY3VzXCJpbiBsKSYmbC5yZWxMaXN0JiYoYT0wLGwucmVsPVwicHJlbG9hZFwiLGwuYXM9XCJzdHlsZVwiKSk6LyheaW1nIXxcXC4ocG5nfGdpZnxqcGd8c3ZnfHdlYnApJCkvLnRlc3QoZCk/KGw9by5jcmVhdGVFbGVtZW50KFwiaW1nXCIpKS5zcmM9bTooKGw9by5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKS5zcmM9dCxsLmFzeW5jPXZvaWQgMD09PWN8fGMpLGwub25sb2FkPWwub25lcnJvcj1sLm9uYmVmb3JlbG9hZD1mdW5jdGlvbihlKXt2YXIgbz1lLnR5cGVbMF07aWYoYSl0cnl7bC5zaGVldC5jc3NUZXh0Lmxlbmd0aHx8KG89XCJlXCIpfWNhdGNoKGUpezE4IT1lLmNvZGUmJihvPVwiZVwiKX1pZihcImVcIj09byl7aWYoKG4rPTEpPHUpcmV0dXJuIHIodCxpLHMsbil9ZWxzZSBpZihcInByZWxvYWRcIj09bC5yZWwmJlwic3R5bGVcIj09bC5hcylyZXR1cm4gbC5yZWw9XCJzdHlsZXNoZWV0XCI7aSh0LG8sZS5kZWZhdWx0UHJldmVudGVkKX0sITEhPT1oKHQsbCkmJm8uaGVhZC5hcHBlbmRDaGlsZChsKX1mdW5jdGlvbiBvKGUsdCxpKXt2YXIgcyxuLGE9KGU9ZS5wdXNoP2U6W2VdKS5sZW5ndGgsbD1hLG89W107Zm9yKHM9ZnVuY3Rpb24oZSxpLHMpe2lmKFwiZVwiPT1pJiZvLnB1c2goZSksXCJiXCI9PWkpe2lmKCFzKXJldHVybjtvLnB1c2goZSl9LS1hfHx0KG8pfSxuPTA7bjxsO24rKylyKGVbbl0scyxpKX1mdW5jdGlvbiBjKGUsaSxzKXt2YXIgbixyO2lmKGkmJmkudHJpbSYmKG49aSkscj0obj9zOmkpfHx7fSxuKXtpZihuIGluIHQpdGhyb3dcIkxvYWRKU1wiO3Rbbl09ITB9ZnVuY3Rpb24gYyh0LGkpe28oZSwoZnVuY3Rpb24oZSl7bChyLGUpLHQmJmwoe3N1Y2Nlc3M6dCxlcnJvcjppfSxlKSxhKG4sZSl9KSxyKX1pZihyLnJldHVyblByb21pc2UpcmV0dXJuIG5ldyBQcm9taXNlKGMpO2MoKX1yZXR1cm4gYy5yZWFkeT1mdW5jdGlvbihlLHQpe3JldHVybiBuKGUsKGZ1bmN0aW9uKGUpe2wodCxlKX0pKSxjfSxjLmRvbmU9ZnVuY3Rpb24oZSl7YShlLFtdKX0sYy5yZXNldD1mdW5jdGlvbigpe3Q9e30saT17fSxzPXt9fSxjLmlzRGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0fSxjfSgpfSkpO2Z1bmN0aW9uIEJlKGUpe3JldHVybiBuZXcgUHJvbWlzZSgoKHQsaSk9PntVZShlLHtzdWNjZXNzOnQsZXJyb3I6aX0pfSkpfWZ1bmN0aW9uIFdlKGUpe2UmJiF0aGlzLmVtYmVkLmhhc1BsYXllZCYmKHRoaXMuZW1iZWQuaGFzUGxheWVkPSEwKSx0aGlzLm1lZGlhLnBhdXNlZD09PWUmJih0aGlzLm1lZGlhLnBhdXNlZD0hZSxaLmNhbGwodGhpcyx0aGlzLm1lZGlhLGU/XCJwbGF5XCI6XCJwYXVzZVwiKSl9Y29uc3QgemU9e3NldHVwKCl7Y29uc3QgZT10aGlzO1IoZS5lbGVtZW50cy53cmFwcGVyLGUuY29uZmlnLmNsYXNzTmFtZXMuZW1iZWQsITApLGUub3B0aW9ucy5zcGVlZD1lLmNvbmZpZy5zcGVlZC5vcHRpb25zLHVlLmNhbGwoZSksUy5vYmplY3Qod2luZG93LlZpbWVvKT96ZS5yZWFkeS5jYWxsKGUpOkJlKGUuY29uZmlnLnVybHMudmltZW8uc2RrKS50aGVuKCgoKT0+e3plLnJlYWR5LmNhbGwoZSl9KSkuY2F0Y2goKHQ9PntlLmRlYnVnLndhcm4oXCJWaW1lbyBTREsgKHBsYXllci5qcykgZmFpbGVkIHRvIGxvYWRcIix0KX0pKX0scmVhZHkoKXtjb25zdCBlPXRoaXMsdD1lLmNvbmZpZy52aW1lbyx7cHJlbWl1bTppLHJlZmVycmVyUG9saWN5OnMsLi4ubn09dDtsZXQgYT1lLm1lZGlhLmdldEF0dHJpYnV0ZShcInNyY1wiKSxsPVwiXCI7Uy5lbXB0eShhKT8oYT1lLm1lZGlhLmdldEF0dHJpYnV0ZShlLmNvbmZpZy5hdHRyaWJ1dGVzLmVtYmVkLmlkKSxsPWUubWVkaWEuZ2V0QXR0cmlidXRlKGUuY29uZmlnLmF0dHJpYnV0ZXMuZW1iZWQuaGFzaCkpOmw9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLm1hdGNoKC9eLioodmltZW8uY29tXFwvfHZpZGVvXFwvKShcXGQrKShcXD8uKiYqaD18XFwvKSsoW1xcZCxhLWZdKykvKTtyZXR1cm4gdCYmNT09PXQubGVuZ3RoP3RbNF06bnVsbH0oYSk7Y29uc3Qgcj1sP3toOmx9Ont9O2kmJk9iamVjdC5hc3NpZ24obix7Y29udHJvbHM6ITEsc2lkZWRvY2s6ITF9KTtjb25zdCBvPU5lKHtsb29wOmUuY29uZmlnLmxvb3AuYWN0aXZlLGF1dG9wbGF5OmUuYXV0b3BsYXksbXV0ZWQ6ZS5tdXRlZCxnZXN0dXJlOlwibWVkaWFcIixwbGF5c2lubGluZTplLmNvbmZpZy5wbGF5c2lubGluZSwuLi5yLC4uLm59KSxjPSh1PWEsUy5lbXB0eSh1KT9udWxsOlMubnVtYmVyKE51bWJlcih1KSk/dTp1Lm1hdGNoKC9eLioodmltZW8uY29tXFwvfHZpZGVvXFwvKShcXGQrKS4qLyk/UmVnRXhwLiQyOnUpO3ZhciB1O2NvbnN0IGg9JChcImlmcmFtZVwiKSxkPW1lKGUuY29uZmlnLnVybHMudmltZW8uaWZyYW1lLGMsbyk7aWYoaC5zZXRBdHRyaWJ1dGUoXCJzcmNcIixkKSxoLnNldEF0dHJpYnV0ZShcImFsbG93ZnVsbHNjcmVlblwiLFwiXCIpLGguc2V0QXR0cmlidXRlKFwiYWxsb3dcIixbXCJhdXRvcGxheVwiLFwiZnVsbHNjcmVlblwiLFwicGljdHVyZS1pbi1waWN0dXJlXCIsXCJlbmNyeXB0ZWQtbWVkaWFcIixcImFjY2VsZXJvbWV0ZXJcIixcImd5cm9zY29wZVwiXS5qb2luKFwiOyBcIikpLFMuZW1wdHkocyl8fGguc2V0QXR0cmlidXRlKFwicmVmZXJyZXJQb2xpY3lcIixzKSxpfHwhdC5jdXN0b21Db250cm9scyloLnNldEF0dHJpYnV0ZShcImRhdGEtcG9zdGVyXCIsZS5wb3N0ZXIpLGUubWVkaWE9cShoLGUubWVkaWEpO2Vsc2V7Y29uc3QgdD0kKFwiZGl2XCIse2NsYXNzOmUuY29uZmlnLmNsYXNzTmFtZXMuZW1iZWRDb250YWluZXIsXCJkYXRhLXBvc3RlclwiOmUucG9zdGVyfSk7dC5hcHBlbmRDaGlsZChoKSxlLm1lZGlhPXEodCxlLm1lZGlhKX10LmN1c3RvbUNvbnRyb2xzfHxUZShtZShlLmNvbmZpZy51cmxzLnZpbWVvLmFwaSxkKSkudGhlbigodD0+eyFTLmVtcHR5KHQpJiZ0LnRodW1ibmFpbF91cmwmJkZlLnNldFBvc3Rlci5jYWxsKGUsdC50aHVtYm5haWxfdXJsKS5jYXRjaCgoKCk9Pnt9KSl9KSksZS5lbWJlZD1uZXcgd2luZG93LlZpbWVvLlBsYXllcihoLHthdXRvcGF1c2U6ZS5jb25maWcuYXV0b3BhdXNlLG11dGVkOmUubXV0ZWR9KSxlLm1lZGlhLnBhdXNlZD0hMCxlLm1lZGlhLmN1cnJlbnRUaW1lPTAsZS5zdXBwb3J0ZWQudWkmJmUuZW1iZWQuZGlzYWJsZVRleHRUcmFjaygpLGUubWVkaWEucGxheT0oKT0+KFdlLmNhbGwoZSwhMCksZS5lbWJlZC5wbGF5KCkpLGUubWVkaWEucGF1c2U9KCk9PihXZS5jYWxsKGUsITEpLGUuZW1iZWQucGF1c2UoKSksZS5tZWRpYS5zdG9wPSgpPT57ZS5wYXVzZSgpLGUuY3VycmVudFRpbWU9MH07bGV0e2N1cnJlbnRUaW1lOm19PWUubWVkaWE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJjdXJyZW50VGltZVwiLHtnZXQ6KCk9Pm0sc2V0KHQpe2NvbnN0e2VtYmVkOmksbWVkaWE6cyxwYXVzZWQ6bix2b2x1bWU6YX09ZSxsPW4mJiFpLmhhc1BsYXllZDtzLnNlZWtpbmc9ITAsWi5jYWxsKGUscyxcInNlZWtpbmdcIiksUHJvbWlzZS5yZXNvbHZlKGwmJmkuc2V0Vm9sdW1lKDApKS50aGVuKCgoKT0+aS5zZXRDdXJyZW50VGltZSh0KSkpLnRoZW4oKCgpPT5sJiZpLnBhdXNlKCkpKS50aGVuKCgoKT0+bCYmaS5zZXRWb2x1bWUoYSkpKS5jYXRjaCgoKCk9Pnt9KSl9fSk7bGV0IHA9ZS5jb25maWcuc3BlZWQuc2VsZWN0ZWQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJwbGF5YmFja1JhdGVcIix7Z2V0OigpPT5wLHNldCh0KXtlLmVtYmVkLnNldFBsYXliYWNrUmF0ZSh0KS50aGVuKCgoKT0+e3A9dCxaLmNhbGwoZSxlLm1lZGlhLFwicmF0ZWNoYW5nZVwiKX0pKS5jYXRjaCgoKCk9PntlLm9wdGlvbnMuc3BlZWQ9WzFdfSkpfX0pO2xldHt2b2x1bWU6Z309ZS5jb25maWc7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJ2b2x1bWVcIix7Z2V0OigpPT5nLHNldCh0KXtlLmVtYmVkLnNldFZvbHVtZSh0KS50aGVuKCgoKT0+e2c9dCxaLmNhbGwoZSxlLm1lZGlhLFwidm9sdW1lY2hhbmdlXCIpfSkpfX0pO2xldHttdXRlZDpmfT1lLmNvbmZpZztPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5tZWRpYSxcIm11dGVkXCIse2dldDooKT0+ZixzZXQodCl7Y29uc3QgaT0hIVMuYm9vbGVhbih0KSYmdDtlLmVtYmVkLnNldE11dGVkKCEhaXx8ZS5jb25maWcubXV0ZWQpLnRoZW4oKCgpPT57Zj1pLFouY2FsbChlLGUubWVkaWEsXCJ2b2x1bWVjaGFuZ2VcIil9KSl9fSk7bGV0IHkse2xvb3A6Yn09ZS5jb25maWc7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJsb29wXCIse2dldDooKT0+YixzZXQodCl7Y29uc3QgaT1TLmJvb2xlYW4odCk/dDplLmNvbmZpZy5sb29wLmFjdGl2ZTtlLmVtYmVkLnNldExvb3AoaSkudGhlbigoKCk9PntiPWl9KSl9fSksZS5lbWJlZC5nZXRWaWRlb1VybCgpLnRoZW4oKHQ9Pnt5PXQsUGUuc2V0RG93bmxvYWRVcmwuY2FsbChlKX0pKS5jYXRjaCgoZT0+e3RoaXMuZGVidWcud2FybihlKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5tZWRpYSxcImN1cnJlbnRTcmNcIix7Z2V0OigpPT55fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJlbmRlZFwiLHtnZXQ6KCk9PmUuY3VycmVudFRpbWU9PT1lLmR1cmF0aW9ufSksUHJvbWlzZS5hbGwoW2UuZW1iZWQuZ2V0VmlkZW9XaWR0aCgpLGUuZW1iZWQuZ2V0VmlkZW9IZWlnaHQoKV0pLnRoZW4oKHQ9Pntjb25zdFtpLHNdPXQ7ZS5lbWJlZC5yYXRpbz1oZShpLHMpLHVlLmNhbGwodGhpcyl9KSksZS5lbWJlZC5zZXRBdXRvcGF1c2UoZS5jb25maWcuYXV0b3BhdXNlKS50aGVuKCh0PT57ZS5jb25maWcuYXV0b3BhdXNlPXR9KSksZS5lbWJlZC5nZXRWaWRlb1RpdGxlKCkudGhlbigodD0+e2UuY29uZmlnLnRpdGxlPXQsRmUuc2V0VGl0bGUuY2FsbCh0aGlzKX0pKSxlLmVtYmVkLmdldEN1cnJlbnRUaW1lKCkudGhlbigodD0+e209dCxaLmNhbGwoZSxlLm1lZGlhLFwidGltZXVwZGF0ZVwiKX0pKSxlLmVtYmVkLmdldER1cmF0aW9uKCkudGhlbigodD0+e2UubWVkaWEuZHVyYXRpb249dCxaLmNhbGwoZSxlLm1lZGlhLFwiZHVyYXRpb25jaGFuZ2VcIil9KSksZS5lbWJlZC5nZXRUZXh0VHJhY2tzKCkudGhlbigodD0+e2UubWVkaWEudGV4dFRyYWNrcz10LHhlLnNldHVwLmNhbGwoZSl9KSksZS5lbWJlZC5vbihcImN1ZWNoYW5nZVwiLCgoe2N1ZXM6dD1bXX0pPT57Y29uc3QgaT10Lm1hcCgoZT0+ZnVuY3Rpb24oZSl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiB0LmFwcGVuZENoaWxkKGkpLGkuaW5uZXJIVE1MPWUsdC5maXJzdENoaWxkLmlubmVyVGV4dH0oZS50ZXh0KSkpO3hlLnVwZGF0ZUN1ZXMuY2FsbChlLGkpfSkpLGUuZW1iZWQub24oXCJsb2FkZWRcIiwoKCk9PntpZihlLmVtYmVkLmdldFBhdXNlZCgpLnRoZW4oKHQ9PntXZS5jYWxsKGUsIXQpLHR8fFouY2FsbChlLGUubWVkaWEsXCJwbGF5aW5nXCIpfSkpLFMuZWxlbWVudChlLmVtYmVkLmVsZW1lbnQpJiZlLnN1cHBvcnRlZC51aSl7ZS5lbWJlZC5lbGVtZW50LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsLTEpfX0pKSxlLmVtYmVkLm9uKFwiYnVmZmVyc3RhcnRcIiwoKCk9PntaLmNhbGwoZSxlLm1lZGlhLFwid2FpdGluZ1wiKX0pKSxlLmVtYmVkLm9uKFwiYnVmZmVyZW5kXCIsKCgpPT57Wi5jYWxsKGUsZS5tZWRpYSxcInBsYXlpbmdcIil9KSksZS5lbWJlZC5vbihcInBsYXlcIiwoKCk9PntXZS5jYWxsKGUsITApLFouY2FsbChlLGUubWVkaWEsXCJwbGF5aW5nXCIpfSkpLGUuZW1iZWQub24oXCJwYXVzZVwiLCgoKT0+e1dlLmNhbGwoZSwhMSl9KSksZS5lbWJlZC5vbihcInRpbWV1cGRhdGVcIiwodD0+e2UubWVkaWEuc2Vla2luZz0hMSxtPXQuc2Vjb25kcyxaLmNhbGwoZSxlLm1lZGlhLFwidGltZXVwZGF0ZVwiKX0pKSxlLmVtYmVkLm9uKFwicHJvZ3Jlc3NcIiwodD0+e2UubWVkaWEuYnVmZmVyZWQ9dC5wZXJjZW50LFouY2FsbChlLGUubWVkaWEsXCJwcm9ncmVzc1wiKSwxPT09cGFyc2VJbnQodC5wZXJjZW50LDEwKSYmWi5jYWxsKGUsZS5tZWRpYSxcImNhbnBsYXl0aHJvdWdoXCIpLGUuZW1iZWQuZ2V0RHVyYXRpb24oKS50aGVuKCh0PT57dCE9PWUubWVkaWEuZHVyYXRpb24mJihlLm1lZGlhLmR1cmF0aW9uPXQsWi5jYWxsKGUsZS5tZWRpYSxcImR1cmF0aW9uY2hhbmdlXCIpKX0pKX0pKSxlLmVtYmVkLm9uKFwic2Vla2VkXCIsKCgpPT57ZS5tZWRpYS5zZWVraW5nPSExLFouY2FsbChlLGUubWVkaWEsXCJzZWVrZWRcIil9KSksZS5lbWJlZC5vbihcImVuZGVkXCIsKCgpPT57ZS5tZWRpYS5wYXVzZWQ9ITAsWi5jYWxsKGUsZS5tZWRpYSxcImVuZGVkXCIpfSkpLGUuZW1iZWQub24oXCJlcnJvclwiLCh0PT57ZS5tZWRpYS5lcnJvcj10LFouY2FsbChlLGUubWVkaWEsXCJlcnJvclwiKX0pKSx0LmN1c3RvbUNvbnRyb2xzJiZzZXRUaW1lb3V0KCgoKT0+RmUuYnVpbGQuY2FsbChlKSksMCl9fTtmdW5jdGlvbiBLZShlKXtlJiYhdGhpcy5lbWJlZC5oYXNQbGF5ZWQmJih0aGlzLmVtYmVkLmhhc1BsYXllZD0hMCksdGhpcy5tZWRpYS5wYXVzZWQ9PT1lJiYodGhpcy5tZWRpYS5wYXVzZWQ9IWUsWi5jYWxsKHRoaXMsdGhpcy5tZWRpYSxlP1wicGxheVwiOlwicGF1c2VcIikpfWZ1bmN0aW9uIFllKGUpe3JldHVybiBlLm5vQ29va2llP1wiaHR0cHM6Ly93d3cueW91dHViZS1ub2Nvb2tpZS5jb21cIjpcImh0dHA6XCI9PT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2w/XCJodHRwOi8vd3d3LnlvdXR1YmUuY29tXCI6dm9pZCAwfWNvbnN0IFFlPXtzZXR1cCgpe2lmKFIodGhpcy5lbGVtZW50cy53cmFwcGVyLHRoaXMuY29uZmlnLmNsYXNzTmFtZXMuZW1iZWQsITApLFMub2JqZWN0KHdpbmRvdy5ZVCkmJlMuZnVuY3Rpb24od2luZG93LllULlBsYXllcikpUWUucmVhZHkuY2FsbCh0aGlzKTtlbHNle2NvbnN0IGU9d2luZG93Lm9uWW91VHViZUlmcmFtZUFQSVJlYWR5O3dpbmRvdy5vbllvdVR1YmVJZnJhbWVBUElSZWFkeT0oKT0+e1MuZnVuY3Rpb24oZSkmJmUoKSxRZS5yZWFkeS5jYWxsKHRoaXMpfSxCZSh0aGlzLmNvbmZpZy51cmxzLnlvdXR1YmUuc2RrKS5jYXRjaCgoZT0+e3RoaXMuZGVidWcud2FybihcIllvdVR1YmUgQVBJIGZhaWxlZCB0byBsb2FkXCIsZSl9KSl9fSxnZXRUaXRsZShlKXtUZShtZSh0aGlzLmNvbmZpZy51cmxzLnlvdXR1YmUuYXBpLGUpKS50aGVuKChlPT57aWYoUy5vYmplY3QoZSkpe2NvbnN0e3RpdGxlOnQsaGVpZ2h0Omksd2lkdGg6c309ZTt0aGlzLmNvbmZpZy50aXRsZT10LEZlLnNldFRpdGxlLmNhbGwodGhpcyksdGhpcy5lbWJlZC5yYXRpbz1oZShzLGkpfXVlLmNhbGwodGhpcyl9KSkuY2F0Y2goKCgpPT57dWUuY2FsbCh0aGlzKX0pKX0scmVhZHkoKXtjb25zdCBlPXRoaXMsdD1lLmNvbmZpZy55b3V0dWJlLGk9ZS5tZWRpYSYmZS5tZWRpYS5nZXRBdHRyaWJ1dGUoXCJpZFwiKTtpZighUy5lbXB0eShpKSYmaS5zdGFydHNXaXRoKFwieW91dHViZS1cIikpcmV0dXJuO2xldCBzPWUubWVkaWEuZ2V0QXR0cmlidXRlKFwic3JjXCIpO1MuZW1wdHkocykmJihzPWUubWVkaWEuZ2V0QXR0cmlidXRlKHRoaXMuY29uZmlnLmF0dHJpYnV0ZXMuZW1iZWQuaWQpKTtjb25zdCBuPShhPXMsUy5lbXB0eShhKT9udWxsOmEubWF0Y2goL14uKih5b3V0dS5iZVxcL3x2XFwvfHVcXC9cXHdcXC98ZW1iZWRcXC98d2F0Y2hcXD92PXwmdj0pKFteIyY/XSopLiovKT9SZWdFeHAuJDI6YSk7dmFyIGE7Y29uc3QgbD0kKFwiZGl2XCIse2lkOmAke2UucHJvdmlkZXJ9LSR7TWF0aC5mbG9vcigxZTQqTWF0aC5yYW5kb20oKSl9YCxcImRhdGEtcG9zdGVyXCI6dC5jdXN0b21Db250cm9scz9lLnBvc3Rlcjp2b2lkIDB9KTtpZihlLm1lZGlhPXEobCxlLm1lZGlhKSx0LmN1c3RvbUNvbnRyb2xzKXtjb25zdCB0PWU9PmBodHRwczovL2kueXRpbWcuY29tL3ZpLyR7bn0vJHtlfWRlZmF1bHQuanBnYDtSZSh0KFwibWF4cmVzXCIpLDEyMSkuY2F0Y2goKCgpPT5SZSh0KFwic2RcIiksMTIxKSkpLmNhdGNoKCgoKT0+UmUodChcImhxXCIpKSkpLnRoZW4oKHQ9PkZlLnNldFBvc3Rlci5jYWxsKGUsdC5zcmMpKSkudGhlbigodD0+e3QuaW5jbHVkZXMoXCJtYXhyZXNcIil8fChlLmVsZW1lbnRzLnBvc3Rlci5zdHlsZS5iYWNrZ3JvdW5kU2l6ZT1cImNvdmVyXCIpfSkpLmNhdGNoKCgoKT0+e30pKX1lLmVtYmVkPW5ldyB3aW5kb3cuWVQuUGxheWVyKGUubWVkaWEse3ZpZGVvSWQ6bixob3N0OlllKHQpLHBsYXllclZhcnM6eCh7fSx7YXV0b3BsYXk6ZS5jb25maWcuYXV0b3BsYXk/MTowLGhsOmUuY29uZmlnLmhsLGNvbnRyb2xzOmUuc3VwcG9ydGVkLnVpJiZ0LmN1c3RvbUNvbnRyb2xzPzA6MSxkaXNhYmxla2I6MSxwbGF5c2lubGluZTplLmNvbmZpZy5wbGF5c2lubGluZSYmIWUuY29uZmlnLmZ1bGxzY3JlZW4uaW9zTmF0aXZlPzE6MCxjY19sb2FkX3BvbGljeTplLmNhcHRpb25zLmFjdGl2ZT8xOjAsY2NfbGFuZ19wcmVmOmUuY29uZmlnLmNhcHRpb25zLmxhbmd1YWdlLHdpZGdldF9yZWZlcnJlcjp3aW5kb3c/d2luZG93LmxvY2F0aW9uLmhyZWY6bnVsbH0sdCksZXZlbnRzOntvbkVycm9yKHQpe2lmKCFlLm1lZGlhLmVycm9yKXtjb25zdCBpPXQuZGF0YSxzPXsyOlwiVGhlIHJlcXVlc3QgY29udGFpbnMgYW4gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUuIEZvciBleGFtcGxlLCB0aGlzIGVycm9yIG9jY3VycyBpZiB5b3Ugc3BlY2lmeSBhIHZpZGVvIElEIHRoYXQgZG9lcyBub3QgaGF2ZSAxMSBjaGFyYWN0ZXJzLCBvciBpZiB0aGUgdmlkZW8gSUQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLCBzdWNoIGFzIGV4Y2xhbWF0aW9uIHBvaW50cyBvciBhc3Rlcmlza3MuXCIsNTpcIlRoZSByZXF1ZXN0ZWQgY29udGVudCBjYW5ub3QgYmUgcGxheWVkIGluIGFuIEhUTUw1IHBsYXllciBvciBhbm90aGVyIGVycm9yIHJlbGF0ZWQgdG8gdGhlIEhUTUw1IHBsYXllciBoYXMgb2NjdXJyZWQuXCIsMTAwOlwiVGhlIHZpZGVvIHJlcXVlc3RlZCB3YXMgbm90IGZvdW5kLiBUaGlzIGVycm9yIG9jY3VycyB3aGVuIGEgdmlkZW8gaGFzIGJlZW4gcmVtb3ZlZCAoZm9yIGFueSByZWFzb24pIG9yIGhhcyBiZWVuIG1hcmtlZCBhcyBwcml2YXRlLlwiLDEwMTpcIlRoZSBvd25lciBvZiB0aGUgcmVxdWVzdGVkIHZpZGVvIGRvZXMgbm90IGFsbG93IGl0IHRvIGJlIHBsYXllZCBpbiBlbWJlZGRlZCBwbGF5ZXJzLlwiLDE1MDpcIlRoZSBvd25lciBvZiB0aGUgcmVxdWVzdGVkIHZpZGVvIGRvZXMgbm90IGFsbG93IGl0IHRvIGJlIHBsYXllZCBpbiBlbWJlZGRlZCBwbGF5ZXJzLlwifVtpXXx8XCJBbiB1bmtub3duIGVycm9yIG9jY3VycmVkXCI7ZS5tZWRpYS5lcnJvcj17Y29kZTppLG1lc3NhZ2U6c30sWi5jYWxsKGUsZS5tZWRpYSxcImVycm9yXCIpfX0sb25QbGF5YmFja1JhdGVDaGFuZ2UodCl7Y29uc3QgaT10LnRhcmdldDtlLm1lZGlhLnBsYXliYWNrUmF0ZT1pLmdldFBsYXliYWNrUmF0ZSgpLFouY2FsbChlLGUubWVkaWEsXCJyYXRlY2hhbmdlXCIpfSxvblJlYWR5KGkpe2lmKFMuZnVuY3Rpb24oZS5tZWRpYS5wbGF5KSlyZXR1cm47Y29uc3Qgcz1pLnRhcmdldDtRZS5nZXRUaXRsZS5jYWxsKGUsbiksZS5tZWRpYS5wbGF5PSgpPT57S2UuY2FsbChlLCEwKSxzLnBsYXlWaWRlbygpfSxlLm1lZGlhLnBhdXNlPSgpPT57S2UuY2FsbChlLCExKSxzLnBhdXNlVmlkZW8oKX0sZS5tZWRpYS5zdG9wPSgpPT57cy5zdG9wVmlkZW8oKX0sZS5tZWRpYS5kdXJhdGlvbj1zLmdldER1cmF0aW9uKCksZS5tZWRpYS5wYXVzZWQ9ITAsZS5tZWRpYS5jdXJyZW50VGltZT0wLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLm1lZGlhLFwiY3VycmVudFRpbWVcIix7Z2V0OigpPT5OdW1iZXIocy5nZXRDdXJyZW50VGltZSgpKSxzZXQodCl7ZS5wYXVzZWQmJiFlLmVtYmVkLmhhc1BsYXllZCYmZS5lbWJlZC5tdXRlKCksZS5tZWRpYS5zZWVraW5nPSEwLFouY2FsbChlLGUubWVkaWEsXCJzZWVraW5nXCIpLHMuc2Vla1RvKHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLm1lZGlhLFwicGxheWJhY2tSYXRlXCIse2dldDooKT0+cy5nZXRQbGF5YmFja1JhdGUoKSxzZXQoZSl7cy5zZXRQbGF5YmFja1JhdGUoZSl9fSk7bGV0e3ZvbHVtZTphfT1lLmNvbmZpZztPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5tZWRpYSxcInZvbHVtZVwiLHtnZXQ6KCk9PmEsc2V0KHQpe2E9dCxzLnNldFZvbHVtZSgxMDAqYSksWi5jYWxsKGUsZS5tZWRpYSxcInZvbHVtZWNoYW5nZVwiKX19KTtsZXR7bXV0ZWQ6bH09ZS5jb25maWc7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJtdXRlZFwiLHtnZXQ6KCk9Pmwsc2V0KHQpe2NvbnN0IGk9Uy5ib29sZWFuKHQpP3Q6bDtsPWksc1tpP1wibXV0ZVwiOlwidW5NdXRlXCJdKCkscy5zZXRWb2x1bWUoMTAwKmEpLFouY2FsbChlLGUubWVkaWEsXCJ2b2x1bWVjaGFuZ2VcIil9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJjdXJyZW50U3JjXCIse2dldDooKT0+cy5nZXRWaWRlb1VybCgpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUubWVkaWEsXCJlbmRlZFwiLHtnZXQ6KCk9PmUuY3VycmVudFRpbWU9PT1lLmR1cmF0aW9ufSk7Y29uc3Qgcj1zLmdldEF2YWlsYWJsZVBsYXliYWNrUmF0ZXMoKTtlLm9wdGlvbnMuc3BlZWQ9ci5maWx0ZXIoKHQ9PmUuY29uZmlnLnNwZWVkLm9wdGlvbnMuaW5jbHVkZXModCkpKSxlLnN1cHBvcnRlZC51aSYmdC5jdXN0b21Db250cm9scyYmZS5tZWRpYS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLC0xKSxaLmNhbGwoZSxlLm1lZGlhLFwidGltZXVwZGF0ZVwiKSxaLmNhbGwoZSxlLm1lZGlhLFwiZHVyYXRpb25jaGFuZ2VcIiksY2xlYXJJbnRlcnZhbChlLnRpbWVycy5idWZmZXJpbmcpLGUudGltZXJzLmJ1ZmZlcmluZz1zZXRJbnRlcnZhbCgoKCk9PntlLm1lZGlhLmJ1ZmZlcmVkPXMuZ2V0VmlkZW9Mb2FkZWRGcmFjdGlvbigpLChudWxsPT09ZS5tZWRpYS5sYXN0QnVmZmVyZWR8fGUubWVkaWEubGFzdEJ1ZmZlcmVkPGUubWVkaWEuYnVmZmVyZWQpJiZaLmNhbGwoZSxlLm1lZGlhLFwicHJvZ3Jlc3NcIiksZS5tZWRpYS5sYXN0QnVmZmVyZWQ9ZS5tZWRpYS5idWZmZXJlZCwxPT09ZS5tZWRpYS5idWZmZXJlZCYmKGNsZWFySW50ZXJ2YWwoZS50aW1lcnMuYnVmZmVyaW5nKSxaLmNhbGwoZSxlLm1lZGlhLFwiY2FucGxheXRocm91Z2hcIikpfSksMjAwKSx0LmN1c3RvbUNvbnRyb2xzJiZzZXRUaW1lb3V0KCgoKT0+RmUuYnVpbGQuY2FsbChlKSksNTApfSxvblN0YXRlQ2hhbmdlKGkpe2NvbnN0IHM9aS50YXJnZXQ7Y2xlYXJJbnRlcnZhbChlLnRpbWVycy5wbGF5aW5nKTtzd2l0Y2goZS5tZWRpYS5zZWVraW5nJiZbMSwyXS5pbmNsdWRlcyhpLmRhdGEpJiYoZS5tZWRpYS5zZWVraW5nPSExLFouY2FsbChlLGUubWVkaWEsXCJzZWVrZWRcIikpLGkuZGF0YSl7Y2FzZS0xOlouY2FsbChlLGUubWVkaWEsXCJ0aW1ldXBkYXRlXCIpLGUubWVkaWEuYnVmZmVyZWQ9cy5nZXRWaWRlb0xvYWRlZEZyYWN0aW9uKCksWi5jYWxsKGUsZS5tZWRpYSxcInByb2dyZXNzXCIpO2JyZWFrO2Nhc2UgMDpLZS5jYWxsKGUsITEpLGUubWVkaWEubG9vcD8ocy5zdG9wVmlkZW8oKSxzLnBsYXlWaWRlbygpKTpaLmNhbGwoZSxlLm1lZGlhLFwiZW5kZWRcIik7YnJlYWs7Y2FzZSAxOnQuY3VzdG9tQ29udHJvbHMmJiFlLmNvbmZpZy5hdXRvcGxheSYmZS5tZWRpYS5wYXVzZWQmJiFlLmVtYmVkLmhhc1BsYXllZD9lLm1lZGlhLnBhdXNlKCk6KEtlLmNhbGwoZSwhMCksWi5jYWxsKGUsZS5tZWRpYSxcInBsYXlpbmdcIiksZS50aW1lcnMucGxheWluZz1zZXRJbnRlcnZhbCgoKCk9PntaLmNhbGwoZSxlLm1lZGlhLFwidGltZXVwZGF0ZVwiKX0pLDUwKSxlLm1lZGlhLmR1cmF0aW9uIT09cy5nZXREdXJhdGlvbigpJiYoZS5tZWRpYS5kdXJhdGlvbj1zLmdldER1cmF0aW9uKCksWi5jYWxsKGUsZS5tZWRpYSxcImR1cmF0aW9uY2hhbmdlXCIpKSk7YnJlYWs7Y2FzZSAyOmUubXV0ZWR8fGUuZW1iZWQudW5NdXRlKCksS2UuY2FsbChlLCExKTticmVhaztjYXNlIDM6Wi5jYWxsKGUsZS5tZWRpYSxcIndhaXRpbmdcIil9Wi5jYWxsKGUsZS5lbGVtZW50cy5jb250YWluZXIsXCJzdGF0ZWNoYW5nZVwiLCExLHtjb2RlOmkuZGF0YX0pfX19KX19LFhlPXtzZXR1cCgpe3RoaXMubWVkaWE/KFIodGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5jb25maWcuY2xhc3NOYW1lcy50eXBlLnJlcGxhY2UoXCJ7MH1cIix0aGlzLnR5cGUpLCEwKSxSKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLHRoaXMuY29uZmlnLmNsYXNzTmFtZXMucHJvdmlkZXIucmVwbGFjZShcInswfVwiLHRoaXMucHJvdmlkZXIpLCEwKSx0aGlzLmlzRW1iZWQmJlIodGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5jb25maWcuY2xhc3NOYW1lcy50eXBlLnJlcGxhY2UoXCJ7MH1cIixcInZpZGVvXCIpLCEwKSx0aGlzLmlzVmlkZW8mJih0aGlzLmVsZW1lbnRzLndyYXBwZXI9JChcImRpdlwiLHtjbGFzczp0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnZpZGVvfSksTCh0aGlzLm1lZGlhLHRoaXMuZWxlbWVudHMud3JhcHBlciksdGhpcy5lbGVtZW50cy5wb3N0ZXI9JChcImRpdlwiLHtjbGFzczp0aGlzLmNvbmZpZy5jbGFzc05hbWVzLnBvc3Rlcn0pLHRoaXMuZWxlbWVudHMud3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnRzLnBvc3RlcikpLHRoaXMuaXNIVE1MNT9kZS5zZXR1cC5jYWxsKHRoaXMpOnRoaXMuaXNZb3VUdWJlP1FlLnNldHVwLmNhbGwodGhpcyk6dGhpcy5pc1ZpbWVvJiZ6ZS5zZXR1cC5jYWxsKHRoaXMpKTp0aGlzLmRlYnVnLndhcm4oXCJObyBtZWRpYSBlbGVtZW50IGZvdW5kIVwiKX19O2NsYXNzIEple2NvbnN0cnVjdG9yKHQpe2UodGhpcyxcImxvYWRcIiwoKCk9Pnt0aGlzLmVuYWJsZWQmJihTLm9iamVjdCh3aW5kb3cuZ29vZ2xlKSYmUy5vYmplY3Qod2luZG93Lmdvb2dsZS5pbWEpP3RoaXMucmVhZHkoKTpCZSh0aGlzLnBsYXllci5jb25maWcudXJscy5nb29nbGVJTUEuc2RrKS50aGVuKCgoKT0+e3RoaXMucmVhZHkoKX0pKS5jYXRjaCgoKCk9Pnt0aGlzLnRyaWdnZXIoXCJlcnJvclwiLG5ldyBFcnJvcihcIkdvb2dsZSBJTUEgU0RLIGZhaWxlZCB0byBsb2FkXCIpKX0pKSl9KSksZSh0aGlzLFwicmVhZHlcIiwoKCk9Pnt2YXIgZTt0aGlzLmVuYWJsZWR8fCgoZT10aGlzKS5tYW5hZ2VyJiZlLm1hbmFnZXIuZGVzdHJveSgpLGUuZWxlbWVudHMuZGlzcGxheUNvbnRhaW5lciYmZS5lbGVtZW50cy5kaXNwbGF5Q29udGFpbmVyLmRlc3Ryb3koKSxlLmVsZW1lbnRzLmNvbnRhaW5lci5yZW1vdmUoKSksdGhpcy5zdGFydFNhZmV0eVRpbWVyKDEyZTMsXCJyZWFkeSgpXCIpLHRoaXMubWFuYWdlclByb21pc2UudGhlbigoKCk9Pnt0aGlzLmNsZWFyU2FmZXR5VGltZXIoXCJvbkFkc01hbmFnZXJMb2FkZWQoKVwiKX0pKSx0aGlzLmxpc3RlbmVycygpLHRoaXMuc2V0dXBJTUEoKX0pKSxlKHRoaXMsXCJzZXR1cElNQVwiLCgoKT0+e3RoaXMuZWxlbWVudHMuY29udGFpbmVyPSQoXCJkaXZcIix7Y2xhc3M6dGhpcy5wbGF5ZXIuY29uZmlnLmNsYXNzTmFtZXMuYWRzfSksdGhpcy5wbGF5ZXIuZWxlbWVudHMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudHMuY29udGFpbmVyKSxnb29nbGUuaW1hLnNldHRpbmdzLnNldFZwYWlkTW9kZShnb29nbGUuaW1hLkltYVNka1NldHRpbmdzLlZwYWlkTW9kZS5FTkFCTEVEKSxnb29nbGUuaW1hLnNldHRpbmdzLnNldExvY2FsZSh0aGlzLnBsYXllci5jb25maWcuYWRzLmxhbmd1YWdlKSxnb29nbGUuaW1hLnNldHRpbmdzLnNldERpc2FibGVDdXN0b21QbGF5YmFja0ZvcklPUzEwUGx1cyh0aGlzLnBsYXllci5jb25maWcucGxheXNpbmxpbmUpLHRoaXMuZWxlbWVudHMuZGlzcGxheUNvbnRhaW5lcj1uZXcgZ29vZ2xlLmltYS5BZERpc3BsYXlDb250YWluZXIodGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5wbGF5ZXIubWVkaWEpLHRoaXMubG9hZGVyPW5ldyBnb29nbGUuaW1hLkFkc0xvYWRlcih0aGlzLmVsZW1lbnRzLmRpc3BsYXlDb250YWluZXIpLHRoaXMubG9hZGVyLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZHNNYW5hZ2VyTG9hZGVkRXZlbnQuVHlwZS5BRFNfTUFOQUdFUl9MT0FERUQsKGU9PnRoaXMub25BZHNNYW5hZ2VyTG9hZGVkKGUpKSwhMSksdGhpcy5sb2FkZXIuYWRkRXZlbnRMaXN0ZW5lcihnb29nbGUuaW1hLkFkRXJyb3JFdmVudC5UeXBlLkFEX0VSUk9SLChlPT50aGlzLm9uQWRFcnJvcihlKSksITEpLHRoaXMucmVxdWVzdEFkcygpfSkpLGUodGhpcyxcInJlcXVlc3RBZHNcIiwoKCk9Pntjb25zdHtjb250YWluZXI6ZX09dGhpcy5wbGF5ZXIuZWxlbWVudHM7dHJ5e2NvbnN0IHQ9bmV3IGdvb2dsZS5pbWEuQWRzUmVxdWVzdDt0LmFkVGFnVXJsPXRoaXMudGFnVXJsLHQubGluZWFyQWRTbG90V2lkdGg9ZS5vZmZzZXRXaWR0aCx0LmxpbmVhckFkU2xvdEhlaWdodD1lLm9mZnNldEhlaWdodCx0Lm5vbkxpbmVhckFkU2xvdFdpZHRoPWUub2Zmc2V0V2lkdGgsdC5ub25MaW5lYXJBZFNsb3RIZWlnaHQ9ZS5vZmZzZXRIZWlnaHQsdC5mb3JjZU5vbkxpbmVhckZ1bGxTbG90PSExLHQuc2V0QWRXaWxsUGxheU11dGVkKCF0aGlzLnBsYXllci5tdXRlZCksdGhpcy5sb2FkZXIucmVxdWVzdEFkcyh0KX1jYXRjaChlKXt0aGlzLm9uQWRFcnJvcihlKX19KSksZSh0aGlzLFwicG9sbENvdW50ZG93blwiLCgoZT0hMSk9PntpZighZSlyZXR1cm4gY2xlYXJJbnRlcnZhbCh0aGlzLmNvdW50ZG93blRpbWVyKSx2b2lkIHRoaXMuZWxlbWVudHMuY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYmFkZ2UtdGV4dFwiKTt0aGlzLmNvdW50ZG93blRpbWVyPXNldEludGVydmFsKCgoKT0+e2NvbnN0IGU9RWUoTWF0aC5tYXgodGhpcy5tYW5hZ2VyLmdldFJlbWFpbmluZ1RpbWUoKSwwKSksdD1gJHt2ZS5nZXQoXCJhZHZlcnRpc2VtZW50XCIsdGhpcy5wbGF5ZXIuY29uZmlnKX0gLSAke2V9YDt0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWJhZGdlLXRleHRcIix0KX0pLDEwMCl9KSksZSh0aGlzLFwib25BZHNNYW5hZ2VyTG9hZGVkXCIsKGU9PntpZighdGhpcy5lbmFibGVkKXJldHVybjtjb25zdCB0PW5ldyBnb29nbGUuaW1hLkFkc1JlbmRlcmluZ1NldHRpbmdzO3QucmVzdG9yZUN1c3RvbVBsYXliYWNrU3RhdGVPbkFkQnJlYWtDb21wbGV0ZT0hMCx0LmVuYWJsZVByZWxvYWRpbmc9ITAsdGhpcy5tYW5hZ2VyPWUuZ2V0QWRzTWFuYWdlcih0aGlzLnBsYXllcix0KSx0aGlzLmN1ZVBvaW50cz10aGlzLm1hbmFnZXIuZ2V0Q3VlUG9pbnRzKCksdGhpcy5tYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZ29vZ2xlLmltYS5BZEVycm9yRXZlbnQuVHlwZS5BRF9FUlJPUiwoZT0+dGhpcy5vbkFkRXJyb3IoZSkpKSxPYmplY3Qua2V5cyhnb29nbGUuaW1hLkFkRXZlbnQuVHlwZSkuZm9yRWFjaCgoZT0+e3RoaXMubWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGdvb2dsZS5pbWEuQWRFdmVudC5UeXBlW2VdLChlPT50aGlzLm9uQWRFdmVudChlKSkpfSkpLHRoaXMudHJpZ2dlcihcImxvYWRlZFwiKX0pKSxlKHRoaXMsXCJhZGRDdWVQb2ludHNcIiwoKCk9PntTLmVtcHR5KHRoaXMuY3VlUG9pbnRzKXx8dGhpcy5jdWVQb2ludHMuZm9yRWFjaCgoZT0+e2lmKDAhPT1lJiYtMSE9PWUmJmU8dGhpcy5wbGF5ZXIuZHVyYXRpb24pe2NvbnN0IHQ9dGhpcy5wbGF5ZXIuZWxlbWVudHMucHJvZ3Jlc3M7aWYoUy5lbGVtZW50KHQpKXtjb25zdCBpPTEwMC90aGlzLnBsYXllci5kdXJhdGlvbiplLHM9JChcInNwYW5cIix7Y2xhc3M6dGhpcy5wbGF5ZXIuY29uZmlnLmNsYXNzTmFtZXMuY3Vlc30pO3Muc3R5bGUubGVmdD1gJHtpLnRvU3RyaW5nKCl9JWAsdC5hcHBlbmRDaGlsZChzKX19fSkpfSkpLGUodGhpcyxcIm9uQWRFdmVudFwiLChlPT57Y29uc3R7Y29udGFpbmVyOnR9PXRoaXMucGxheWVyLmVsZW1lbnRzLGk9ZS5nZXRBZCgpLHM9ZS5nZXRBZERhdGEoKTtzd2l0Y2goKGU9PntaLmNhbGwodGhpcy5wbGF5ZXIsdGhpcy5wbGF5ZXIubWVkaWEsYGFkcyR7ZS5yZXBsYWNlKC9fL2csXCJcIikudG9Mb3dlckNhc2UoKX1gKX0pKGUudHlwZSksZS50eXBlKXtjYXNlIGdvb2dsZS5pbWEuQWRFdmVudC5UeXBlLkxPQURFRDp0aGlzLnRyaWdnZXIoXCJsb2FkZWRcIiksdGhpcy5wb2xsQ291bnRkb3duKCEwKSxpLmlzTGluZWFyKCl8fChpLndpZHRoPXQub2Zmc2V0V2lkdGgsaS5oZWlnaHQ9dC5vZmZzZXRIZWlnaHQpO2JyZWFrO2Nhc2UgZ29vZ2xlLmltYS5BZEV2ZW50LlR5cGUuU1RBUlRFRDp0aGlzLm1hbmFnZXIuc2V0Vm9sdW1lKHRoaXMucGxheWVyLnZvbHVtZSk7YnJlYWs7Y2FzZSBnb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5BTExfQURTX0NPTVBMRVRFRDp0aGlzLnBsYXllci5lbmRlZD90aGlzLmxvYWRBZHMoKTp0aGlzLmxvYWRlci5jb250ZW50Q29tcGxldGUoKTticmVhaztjYXNlIGdvb2dsZS5pbWEuQWRFdmVudC5UeXBlLkNPTlRFTlRfUEFVU0VfUkVRVUVTVEVEOnRoaXMucGF1c2VDb250ZW50KCk7YnJlYWs7Y2FzZSBnb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5DT05URU5UX1JFU1VNRV9SRVFVRVNURUQ6dGhpcy5wb2xsQ291bnRkb3duKCksdGhpcy5yZXN1bWVDb250ZW50KCk7YnJlYWs7Y2FzZSBnb29nbGUuaW1hLkFkRXZlbnQuVHlwZS5MT0c6cy5hZEVycm9yJiZ0aGlzLnBsYXllci5kZWJ1Zy53YXJuKGBOb24tZmF0YWwgYWQgZXJyb3I6ICR7cy5hZEVycm9yLmdldE1lc3NhZ2UoKX1gKX19KSksZSh0aGlzLFwib25BZEVycm9yXCIsKGU9Pnt0aGlzLmNhbmNlbCgpLHRoaXMucGxheWVyLmRlYnVnLndhcm4oXCJBZHMgZXJyb3JcIixlKX0pKSxlKHRoaXMsXCJsaXN0ZW5lcnNcIiwoKCk9Pntjb25zdHtjb250YWluZXI6ZX09dGhpcy5wbGF5ZXIuZWxlbWVudHM7bGV0IHQ7dGhpcy5wbGF5ZXIub24oXCJjYW5wbGF5XCIsKCgpPT57dGhpcy5hZGRDdWVQb2ludHMoKX0pKSx0aGlzLnBsYXllci5vbihcImVuZGVkXCIsKCgpPT57dGhpcy5sb2FkZXIuY29udGVudENvbXBsZXRlKCl9KSksdGhpcy5wbGF5ZXIub24oXCJ0aW1ldXBkYXRlXCIsKCgpPT57dD10aGlzLnBsYXllci5jdXJyZW50VGltZX0pKSx0aGlzLnBsYXllci5vbihcInNlZWtlZFwiLCgoKT0+e2NvbnN0IGU9dGhpcy5wbGF5ZXIuY3VycmVudFRpbWU7Uy5lbXB0eSh0aGlzLmN1ZVBvaW50cyl8fHRoaXMuY3VlUG9pbnRzLmZvckVhY2goKChpLHMpPT57dDxpJiZpPGUmJih0aGlzLm1hbmFnZXIuZGlzY2FyZEFkQnJlYWsoKSx0aGlzLmN1ZVBvaW50cy5zcGxpY2UocywxKSl9KSl9KSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwoKCk9Pnt0aGlzLm1hbmFnZXImJnRoaXMubWFuYWdlci5yZXNpemUoZS5vZmZzZXRXaWR0aCxlLm9mZnNldEhlaWdodCxnb29nbGUuaW1hLlZpZXdNb2RlLk5PUk1BTCl9KSl9KSksZSh0aGlzLFwicGxheVwiLCgoKT0+e2NvbnN0e2NvbnRhaW5lcjplfT10aGlzLnBsYXllci5lbGVtZW50czt0aGlzLm1hbmFnZXJQcm9taXNlfHx0aGlzLnJlc3VtZUNvbnRlbnQoKSx0aGlzLm1hbmFnZXJQcm9taXNlLnRoZW4oKCgpPT57dGhpcy5tYW5hZ2VyLnNldFZvbHVtZSh0aGlzLnBsYXllci52b2x1bWUpLHRoaXMuZWxlbWVudHMuZGlzcGxheUNvbnRhaW5lci5pbml0aWFsaXplKCk7dHJ5e3RoaXMuaW5pdGlhbGl6ZWR8fCh0aGlzLm1hbmFnZXIuaW5pdChlLm9mZnNldFdpZHRoLGUub2Zmc2V0SGVpZ2h0LGdvb2dsZS5pbWEuVmlld01vZGUuTk9STUFMKSx0aGlzLm1hbmFnZXIuc3RhcnQoKSksdGhpcy5pbml0aWFsaXplZD0hMH1jYXRjaChlKXt0aGlzLm9uQWRFcnJvcihlKX19KSkuY2F0Y2goKCgpPT57fSkpfSkpLGUodGhpcyxcInJlc3VtZUNvbnRlbnRcIiwoKCk9Pnt0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5zdHlsZS56SW5kZXg9XCJcIix0aGlzLnBsYXlpbmc9ITEsaWUodGhpcy5wbGF5ZXIubWVkaWEucGxheSgpKX0pKSxlKHRoaXMsXCJwYXVzZUNvbnRlbnRcIiwoKCk9Pnt0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5zdHlsZS56SW5kZXg9Myx0aGlzLnBsYXlpbmc9ITAsdGhpcy5wbGF5ZXIubWVkaWEucGF1c2UoKX0pKSxlKHRoaXMsXCJjYW5jZWxcIiwoKCk9Pnt0aGlzLmluaXRpYWxpemVkJiZ0aGlzLnJlc3VtZUNvbnRlbnQoKSx0aGlzLnRyaWdnZXIoXCJlcnJvclwiKSx0aGlzLmxvYWRBZHMoKX0pKSxlKHRoaXMsXCJsb2FkQWRzXCIsKCgpPT57dGhpcy5tYW5hZ2VyUHJvbWlzZS50aGVuKCgoKT0+e3RoaXMubWFuYWdlciYmdGhpcy5tYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLm1hbmFnZXJQcm9taXNlPW5ldyBQcm9taXNlKChlPT57dGhpcy5vbihcImxvYWRlZFwiLGUpLHRoaXMucGxheWVyLmRlYnVnLmxvZyh0aGlzLm1hbmFnZXIpfSkpLHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5yZXF1ZXN0QWRzKCl9KSkuY2F0Y2goKCgpPT57fSkpfSkpLGUodGhpcyxcInRyaWdnZXJcIiwoKGUsLi4udCk9Pntjb25zdCBpPXRoaXMuZXZlbnRzW2VdO1MuYXJyYXkoaSkmJmkuZm9yRWFjaCgoZT0+e1MuZnVuY3Rpb24oZSkmJmUuYXBwbHkodGhpcyx0KX0pKX0pKSxlKHRoaXMsXCJvblwiLCgoZSx0KT0+KFMuYXJyYXkodGhpcy5ldmVudHNbZV0pfHwodGhpcy5ldmVudHNbZV09W10pLHRoaXMuZXZlbnRzW2VdLnB1c2godCksdGhpcykpKSxlKHRoaXMsXCJzdGFydFNhZmV0eVRpbWVyXCIsKChlLHQpPT57dGhpcy5wbGF5ZXIuZGVidWcubG9nKGBTYWZldHkgdGltZXIgaW52b2tlZCBmcm9tOiAke3R9YCksdGhpcy5zYWZldHlUaW1lcj1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuY2FuY2VsKCksdGhpcy5jbGVhclNhZmV0eVRpbWVyKFwic3RhcnRTYWZldHlUaW1lcigpXCIpfSksZSl9KSksZSh0aGlzLFwiY2xlYXJTYWZldHlUaW1lclwiLChlPT57Uy5udWxsT3JVbmRlZmluZWQodGhpcy5zYWZldHlUaW1lcil8fCh0aGlzLnBsYXllci5kZWJ1Zy5sb2coYFNhZmV0eSB0aW1lciBjbGVhcmVkIGZyb206ICR7ZX1gKSxjbGVhclRpbWVvdXQodGhpcy5zYWZldHlUaW1lciksdGhpcy5zYWZldHlUaW1lcj1udWxsKX0pKSx0aGlzLnBsYXllcj10LHRoaXMuY29uZmlnPXQuY29uZmlnLmFkcyx0aGlzLnBsYXlpbmc9ITEsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmVsZW1lbnRzPXtjb250YWluZXI6bnVsbCxkaXNwbGF5Q29udGFpbmVyOm51bGx9LHRoaXMubWFuYWdlcj1udWxsLHRoaXMubG9hZGVyPW51bGwsdGhpcy5jdWVQb2ludHM9bnVsbCx0aGlzLmV2ZW50cz17fSx0aGlzLnNhZmV0eVRpbWVyPW51bGwsdGhpcy5jb3VudGRvd25UaW1lcj1udWxsLHRoaXMubWFuYWdlclByb21pc2U9bmV3IFByb21pc2UoKChlLHQpPT57dGhpcy5vbihcImxvYWRlZFwiLGUpLHRoaXMub24oXCJlcnJvclwiLHQpfSkpLHRoaXMubG9hZCgpfWdldCBlbmFibGVkKCl7Y29uc3R7Y29uZmlnOmV9PXRoaXM7cmV0dXJuIHRoaXMucGxheWVyLmlzSFRNTDUmJnRoaXMucGxheWVyLmlzVmlkZW8mJmUuZW5hYmxlZCYmKCFTLmVtcHR5KGUucHVibGlzaGVySWQpfHxTLnVybChlLnRhZ1VybCkpfWdldCB0YWdVcmwoKXtjb25zdHtjb25maWc6ZX09dGhpcztpZihTLnVybChlLnRhZ1VybCkpcmV0dXJuIGUudGFnVXJsO3JldHVybmBodHRwczovL2dvLmFuaXZpZXcuY29tL2FwaS9hZHNlcnZlcjYvdmFzdC8/JHtOZSh7QVZfUFVCTElTSEVSSUQ6XCI1OGMyNWJiMDA3M2VmNDQ4YjEwODdhZDZcIixBVl9DSEFOTkVMSUQ6XCI1YTA0NThkYzI4YTA2MTQ1ZTQ1MTlkMjFcIixBVl9VUkw6d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLGNiOkRhdGUubm93KCksQVZfV0lEVEg6NjQwLEFWX0hFSUdIVDo0ODAsQVZfQ0RJTTI6ZS5wdWJsaXNoZXJJZH0pfWB9fWZ1bmN0aW9uIEdlKGU9MCx0PTAsaT0yNTUpe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLHQpLGkpfWNvbnN0IFplPWU9Pntjb25zdCB0PVtdO3JldHVybiBlLnNwbGl0KC9cXHJcXG5cXHJcXG58XFxuXFxufFxcclxcci8pLmZvckVhY2goKGU9Pntjb25zdCBpPXt9O2Uuc3BsaXQoL1xcclxcbnxcXG58XFxyLykuZm9yRWFjaCgoZT0+e2lmKFMubnVtYmVyKGkuc3RhcnRUaW1lKSl7aWYoIVMuZW1wdHkoZS50cmltKCkpJiZTLmVtcHR5KGkudGV4dCkpe2NvbnN0IHQ9ZS50cmltKCkuc3BsaXQoXCIjeHl3aD1cIik7W2kudGV4dF09dCx0WzFdJiYoW2kueCxpLnksaS53LGkuaF09dFsxXS5zcGxpdChcIixcIikpfX1lbHNle2NvbnN0IHQ9ZS5tYXRjaCgvKFswLTldezJ9KT86PyhbMC05XXsyfSk6KFswLTldezJ9KS4oWzAtOV17MiwzfSkoID8tLT4gPykoWzAtOV17Mn0pPzo/KFswLTldezJ9KTooWzAtOV17Mn0pLihbMC05XXsyLDN9KS8pO3QmJihpLnN0YXJ0VGltZT02MCpOdW1iZXIodFsxXXx8MCkqNjArNjAqTnVtYmVyKHRbMl0pK051bWJlcih0WzNdKStOdW1iZXIoYDAuJHt0WzRdfWApLGkuZW5kVGltZT02MCpOdW1iZXIodFs2XXx8MCkqNjArNjAqTnVtYmVyKHRbN10pK051bWJlcih0WzhdKStOdW1iZXIoYDAuJHt0WzldfWApKX19KSksaS50ZXh0JiZ0LnB1c2goaSl9KSksdH0sZXQ9KGUsdCk9Pntjb25zdCBpPXt9O3JldHVybiBlPnQud2lkdGgvdC5oZWlnaHQ/KGkud2lkdGg9dC53aWR0aCxpLmhlaWdodD0xL2UqdC53aWR0aCk6KGkuaGVpZ2h0PXQuaGVpZ2h0LGkud2lkdGg9ZSp0LmhlaWdodCksaX07Y2xhc3MgdHR7Y29uc3RydWN0b3IodCl7ZSh0aGlzLFwibG9hZFwiLCgoKT0+e3RoaXMucGxheWVyLmVsZW1lbnRzLmRpc3BsYXkuc2Vla1Rvb2x0aXAmJih0aGlzLnBsYXllci5lbGVtZW50cy5kaXNwbGF5LnNlZWtUb29sdGlwLmhpZGRlbj10aGlzLmVuYWJsZWQpLHRoaXMuZW5hYmxlZCYmdGhpcy5nZXRUaHVtYm5haWxzKCkudGhlbigoKCk9Pnt0aGlzLmVuYWJsZWQmJih0aGlzLnJlbmRlcigpLHRoaXMuZGV0ZXJtaW5lQ29udGFpbmVyQXV0b1NpemluZygpLHRoaXMubGlzdGVuZXJzKCksdGhpcy5sb2FkZWQ9ITApfSkpfSkpLGUodGhpcyxcImdldFRodW1ibmFpbHNcIiwoKCk9Pm5ldyBQcm9taXNlKChlPT57Y29uc3R7c3JjOnR9PXRoaXMucGxheWVyLmNvbmZpZy5wcmV2aWV3VGh1bWJuYWlscztpZihTLmVtcHR5KHQpKXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcHJldmlld1RodW1ibmFpbHMuc3JjIGNvbmZpZyBhdHRyaWJ1dGVcIik7Y29uc3QgaT0oKT0+e3RoaXMudGh1bWJuYWlscy5zb3J0KCgoZSx0KT0+ZS5oZWlnaHQtdC5oZWlnaHQpKSx0aGlzLnBsYXllci5kZWJ1Zy5sb2coXCJQcmV2aWV3IHRodW1ibmFpbHNcIix0aGlzLnRodW1ibmFpbHMpLGUoKX07aWYoUy5mdW5jdGlvbih0KSl0KChlPT57dGhpcy50aHVtYm5haWxzPWUsaSgpfSkpO2Vsc2V7Y29uc3QgZT0oUy5zdHJpbmcodCk/W3RdOnQpLm1hcCgoZT0+dGhpcy5nZXRUaHVtYm5haWwoZSkpKTtQcm9taXNlLmFsbChlKS50aGVuKGkpfX0pKSkpLGUodGhpcyxcImdldFRodW1ibmFpbFwiLChlPT5uZXcgUHJvbWlzZSgodD0+e1RlKGUpLnRoZW4oKGk9Pntjb25zdCBzPXtmcmFtZXM6WmUoaSksaGVpZ2h0Om51bGwsdXJsUHJlZml4OlwiXCJ9O3MuZnJhbWVzWzBdLnRleHQuc3RhcnRzV2l0aChcIi9cIil8fHMuZnJhbWVzWzBdLnRleHQuc3RhcnRzV2l0aChcImh0dHA6Ly9cIil8fHMuZnJhbWVzWzBdLnRleHQuc3RhcnRzV2l0aChcImh0dHBzOi8vXCIpfHwocy51cmxQcmVmaXg9ZS5zdWJzdHJpbmcoMCxlLmxhc3RJbmRleE9mKFwiL1wiKSsxKSk7Y29uc3Qgbj1uZXcgSW1hZ2U7bi5vbmxvYWQ9KCk9PntzLmhlaWdodD1uLm5hdHVyYWxIZWlnaHQscy53aWR0aD1uLm5hdHVyYWxXaWR0aCx0aGlzLnRodW1ibmFpbHMucHVzaChzKSx0KCl9LG4uc3JjPXMudXJsUHJlZml4K3MuZnJhbWVzWzBdLnRleHR9KSl9KSkpKSxlKHRoaXMsXCJzdGFydE1vdmVcIiwoZT0+e2lmKHRoaXMubG9hZGVkJiZTLmV2ZW50KGUpJiZbXCJ0b3VjaG1vdmVcIixcIm1vdXNlbW92ZVwiXS5pbmNsdWRlcyhlLnR5cGUpJiZ0aGlzLnBsYXllci5tZWRpYS5kdXJhdGlvbil7aWYoXCJ0b3VjaG1vdmVcIj09PWUudHlwZSl0aGlzLnNlZWtUaW1lPXRoaXMucGxheWVyLm1lZGlhLmR1cmF0aW9uKih0aGlzLnBsYXllci5lbGVtZW50cy5pbnB1dHMuc2Vlay52YWx1ZS8xMDApO2Vsc2V7dmFyIHQsaTtjb25zdCBzPXRoaXMucGxheWVyLmVsZW1lbnRzLnByb2dyZXNzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49MTAwL3Mud2lkdGgqKGUucGFnZVgtcy5sZWZ0KTt0aGlzLnNlZWtUaW1lPXRoaXMucGxheWVyLm1lZGlhLmR1cmF0aW9uKihuLzEwMCksdGhpcy5zZWVrVGltZTwwJiYodGhpcy5zZWVrVGltZT0wKSx0aGlzLnNlZWtUaW1lPnRoaXMucGxheWVyLm1lZGlhLmR1cmF0aW9uLTEmJih0aGlzLnNlZWtUaW1lPXRoaXMucGxheWVyLm1lZGlhLmR1cmF0aW9uLTEpLHRoaXMubW91c2VQb3NYPWUucGFnZVgsdGhpcy5lbGVtZW50cy50aHVtYi50aW1lLmlubmVyVGV4dD1FZSh0aGlzLnNlZWtUaW1lKTtjb25zdCBhPW51bGw9PT0odD10aGlzLnBsYXllci5jb25maWcubWFya2Vycyl8fHZvaWQgMD09PXR8fG51bGw9PT0oaT10LnBvaW50cyl8fHZvaWQgMD09PWk/dm9pZCAwOmkuZmluZCgoKHt0aW1lOmV9KT0+ZT09PU1hdGgucm91bmQodGhpcy5zZWVrVGltZSkpKTthJiZ0aGlzLmVsZW1lbnRzLnRodW1iLnRpbWUuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLGAke2EubGFiZWx9PGJyPmApfXRoaXMuc2hvd0ltYWdlQXRDdXJyZW50VGltZSgpfX0pKSxlKHRoaXMsXCJlbmRNb3ZlXCIsKCgpPT57dGhpcy50b2dnbGVUaHVtYkNvbnRhaW5lcighMSwhMCl9KSksZSh0aGlzLFwic3RhcnRTY3J1YmJpbmdcIiwoZT0+eyhTLm51bGxPclVuZGVmaW5lZChlLmJ1dHRvbil8fCExPT09ZS5idXR0b258fDA9PT1lLmJ1dHRvbikmJih0aGlzLm1vdXNlRG93bj0hMCx0aGlzLnBsYXllci5tZWRpYS5kdXJhdGlvbiYmKHRoaXMudG9nZ2xlU2NydWJiaW5nQ29udGFpbmVyKCEwKSx0aGlzLnRvZ2dsZVRodW1iQ29udGFpbmVyKCExLCEwKSx0aGlzLnNob3dJbWFnZUF0Q3VycmVudFRpbWUoKSkpfSkpLGUodGhpcyxcImVuZFNjcnViYmluZ1wiLCgoKT0+e3RoaXMubW91c2VEb3duPSExLE1hdGguY2VpbCh0aGlzLmxhc3RUaW1lKT09PU1hdGguY2VpbCh0aGlzLnBsYXllci5tZWRpYS5jdXJyZW50VGltZSk/dGhpcy50b2dnbGVTY3J1YmJpbmdDb250YWluZXIoITEpOkcuY2FsbCh0aGlzLnBsYXllcix0aGlzLnBsYXllci5tZWRpYSxcInRpbWV1cGRhdGVcIiwoKCk9Pnt0aGlzLm1vdXNlRG93bnx8dGhpcy50b2dnbGVTY3J1YmJpbmdDb250YWluZXIoITEpfSkpfSkpLGUodGhpcyxcImxpc3RlbmVyc1wiLCgoKT0+e3RoaXMucGxheWVyLm9uKFwicGxheVwiLCgoKT0+e3RoaXMudG9nZ2xlVGh1bWJDb250YWluZXIoITEsITApfSkpLHRoaXMucGxheWVyLm9uKFwic2Vla2VkXCIsKCgpPT57dGhpcy50b2dnbGVUaHVtYkNvbnRhaW5lcighMSl9KSksdGhpcy5wbGF5ZXIub24oXCJ0aW1ldXBkYXRlXCIsKCgpPT57dGhpcy5sYXN0VGltZT10aGlzLnBsYXllci5tZWRpYS5jdXJyZW50VGltZX0pKX0pKSxlKHRoaXMsXCJyZW5kZXJcIiwoKCk9Pnt0aGlzLmVsZW1lbnRzLnRodW1iLmNvbnRhaW5lcj0kKFwiZGl2XCIse2NsYXNzOnRoaXMucGxheWVyLmNvbmZpZy5jbGFzc05hbWVzLnByZXZpZXdUaHVtYm5haWxzLnRodW1iQ29udGFpbmVyfSksdGhpcy5lbGVtZW50cy50aHVtYi5pbWFnZUNvbnRhaW5lcj0kKFwiZGl2XCIse2NsYXNzOnRoaXMucGxheWVyLmNvbmZpZy5jbGFzc05hbWVzLnByZXZpZXdUaHVtYm5haWxzLmltYWdlQ29udGFpbmVyfSksdGhpcy5lbGVtZW50cy50aHVtYi5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50cy50aHVtYi5pbWFnZUNvbnRhaW5lcik7Y29uc3QgZT0kKFwiZGl2XCIse2NsYXNzOnRoaXMucGxheWVyLmNvbmZpZy5jbGFzc05hbWVzLnByZXZpZXdUaHVtYm5haWxzLnRpbWVDb250YWluZXJ9KTt0aGlzLmVsZW1lbnRzLnRodW1iLnRpbWU9JChcInNwYW5cIix7fSxcIjAwOjAwXCIpLGUuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50cy50aHVtYi50aW1lKSx0aGlzLmVsZW1lbnRzLnRodW1iLmltYWdlQ29udGFpbmVyLmFwcGVuZENoaWxkKGUpLFMuZWxlbWVudCh0aGlzLnBsYXllci5lbGVtZW50cy5wcm9ncmVzcykmJnRoaXMucGxheWVyLmVsZW1lbnRzLnByb2dyZXNzLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudHMudGh1bWIuY29udGFpbmVyKSx0aGlzLmVsZW1lbnRzLnNjcnViYmluZy5jb250YWluZXI9JChcImRpdlwiLHtjbGFzczp0aGlzLnBsYXllci5jb25maWcuY2xhc3NOYW1lcy5wcmV2aWV3VGh1bWJuYWlscy5zY3J1YmJpbmdDb250YWluZXJ9KSx0aGlzLnBsYXllci5lbGVtZW50cy53cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudHMuc2NydWJiaW5nLmNvbnRhaW5lcil9KSksZSh0aGlzLFwiZGVzdHJveVwiLCgoKT0+e3RoaXMuZWxlbWVudHMudGh1bWIuY29udGFpbmVyJiZ0aGlzLmVsZW1lbnRzLnRodW1iLmNvbnRhaW5lci5yZW1vdmUoKSx0aGlzLmVsZW1lbnRzLnNjcnViYmluZy5jb250YWluZXImJnRoaXMuZWxlbWVudHMuc2NydWJiaW5nLmNvbnRhaW5lci5yZW1vdmUoKX0pKSxlKHRoaXMsXCJzaG93SW1hZ2VBdEN1cnJlbnRUaW1lXCIsKCgpPT57dGhpcy5tb3VzZURvd24/dGhpcy5zZXRTY3J1YmJpbmdDb250YWluZXJTaXplKCk6dGhpcy5zZXRUaHVtYkNvbnRhaW5lclNpemVBbmRQb3MoKTtjb25zdCBlPXRoaXMudGh1bWJuYWlsc1swXS5mcmFtZXMuZmluZEluZGV4KChlPT50aGlzLnNlZWtUaW1lPj1lLnN0YXJ0VGltZSYmdGhpcy5zZWVrVGltZTw9ZS5lbmRUaW1lKSksdD1lPj0wO2xldCBpPTA7dGhpcy5tb3VzZURvd258fHRoaXMudG9nZ2xlVGh1bWJDb250YWluZXIodCksdCYmKHRoaXMudGh1bWJuYWlscy5mb3JFYWNoKCgodCxzKT0+e3RoaXMubG9hZGVkSW1hZ2VzLmluY2x1ZGVzKHQuZnJhbWVzW2VdLnRleHQpJiYoaT1zKX0pKSxlIT09dGhpcy5zaG93aW5nVGh1bWImJih0aGlzLnNob3dpbmdUaHVtYj1lLHRoaXMubG9hZEltYWdlKGkpKSl9KSksZSh0aGlzLFwibG9hZEltYWdlXCIsKChlPTApPT57Y29uc3QgdD10aGlzLnNob3dpbmdUaHVtYixpPXRoaXMudGh1bWJuYWlsc1tlXSx7dXJsUHJlZml4OnN9PWksbj1pLmZyYW1lc1t0XSxhPWkuZnJhbWVzW3RdLnRleHQsbD1zK2E7aWYodGhpcy5jdXJyZW50SW1hZ2VFbGVtZW50JiZ0aGlzLmN1cnJlbnRJbWFnZUVsZW1lbnQuZGF0YXNldC5maWxlbmFtZT09PWEpdGhpcy5zaG93SW1hZ2UodGhpcy5jdXJyZW50SW1hZ2VFbGVtZW50LG4sZSx0LGEsITEpLHRoaXMuY3VycmVudEltYWdlRWxlbWVudC5kYXRhc2V0LmluZGV4PXQsdGhpcy5yZW1vdmVPbGRJbWFnZXModGhpcy5jdXJyZW50SW1hZ2VFbGVtZW50KTtlbHNle3RoaXMubG9hZGluZ0ltYWdlJiZ0aGlzLnVzaW5nU3ByaXRlcyYmKHRoaXMubG9hZGluZ0ltYWdlLm9ubG9hZD1udWxsKTtjb25zdCBpPW5ldyBJbWFnZTtpLnNyYz1sLGkuZGF0YXNldC5pbmRleD10LGkuZGF0YXNldC5maWxlbmFtZT1hLHRoaXMuc2hvd2luZ1RodW1iRmlsZW5hbWU9YSx0aGlzLnBsYXllci5kZWJ1Zy5sb2coYExvYWRpbmcgaW1hZ2U6ICR7bH1gKSxpLm9ubG9hZD0oKT0+dGhpcy5zaG93SW1hZ2UoaSxuLGUsdCxhLCEwKSx0aGlzLmxvYWRpbmdJbWFnZT1pLHRoaXMucmVtb3ZlT2xkSW1hZ2VzKGkpfX0pKSxlKHRoaXMsXCJzaG93SW1hZ2VcIiwoKGUsdCxpLHMsbixhPSEwKT0+e3RoaXMucGxheWVyLmRlYnVnLmxvZyhgU2hvd2luZyB0aHVtYjogJHtufS4gbnVtOiAke3N9LiBxdWFsOiAke2l9LiBuZXdpbWc6ICR7YX1gKSx0aGlzLnNldEltYWdlU2l6ZUFuZE9mZnNldChlLHQpLGEmJih0aGlzLmN1cnJlbnRJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLmN1cnJlbnRJbWFnZUVsZW1lbnQ9ZSx0aGlzLmxvYWRlZEltYWdlcy5pbmNsdWRlcyhuKXx8dGhpcy5sb2FkZWRJbWFnZXMucHVzaChuKSksdGhpcy5wcmVsb2FkTmVhcmJ5KHMsITApLnRoZW4odGhpcy5wcmVsb2FkTmVhcmJ5KHMsITEpKS50aGVuKHRoaXMuZ2V0SGlnaGVyUXVhbGl0eShpLGUsdCxuKSl9KSksZSh0aGlzLFwicmVtb3ZlT2xkSW1hZ2VzXCIsKGU9PntBcnJheS5mcm9tKHRoaXMuY3VycmVudEltYWdlQ29udGFpbmVyLmNoaWxkcmVuKS5mb3JFYWNoKCh0PT57aWYoXCJpbWdcIiE9PXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybjtjb25zdCBpPXRoaXMudXNpbmdTcHJpdGVzPzUwMDoxZTM7aWYodC5kYXRhc2V0LmluZGV4IT09ZS5kYXRhc2V0LmluZGV4JiYhdC5kYXRhc2V0LmRlbGV0aW5nKXt0LmRhdGFzZXQuZGVsZXRpbmc9ITA7Y29uc3R7Y3VycmVudEltYWdlQ29udGFpbmVyOmV9PXRoaXM7c2V0VGltZW91dCgoKCk9PntlLnJlbW92ZUNoaWxkKHQpLHRoaXMucGxheWVyLmRlYnVnLmxvZyhgUmVtb3ZpbmcgdGh1bWI6ICR7dC5kYXRhc2V0LmZpbGVuYW1lfWApfSksaSl9fSkpfSkpLGUodGhpcyxcInByZWxvYWROZWFyYnlcIiwoKGUsdD0hMCk9Pm5ldyBQcm9taXNlKChpPT57c2V0VGltZW91dCgoKCk9Pntjb25zdCBzPXRoaXMudGh1bWJuYWlsc1swXS5mcmFtZXNbZV0udGV4dDtpZih0aGlzLnNob3dpbmdUaHVtYkZpbGVuYW1lPT09cyl7bGV0IG47bj10P3RoaXMudGh1bWJuYWlsc1swXS5mcmFtZXMuc2xpY2UoZSk6dGhpcy50aHVtYm5haWxzWzBdLmZyYW1lcy5zbGljZSgwLGUpLnJldmVyc2UoKTtsZXQgYT0hMTtuLmZvckVhY2goKGU9Pntjb25zdCB0PWUudGV4dDtpZih0IT09cyYmIXRoaXMubG9hZGVkSW1hZ2VzLmluY2x1ZGVzKHQpKXthPSEwLHRoaXMucGxheWVyLmRlYnVnLmxvZyhgUHJlbG9hZGluZyB0aHVtYiBmaWxlbmFtZTogJHt0fWApO2NvbnN0e3VybFByZWZpeDplfT10aGlzLnRodW1ibmFpbHNbMF0scz1lK3Qsbj1uZXcgSW1hZ2U7bi5zcmM9cyxuLm9ubG9hZD0oKT0+e3RoaXMucGxheWVyLmRlYnVnLmxvZyhgUHJlbG9hZGVkIHRodW1iIGZpbGVuYW1lOiAke3R9YCksdGhpcy5sb2FkZWRJbWFnZXMuaW5jbHVkZXModCl8fHRoaXMubG9hZGVkSW1hZ2VzLnB1c2godCksaSgpfX19KSksYXx8aSgpfX0pLDMwMCl9KSkpKSxlKHRoaXMsXCJnZXRIaWdoZXJRdWFsaXR5XCIsKChlLHQsaSxzKT0+e2lmKGU8dGhpcy50aHVtYm5haWxzLmxlbmd0aC0xKXtsZXQgbj10Lm5hdHVyYWxIZWlnaHQ7dGhpcy51c2luZ1Nwcml0ZXMmJihuPWkuaCksbjx0aGlzLnRodW1iQ29udGFpbmVySGVpZ2h0JiZzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2hvd2luZ1RodW1iRmlsZW5hbWU9PT1zJiYodGhpcy5wbGF5ZXIuZGVidWcubG9nKGBTaG93aW5nIGhpZ2hlciBxdWFsaXR5IHRodW1iIGZvcjogJHtzfWApLHRoaXMubG9hZEltYWdlKGUrMSkpfSksMzAwKX19KSksZSh0aGlzLFwidG9nZ2xlVGh1bWJDb250YWluZXJcIiwoKGU9ITEsdD0hMSk9Pntjb25zdCBpPXRoaXMucGxheWVyLmNvbmZpZy5jbGFzc05hbWVzLnByZXZpZXdUaHVtYm5haWxzLnRodW1iQ29udGFpbmVyU2hvd247dGhpcy5lbGVtZW50cy50aHVtYi5jb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZShpLGUpLCFlJiZ0JiYodGhpcy5zaG93aW5nVGh1bWI9bnVsbCx0aGlzLnNob3dpbmdUaHVtYkZpbGVuYW1lPW51bGwpfSkpLGUodGhpcyxcInRvZ2dsZVNjcnViYmluZ0NvbnRhaW5lclwiLCgoZT0hMSk9Pntjb25zdCB0PXRoaXMucGxheWVyLmNvbmZpZy5jbGFzc05hbWVzLnByZXZpZXdUaHVtYm5haWxzLnNjcnViYmluZ0NvbnRhaW5lclNob3duO3RoaXMuZWxlbWVudHMuc2NydWJiaW5nLmNvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKHQsZSksZXx8KHRoaXMuc2hvd2luZ1RodW1iPW51bGwsdGhpcy5zaG93aW5nVGh1bWJGaWxlbmFtZT1udWxsKX0pKSxlKHRoaXMsXCJkZXRlcm1pbmVDb250YWluZXJBdXRvU2l6aW5nXCIsKCgpPT57KHRoaXMuZWxlbWVudHMudGh1bWIuaW1hZ2VDb250YWluZXIuY2xpZW50SGVpZ2h0PjIwfHx0aGlzLmVsZW1lbnRzLnRodW1iLmltYWdlQ29udGFpbmVyLmNsaWVudFdpZHRoPjIwKSYmKHRoaXMuc2l6ZVNwZWNpZmllZEluQ1NTPSEwKX0pKSxlKHRoaXMsXCJzZXRUaHVtYkNvbnRhaW5lclNpemVBbmRQb3NcIiwoKCk9Pntjb25zdHtpbWFnZUNvbnRhaW5lcjplfT10aGlzLmVsZW1lbnRzLnRodW1iO2lmKHRoaXMuc2l6ZVNwZWNpZmllZEluQ1NTKXtpZihlLmNsaWVudEhlaWdodD4yMCYmZS5jbGllbnRXaWR0aDwyMCl7Y29uc3QgdD1NYXRoLmZsb29yKGUuY2xpZW50SGVpZ2h0KnRoaXMudGh1bWJBc3BlY3RSYXRpbyk7ZS5zdHlsZS53aWR0aD1gJHt0fXB4YH1lbHNlIGlmKGUuY2xpZW50SGVpZ2h0PDIwJiZlLmNsaWVudFdpZHRoPjIwKXtjb25zdCB0PU1hdGguZmxvb3IoZS5jbGllbnRXaWR0aC90aGlzLnRodW1iQXNwZWN0UmF0aW8pO2Uuc3R5bGUuaGVpZ2h0PWAke3R9cHhgfX1lbHNle2NvbnN0IHQ9TWF0aC5mbG9vcih0aGlzLnRodW1iQ29udGFpbmVySGVpZ2h0KnRoaXMudGh1bWJBc3BlY3RSYXRpbyk7ZS5zdHlsZS5oZWlnaHQ9YCR7dGhpcy50aHVtYkNvbnRhaW5lckhlaWdodH1weGAsZS5zdHlsZS53aWR0aD1gJHt0fXB4YH10aGlzLnNldFRodW1iQ29udGFpbmVyUG9zKCl9KSksZSh0aGlzLFwic2V0VGh1bWJDb250YWluZXJQb3NcIiwoKCk9Pntjb25zdCBlPXRoaXMucGxheWVyLmVsZW1lbnRzLnByb2dyZXNzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9dGhpcy5wbGF5ZXIuZWxlbWVudHMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHtjb250YWluZXI6aX09dGhpcy5lbGVtZW50cy50aHVtYixzPXQubGVmdC1lLmxlZnQrMTAsbj10LnJpZ2h0LWUubGVmdC1pLmNsaWVudFdpZHRoLTEwLGE9dGhpcy5tb3VzZVBvc1gtZS5sZWZ0LWkuY2xpZW50V2lkdGgvMixsPUdlKGEscyxuKTtpLnN0eWxlLmxlZnQ9YCR7bH1weGAsaS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcHJldmlldy1hcnJvdy1vZmZzZXRcIixhLWwrXCJweFwiKX0pKSxlKHRoaXMsXCJzZXRTY3J1YmJpbmdDb250YWluZXJTaXplXCIsKCgpPT57Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6dH09ZXQodGhpcy50aHVtYkFzcGVjdFJhdGlvLHt3aWR0aDp0aGlzLnBsYXllci5tZWRpYS5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy5wbGF5ZXIubWVkaWEuY2xpZW50SGVpZ2h0fSk7dGhpcy5lbGVtZW50cy5zY3J1YmJpbmcuY29udGFpbmVyLnN0eWxlLndpZHRoPWAke2V9cHhgLHRoaXMuZWxlbWVudHMuc2NydWJiaW5nLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ9YCR7dH1weGB9KSksZSh0aGlzLFwic2V0SW1hZ2VTaXplQW5kT2Zmc2V0XCIsKChlLHQpPT57aWYoIXRoaXMudXNpbmdTcHJpdGVzKXJldHVybjtjb25zdCBpPXRoaXMudGh1bWJDb250YWluZXJIZWlnaHQvdC5oO2Uuc3R5bGUuaGVpZ2h0PWUubmF0dXJhbEhlaWdodCppK1wicHhcIixlLnN0eWxlLndpZHRoPWUubmF0dXJhbFdpZHRoKmkrXCJweFwiLGUuc3R5bGUubGVmdD1gLSR7dC54Kml9cHhgLGUuc3R5bGUudG9wPWAtJHt0LnkqaX1weGB9KSksdGhpcy5wbGF5ZXI9dCx0aGlzLnRodW1ibmFpbHM9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sYXN0TW91c2VNb3ZlVGltZT1EYXRlLm5vdygpLHRoaXMubW91c2VEb3duPSExLHRoaXMubG9hZGVkSW1hZ2VzPVtdLHRoaXMuZWxlbWVudHM9e3RodW1iOnt9LHNjcnViYmluZzp7fX0sdGhpcy5sb2FkKCl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5wbGF5ZXIuaXNIVE1MNSYmdGhpcy5wbGF5ZXIuaXNWaWRlbyYmdGhpcy5wbGF5ZXIuY29uZmlnLnByZXZpZXdUaHVtYm5haWxzLmVuYWJsZWR9Z2V0IGN1cnJlbnRJbWFnZUNvbnRhaW5lcigpe3JldHVybiB0aGlzLm1vdXNlRG93bj90aGlzLmVsZW1lbnRzLnNjcnViYmluZy5jb250YWluZXI6dGhpcy5lbGVtZW50cy50aHVtYi5pbWFnZUNvbnRhaW5lcn1nZXQgdXNpbmdTcHJpdGVzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMudGh1bWJuYWlsc1swXS5mcmFtZXNbMF0pLmluY2x1ZGVzKFwid1wiKX1nZXQgdGh1bWJBc3BlY3RSYXRpbygpe3JldHVybiB0aGlzLnVzaW5nU3ByaXRlcz90aGlzLnRodW1ibmFpbHNbMF0uZnJhbWVzWzBdLncvdGhpcy50aHVtYm5haWxzWzBdLmZyYW1lc1swXS5oOnRoaXMudGh1bWJuYWlsc1swXS53aWR0aC90aGlzLnRodW1ibmFpbHNbMF0uaGVpZ2h0fWdldCB0aHVtYkNvbnRhaW5lckhlaWdodCgpe2lmKHRoaXMubW91c2VEb3duKXtjb25zdHtoZWlnaHQ6ZX09ZXQodGhpcy50aHVtYkFzcGVjdFJhdGlvLHt3aWR0aDp0aGlzLnBsYXllci5tZWRpYS5jbGllbnRXaWR0aCxoZWlnaHQ6dGhpcy5wbGF5ZXIubWVkaWEuY2xpZW50SGVpZ2h0fSk7cmV0dXJuIGV9cmV0dXJuIHRoaXMuc2l6ZVNwZWNpZmllZEluQ1NTP3RoaXMuZWxlbWVudHMudGh1bWIuaW1hZ2VDb250YWluZXIuY2xpZW50SGVpZ2h0Ok1hdGguZmxvb3IodGhpcy5wbGF5ZXIubWVkaWEuY2xpZW50V2lkdGgvdGhpcy50aHVtYkFzcGVjdFJhdGlvLzQpfWdldCBjdXJyZW50SW1hZ2VFbGVtZW50KCl7cmV0dXJuIHRoaXMubW91c2VEb3duP3RoaXMuY3VycmVudFNjcnViYmluZ0ltYWdlRWxlbWVudDp0aGlzLmN1cnJlbnRUaHVtYm5haWxJbWFnZUVsZW1lbnR9c2V0IGN1cnJlbnRJbWFnZUVsZW1lbnQoZSl7dGhpcy5tb3VzZURvd24/dGhpcy5jdXJyZW50U2NydWJiaW5nSW1hZ2VFbGVtZW50PWU6dGhpcy5jdXJyZW50VGh1bWJuYWlsSW1hZ2VFbGVtZW50PWV9fWNvbnN0IGl0PXtpbnNlcnRFbGVtZW50cyhlLHQpe1Muc3RyaW5nKHQpP18oZSx0aGlzLm1lZGlhLHtzcmM6dH0pOlMuYXJyYXkodCkmJnQuZm9yRWFjaCgodD0+e18oZSx0aGlzLm1lZGlhLHQpfSkpfSxjaGFuZ2UoZSl7TihlLFwic291cmNlcy5sZW5ndGhcIik/KGRlLmNhbmNlbFJlcXVlc3RzLmNhbGwodGhpcyksdGhpcy5kZXN0cm95LmNhbGwodGhpcywoKCk9Pnt0aGlzLm9wdGlvbnMucXVhbGl0eT1bXSxPKHRoaXMubWVkaWEpLHRoaXMubWVkaWE9bnVsbCxTLmVsZW1lbnQodGhpcy5lbGVtZW50cy5jb250YWluZXIpJiZ0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoXCJjbGFzc1wiKTtjb25zdHtzb3VyY2VzOnQsdHlwZTppfT1lLFt7cHJvdmlkZXI6cz1fZS5odG1sNSxzcmM6bn1dPXQsYT1cImh0bWw1XCI9PT1zP2k6XCJkaXZcIixsPVwiaHRtbDVcIj09PXM/e306e3NyYzpufTtPYmplY3QuYXNzaWduKHRoaXMse3Byb3ZpZGVyOnMsdHlwZTppLHN1cHBvcnRlZDpLLmNoZWNrKGkscyx0aGlzLmNvbmZpZy5wbGF5c2lubGluZSksbWVkaWE6JChhLGwpfSksdGhpcy5lbGVtZW50cy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5tZWRpYSksUy5ib29sZWFuKGUuYXV0b3BsYXkpJiYodGhpcy5jb25maWcuYXV0b3BsYXk9ZS5hdXRvcGxheSksdGhpcy5pc0hUTUw1JiYodGhpcy5jb25maWcuY3Jvc3NvcmlnaW4mJnRoaXMubWVkaWEuc2V0QXR0cmlidXRlKFwiY3Jvc3NvcmlnaW5cIixcIlwiKSx0aGlzLmNvbmZpZy5hdXRvcGxheSYmdGhpcy5tZWRpYS5zZXRBdHRyaWJ1dGUoXCJhdXRvcGxheVwiLFwiXCIpLFMuZW1wdHkoZS5wb3N0ZXIpfHwodGhpcy5wb3N0ZXI9ZS5wb3N0ZXIpLHRoaXMuY29uZmlnLmxvb3AuYWN0aXZlJiZ0aGlzLm1lZGlhLnNldEF0dHJpYnV0ZShcImxvb3BcIixcIlwiKSx0aGlzLmNvbmZpZy5tdXRlZCYmdGhpcy5tZWRpYS5zZXRBdHRyaWJ1dGUoXCJtdXRlZFwiLFwiXCIpLHRoaXMuY29uZmlnLnBsYXlzaW5saW5lJiZ0aGlzLm1lZGlhLnNldEF0dHJpYnV0ZShcInBsYXlzaW5saW5lXCIsXCJcIikpLEZlLmFkZFN0eWxlSG9vay5jYWxsKHRoaXMpLHRoaXMuaXNIVE1MNSYmaXQuaW5zZXJ0RWxlbWVudHMuY2FsbCh0aGlzLFwic291cmNlXCIsdCksdGhpcy5jb25maWcudGl0bGU9ZS50aXRsZSxYZS5zZXR1cC5jYWxsKHRoaXMpLHRoaXMuaXNIVE1MNSYmT2JqZWN0LmtleXMoZSkuaW5jbHVkZXMoXCJ0cmFja3NcIikmJml0Lmluc2VydEVsZW1lbnRzLmNhbGwodGhpcyxcInRyYWNrXCIsZS50cmFja3MpLCh0aGlzLmlzSFRNTDV8fHRoaXMuaXNFbWJlZCYmIXRoaXMuc3VwcG9ydGVkLnVpKSYmRmUuYnVpbGQuY2FsbCh0aGlzKSx0aGlzLmlzSFRNTDUmJnRoaXMubWVkaWEubG9hZCgpLFMuZW1wdHkoZS5wcmV2aWV3VGh1bWJuYWlscyl8fChPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLnByZXZpZXdUaHVtYm5haWxzLGUucHJldmlld1RodW1ibmFpbHMpLHRoaXMucHJldmlld1RodW1ibmFpbHMmJnRoaXMucHJldmlld1RodW1ibmFpbHMubG9hZGVkJiYodGhpcy5wcmV2aWV3VGh1bWJuYWlscy5kZXN0cm95KCksdGhpcy5wcmV2aWV3VGh1bWJuYWlscz1udWxsKSx0aGlzLmNvbmZpZy5wcmV2aWV3VGh1bWJuYWlscy5lbmFibGVkJiYodGhpcy5wcmV2aWV3VGh1bWJuYWlscz1uZXcgdHQodGhpcykpKSx0aGlzLmZ1bGxzY3JlZW4udXBkYXRlKCl9KSwhMCkpOnRoaXMuZGVidWcud2FybihcIkludmFsaWQgc291cmNlIGZvcm1hdFwiKX19O2NsYXNzIHN0e2NvbnN0cnVjdG9yKHQsaSl7aWYoZSh0aGlzLFwicGxheVwiLCgoKT0+Uy5mdW5jdGlvbih0aGlzLm1lZGlhLnBsYXkpPyh0aGlzLmFkcyYmdGhpcy5hZHMuZW5hYmxlZCYmdGhpcy5hZHMubWFuYWdlclByb21pc2UudGhlbigoKCk9PnRoaXMuYWRzLnBsYXkoKSkpLmNhdGNoKCgoKT0+aWUodGhpcy5tZWRpYS5wbGF5KCkpKSksdGhpcy5tZWRpYS5wbGF5KCkpOm51bGwpKSxlKHRoaXMsXCJwYXVzZVwiLCgoKT0+dGhpcy5wbGF5aW5nJiZTLmZ1bmN0aW9uKHRoaXMubWVkaWEucGF1c2UpP3RoaXMubWVkaWEucGF1c2UoKTpudWxsKSksZSh0aGlzLFwidG9nZ2xlUGxheVwiLChlPT4oUy5ib29sZWFuKGUpP2U6IXRoaXMucGxheWluZyk/dGhpcy5wbGF5KCk6dGhpcy5wYXVzZSgpKSksZSh0aGlzLFwic3RvcFwiLCgoKT0+e3RoaXMuaXNIVE1MNT8odGhpcy5wYXVzZSgpLHRoaXMucmVzdGFydCgpKTpTLmZ1bmN0aW9uKHRoaXMubWVkaWEuc3RvcCkmJnRoaXMubWVkaWEuc3RvcCgpfSkpLGUodGhpcyxcInJlc3RhcnRcIiwoKCk9Pnt0aGlzLmN1cnJlbnRUaW1lPTB9KSksZSh0aGlzLFwicmV3aW5kXCIsKGU9Pnt0aGlzLmN1cnJlbnRUaW1lLT1TLm51bWJlcihlKT9lOnRoaXMuY29uZmlnLnNlZWtUaW1lfSkpLGUodGhpcyxcImZvcndhcmRcIiwoZT0+e3RoaXMuY3VycmVudFRpbWUrPVMubnVtYmVyKGUpP2U6dGhpcy5jb25maWcuc2Vla1RpbWV9KSksZSh0aGlzLFwiaW5jcmVhc2VWb2x1bWVcIiwoZT0+e2NvbnN0IHQ9dGhpcy5tZWRpYS5tdXRlZD8wOnRoaXMudm9sdW1lO3RoaXMudm9sdW1lPXQrKFMubnVtYmVyKGUpP2U6MCl9KSksZSh0aGlzLFwiZGVjcmVhc2VWb2x1bWVcIiwoZT0+e3RoaXMuaW5jcmVhc2VWb2x1bWUoLWUpfSkpLGUodGhpcyxcImFpcnBsYXlcIiwoKCk9PntLLmFpcnBsYXkmJnRoaXMubWVkaWEud2Via2l0U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCl9KSksZSh0aGlzLFwidG9nZ2xlQ29udHJvbHNcIiwoZT0+e2lmKHRoaXMuc3VwcG9ydGVkLnVpJiYhdGhpcy5pc0F1ZGlvKXtjb25zdCB0PUYodGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5jb25maWcuY2xhc3NOYW1lcy5oaWRlQ29udHJvbHMpLGk9dm9pZCAwPT09ZT92b2lkIDA6IWUscz1SKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLHRoaXMuY29uZmlnLmNsYXNzTmFtZXMuaGlkZUNvbnRyb2xzLGkpO2lmKHMmJlMuYXJyYXkodGhpcy5jb25maWcuY29udHJvbHMpJiZ0aGlzLmNvbmZpZy5jb250cm9scy5pbmNsdWRlcyhcInNldHRpbmdzXCIpJiYhUy5lbXB0eSh0aGlzLmNvbmZpZy5zZXR0aW5ncykmJlBlLnRvZ2dsZU1lbnUuY2FsbCh0aGlzLCExKSxzIT09dCl7Y29uc3QgZT1zP1wiY29udHJvbHNoaWRkZW5cIjpcImNvbnRyb2xzc2hvd25cIjtaLmNhbGwodGhpcyx0aGlzLm1lZGlhLGUpfXJldHVybiFzfXJldHVybiExfSkpLGUodGhpcyxcIm9uXCIsKChlLHQpPT57WC5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5jb250YWluZXIsZSx0KX0pKSxlKHRoaXMsXCJvbmNlXCIsKChlLHQpPT57Ry5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5jb250YWluZXIsZSx0KX0pKSxlKHRoaXMsXCJvZmZcIiwoKGUsdCk9PntKKHRoaXMuZWxlbWVudHMuY29udGFpbmVyLGUsdCl9KSksZSh0aGlzLFwiZGVzdHJveVwiLCgoZSx0PSExKT0+e2lmKCF0aGlzLnJlYWR5KXJldHVybjtjb25zdCBpPSgpPT57ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1cIlwiLHRoaXMuZW1iZWQ9bnVsbCx0PyhPYmplY3Qua2V5cyh0aGlzLmVsZW1lbnRzKS5sZW5ndGgmJihPKHRoaXMuZWxlbWVudHMuYnV0dG9ucy5wbGF5KSxPKHRoaXMuZWxlbWVudHMuY2FwdGlvbnMpLE8odGhpcy5lbGVtZW50cy5jb250cm9scyksTyh0aGlzLmVsZW1lbnRzLndyYXBwZXIpLHRoaXMuZWxlbWVudHMuYnV0dG9ucy5wbGF5PW51bGwsdGhpcy5lbGVtZW50cy5jYXB0aW9ucz1udWxsLHRoaXMuZWxlbWVudHMuY29udHJvbHM9bnVsbCx0aGlzLmVsZW1lbnRzLndyYXBwZXI9bnVsbCksUy5mdW5jdGlvbihlKSYmZSgpKTooZWUuY2FsbCh0aGlzKSxkZS5jYW5jZWxSZXF1ZXN0cy5jYWxsKHRoaXMpLHEodGhpcy5lbGVtZW50cy5vcmlnaW5hbCx0aGlzLmVsZW1lbnRzLmNvbnRhaW5lciksWi5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5vcmlnaW5hbCxcImRlc3Ryb3llZFwiLCEwKSxTLmZ1bmN0aW9uKGUpJiZlLmNhbGwodGhpcy5lbGVtZW50cy5vcmlnaW5hbCksdGhpcy5yZWFkeT0hMSxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuZWxlbWVudHM9bnVsbCx0aGlzLm1lZGlhPW51bGx9KSwyMDApKX07dGhpcy5zdG9wKCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXJzLmxvYWRpbmcpLGNsZWFyVGltZW91dCh0aGlzLnRpbWVycy5jb250cm9scyksY2xlYXJUaW1lb3V0KHRoaXMudGltZXJzLnJlc2l6ZWQpLHRoaXMuaXNIVE1MNT8oRmUudG9nZ2xlTmF0aXZlQ29udHJvbHMuY2FsbCh0aGlzLCEwKSxpKCkpOnRoaXMuaXNZb3VUdWJlPyhjbGVhckludGVydmFsKHRoaXMudGltZXJzLmJ1ZmZlcmluZyksY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVycy5wbGF5aW5nKSxudWxsIT09dGhpcy5lbWJlZCYmUy5mdW5jdGlvbih0aGlzLmVtYmVkLmRlc3Ryb3kpJiZ0aGlzLmVtYmVkLmRlc3Ryb3koKSxpKCkpOnRoaXMuaXNWaW1lbyYmKG51bGwhPT10aGlzLmVtYmVkJiZ0aGlzLmVtYmVkLnVubG9hZCgpLnRoZW4oaSksc2V0VGltZW91dChpLDIwMCkpfSkpLGUodGhpcyxcInN1cHBvcnRzXCIsKGU9PksubWltZS5jYWxsKHRoaXMsZSkpKSx0aGlzLnRpbWVycz17fSx0aGlzLnJlYWR5PSExLHRoaXMubG9hZGluZz0hMSx0aGlzLmZhaWxlZD0hMSx0aGlzLnRvdWNoPUsudG91Y2gsdGhpcy5tZWRpYT10LFMuc3RyaW5nKHRoaXMubWVkaWEpJiYodGhpcy5tZWRpYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMubWVkaWEpKSwod2luZG93LmpRdWVyeSYmdGhpcy5tZWRpYSBpbnN0YW5jZW9mIGpRdWVyeXx8Uy5ub2RlTGlzdCh0aGlzLm1lZGlhKXx8Uy5hcnJheSh0aGlzLm1lZGlhKSkmJih0aGlzLm1lZGlhPXRoaXMubWVkaWFbMF0pLHRoaXMuY29uZmlnPXgoe30sTGUsc3QuZGVmYXVsdHMsaXx8e30sKCgpPT57dHJ5e3JldHVybiBKU09OLnBhcnNlKHRoaXMubWVkaWEuZ2V0QXR0cmlidXRlKFwiZGF0YS1wbHlyLWNvbmZpZ1wiKSl9Y2F0Y2goZSl7cmV0dXJue319fSkoKSksdGhpcy5lbGVtZW50cz17Y29udGFpbmVyOm51bGwsZnVsbHNjcmVlbjpudWxsLGNhcHRpb25zOm51bGwsYnV0dG9uczp7fSxkaXNwbGF5Ont9LHByb2dyZXNzOnt9LGlucHV0czp7fSxzZXR0aW5nczp7cG9wdXA6bnVsbCxtZW51Om51bGwscGFuZWxzOnt9LGJ1dHRvbnM6e319fSx0aGlzLmNhcHRpb25zPXthY3RpdmU6bnVsbCxjdXJyZW50VHJhY2s6LTEsbWV0YTpuZXcgV2Vha01hcH0sdGhpcy5mdWxsc2NyZWVuPXthY3RpdmU6ITF9LHRoaXMub3B0aW9ucz17c3BlZWQ6W10scXVhbGl0eTpbXX0sdGhpcy5kZWJ1Zz1uZXcgRGUodGhpcy5jb25maWcuZGVidWcpLHRoaXMuZGVidWcubG9nKFwiQ29uZmlnXCIsdGhpcy5jb25maWcpLHRoaXMuZGVidWcubG9nKFwiU3VwcG9ydFwiLEspLFMubnVsbE9yVW5kZWZpbmVkKHRoaXMubWVkaWEpfHwhUy5lbGVtZW50KHRoaXMubWVkaWEpKXJldHVybiB2b2lkIHRoaXMuZGVidWcuZXJyb3IoXCJTZXR1cCBmYWlsZWQ6IG5vIHN1aXRhYmxlIGVsZW1lbnQgcGFzc2VkXCIpO2lmKHRoaXMubWVkaWEucGx5cilyZXR1cm4gdm9pZCB0aGlzLmRlYnVnLndhcm4oXCJUYXJnZXQgYWxyZWFkeSBzZXR1cFwiKTtpZighdGhpcy5jb25maWcuZW5hYmxlZClyZXR1cm4gdm9pZCB0aGlzLmRlYnVnLmVycm9yKFwiU2V0dXAgZmFpbGVkOiBkaXNhYmxlZCBieSBjb25maWdcIik7aWYoIUsuY2hlY2soKS5hcGkpcmV0dXJuIHZvaWQgdGhpcy5kZWJ1Zy5lcnJvcihcIlNldHVwIGZhaWxlZDogbm8gc3VwcG9ydFwiKTtjb25zdCBzPXRoaXMubWVkaWEuY2xvbmVOb2RlKCEwKTtzLmF1dG9wbGF5PSExLHRoaXMuZWxlbWVudHMub3JpZ2luYWw9cztjb25zdCBuPXRoaXMubWVkaWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpO2xldCBhPW51bGwsbD1udWxsO3N3aXRjaChuKXtjYXNlXCJkaXZcIjppZihhPXRoaXMubWVkaWEucXVlcnlTZWxlY3RvcihcImlmcmFtZVwiKSxTLmVsZW1lbnQoYSkpe2lmKGw9TWUoYS5nZXRBdHRyaWJ1dGUoXCJzcmNcIikpLHRoaXMucHJvdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuL14oaHR0cHM/OlxcL1xcLyk/KHd3d1xcLik/KHlvdXR1YmVcXC5jb218eW91dHViZS1ub2Nvb2tpZVxcLmNvbXx5b3V0dVxcLj9iZSlcXC8uKyQvLnRlc3QoZSk/X2UueW91dHViZTovXmh0dHBzPzpcXC9cXC9wbGF5ZXIudmltZW8uY29tXFwvdmlkZW9cXC9cXGR7MCw5fSg/PVxcYnxcXC8pLy50ZXN0KGUpP19lLnZpbWVvOm51bGx9KGwudG9TdHJpbmcoKSksdGhpcy5lbGVtZW50cy5jb250YWluZXI9dGhpcy5tZWRpYSx0aGlzLm1lZGlhPWEsdGhpcy5lbGVtZW50cy5jb250YWluZXIuY2xhc3NOYW1lPVwiXCIsbC5zZWFyY2gubGVuZ3RoKXtjb25zdCBlPVtcIjFcIixcInRydWVcIl07ZS5pbmNsdWRlcyhsLnNlYXJjaFBhcmFtcy5nZXQoXCJhdXRvcGxheVwiKSkmJih0aGlzLmNvbmZpZy5hdXRvcGxheT0hMCksZS5pbmNsdWRlcyhsLnNlYXJjaFBhcmFtcy5nZXQoXCJsb29wXCIpKSYmKHRoaXMuY29uZmlnLmxvb3AuYWN0aXZlPSEwKSx0aGlzLmlzWW91VHViZT8odGhpcy5jb25maWcucGxheXNpbmxpbmU9ZS5pbmNsdWRlcyhsLnNlYXJjaFBhcmFtcy5nZXQoXCJwbGF5c2lubGluZVwiKSksdGhpcy5jb25maWcueW91dHViZS5obD1sLnNlYXJjaFBhcmFtcy5nZXQoXCJobFwiKSk6dGhpcy5jb25maWcucGxheXNpbmxpbmU9ITB9fWVsc2UgdGhpcy5wcm92aWRlcj10aGlzLm1lZGlhLmdldEF0dHJpYnV0ZSh0aGlzLmNvbmZpZy5hdHRyaWJ1dGVzLmVtYmVkLnByb3ZpZGVyKSx0aGlzLm1lZGlhLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmNvbmZpZy5hdHRyaWJ1dGVzLmVtYmVkLnByb3ZpZGVyKTtpZihTLmVtcHR5KHRoaXMucHJvdmlkZXIpfHwhT2JqZWN0LnZhbHVlcyhfZSkuaW5jbHVkZXModGhpcy5wcm92aWRlcikpcmV0dXJuIHZvaWQgdGhpcy5kZWJ1Zy5lcnJvcihcIlNldHVwIGZhaWxlZDogSW52YWxpZCBwcm92aWRlclwiKTt0aGlzLnR5cGU9amU7YnJlYWs7Y2FzZVwidmlkZW9cIjpjYXNlXCJhdWRpb1wiOnRoaXMudHlwZT1uLHRoaXMucHJvdmlkZXI9X2UuaHRtbDUsdGhpcy5tZWRpYS5oYXNBdHRyaWJ1dGUoXCJjcm9zc29yaWdpblwiKSYmKHRoaXMuY29uZmlnLmNyb3Nzb3JpZ2luPSEwKSx0aGlzLm1lZGlhLmhhc0F0dHJpYnV0ZShcImF1dG9wbGF5XCIpJiYodGhpcy5jb25maWcuYXV0b3BsYXk9ITApLCh0aGlzLm1lZGlhLmhhc0F0dHJpYnV0ZShcInBsYXlzaW5saW5lXCIpfHx0aGlzLm1lZGlhLmhhc0F0dHJpYnV0ZShcIndlYmtpdC1wbGF5c2lubGluZVwiKSkmJih0aGlzLmNvbmZpZy5wbGF5c2lubGluZT0hMCksdGhpcy5tZWRpYS5oYXNBdHRyaWJ1dGUoXCJtdXRlZFwiKSYmKHRoaXMuY29uZmlnLm11dGVkPSEwKSx0aGlzLm1lZGlhLmhhc0F0dHJpYnV0ZShcImxvb3BcIikmJih0aGlzLmNvbmZpZy5sb29wLmFjdGl2ZT0hMCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdm9pZCB0aGlzLmRlYnVnLmVycm9yKFwiU2V0dXAgZmFpbGVkOiB1bnN1cHBvcnRlZCB0eXBlXCIpfXRoaXMuc3VwcG9ydGVkPUsuY2hlY2sodGhpcy50eXBlLHRoaXMucHJvdmlkZXIpLHRoaXMuc3VwcG9ydGVkLmFwaT8odGhpcy5ldmVudExpc3RlbmVycz1bXSx0aGlzLmxpc3RlbmVycz1uZXcgVmUodGhpcyksdGhpcy5zdG9yYWdlPW5ldyB3ZSh0aGlzKSx0aGlzLm1lZGlhLnBseXI9dGhpcyxTLmVsZW1lbnQodGhpcy5lbGVtZW50cy5jb250YWluZXIpfHwodGhpcy5lbGVtZW50cy5jb250YWluZXI9JChcImRpdlwiKSxMKHRoaXMubWVkaWEsdGhpcy5lbGVtZW50cy5jb250YWluZXIpKSxGZS5taWdyYXRlU3R5bGVzLmNhbGwodGhpcyksRmUuYWRkU3R5bGVIb29rLmNhbGwodGhpcyksWGUuc2V0dXAuY2FsbCh0aGlzKSx0aGlzLmNvbmZpZy5kZWJ1ZyYmWC5jYWxsKHRoaXMsdGhpcy5lbGVtZW50cy5jb250YWluZXIsdGhpcy5jb25maWcuZXZlbnRzLmpvaW4oXCIgXCIpLChlPT57dGhpcy5kZWJ1Zy5sb2coYGV2ZW50OiAke2UudHlwZX1gKX0pKSx0aGlzLmZ1bGxzY3JlZW49bmV3IEhlKHRoaXMpLCh0aGlzLmlzSFRNTDV8fHRoaXMuaXNFbWJlZCYmIXRoaXMuc3VwcG9ydGVkLnVpKSYmRmUuYnVpbGQuY2FsbCh0aGlzKSx0aGlzLmxpc3RlbmVycy5jb250YWluZXIoKSx0aGlzLmxpc3RlbmVycy5nbG9iYWwoKSx0aGlzLmNvbmZpZy5hZHMuZW5hYmxlZCYmKHRoaXMuYWRzPW5ldyBKZSh0aGlzKSksdGhpcy5pc0hUTUw1JiZ0aGlzLmNvbmZpZy5hdXRvcGxheSYmdGhpcy5vbmNlKFwiY2FucGxheVwiLCgoKT0+aWUodGhpcy5wbGF5KCkpKSksdGhpcy5sYXN0U2Vla1RpbWU9MCx0aGlzLmNvbmZpZy5wcmV2aWV3VGh1bWJuYWlscy5lbmFibGVkJiYodGhpcy5wcmV2aWV3VGh1bWJuYWlscz1uZXcgdHQodGhpcykpKTp0aGlzLmRlYnVnLmVycm9yKFwiU2V0dXAgZmFpbGVkOiBubyBzdXBwb3J0XCIpfWdldCBpc0hUTUw1KCl7cmV0dXJuIHRoaXMucHJvdmlkZXI9PT1fZS5odG1sNX1nZXQgaXNFbWJlZCgpe3JldHVybiB0aGlzLmlzWW91VHViZXx8dGhpcy5pc1ZpbWVvfWdldCBpc1lvdVR1YmUoKXtyZXR1cm4gdGhpcy5wcm92aWRlcj09PV9lLnlvdXR1YmV9Z2V0IGlzVmltZW8oKXtyZXR1cm4gdGhpcy5wcm92aWRlcj09PV9lLnZpbWVvfWdldCBpc1ZpZGVvKCl7cmV0dXJuIHRoaXMudHlwZT09PWplfWdldCBpc0F1ZGlvKCl7cmV0dXJuIHRoaXMudHlwZT09PU9lfWdldCBwbGF5aW5nKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5yZWFkeSYmIXRoaXMucGF1c2VkJiYhdGhpcy5lbmRlZCl9Z2V0IHBhdXNlZCgpe3JldHVybiBCb29sZWFuKHRoaXMubWVkaWEucGF1c2VkKX1nZXQgc3RvcHBlZCgpe3JldHVybiBCb29sZWFuKHRoaXMucGF1c2VkJiYwPT09dGhpcy5jdXJyZW50VGltZSl9Z2V0IGVuZGVkKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5tZWRpYS5lbmRlZCl9c2V0IGN1cnJlbnRUaW1lKGUpe2lmKCF0aGlzLmR1cmF0aW9uKXJldHVybjtjb25zdCB0PVMubnVtYmVyKGUpJiZlPjA7dGhpcy5tZWRpYS5jdXJyZW50VGltZT10P01hdGgubWluKGUsdGhpcy5kdXJhdGlvbik6MCx0aGlzLmRlYnVnLmxvZyhgU2Vla2luZyB0byAke3RoaXMuY3VycmVudFRpbWV9IHNlY29uZHNgKX1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gTnVtYmVyKHRoaXMubWVkaWEuY3VycmVudFRpbWUpfWdldCBidWZmZXJlZCgpe2NvbnN0e2J1ZmZlcmVkOmV9PXRoaXMubWVkaWE7cmV0dXJuIFMubnVtYmVyKGUpP2U6ZSYmZS5sZW5ndGgmJnRoaXMuZHVyYXRpb24+MD9lLmVuZCgwKS90aGlzLmR1cmF0aW9uOjB9Z2V0IHNlZWtpbmcoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm1lZGlhLnNlZWtpbmcpfWdldCBkdXJhdGlvbigpe2NvbnN0IGU9cGFyc2VGbG9hdCh0aGlzLmNvbmZpZy5kdXJhdGlvbiksdD0odGhpcy5tZWRpYXx8e30pLmR1cmF0aW9uLGk9Uy5udW1iZXIodCkmJnQhPT0xLzA/dDowO3JldHVybiBlfHxpfXNldCB2b2x1bWUoZSl7bGV0IHQ9ZTtTLnN0cmluZyh0KSYmKHQ9TnVtYmVyKHQpKSxTLm51bWJlcih0KXx8KHQ9dGhpcy5zdG9yYWdlLmdldChcInZvbHVtZVwiKSksUy5udW1iZXIodCl8fCh7dm9sdW1lOnR9PXRoaXMuY29uZmlnKSx0PjEmJih0PTEpLHQ8MCYmKHQ9MCksdGhpcy5jb25maWcudm9sdW1lPXQsdGhpcy5tZWRpYS52b2x1bWU9dCwhUy5lbXB0eShlKSYmdGhpcy5tdXRlZCYmdD4wJiYodGhpcy5tdXRlZD0hMSl9Z2V0IHZvbHVtZSgpe3JldHVybiBOdW1iZXIodGhpcy5tZWRpYS52b2x1bWUpfXNldCBtdXRlZChlKXtsZXQgdD1lO1MuYm9vbGVhbih0KXx8KHQ9dGhpcy5zdG9yYWdlLmdldChcIm11dGVkXCIpKSxTLmJvb2xlYW4odCl8fCh0PXRoaXMuY29uZmlnLm11dGVkKSx0aGlzLmNvbmZpZy5tdXRlZD10LHRoaXMubWVkaWEubXV0ZWQ9dH1nZXQgbXV0ZWQoKXtyZXR1cm4gQm9vbGVhbih0aGlzLm1lZGlhLm11dGVkKX1nZXQgaGFzQXVkaW8oKXtyZXR1cm4hdGhpcy5pc0hUTUw1fHwoISF0aGlzLmlzQXVkaW98fChCb29sZWFuKHRoaXMubWVkaWEubW96SGFzQXVkaW8pfHxCb29sZWFuKHRoaXMubWVkaWEud2Via2l0QXVkaW9EZWNvZGVkQnl0ZUNvdW50KXx8Qm9vbGVhbih0aGlzLm1lZGlhLmF1ZGlvVHJhY2tzJiZ0aGlzLm1lZGlhLmF1ZGlvVHJhY2tzLmxlbmd0aCkpKX1zZXQgc3BlZWQoZSl7bGV0IHQ9bnVsbDtTLm51bWJlcihlKSYmKHQ9ZSksUy5udW1iZXIodCl8fCh0PXRoaXMuc3RvcmFnZS5nZXQoXCJzcGVlZFwiKSksUy5udW1iZXIodCl8fCh0PXRoaXMuY29uZmlnLnNwZWVkLnNlbGVjdGVkKTtjb25zdHttaW5pbXVtU3BlZWQ6aSxtYXhpbXVtU3BlZWQ6c309dGhpczt0PUdlKHQsaSxzKSx0aGlzLmNvbmZpZy5zcGVlZC5zZWxlY3RlZD10LHNldFRpbWVvdXQoKCgpPT57dGhpcy5tZWRpYSYmKHRoaXMubWVkaWEucGxheWJhY2tSYXRlPXQpfSksMCl9Z2V0IHNwZWVkKCl7cmV0dXJuIE51bWJlcih0aGlzLm1lZGlhLnBsYXliYWNrUmF0ZSl9Z2V0IG1pbmltdW1TcGVlZCgpe3JldHVybiB0aGlzLmlzWW91VHViZT9NYXRoLm1pbiguLi50aGlzLm9wdGlvbnMuc3BlZWQpOnRoaXMuaXNWaW1lbz8uNTouMDYyNX1nZXQgbWF4aW11bVNwZWVkKCl7cmV0dXJuIHRoaXMuaXNZb3VUdWJlP01hdGgubWF4KC4uLnRoaXMub3B0aW9ucy5zcGVlZCk6dGhpcy5pc1ZpbWVvPzI6MTZ9c2V0IHF1YWxpdHkoZSl7Y29uc3QgdD10aGlzLmNvbmZpZy5xdWFsaXR5LGk9dGhpcy5vcHRpb25zLnF1YWxpdHk7aWYoIWkubGVuZ3RoKXJldHVybjtsZXQgcz1bIVMuZW1wdHkoZSkmJk51bWJlcihlKSx0aGlzLnN0b3JhZ2UuZ2V0KFwicXVhbGl0eVwiKSx0LnNlbGVjdGVkLHQuZGVmYXVsdF0uZmluZChTLm51bWJlciksbj0hMDtpZighaS5pbmNsdWRlcyhzKSl7Y29uc3QgZT1uZShpLHMpO3RoaXMuZGVidWcud2FybihgVW5zdXBwb3J0ZWQgcXVhbGl0eSBvcHRpb246ICR7c30sIHVzaW5nICR7ZX0gaW5zdGVhZGApLHM9ZSxuPSExfXQuc2VsZWN0ZWQ9cyx0aGlzLm1lZGlhLnF1YWxpdHk9cyxuJiZ0aGlzLnN0b3JhZ2Uuc2V0KHtxdWFsaXR5OnN9KX1nZXQgcXVhbGl0eSgpe3JldHVybiB0aGlzLm1lZGlhLnF1YWxpdHl9c2V0IGxvb3AoZSl7Y29uc3QgdD1TLmJvb2xlYW4oZSk/ZTp0aGlzLmNvbmZpZy5sb29wLmFjdGl2ZTt0aGlzLmNvbmZpZy5sb29wLmFjdGl2ZT10LHRoaXMubWVkaWEubG9vcD10fWdldCBsb29wKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5tZWRpYS5sb29wKX1zZXQgc291cmNlKGUpe2l0LmNoYW5nZS5jYWxsKHRoaXMsZSl9Z2V0IHNvdXJjZSgpe3JldHVybiB0aGlzLm1lZGlhLmN1cnJlbnRTcmN9Z2V0IGRvd25sb2FkKCl7Y29uc3R7ZG93bmxvYWQ6ZX09dGhpcy5jb25maWcudXJscztyZXR1cm4gUy51cmwoZSk/ZTp0aGlzLnNvdXJjZX1zZXQgZG93bmxvYWQoZSl7Uy51cmwoZSkmJih0aGlzLmNvbmZpZy51cmxzLmRvd25sb2FkPWUsUGUuc2V0RG93bmxvYWRVcmwuY2FsbCh0aGlzKSl9c2V0IHBvc3RlcihlKXt0aGlzLmlzVmlkZW8/RmUuc2V0UG9zdGVyLmNhbGwodGhpcyxlLCExKS5jYXRjaCgoKCk9Pnt9KSk6dGhpcy5kZWJ1Zy53YXJuKFwiUG9zdGVyIGNhbiBvbmx5IGJlIHNldCBmb3IgdmlkZW9cIil9Z2V0IHBvc3Rlcigpe3JldHVybiB0aGlzLmlzVmlkZW8/dGhpcy5tZWRpYS5nZXRBdHRyaWJ1dGUoXCJwb3N0ZXJcIil8fHRoaXMubWVkaWEuZ2V0QXR0cmlidXRlKFwiZGF0YS1wb3N0ZXJcIik6bnVsbH1nZXQgcmF0aW8oKXtpZighdGhpcy5pc1ZpZGVvKXJldHVybiBudWxsO2NvbnN0IGU9b2UoY2UuY2FsbCh0aGlzKSk7cmV0dXJuIFMuYXJyYXkoZSk/ZS5qb2luKFwiOlwiKTplfXNldCByYXRpbyhlKXt0aGlzLmlzVmlkZW8/Uy5zdHJpbmcoZSkmJnJlKGUpPyh0aGlzLmNvbmZpZy5yYXRpbz1vZShlKSx1ZS5jYWxsKHRoaXMpKTp0aGlzLmRlYnVnLmVycm9yKGBJbnZhbGlkIGFzcGVjdCByYXRpbyBzcGVjaWZpZWQgKCR7ZX0pYCk6dGhpcy5kZWJ1Zy53YXJuKFwiQXNwZWN0IHJhdGlvIGNhbiBvbmx5IGJlIHNldCBmb3IgdmlkZW9cIil9c2V0IGF1dG9wbGF5KGUpe3RoaXMuY29uZmlnLmF1dG9wbGF5PVMuYm9vbGVhbihlKT9lOnRoaXMuY29uZmlnLmF1dG9wbGF5fWdldCBhdXRvcGxheSgpe3JldHVybiBCb29sZWFuKHRoaXMuY29uZmlnLmF1dG9wbGF5KX10b2dnbGVDYXB0aW9ucyhlKXt4ZS50b2dnbGUuY2FsbCh0aGlzLGUsITEpfXNldCBjdXJyZW50VHJhY2soZSl7eGUuc2V0LmNhbGwodGhpcyxlLCExKSx4ZS5zZXR1cC5jYWxsKHRoaXMpfWdldCBjdXJyZW50VHJhY2soKXtjb25zdHt0b2dnbGVkOmUsY3VycmVudFRyYWNrOnR9PXRoaXMuY2FwdGlvbnM7cmV0dXJuIGU/dDotMX1zZXQgbGFuZ3VhZ2UoZSl7eGUuc2V0TGFuZ3VhZ2UuY2FsbCh0aGlzLGUsITEpfWdldCBsYW5ndWFnZSgpe3JldHVybih4ZS5nZXRDdXJyZW50VHJhY2suY2FsbCh0aGlzKXx8e30pLmxhbmd1YWdlfXNldCBwaXAoZSl7aWYoIUsucGlwKXJldHVybjtjb25zdCB0PVMuYm9vbGVhbihlKT9lOiF0aGlzLnBpcDtTLmZ1bmN0aW9uKHRoaXMubWVkaWEud2Via2l0U2V0UHJlc2VudGF0aW9uTW9kZSkmJnRoaXMubWVkaWEud2Via2l0U2V0UHJlc2VudGF0aW9uTW9kZSh0P0llOiRlKSxTLmZ1bmN0aW9uKHRoaXMubWVkaWEucmVxdWVzdFBpY3R1cmVJblBpY3R1cmUpJiYoIXRoaXMucGlwJiZ0P3RoaXMubWVkaWEucmVxdWVzdFBpY3R1cmVJblBpY3R1cmUoKTp0aGlzLnBpcCYmIXQmJmRvY3VtZW50LmV4aXRQaWN0dXJlSW5QaWN0dXJlKCkpfWdldCBwaXAoKXtyZXR1cm4gSy5waXA/Uy5lbXB0eSh0aGlzLm1lZGlhLndlYmtpdFByZXNlbnRhdGlvbk1vZGUpP3RoaXMubWVkaWE9PT1kb2N1bWVudC5waWN0dXJlSW5QaWN0dXJlRWxlbWVudDp0aGlzLm1lZGlhLndlYmtpdFByZXNlbnRhdGlvbk1vZGU9PT1JZTpudWxsfXNldFByZXZpZXdUaHVtYm5haWxzKGUpe3RoaXMucHJldmlld1RodW1ibmFpbHMmJnRoaXMucHJldmlld1RodW1ibmFpbHMubG9hZGVkJiYodGhpcy5wcmV2aWV3VGh1bWJuYWlscy5kZXN0cm95KCksdGhpcy5wcmV2aWV3VGh1bWJuYWlscz1udWxsKSxPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLnByZXZpZXdUaHVtYm5haWxzLGUpLHRoaXMuY29uZmlnLnByZXZpZXdUaHVtYm5haWxzLmVuYWJsZWQmJih0aGlzLnByZXZpZXdUaHVtYm5haWxzPW5ldyB0dCh0aGlzKSl9c3RhdGljIHN1cHBvcnRlZChlLHQpe3JldHVybiBLLmNoZWNrKGUsdCl9c3RhdGljIGxvYWRTcHJpdGUoZSx0KXtyZXR1cm4ga2UoZSx0KX1zdGF0aWMgc2V0dXAoZSx0PXt9KXtsZXQgaT1udWxsO3JldHVybiBTLnN0cmluZyhlKT9pPUFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlKSk6Uy5ub2RlTGlzdChlKT9pPUFycmF5LmZyb20oZSk6Uy5hcnJheShlKSYmKGk9ZS5maWx0ZXIoUy5lbGVtZW50KSksUy5lbXB0eShpKT9udWxsOmkubWFwKChlPT5uZXcgc3QoZSx0KSkpfX12YXIgbnQ7cmV0dXJuIHN0LmRlZmF1bHRzPShudD1MZSxKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG50KSkpLHN0fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx5ci5taW4uanMubWFwXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/plyr/dist/plyr.min.js\n");
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
/************************************************************************/
|
|
/******/ // The module cache
|
|
/******/ var __webpack_module_cache__ = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/ // Check if module is in cache
|
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
/******/ if (cachedModule !== undefined) {
|
|
/******/ return cachedModule.exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
/******/ // no module.id needed
|
|
/******/ // no module.loaded needed
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/************************************************************************/
|
|
/******/ /* webpack/runtime/compat get default export */
|
|
/******/ !function() {
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function() { return module['default']; } :
|
|
/******/ function() { return module; };
|
|
/******/ __webpack_require__.d(getter, { a: getter });
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/ }();
|
|
/******/
|
|
/******/ /* webpack/runtime/define property getters */
|
|
/******/ !function() {
|
|
/******/ // define getter functions for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, definition) {
|
|
/******/ for(var key in definition) {
|
|
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
/******/ }
|
|
/******/ }
|
|
/******/ };
|
|
/******/ }();
|
|
/******/
|
|
/******/ /* webpack/runtime/global */
|
|
/******/ !function() {
|
|
/******/ __webpack_require__.g = (function() {
|
|
/******/ if (typeof globalThis === 'object') return globalThis;
|
|
/******/ try {
|
|
/******/ return this || new Function('return this')();
|
|
/******/ } catch (e) {
|
|
/******/ if (typeof window === 'object') return window;
|
|
/******/ }
|
|
/******/ })();
|
|
/******/ }();
|
|
/******/
|
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
/******/ !function() {
|
|
/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
|
|
/******/ }();
|
|
/******/
|
|
/******/ /* webpack/runtime/make namespace object */
|
|
/******/ !function() {
|
|
/******/ // 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 });
|
|
/******/ };
|
|
/******/ }();
|
|
/******/
|
|
/************************************************************************/
|
|
/******/
|
|
/******/ // startup
|
|
/******/ // Load entry module and return exports
|
|
/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
|
|
/******/ var __webpack_exports__ = __webpack_require__("./libs/plyr/plyr.js");
|
|
/******/
|
|
/******/ return __webpack_exports__;
|
|
/******/ })()
|
|
;
|
|
}); |