/*! For license information please see index.js.LICENSE.txt */ !function(){var t={875:function(t,e){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t=[],e=0;e2&&(l.children=arguments.length>3?t.call(arguments,2):r),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===l[a]&&(l[a]=e.defaultProps[a]);return m(e,l,o,i,null)}function m(t,n,o,i,a){var l={type:t,props:n,key:o,ref:i,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==a?++r:a};return null==a&&null!=e.vnode&&e.vnode(l),l}function y(t){return t.children}function g(t,e){this.props=t,this.context=e}function v(t,e){if(null==e)return t.__?v(t.__,t.__.__k.indexOf(t)+1):null;for(var n;ee&&o.sort(l));x.__r=0}function S(t,e,n,r,o,i,a,l,c,f,p){var _,h,g,b,w,x,S,k,L,j=0,I=r&&r.__k||s,P=I.length,C=P,M=e.length;for(n.__k=[],_=0;_0?m(b.type,b.props,b.key,b.ref?b.ref:null,b.__v):b)?(b.__=n,b.__b=n.__b+1,-1===(k=N(b,I,S=_+j,C))?g=u:(g=I[k]||u,I[k]=void 0,C--),A(t,b,g,o,i,a,l,c,f,p),w=b.__e,(h=b.ref)&&g.ref!=h&&(g.ref&&T(g.ref,null,b),p.push(h,b.__c||w,b)),null!=w&&(null==x&&(x=w),(L=g===u||null===g.__v)?-1==k&&j--:k!==S&&(k===S+1?j++:k>S?C>M-S?j+=k-S:j--:j=k(null!=c?1:0))for(;a>=0||l=0){if((c=e[a])&&o==c.key&&i===c.type)return a;a--}if(l=r.__.length&&r.__.push({__V:q}),r.__[t]}function Q(t){return W=1,K(st,t)}function K(t,e,n){var r=X(G++,2);if(r.t=t,!r.__c&&(r.__=[n?n(e):st(void 0,e),function(t){var e=r.__N?r.__N[0]:r.__[0],n=r.t(e,t);e!==n&&(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=R,!R.u)){var o=function(t,e,n){if(!r.__c.__H)return!0;var o=r.__c.__H.__.filter((function(t){return t.__c}));if(o.every((function(t){return!t.__N})))return!i||i.call(this,t,e,n);var a=!1;return o.forEach((function(t){if(t.__N){var e=t.__[0];t.__=t.__N,t.__N=void 0,e!==t.__[0]&&(a=!0)}})),!(!a&&r.__c.props===t)&&(!i||i.call(this,t,e,n))};R.u=!0;var i=R.shouldComponentUpdate,a=R.componentWillUpdate;R.componentWillUpdate=function(t,e,n){if(this.__e){var r=i;i=void 0,o(t,e,n),i=r}a&&a.call(this,t,e,n)},R.shouldComponentUpdate=o}return r.__N||r.__}function tt(t,n){var r=X(G++,3);!e.__s&&ut(r.__H,n)&&(r.__=t,r.i=n,R.__H.__h.push(r))}function et(t){return W=5,nt((function(){return{current:t}}),[])}function nt(t,e){var n=X(G++,7);return ut(n.__H,e)?(n.__V=t(),n.i=e,n.__h=t,n.__V):n.__}function rt(t,e){return W=8,nt((function(){return t}),e)}function ot(){for(var t;t=B.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(lt),t.__H.__h.forEach(ct),t.__H.__h=[]}catch(n){t.__H.__h=[],e.__e(n,t.__v)}}e.__b=function(t){R=null,Z&&Z(t)},e.__r=function(t){z&&z(t),G=0;var e=(R=t.__c).__H;e&&(H===R?(e.__h=[],R.__h=[],e.__.forEach((function(t){t.__N&&(t.__=t.__N),t.__V=q,t.__N=t.i=void 0}))):(e.__h.forEach(lt),e.__h.forEach(ct),e.__h=[],G=0)),H=R},e.diffed=function(t){Y&&Y(t);var n=t.__c;n&&n.__H&&(n.__H.__h.length&&(1!==B.push(n)&&V===e.requestAnimationFrame||((V=e.requestAnimationFrame)||at)(ot)),n.__H.__.forEach((function(t){t.i&&(t.__H=t.i),t.__V!==q&&(t.__=t.__V),t.i=void 0,t.__V=q}))),H=R=null},e.__c=function(t,n){n.some((function(t){try{t.__h.forEach(lt),t.__h=t.__h.filter((function(t){return!t.__||ct(t)}))}catch(r){n.some((function(t){t.__h&&(t.__h=[])})),n=[],e.__e(r,t.__v)}})),$&&$(t,n)},e.unmount=function(t){J&&J(t);var n,r=t.__c;r&&r.__H&&(r.__H.__.forEach((function(t){try{lt(t)}catch(t){n=t}})),r.__H=void 0,n&&e.__e(n,r.__v))};var it="function"==typeof requestAnimationFrame;function at(t){var e,n=function(){clearTimeout(r),it&&cancelAnimationFrame(e),setTimeout(t)},r=setTimeout(n,100);it&&(e=requestAnimationFrame(n))}function lt(t){var e=R,n=t.__c;"function"==typeof n&&(t.__c=void 0,n()),R=e}function ct(t){var e=R;t.__c=t.__(),R=e}function ut(t,e){return!t||t.length!==e.length||e.some((function(e,n){return e!==t[n]}))}function st(t,e){return"function"==typeof e?e(t):e}function ft(t){return ft="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ft(t)}function dt(){dt=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,r=Object.defineProperty||function(t,e,n){t[e]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(t,e,n,o){var i=e&&e.prototype instanceof d?e:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:w(t,n,l)}),a}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var f={};function d(){}function p(){}function _(){}var h={};c(h,i,(function(){return this}));var m=Object.getPrototypeOf,y=m&&m(m(E([])));y&&y!==e&&n.call(y,i)&&(h=y);var g=_.prototype=d.prototype=Object.create(h);function v(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){function o(r,i,a,l){var c=s(t[r],t,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==ft(f)&&n.call(f,"__await")?e.resolve(f.__await).then((function(t){o("next",t,a,l)}),(function(t){o("throw",t,a,l)})):e.resolve(f).then((function(t){u.value=t,a(u)}),(function(t){return o("throw",t,a,l)}))}l(c.arg)}var i;r(this,"_invoke",{value:function(t,n){function r(){return new e((function(e,r){o(t,n,e,r)}))}return i=i?i.then(r,r):r()}})}function w(t,e,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return{value:void 0,done:!0}}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=x(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(t,e,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}function x(t,e){var n=e.method,r=t.iterator[n];if(void 0===r)return e.delegate=null,"throw"===n&&t.iterator.return&&(e.method="return",e.arg=void 0,x(t,e),"throw"===e.method)||"return"!==n&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=s(r,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,f;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function S(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function k(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(S,this),this.reset(!0)}function E(t){if(t||""===t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function e(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(l&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),O(n),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;O(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:E(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},t}function pt(t,e,n,r,o,i,a){try{var l=t[i](a),c=l.value}catch(t){return void n(t)}l.done?e(c):Promise.resolve(c).then(r,o)}function _t(t){return ht.apply(this,arguments)}function ht(){return t=dt().mark((function t(e){var n,r,o;return dt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n=e.url,r=e.data,o=e.method,n){t.next=3;break}throw new Error("Empty url: ".concat(n));case 3:return t.next=5,fetch(n,{body:JSON.stringify(r),method:o}).then((function(t){return t.json()})).then((function(t){if(t.code)throw new Error("".concat(t.code,": ").concat((null==t?void 0:t.message)||"Unknown"));return t})).catch((function(t){throw new Error(t)}));case 5:return t.abrupt("return",t.sent);case 6:case"end":return t.stop()}}),t)})),ht=function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(t){pt(i,r,o,a,l,"next",t)}function l(t){pt(i,r,o,a,l,"throw",t)}a(void 0)}))},ht.apply(this,arguments);var t}function mt(t){return mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},mt(t)}function yt(){yt=function(){return t};var t={},e=Object.prototype,n=e.hasOwnProperty,r=Object.defineProperty||function(t,e,n){t[e]=n.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag";function c(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{c({},"")}catch(t){c=function(t,e,n){return t[e]=n}}function u(t,e,n,o){var i=e&&e.prototype instanceof d?e:d,a=Object.create(i.prototype),l=new k(o||[]);return r(a,"_invoke",{value:w(t,n,l)}),a}function s(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){return{type:"throw",arg:t}}}t.wrap=u;var f={};function d(){}function p(){}function _(){}var h={};c(h,i,(function(){return this}));var m=Object.getPrototypeOf,y=m&&m(m(E([])));y&&y!==e&&n.call(y,i)&&(h=y);var g=_.prototype=d.prototype=Object.create(h);function v(t){["next","throw","return"].forEach((function(e){c(t,e,(function(t){return this._invoke(e,t)}))}))}function b(t,e){function o(r,i,a,l){var c=s(t[r],t,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==mt(f)&&n.call(f,"__await")?e.resolve(f.__await).then((function(t){o("next",t,a,l)}),(function(t){o("throw",t,a,l)})):e.resolve(f).then((function(t){u.value=t,a(u)}),(function(t){return o("throw",t,a,l)}))}l(c.arg)}var i;r(this,"_invoke",{value:function(t,n){function r(){return new e((function(e,r){o(t,n,e,r)}))}return i=i?i.then(r,r):r()}})}function w(t,e,n){var r="suspendedStart";return function(o,i){if("executing"===r)throw new Error("Generator is already running");if("completed"===r){if("throw"===o)throw i;return{value:void 0,done:!0}}for(n.method=o,n.arg=i;;){var a=n.delegate;if(a){var l=x(a,n);if(l){if(l===f)continue;return l}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if("suspendedStart"===r)throw r="completed",n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r="executing";var c=s(t,e,n);if("normal"===c.type){if(r=n.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r="completed",n.method="throw",n.arg=c.arg)}}}function x(t,e){var n=e.method,r=t.iterator[n];if(void 0===r)return e.delegate=null,"throw"===n&&t.iterator.return&&(e.method="return",e.arg=void 0,x(t,e),"throw"===e.method)||"return"!==n&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+n+"' method")),f;var o=s(r,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,f;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function S(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function O(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function k(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(S,this),this.reset(!0)}function E(t){if(t||""===t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var r=-1,o=function e(){for(;++r=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(l&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),O(n),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;O(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:E(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},t}function gt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,l=[],c=!0,u=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){u=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return vt(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?vt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function vt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(l&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),O(n),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;O(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:E(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},t}function Dt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,o,i,a,l=[],c=!0,u=!1;try{if(i=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==e);c=!0);}catch(t){u=!0,o=t}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw o}}return l}}(t,e)||Ut(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ut(t,e){if(t){if("string"==typeof t)return Ft(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ft(t,e):void 0}}function Ft(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n1&&void 0!==c[1]?c[1]:"",o=c.length>2&&void 0!==c[2]?c[2]:0,i=e.source,a=null===(n=window)||void 0===n||null===(n=n.qligg_frontend)||void 0===n||null===(n=n.restRoutePaths)||void 0===n?void 0:n[i]){t.next=6;break}throw new Error("Unknown source: ".concat(i));case 6:return t.next=8,_t({url:a,method:"POST",data:{feedSettings:e,after:r,pagination:o}});case 8:return l=t.sent,t.abrupt("return",l);case 10:case"end":return t.stop()}}),t)}))),Vt.apply(this,arguments)}jt.Consumer;var Wt=n(875),Bt=n.n(Wt),qt=function(t){t.feedSettings;var e=t.href,n=void 0===e?"#":e,r=t.className,o=t.children;return h("a",{href:n,target:"blank",onClick:t.onClick,className:Bt()("instagram-gallery__button",r)},o)};function Zt(t,e){var n=t.tag,r=t.source,o=e.username;switch(r){case"username":return"https://www.instagram.com/".concat(o);case"tag":return"https://www.instagram.com/explore/tags/".concat(n);default:return"https://www.instagram.com"}}var zt,Yt=(zt=function(t){var e,n,r=t.userProfile,o=t.feedSettings,i=t.onClick,a=t.after,l=!(null==o||null===(e=o.button)||void 0===e||!e.display),c=!(null==o||null===(n=o.button_load)||void 0===n||!n.display)&&""!=a;return h("div",{className:"instagram-gallery__actions"},l&&h(qt,{feedSettings:o,href:Zt(o,r),target:"blank",className:"instagram-gallery__button--follow"},h("i",{className:"qligg-icon-instagram "}),o.button.text),c&&h(qt,{feedSettings:o,className:"instagram-gallery__button--load",onClick:i},o.button_load.text))},function(t){var e=t.feedSettings,n=!!e.button.display,r=!!e.button_load.display;return h(y,null,h("style",null,n&&"\n #instagram-gallery-feed-".concat(e.id," .instagram-gallery__actions .instagram-gallery__button--follow {\n color: ").concat(e.button.text_color,";\n }\n\n #instagram-gallery-feed-").concat(e.id," .instagram-gallery__actions .instagram-gallery__button--follow {\n background-color: ").concat(e.button.background,";\n }\n\n #instagram-gallery-feed-").concat(e.id," .instagram-gallery__actions .instagram-gallery__button--follow:hover {\n background-color: ").concat(e.button.background_hover,";\n }\n "),r&&"\n #instagram-gallery-feed-".concat(e.id," .instagram-gallery__actions .instagram-gallery__button--load {\n color: ").concat(e.button_load.text_color,";\n }\n\n #instagram-gallery-feed-").concat(e.id," .instagram-gallery__actions .instagram-gallery__button--load {\n background-color: ").concat(e.button_load.background,";\n }\n\n #instagram-gallery-feed-").concat(e.id," .instagram-gallery__actions .instagram-gallery__button--load:hover {\n background-color: ").concat(e.button_load.background_hover,";\n }\n ")),h(zt,t))}),$t=function(){var t,e=null===(t=window)||void 0===t||null===(t=t.qligg_frontend)||void 0===t||null===(t=t.settings)||void 0===t?void 0:t.spinner_image_url;return h("div",{className:"instagram-gallery__spinner",style:e?{backgroundImage:"url(".concat(e,")")}:{}})},Jt=function(t){var e=t.errorUserProfile,n=t.errorUserMediaList;return h("div",{className:"instagram-gallery__alert"},h("ul",null,e&&h("li",null,h("b",null,e.error),h("p",null,e.message)),n&&h("li",null,h("b",null,n.error),h("p",null,n.message))))};function Xt(t,e){for(var n in e)t[n]=e[n];return t}function Qt(t,e){for(var n in t)if("__source"!==n&&!(n in e))return!0;for(var r in e)if("__source"!==r&&t[r]!==e[r])return!0;return!1}function Kt(t){this.props=t}function te(t,e){function n(t){var n=this.props.ref,r=n==t.ref;return!r&&n&&(n.call?n(null):n.current=null),e?!e(this.props,t)||!r:Qt(this.props,t)}function r(e){return this.shouldComponentUpdate=n,h(t,e)}return r.displayName="Memo("+(t.displayName||t.name)+")",r.prototype.isReactComponent=!0,r.__f=!0,r}(Kt.prototype=new g).isPureReactComponent=!0,Kt.prototype.shouldComponentUpdate=function(t,e){return Qt(this.props,t)||Qt(this.state,e)};var ee=e.__b;e.__b=function(t){t.type&&t.type.__f&&t.ref&&(t.props.ref=t.ref,t.ref=null),ee&&ee(t)};var ne="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.forward_ref")||3911;var re=e.__e;e.__e=function(t,e,n,r){if(t.then)for(var o,i=e;i=i.__;)if((o=i.__c)&&o.__c)return null==e.__e&&(e.__e=n.__e,e.__k=n.__k),o.__c(t,e);re(t,e,n,r)};var oe=e.unmount;function ie(t,e,n){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach((function(t){"function"==typeof t.__c&&t.__c()})),t.__c.__H=null),null!=(t=Xt({},t)).__c&&(t.__c.__P===n&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map((function(t){return ie(t,e,n)}))),t}function ae(t,e,n){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map((function(t){return ae(t,e,n)})),t.__c&&t.__c.__P===e&&(t.__e&&n.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=n)),t}function le(){this.__u=0,this.t=null,this.__b=null}function ce(t){var e=t.__.__c;return e&&e.__a&&e.__a(t)}function ue(){this.u=null,this.o=null}e.unmount=function(t){var e=t.__c;e&&e.__R&&e.__R(),e&&!0===t.__h&&(t.type=null),oe&&oe(t)},(le.prototype=new g).__c=function(t,e){var n=e.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var o=ce(r.__v),i=!1,a=function(){i||(i=!0,n.__R=null,o?o(l):l())};n.__R=a;var l=function(){if(! --r.__u){if(r.state.__a){var t=r.state.__a;r.__v.__k[0]=ae(t,t.__c.__P,t.__c.__O)}var e;for(r.setState({__a:r.__b=null});e=r.t.pop();)e.forceUpdate()}},c=!0===e.__h;r.__u++||c||r.setState({__a:r.__b=r.__v.__k[0]}),t.then(a,a)},le.prototype.componentWillUnmount=function(){this.t=[]},le.prototype.render=function(t,e){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=ie(this.__b,n,r.__O=r.__P)}this.__b=null}var o=e.__a&&h(y,null,t.fallback);return o&&(o.__h=null),[h(y,null,e.__a?null:t.children),o]};var se=function(t,e,n){if(++n[1]===n[0]&&t.o.delete(e),t.props.revealOrder&&("t"!==t.props.revealOrder[0]||!t.o.size))for(n=t.u;n;){for(;n.length>3;)n.pop()();if(n[1]>>1,1),e.i.removeChild(t)}}),F(h(fe,{context:e.context},t.__v),e.l)}(ue.prototype=new g).__a=function(t){var e=this,n=ce(e.__v),r=e.o.get(t);return r[0]++,function(o){var i=function(){e.props.revealOrder?(r.push(o),se(e,t,r)):o()};n?n(i):i()}},ue.prototype.render=function(t){this.u=null,this.o=new Map;var e=k(t.children);t.revealOrder&&"b"===t.revealOrder[0]&&e.reverse();for(var n=e.length;n--;)this.o.set(e[n],this.u=[1,0,this.u]);return t.children},ue.prototype.componentDidUpdate=ue.prototype.componentDidMount=function(){var t=this;this.o.forEach((function(e,n){se(t,n,e)}))};var pe="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,_e=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,he=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,me=/[A-Z0-9]/g,ye="undefined"!=typeof document,ge=function(t){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(t)};g.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(t){Object.defineProperty(g.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(e){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:e})}})}));var ve=e.event;function be(){}function we(){return this.cancelBubble}function xe(){return this.defaultPrevented}e.event=function(t){return ve&&(t=ve(t)),t.persist=be,t.isPropagationStopped=we,t.isDefaultPrevented=xe,t.nativeEvent=t};var Se={enumerable:!1,configurable:!0,get:function(){return this.class}},Oe=e.vnode;e.vnode=function(t){"string"==typeof t.type&&function(t){var e=t.props,n=t.type,r={};for(var o in e){var i=e[o];if(!("value"===o&&"defaultValue"in e&&null==i||ye&&"children"===o&&"noscript"===n||"class"===o||"className"===o)){var a=o.toLowerCase();"defaultValue"===o&&"value"in e&&null==e.value?o="value":"download"===o&&!0===i?i="":"ondoubleclick"===a?o="ondblclick":"onchange"!==a||"input"!==n&&"textarea"!==n||ge(e.type)?"onfocus"===a?o="onfocusin":"onblur"===a?o="onfocusout":he.test(o)?o=a:-1===n.indexOf("-")&&_e.test(o)?o=o.replace(me,"-$&").toLowerCase():null===i&&(i=void 0):a=o="oninput","oninput"===a&&r[o=a]&&(o="oninputCapture"),r[o]=i}}"select"==n&&r.multiple&&Array.isArray(r.value)&&(r.value=k(e.children).forEach((function(t){t.props.selected=-1!=r.value.indexOf(t.props.value)}))),"select"==n&&null!=r.defaultValue&&(r.value=k(e.children).forEach((function(t){t.props.selected=r.multiple?-1!=r.defaultValue.indexOf(t.props.value):r.defaultValue==t.props.value}))),e.class&&!e.className?(r.class=e.class,Object.defineProperty(r,"className",Se)):(e.className&&!e.class||e.class&&e.className)&&(r.class=r.className=e.className),t.props=r}(t),t.$$typeof=pe,Oe&&Oe(t)};var ke=e.__r;e.__r=function(t){ke&&ke(t),t.__c};var Ee=e.diffed;function Ne(t){return Ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ne(t)}function Le(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function je(t){for(var e=1;e]+>/g,"");return(n=t.match("[぀-ヿ㐀-䶿一-鿿豈-﫿ヲ-゚]")?r.split("",e).join(""):r.split(" ",e).join(" ")).length0){var t=r.current.children.length-1,e=r.current.children[t];r.current.insertBefore(e,r.current.firstChild),r.current.style.transition="none";var n=r.current.children[0].offsetWidth;r.current.style.transform="translateX(-".concat(n,"px)"),setTimeout((function(){r.current.style.transition="200ms ease-out all",r.current.style.transform="translateX(0)"}),30)}},className:"insta-gallery-slider__button insta-gallery-slider__button--left qligg-icon-prev"}),h("span",{onClick:function(){if(r.current.children.length>0){var t=r.current.children[0];r.current.style.transition="300ms ease-out all";var e=r.current.children[0].offsetWidth;r.current.style.transform="translateX(-".concat(e,"px)"),r.current.addEventListener("transitionend",(function e(){r.current.style.transition="none",r.current.style.transform="translateX(0)",r.current.appendChild(t),r.current.removeEventListener("transitionend",e)}))}},className:"insta-gallery-slider__button insta-gallery-slider__button--right qligg-icon-next"})))},He=te((function(t){var e=t.currentFeedItem,n=t.feedSettings,r=null===e.media.url;if(null===e.media.url&&"CAROUSEL_ALBUM"!==e.media_type)return h("section",{className:"instagram-gallery-modal__media-container"},h("img",{className:"instagram-gallery-modal__media",src:n.copyright.placeholder?n.copyright.placeholder:e.media.thumbnail}),"VIDEO"===e.media_type&&r&&h("img",{alt:"thumbnail",src:Ge,className:"instagram-gallery-item__icon qligg-icon-video instagram-gallery-item__icon--views"}));switch(e.media_type){case"CAROUSEL_ALBUM":return h(Re,{feedSettings:n,currentFeedItem:e});case"VIDEO":return h("section",{className:"instagram-gallery-modal__media-container"},h("video",{poster:e.media.thumbnail,controls:!0,className:"instagram-gallery-modal__media",src:e.media.url}));default:return h("section",{className:"instagram-gallery-modal__media-container"},!!e.media.url&&h("img",{className:"instagram-gallery-modal__media",src:e.media.url}))}}));function Ve(){return Ve=Object.assign?Object.assign.bind():function(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var l=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(l&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),O(n),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;O(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:E(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),f}},t}function pn(t,e,n,r,o,i,a){try{var l=t[i](a),c=l.value}catch(t){return void n(t)}l.done?e(c):Promise.resolve(c).then(r,o)}function _n(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var i=t.apply(e,n);function a(t){pn(i,r,o,a,l,"next",t)}function l(t){pn(i,r,o,a,l,"throw",t)}a(void 0)}))}}_n(dn().mark((function t(){var e;return dn().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e=document.querySelectorAll(".instagram-gallery-feed"),Array.from(e).forEach(function(){var t=_n(dn().mark((function t(e){var n;return dn().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=JSON.parse(e.dataset.feed)||{},F(h(y,null,h(At,null,h(sn,{target:e,feedSettings:n}))),e);case 2:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}());case 2:case"end":return t.stop()}}),t)})))()}()}();; /*! For license information please see sb-youtube.min.js.LICENSE.txt */ (()=>{function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}var e,i,s,n,a,o,r,l,d=void 0!==d;if(!d){var h=function(){return!!document.createElement("video").canPlayType};if(window.sbyLinkify=("[a-z\\d.-]+://",n="mailto:",a=new RegExp("(?:\\b[a-z\\d.-]+://[^<>\\s]+|\\b(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:[;/][^#?<>\\s]*)?(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w)|(?:mailto:)?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w))","ig"),o=new RegExp("^[a-z\\d.-]+://","i"),r={"'":"`",">":"<",")":"(","]":"[","}":"{","B;":"B+","b:":"b9"},l={callback:function(t,e){return e?''+t+"":t},punct_regexp:/(?:[!?.,:;'"]|(?:&|&)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/},function(t,e){e=e||{};var i,s,d,h,c,u,y,g,p,b,f,m,_="",v=[];for(s in l)void 0===e[s]&&(e[s]=l[s]);for(;i=a.exec(t);)if(d=i[0],y=(u=a.lastIndex)-d.length,!/[\/:]/.test(t.charAt(y-1))){do{g=d,m=d.substr(-1),(f=r[m])&&(p=d.match(new RegExp("\\"+f+"(?!$)","g")),b=d.match(new RegExp("\\"+m,"g")),(p?p.length:0)<(b?b.length:0)&&(d=d.substr(0,d.length-1),u--)),e.punct_regexp&&(d=d.replace(e.punct_regexp,(function(t){return u-=t.length,""})))}while(d.length&&d!==g);h=d,o.test(h)||(h=(-1!==h.indexOf("@")?h.indexOf(n)?n:"":h.indexOf("irc.")?h.indexOf("ftp.")?"http://":"ftp://":"irc://")+h),c!=y&&(v.push([t.slice(c,y)]),c=u),v.push([d,h])}for(v.push([t.substr(c)]),s=0;s1||t.items.merge,a[s]=n?e*i:this._items[s].width();this._widths=a}},{filter:["items","settings"],run:function(){var t=[],i=this._items,s=this.settings,n=Math.max(2*s.items,4),a=2*Math.ceil(i.length/2),o=s.loop&&i.length?s.rewind?n:Math.max(n,a):0,r="",l="";for(o/=2;o--;)t.push(this.normalize(t.length/2,!0)),r+=i[t[t.length-1]][0].outerHTML,t.push(this.normalize(i.length-1-(t.length-1)/2,!0)),l=i[t[t.length-1]][0].outerHTML+l;this._clones=t,e(r).addClass("cloned").appendTo(this.$stage),e(l).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var t=this.settings.rtl?1:-1,e=this._clones.length+this._items.length,i=-1,s=0,n=0,a=[];++i",r)||this.op(e,"<",o)&&this.op(e,">",r))&&l.push(i);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+l.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],a.prototype.initialize=function(){var t,i,s;this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")&&(t=this.$element.find("img"),i=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:n,s=this.$element.children(i).width(),t.length&&s<=0&&this.preloadAutoWidthImages(t)),this.$element.addClass(this.options.loadingClass),this.$stage=e("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('
'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},a.prototype.setup=function(){var t=this.viewport(),i=this.options.responsive,s=-1,n=null;i?(e.each(i,(function(e){e<=t&&e>s&&(s=Number(e))})),"function"==typeof(n=e.extend({},this.options,i[s])).stagePadding&&(n.stagePadding=n.stagePadding()),delete n.responsive,n.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+s))):n=e.extend({},this.options),this.trigger("change",{property:{name:"settings",value:n}}),this._breakpoint=s,this.settings=n,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},a.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},a.prototype.prepare=function(t){var i=this.trigger("prepare",{content:t});return i.data||(i.data=e("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(t)),this.trigger("prepared",{content:i.data}),i.data},a.prototype.update=function(){for(var t=0,i=this._pipe.length,s=e.proxy((function(t){return this[t]}),this._invalidated),n={};t0)&&this._pipe[t].run(n),t++;this._invalidated={},!this.is("valid")&&this.enter("valid")},a.prototype.width=function(t){switch(t=t||a.Width.Default){case a.Width.Inner:case a.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},a.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},a.prototype.onThrottledResize=function(){i.clearTimeout(this.resizeTimer),this.resizeTimer=i.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},a.prototype.onResize=function(){return!!this._items.length&&this._width!==this.$element.width()&&!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))},a.prototype.registerEventHandlers=function(){e.support.transition&&this.$stage.on(e.support.transition.end+".owl.core",e.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(i,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",(function(){return!1}))),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",e.proxy(this.onDragEnd,this)))},a.prototype.onDragStart=function(t){var i=null;3!==t.which&&(e.support.transform?i={x:(i=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","))[16===i.length?12:4],y:i[16===i.length?13:5]}:(i=this.$stage.position(),i={x:this.settings.rtl?i.left+this.$stage.width()-this.width()+this.settings.margin:i.left,y:i.top}),this.is("animating")&&(e.support.transform?this.animate(i.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===t.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=e(t.target),this._drag.stage.start=i,this._drag.stage.current=i,this._drag.pointer=this.pointer(t),e(s).on("mouseup.owl.core touchend.owl.core",e.proxy(this.onDragEnd,this)),e(s).one("mousemove.owl.core touchmove.owl.core",e.proxy((function(t){var i=this.difference(this._drag.pointer,this.pointer(t));e(s).on("mousemove.owl.core touchmove.owl.core",e.proxy(this.onDragMove,this)),Math.abs(i.x)0^this.settings.rtl?"left":"right";e(s).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==i.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(n.x,0!==i.x?a:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=a,(Math.abs(i.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",(function(){return!1}))),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},a.prototype.closest=function(t,i){var s=-1,n=this.width(),a=this.coordinates();return this.settings.freeDrag||e.each(a,e.proxy((function(e,o){return"left"===i&&t>o-30&&to-n-30&&t",a[e+1]||o-n)&&(s="left"===i?e+1:e),-1===s}),this)),this.settings.loop||(this.op(t,">",a[this.minimum()])?s=t=this.minimum():this.op(t,"<",a[this.maximum()])&&(s=t=this.maximum())),s},a.prototype.animate=function(t){var i=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),i&&(this.enter("animating"),this.trigger("translate")),e.support.transform3d&&e.support.transition?this.$stage.css({transform:"translate3d("+t+"px,0px,0px)",transition:this.speed()/1e3+"s"}):i?this.$stage.animate({left:t+"px"},this.speed(),this.settings.fallbackEasing,e.proxy(this.onTransitionEnd,this)):this.$stage.css({left:t+"px"})},a.prototype.is=function(t){return this._states.current[t]&&this._states.current[t]>0},a.prototype.current=function(t){if(t===n)return this._current;if(0===this._items.length)return n;if(t=this.normalize(t),this._current!==t){var e=this.trigger("change",{property:{name:"position",value:t}});e.data!==n&&(t=this.normalize(e.data)),this._current=t,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},a.prototype.invalidate=function(t){return"string"===e.type(t)&&(this._invalidated[t]=!0,this.is("valid")&&this.leave("valid")),e.map(this._invalidated,(function(t,e){return e}))},a.prototype.reset=function(t){(t=this.normalize(t))!==n&&(this._speed=0,this._current=t,this.suppress(["translate","translated"]),this.animate(this.coordinates(t)),this.release(["translate","translated"]))},a.prototype.normalize=function(t,e){var i=this._items.length,s=e?0:this._clones.length;return!this.isNumeric(t)||i<1?t=n:(t<0||t>=i+s)&&(t=((t-s/2)%i+i)%i+s/2),t},a.prototype.relative=function(t){return t-=this._clones.length/2,this.normalize(t,!0)},a.prototype.maximum=function(t){var e,i,s,n=this.settings,a=this._coordinates.length;if(n.loop)a=this._clones.length/2+this._items.length-1;else if(n.autoWidth||n.merge){for(e=this._items.length,i=this._items[--e].width(),s=this.$element.width();e--&&!((i+=this._items[e].width()+this.settings.margin)>s););a=e+1}else a=n.center?this._items.length-1:this._items.length-n.items;return t&&(a-=this._clones.length/2),Math.max(a,0)},a.prototype.minimum=function(t){return t?0:this._clones.length/2},a.prototype.items=function(t){return t===n?this._items.slice():(t=this.normalize(t,!0),this._items[t])},a.prototype.mergers=function(t){return t===n?this._mergers.slice():(t=this.normalize(t,!0),this._mergers[t])},a.prototype.clones=function(t){var i=this._clones.length/2,s=i+this._items.length,a=function(t){return t%2==0?s+t/2:i-(t+1)/2};return t===n?e.map(this._clones,(function(t,e){return a(e)})):e.map(this._clones,(function(e,i){return e===t?a(i):null}))},a.prototype.speed=function(t){return t!==n&&(this._speed=t),this._speed},a.prototype.coordinates=function(t){var i,s=1,a=t-1;return t===n?e.map(this._coordinates,e.proxy((function(t,e){return this.coordinates(e)}),this)):(this.settings.center?(this.settings.rtl&&(s=-1,a=t+1),i=this._coordinates[t],i+=(this.width()-i+(this._coordinates[a]||0))/2*s):i=this._coordinates[a]||0,i=Math.ceil(i))},a.prototype.duration=function(t,e,i){return 0===i?0:Math.min(Math.max(Math.abs(e-t),1),6)*Math.abs(i||this.settings.smartSpeed)},a.prototype.to=function(t,e){var i=this.current(),s=null,n=t-this.relative(i),a=(n>0)-(n<0),o=this._items.length,r=this.minimum(),l=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(n)>o/2&&(n+=-1*a*o),(s=(((t=i+n)-r)%o+o)%o+r)!==t&&s-n<=l&&s-n>0&&(i=s-n,t=s,this.reset(i))):t=this.settings.rewind?(t%(l+=1)+l)%l:Math.max(r,Math.min(l,t)),this.speed(this.duration(i,t,e)),this.current(t),this.$element.is(":visible")&&this.update()},a.prototype.next=function(t){t=t||!1,this.to(this.relative(this.current())+1,t)},a.prototype.prev=function(t){t=t||!1,this.to(this.relative(this.current())-1,t)},a.prototype.onTransitionEnd=function(t){if(t!==n&&(t.stopPropagation(),(t.target||t.srcElement||t.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},a.prototype.viewport=function(){var t;return this.options.responsiveBaseElement!==i?t=e(this.options.responsiveBaseElement).width():i.innerWidth?t=i.innerWidth:s.documentElement&&s.documentElement.clientWidth?t=s.documentElement.clientWidth:console.warn("Can not detect viewport width."),t},a.prototype.replace=function(t){this.$stage.empty(),this._items=[],t&&(t=t instanceof jQuery?t:e(t)),this.settings.nestedItemSelector&&(t=t.find("."+this.settings.nestedItemSelector)),t.filter((function(){return 1===this.nodeType})).each(e.proxy((function(t,e){e=this.prepare(e),this.$stage.append(e),this._items.push(e),this._mergers.push(1*e.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)}),this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},a.prototype.add=function(t,i){var s=this.relative(this._current);i=i===n?this._items.length:this.normalize(i,!0),t=t instanceof jQuery?t:e(t),this.trigger("add",{content:t,position:i}),t=this.prepare(t),0===this._items.length||i===this._items.length?(0===this._items.length&&this.$stage.append(t),0!==this._items.length&&this._items[i-1].after(t),this._items.push(t),this._mergers.push(1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[i].before(t),this._items.splice(i,0,t),this._mergers.splice(i,0,1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[s]&&this.reset(this._items[s].index()),this.invalidate("items"),this.trigger("added",{content:t,position:i})},a.prototype.remove=function(t){(t=this.normalize(t,!0))!==n&&(this.trigger("remove",{content:this._items[t],position:t}),this._items[t].remove(),this._items.splice(t,1),this._mergers.splice(t,1),this.invalidate("items"),this.trigger("removed",{content:null,position:t}))},a.prototype.preloadAutoWidthImages=function(t){t.each(e.proxy((function(t,i){this.enter("pre-loading"),i=e(i),e(new Image).one("load",e.proxy((function(t){i.attr("src",t.target.src),i.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()}),this)).attr("src",i.attr("src")||i.attr("data-src")||i.attr("data-src-retina"))}),this))},a.prototype.destroy=function(){for(var t in this.$element.off(".owl.core"),this.$stage.off(".owl.core"),e(s).off(".owl.core"),!1!==this.settings.responsive&&(i.clearTimeout(this.resizeTimer),this.off(i,"resize",this._handlers.onThrottledResize)),this._plugins)this._plugins[t].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},a.prototype.op=function(t,e,i){var s=this.settings.rtl;switch(e){case"<":return s?t>i:t":return s?ti;case">=":return s?t<=i:t>=i;case"<=":return s?t>=i:t<=i}},a.prototype.on=function(t,e,i,s){t.addEventListener?t.addEventListener(e,i,s):t.attachEvent&&t.attachEvent("on"+e,i)},a.prototype.off=function(t,e,i,s){t.removeEventListener?t.removeEventListener(e,i,s):t.detachEvent&&t.detachEvent("on"+e,i)},a.prototype.trigger=function(t,i,s,n,o){var r={item:{count:this._items.length,index:this.current()}},l=e.camelCase(e.grep(["on",t,s],(function(t){return t})).join("-").toLowerCase()),d=e.Event([t,"owl",s||"carousel"].join(".").toLowerCase(),e.extend({relatedTarget:this},r,i));return this._supress[t]||(e.each(this._plugins,(function(t,e){e.onTrigger&&e.onTrigger(d)})),this.register({type:a.Type.Event,name:t}),this.$element.trigger(d),this.settings&&"function"==typeof this.settings[l]&&this.settings[l].call(this,d)),d},a.prototype.enter=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]===n&&(this._states.current[e]=0),this._states.current[e]++}),this))},a.prototype.leave=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]--}),this))},a.prototype.register=function(t){if(t.type===a.Type.Event){if(e.event.special[t.name]||(e.event.special[t.name]={}),!e.event.special[t.name].owl){var i=e.event.special[t.name]._default;e.event.special[t.name]._default=function(t){return!i||!i.apply||t.namespace&&-1!==t.namespace.indexOf("owl")?t.namespace&&t.namespace.indexOf("owl")>-1:i.apply(this,arguments)},e.event.special[t.name].owl=!0}}else t.type===a.Type.State&&(this._states.tags[t.name]?this._states.tags[t.name]=this._states.tags[t.name].concat(t.tags):this._states.tags[t.name]=t.tags,this._states.tags[t.name]=e.grep(this._states.tags[t.name],e.proxy((function(i,s){return e.inArray(i,this._states.tags[t.name])===s}),this)))},a.prototype.suppress=function(t){e.each(t,e.proxy((function(t,e){this._supress[e]=!0}),this))},a.prototype.release=function(t){e.each(t,e.proxy((function(t,e){delete this._supress[e]}),this))},a.prototype.pointer=function(t){var e={x:null,y:null};return(t=(t=t.originalEvent||t||i.event).touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t).pageX?(e.x=t.pageX,e.y=t.pageY):(e.x=t.clientX,e.y=t.clientY),e},a.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))},a.prototype.difference=function(t,e){return{x:t.x-e.x,y:t.y-e.y}},e.fn.sbyOwlCarousel=function(i){var s=Array.prototype.slice.call(arguments,1);return this.each((function(){var n=e(this),o=n.data("owl.carousel");o||(o=new a(this,"object"==t(i)&&i),n.data("owl.carousel",o),e.each(["next","prev","to","destroy","refresh","replace","add","remove"],(function(t,i){o.register({type:a.Type.Event,name:i}),o.$element.on(i+".owl.carousel.core",e.proxy((function(t){t.namespace&&t.relatedTarget!==this&&(this.suppress([i]),o[i].apply(this,[].slice.call(arguments,1)),this.release([i]))}),o))}))),"string"==typeof i&&"_"!==i.charAt(0)&&o[i].apply(o,s)}))},e.fn.sbyOwlCarousel.Constructor=a}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoRefresh&&this.watch()}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};n.Defaults={autoRefresh:!0,autoRefreshInterval:500},n.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=e.setInterval(t.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},n.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("sby-owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},n.prototype.destroy=function(){var t,i;for(t in e.clearInterval(this._interval),this._handlers)this._core.$element.off(t,this._handlers[t]);for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.AutoRefresh=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":t.proxy((function(e){if(e.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(e.property&&"position"==e.property.name||"initialized"==e.type))for(var i=this._core.settings,s=i.center&&Math.ceil(i.items/2)||i.items,n=i.center&&-1*s||0,a=(e.property&&void 0!==e.property.value?e.property.value:this._core.current())+n,o=this._core.clones().length,r=t.proxy((function(t,e){this.load(e)}),this);n++-1||(n.each(t.proxy((function(i,s){var n,a=t(s),o=e.devicePixelRatio>1&&a.attr("data-src-retina")||a.attr("data-src");this._core.trigger("load",{element:a,url:o},"lazy"),a.is("img")?a.one("load.owl.lazy",t.proxy((function(){a.css("opacity",1),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this)).attr("src",o):((n=new Image).onload=t.proxy((function(){a.css({"background-image":'url("'+o+'")',opacity:"1"}),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this),n.src=o)}),this)),this._loaded.push(s.get(0)))},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this._core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Lazy=n}(window.Zepto||window.jQuery,window,document),i=window.Zepto||window.jQuery,window,document,s=function t(e){this._core=e,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&this.update()}),this),"changed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&"position"==t.property.name&&this.update()}),this),"loaded.owl.lazy":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&t.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()}),this)},this._core.options=i.extend({},t.Defaults,this._core.options),this._core.$element.on(this._handlers)},s.Defaults={autoHeight:!1,autoHeightClass:"sby-owl-height"},s.prototype.update=function(){var t,e=this._core._current,s=e+this._core.settings.items,n=this._core.$stage.children().toArray().slice(e,s),a=[];i.each(n,(function(t,e){a.push(i(e).height())})),t=Math.max.apply(null,a),this._core.$stage.parent().height(t).addClass(this._core.settings.autoHeightClass)},s.prototype.destroy=function(){var t,e;for(t in this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},i.fn.sbyOwlCarousel.Constructor.Plugins.AutoHeight=s,function(t,e,i,s){var n=function e(i){this._core=i,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})}),this),"resize.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.video&&this.isInFullScreen()&&t.preventDefault()}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .sby-owl-video-frame").remove()}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"===t.property.name&&this._playing&&this.stop()}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find(".sby-owl-video");i.length&&(i.css("display","none"),this.fetch(i,t(e.content)))}}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".sby-owl-video-play-icon",t.proxy((function(t){this.play(t)}),this))};n.Defaults={video:!1,videoHeight:!1,videoWidth:!1},n.prototype.fetch=function(t,e){var i=t.attr("data-vimeo-id")?"vimeo":t.attr("data-vzaar-id")?"vzaar":"youtube",s=t.attr("data-vimeo-id")||t.attr("data-youtube-id")||t.attr("data-vzaar-id"),n=t.attr("data-width")||this._core.settings.videoWidth,a=t.attr("data-height")||this._core.settings.videoHeight,o=t.attr("href");if(!o)throw new Error("Missing video URL.");if((s=o.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/))[3].indexOf("youtu")>-1)i="youtube";else if(s[3].indexOf("vimeo")>-1)i="vimeo";else{if(!(s[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");i="vzaar"}s=s[6],this._videos[o]={type:i,id:s,width:n,height:a},e.attr("data-video",o),this.thumbnail(t,this._videos[o])},n.prototype.thumbnail=function(e,i){var s,n,a=i.width&&i.height?'style="width:'+i.width+"px;height:"+i.height+'px;"':"",o=e.find("img"),r="src",l="",d=this._core.settings,h=function(t){s=d.lazyLoad?'
':'
',e.after(s),e.after('
')};if(e.wrap('
"),this._core.settings.lazyLoad&&(r="data-src",l="sby-owl-lazy"),o.length)return h(o.attr(r)),o.remove(),!1;"youtube"===i.type?(n="//img.youtube.com/vi/"+i.id+"/hqdefault.jpg",h(n)):"vimeo"===i.type?t.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t[0].thumbnail_large,h(n)}}):"vzaar"===i.type&&t.ajax({type:"GET",url:"//vzaar.com/api/videos/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t.framegrab_url,h(n)}})},n.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".sby-owl-video-frame").remove(),this._playing.removeClass("sby-owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},n.prototype.play=function(e){var i,s=t(e.target).closest("."+this._core.settings.itemClass),n=this._videos[s.attr("data-video")],a=n.width||"100%",o=n.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),s=this._core.items(this._core.relative(s.index())),this._core.reset(s.index()),"youtube"===n.type?i='':"vimeo"===n.type?i='':"vzaar"===n.type&&(i=''),t('
'+i+"
").insertAfter(s.find(".sby-owl-video")),this._playing=s.addClass("sby-owl-video-playing"))},n.prototype.isInFullScreen=function(){var e=i.fullscreenElement||i.mozFullScreenElement||i.webkitFullscreenElement;return e&&t(e).parent().hasClass("sby-owl-video-frame")},n.prototype.destroy=function(){var t,e;for(t in this._core.$element.off("click.owl.video"),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Video=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this.core=i,this.core.options=t.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=s,this.next=s,this.handlers={"change.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&(this.previous=this.core.current(),this.next=t.property.value)}),this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":t.proxy((function(t){t.namespace&&(this.swapping="translated"==t.type)}),this),"translate.owl.carousel":t.proxy((function(t){t.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()}),this)},this.core.$element.on(this.handlers)};n.Defaults={animateOut:!1,animateIn:!1},n.prototype.swap=function(){if(1===this.core.settings.items&&t.support.animation&&t.support.transition){this.core.speed(0);var e,i=t.proxy(this.clear,this),s=this.core.$stage.children().eq(this.previous),n=this.core.$stage.children().eq(this.next),a=this.core.settings.animateIn,o=this.core.settings.animateOut;this.core.current()!==this.previous&&(o&&(e=this.core.coordinates(this.previous)-this.core.coordinates(this.next),s.one(t.support.animation.end,i).css({left:e+"px"}).addClass("animated sby-owl-animated-out").addClass(o)),a&&n.one(t.support.animation.end,i).addClass("animated sby-owl-animated-in").addClass(a))}},n.prototype.clear=function(e){t(e.target).css({left:""}).removeClass("animated sby-owl-animated-out sby-owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this.core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Animate=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":t.proxy((function(t){t.namespace&&"settings"===t.property.name?this._core.settings.autoplay?this.play():this.stop():t.namespace&&"position"===t.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoplay&&this.play()}),this),"play.owl.autoplay":t.proxy((function(t,e,i){t.namespace&&this.play(e,i)}),this),"stop.owl.autoplay":t.proxy((function(t){t.namespace&&this.stop()}),this),"mouseover.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"mouseleave.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()}),this),"touchstart.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"touchend.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this.play()}),this)},this._core.$element.on(this._handlers),this._core.options=t.extend({},e.Defaults,this._core.options)};n.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},n.prototype.play=function(t,e){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},n.prototype._getNextTimeout=function(s,n){return this._timeout&&e.clearTimeout(this._timeout),e.setTimeout(t.proxy((function(){this._paused||this._core.is("busy")||this._core.is("interacting")||i.hidden||this._core.next(n||this._core.settings.autoplaySpeed)}),this),s||this._core.settings.autoplayTimeout)},n.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},n.prototype.stop=function(){this._core.is("rotating")&&(e.clearTimeout(this._timeout),this._core.leave("rotating"))},n.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},n.prototype.destroy=function(){var t,e;for(t in this.stop(),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.autoplay=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function e(i){this._core=i,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":t.proxy((function(e){e.namespace&&this._core.settings.dotsData&&this._templates.push('
'+t(e.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
")}),this),"added.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,0,this._templates.pop())}),this),"remove.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,1)}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&this.draw()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};n.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"sby-owl-nav",navClass:["sby-owl-prev","sby-owl-next"],slideBy:1,dotClass:"sby-owl-dot",dotsClass:"sby-owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},n.prototype.initialize=function(){var e,i=this._core.settings;for(e in this._controls.$relative=(i.navContainer?t(i.navContainer):t("
").addClass(i.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=t("<"+i.navElement+">").addClass(i.navClass[0]).html(i.navText[0]).prependTo(this._controls.$relative).on("click",t.proxy((function(t){this.prev(i.navSpeed)}),this)),this._controls.$next=t("<"+i.navElement+">").addClass(i.navClass[1]).html(i.navText[1]).appendTo(this._controls.$relative).on("click",t.proxy((function(t){this.next(i.navSpeed)}),this)),i.dotsData||(this._templates=[t("
").addClass(i.dotClass).append(t("")).prop("outerHTML")]),this._controls.$absolute=(i.dotsContainer?t(i.dotsContainer):t("
").addClass(i.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",t.proxy((function(e){var s=t(e.target).parent().is(this._controls.$absolute)?t(e.target).index():t(e.target).parent().index();e.preventDefault(),this.to(s,i.dotsSpeed)}),this)),this._overrides)this._core[e]=t.proxy(this[e],this)},n.prototype.destroy=function(){var t,e,i,s;for(t in this._handlers)this.$element.off(t,this._handlers[t]);for(e in this._controls)this._controls[e].remove();for(s in this.overides)this._core[s]=this._overrides[s];for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},n.prototype.update=function(){var t,e,i=this._core.clones().length/2,s=i+this._core.items().length,n=this._core.maximum(!0),a=this._core.settings,o=a.center||a.autoWidth||a.dotsData?1:a.dotsEach||a.items;if("page"!==a.slideBy&&(a.slideBy=Math.min(a.slideBy,a.items)),a.dots||"page"==a.slideBy)for(this._pages=[],t=i,e=0;t=o||0===e){if(this._pages.push({start:Math.min(n,t-i),end:t-i+o-1}),Math.min(n,t-i)===n)break;e=0}e+=this._core.mergers(this._core.relative(t))}},n.prototype.draw=function(){var e,i=this._core.settings,s=this._core.items().length<=i.items,n=this._core.relative(this._core.current()),a=i.loop||i.rewind;this._controls.$relative.toggleClass("disabled",!i.nav||s),i.nav&&(this._controls.$previous.toggleClass("disabled",!a&&n<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!a&&n>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!i.dots||s),i.dots&&(e=this._pages.length-this._controls.$absolute.children().length,i.dotsData&&0!==e?this._controls.$absolute.html(this._templates.join("")):e>0?this._controls.$absolute.append(new Array(e+1).join(this._templates[0])):e<0&&this._controls.$absolute.children().slice(e).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(t.inArray(this.current(),this._pages)).addClass("active"))},n.prototype.onTrigger=function(e){var i=this._core.settings;e.page={index:t.inArray(this.current(),this._pages),count:this._pages.length,size:i&&(i.center||i.autoWidth||i.dotsData?1:i.dotsEach||i.items)}},n.prototype.current=function(){var e=this._core.relative(this._core.current());return t.grep(this._pages,t.proxy((function(t,i){return t.start<=e&&t.end>=e}),this)).pop()},n.prototype.getPosition=function(e){var i,s,n=this._core.settings;return"page"==n.slideBy?(i=t.inArray(this.current(),this._pages),s=this._pages.length,e?++i:--i,i=this._pages[(i%s+s)%s].start):(i=this._core.relative(this._core.current()),s=this._core.items().length,e?i+=n.slideBy:i-=n.slideBy),i},n.prototype.next=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!0),e)},n.prototype.prev=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!1),e)},n.prototype.to=function(e,i,s){var n;!s&&this._pages.length?(n=this._pages.length,t.proxy(this._overrides.to,this._core)(this._pages[(e%n+n)%n].start,i)):t.proxy(this._overrides.to,this._core)(e,i)},t.fn.sbyOwlCarousel.Constructor.Plugins.Navigation=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function i(s){this._core=s,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":t.proxy((function(i){i.namespace&&"URLHash"===this._core.settings.startPosition&&t(e).trigger("hashchange.owl.navigation")}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!i)return;this._hashes[i]=e.content}}),this),"changed.owl.carousel":t.proxy((function(i){if(i.namespace&&"position"===i.property.name){var s=this._core.items(this._core.relative(this._core.current())),n=t.map(this._hashes,(function(t,e){return t===s?e:null})).join();if(!n||e.location.hash.slice(1)===n)return;e.location.hash=n}}),this)},this._core.options=t.extend({},i.Defaults,this._core.options),this.$element.on(this._handlers),t(e).on("hashchange.owl.navigation",t.proxy((function(t){var i=e.location.hash.substring(1),s=this._core.$stage.children(),n=this._hashes[i]&&s.index(this._hashes[i]);void 0!==n&&n!==this._core.current()&&this._core.to(this._core.relative(n),!1,!0)}),this))};n.Defaults={URLhashListener:!1},n.prototype.destroy=function(){var i,s;for(i in t(e).off("hashchange.owl.navigation"),this._handlers)this._core.$element.off(i,this._handlers[i]);for(s in Object.getOwnPropertyNames(this))"function"!=typeof this[s]&&(this[s]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Hash=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){function n(e,i){var s=!1,n=e.charAt(0).toUpperCase()+e.slice(1);return t.each((e+" "+r.join(n+" ")+n).split(" "),(function(t,e){if(void 0!==o[e])return s=!i||e,!1})),s}function a(t){return n(t,!0)}var o=t("").get(0).style,r="Webkit Moz O ms".split(" "),l={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}};!!n("transition")&&(t.support.transition=new String(a("transition")),t.support.transition.end=l.transition.end[t.support.transition]),!!n("animation")&&(t.support.animation=new String(a("animation")),t.support.animation.end=l.animation.end[t.support.animation]),n("transform")&&(t.support.transform=new String(a("transform")),t.support.transform3d=!!n("perspective"))}(window.Zepto||window.jQuery,window,document),e=window.Zepto||window.jQuery,window,document,Owl2row=function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(t){this.owl=t,this.owl.options=e.extend({},Owl2row.Defaults,this.owl.options),this.handlers={"initialize.owl.carousel":e.proxy((function(t){this.owl.settings.owl2row&&this.build2row(this)}),this)},this.owl.$element.on(this.handlers)})),Owl2row.Defaults={owl2row:!1,owl2rowTarget:"sby_item",owl2rowContainer:"sby_owl2row-item",owl2rowDirection:"utd"},Owl2row.prototype.build2row=function(t){var i=e(t.owl.$element),s=i.find("."+t.owl.options.owl2rowTarget),n=[],a=[];e.each(s,(function(t,e){t%2==0?n.push(e):a.push(e)})),"ltr"===t.owl.options.owl2rowDirection?t.leftToright(t,i,s):t.upTodown(t,n,a,i)},Owl2row.prototype.leftToright=function(t,i,s){var n=t.owl.options.owl2rowContainer,a=t.owl.options.margin,o=s.length,r=[],l=[];o%2==1?o=(o-1)/2+1:o/=2,e.each(s,(function(t,e){t'),d=r[t];d.style.marginBottom=a+"px",o.append(d).append(l[t]),i.append(o)}))},Owl2row.prototype.upTodown=function(t,i,s,n){var a=t.owl.options.owl2rowContainer,o=t.owl.options.margin;e.each(i,(function(t,r){var l=e('
'),d=i[t];d.style.marginBottom=o+"px",l.append(d).append(s[t]),n.append(l)}))},Owl2row.prototype.destroy=function(){},e.fn.sbyOwlCarousel.Constructor.Plugins.owl2row=Owl2row,function(e){function i(){this.feeds={},this.ctas={},this.options=sbyOptions,this.isTouch="ontouchstart"in document.documentElement}function s(t,e,i){this.el=t,this.index=e,this.settings=i,this.placeholderURL=window.sby.options.placeholder,i.narrowPlayer&&(this.placeholderURL=window.sby.options.placeholderNarrow),this.playerAPIReady=!1,this.consentGiven=i.consentGiven,this.players={},this.minImageWidth=0,this.imageResolution=150,this.resizedImages={},this.needsResizing=[],this.outOfPages=!1,this.isInitialized=!1,this.mostRecentlyLoadedPosts=[],this.embedURL="//www.youtube-nocookie.com",i.allowCookies&&(this.embedURL="//www.youtube.com")}function n(t,i,n){s.call(this,t,i,n),this.CTA={},this.initLayout=function(){this.initGalleryLayout(),this.initGrid(),this.initCarousels();var t=jQuery.Event("sbyafterlayoutinit");t.feed=this,jQuery(window).trigger(t)},this.initGrid=function(){if(window.sbySemiEagerLoading&&jQuery("#sby_lightbox").length){var t=this;playerID="sby_lb-player",jQuery("#sby_lightbox").addClass("sby_video_lightbox"),window.sbyOptions.isPro||jQuery("#sby_lightbox").addClass("sby_lightbox_free");var i=e(this.el).find("sby_item").first().attr("data-video-id"),s=sbyOptions.autoplay;if(void 0===window.sbyLightboxPlayer){var n={host:window.location.protocol+t.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(i){var s=i.target.getVideoData().video_id;t.afterStateChange(playerID,s,i,e("#"+playerID).closest(".sby_video_thumbnail_wrap"))}}};t.maybeAddCTA(playerID),window.sbyLightboxPlayer=new window.YT.Player(playerID,n)}}},this.initCarousels=function(){var t=this,i=e(this.el);if(void 0!==this.settings.general.carousel){var s=this.settings.cols,n=this.settings.colsmobile;i.find(".sby_items_wrap").addClass("sby_carousel"),i.find(".sby_load_btn").remove(),i.find(".sby_item").css({"padding-top":i.find(".sby_items_wrap").css("padding-top"),"padding-right":i.find(".sby_items_wrap").css("padding-top"),"padding-bottom":i.find(".sby_items_wrap").css("padding-top"),"padding-left":i.find(".sby_items_wrap").css("padding-top")}),i.find(".sby_item").each((function(){e(this).attr("style",e(this).attr("style").replace("padding: "+i.find(".sby_items_wrap").css("padding-top"),"padding: "+i.find(".sby_items_wrap").css("padding-top")+" !important"))}));var a=t.settings.general.carousel[0],o=t.settings.general.carousel[1],r=t.settings.general.carousel[2],l=t.settings.general.carousel[3],d=t.settings.general.carousel[4],h=t.settings.general.carousel[5];r||(l=!1);var c=s,u=s,y=(a=a?"onhover":"hide",r=!1!==l,2==h);d=!d,i.hasClass("sby_mob_col_auto")?(c=2,2!=parseInt(s)&&(u=1),2==parseInt(s)&&(u=2)):u=n,this.carouselArgs={items:s,loop:d,rewind:!d,autoplay:r,autoplayTimeout:Math.max(l,2e3),autoplayHoverPause:!0,nav:!0,navText:['',''],dots:o,owl2row:y,responsive:{0:{items:u},480:{items:c},640:{items:s}},onChange:function(){setTimeout((function(){t.afterResize()}),1)},onInitialize:function(){var e=jQuery(t.el);e.find(".sby_items_wrap.sby_carousel").fadeIn(),setTimeout((function(){e.find(".sby_items_wrap.sby_carousel .sby_info, .sby_owl2row-item,.sby_items_wrap.sby_carousel").fadeIn()}),1),setTimeout((function(){var t=e.find(".sby-owl-nav");if("onhover"===a);else if("below"===a){var i=e.find(".sby-owl-dots"),s=e.find(".sby-owl-prev"),n=e.find(".sby-owl-next"),o=e.find(".sby-owl-nav"),r=e.find(".sby-owl-dot"),l=r.length*r.innerWidth();e.innerWidth(),s.after(i),o.css("position","relative"),n.css("position","absolute").css("top","-6px").css("right",Math.max(.5*o.innerWidth()-.5*l-n.innerWidth()-6,0)),s.css("position","absolute").css("top","-6px").css("left",Math.max(.5*o.innerWidth()-.5*l-s.innerWidth()-6,0))}else"hide"===a&&t.addClass("hide").hide()}),1)}}}},this.stripEmojihtml=function(t){return t.find(".emoji").each((function(){e(this).replaceWith(e(this).attr("alt"))})),t.html()},this.afterItemRevealed=function(t){var e=this;if(t.find(".sby_caption").length&&!t.find(".sby_caption").hasClass("sby_full_caption")){var i=t.find(".sby_item_caption_wrap .sby_caption"),s=t.find(".sby_item_video_thumbnail .sby_caption"),n=void 0!==e.settings.general.descriptionlength?parseInt(e.settings.general.descriptionlength):150;n<1&&(n=99999);var a=this.stripEmojihtml(t.find(".sby_caption").first()),o=((a.match(/
/g)||[]).length,void 0===sbyOptions.brAdjust||"1"===sbyOptions.brAdjust||sbyOptions.brAdjust,a.substring(0,n));if(o=a.length>n?o.substr(0,Math.min(o.length,o.lastIndexOf(" "))):o,i.length&&(i.html(sbyLinkify(o)),o===a&&i.next(".sby_expand").remove()),s.length){var r=o;o!==a&&(r+='...'),s.html(r)}a.length>n&&t.find(".sby_expand").show(),t.find(".sby_expand a").off("click").on("click",(function(s){s.preventDefault(),jQuery(this),i=void 0!==i?i:t.find(".sby_info .sby_caption"),a="undefined"!=typeof captiontext?a:t.find(".sby_item_video_thumbnail").attr("data-title"),t.hasClass("sby_caption_full")&&void 0!==o?(i.html(o),t.removeClass("sby_caption_full")):(i.html(sbyLinkify(a)),t.addClass("sby_caption_full")),e.afterResize()}))}this.setUpCTA(t);var l=void 0!==e.settings.general.disablelightbox&&e.settings.general.disablelightbox,d=void 0!==e.settings.general.captionlinks&&e.settings.general.captionlinks;if(l||d){if(d){var h="";void 0!==t.find("img").attr("alt")?h=t.find("img").attr("alt"):void 0!==t.find("video").attr("alt")&&(h=t.find("video").attr("alt"));var c=h.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);c&&t.find("a").attr("href",c)}t.find(".sby_link").addClass("sby_disable_lightbox")}else{var u=t.find(".sby_photo_wrap"),y=u.find(".sby_link");feedOptions={hovereffect:"true"},"none"==feedOptions.hovereffect?(y.css("background","none").show(),y.find("*").hide().end().find(".sby_link_area").show()):u.on("mouseenter mouseleave",(function(e){switch(e.type){case"mouseenter":t.addClass("sby_animate");break;case"mouseleave":t.removeClass("sby_animate")}}))}var g=void 0!==t.attr("data-video-id")?t.attr("data-video-id"):t.find(".sby_video_thumbnail").attr("data-video-id");this.mostRecentlyLoadedPosts.push(g)},this.afterFeedSet=function(){void 0!==this.carouselArgs&&(e(this.el).find(".sby_carousel").sbyOwlCarousel(this.carouselArgs),2===parseInt(this.settings.general.carousel[5])&&e(this.el).addClass("sby_carousel_2_row"))},this.setUpCTA=function(t,e){e=void 0!==e?e:t.find(".sby_item_video_thumbnail").attr("data-video-id");var i=void 0!==t.find(".sby_item_video_thumbnail").attr("data-title")?t.find(".sby_item_video_thumbnail").attr("data-title"):"",s=window.sby.ctaDetect(i);window.sby.ctas[e]=s||this.getDefaultCTA()},this.getDefaultCTA=function(){return void 0!==this.settings.general.cta&&"default"!==this.settings.general.cta.type&&("link"===this.settings.general.cta.type?{callback:"link",url:this.settings.general.cta.defaultLink,text:this.settings.general.cta.defaultText}:{callback:"related",related:this.settings.general.cta.defaultPosts})},this.afterResize=function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass(),this.setAllCTADimensions(),this.sizePlayer(),this.sizeItems()},this.setAllCTADimensions=function(){e.each(this.CTA,(function(t,e){e.isInitialized&&e.setCTAStyles()}))},this.afterSendCheckWPPostsToServer=function(t){var s=e(this.el);s.find(".sby_item").each((function(){if(void 0!==t[e(this).attr("data-video-id")]){var i=t[e(this).attr("data-video-id")];e(this).find(".sby_view_count").text(i.sby_view_count),e(this).find(".sby_comment_count").text(i.sby_comment_count),e(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(e(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),e(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&e(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp),void 0!==i.sby_description&&e(this).find(".sby_item_video_thumbnail").attr("data-title",i.sby_description)}})),s.find(".sby_player_item").each((function(){if(void 0!==t[e(this).find(".sby_video_thumbnail").attr("data-video-id")]){var i=t[e(this).find(".sby_video_thumbnail").attr("data-video-id")];e(this).find(".sby_view_count").text(i.sby_view_count),e(this).find(".sby_comment_count").text(i.sby_comment_count),e(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(e(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),e(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&e(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp)}}));var n=jQuery.Event("sbyaftercheckposts");n.feed=window.sby.feeds[i],n.response=t,jQuery(window).trigger(n)},this.afterStateChange=function(t,e,i,s){this.CTA[t].toggleCTA(e,i.data,s)},this.changePlayerInfo=function(t){e(this.el).find(".sby_player_item").find(".sby_info").replaceWith(t.find(".sby_info").clone(!0,!0))},this.maybeAddCTA=function(t,e){void 0===this.CTA[t]&&(this.CTA[t]=new r(t,this))}}function a(){}function o(){a.call(this);var t=e(".sb_youtube"),i=t.attr("data-channel-subscribers"),s=t.attr("data-subscribe-btn-text"),n=t.attr("data-subscribe-btn");this.getData=function(t){return{feedIndex:parseInt(t.closest(".sb_youtube").attr("data-sby-index")-1),link:t.attr("href"),video:t.attr("data-video-id"),title:t.attr("data-title"),videoTitle:void 0!==t.attr("data-video-title")?t.attr("data-video-title"):"YouTube Video",avatar:t.attr("data-avatar"),user:t.attr("data-user"),channelURL:t.attr("data-url"),channelID:t.attr("data-channel-id"),channelSubscribers:i,subscribeBtn:n,subscribeBtnText:s}},this.template=function(){return"
"},this.beforePlayerSetup=function(t,i,s,n,a){t.find(".sby_cta_items_wraps").length?t.find(".sby_cta_items_wraps").replaceWith(e(a.el).find(".sby_cta_items_wraps").clone()):t.find(".sby_lb_video_thumbnail_wrap").append(e(a.el).find(".sby_cta_items_wraps").clone())},this.afterPlayerSetup=function(t,e,i,n){this.availableAvatarUrls={};var a=e.title;void 0!==a&&""!==a&&(a=a.replace(/(>#)/g,"> #")),a=a?sbyLinkify(a):"","function"==typeof sbyLightboxAction&&setTimeout((function(){sbyLightboxAction()}),100);var o="",r='
',l=e.subscribeBtn?' '+s+"":"";void 0!==e.avatar&&""!==e.avatar&&void 0!==e.user?(o="undefined"!==e.avatar?'':"",e.subscribeBtn?r+=''+o+'

@'+e.user+""+e.channelSubscribers+"

"+l+"
":r=""):void 0!==e.user&&jQuery.each(window.sby.feeds,(function(){void 0!==this.availableAvatarUrls&&void 0!==this.availableAvatarUrls[e.user]&&"undefined"!==this.availableAvatarUrls[e.user]&&(o='')})),t.find(".sby_lb-caption").html(r+''+a+"").fadeIn("fast")}}function r(t,e){this.isInitialized=!1,this.videoID=t,this.callback=this.related,this.callbackArgs={},this.feedObjInContext=e,this.state=1,this.numItems=4,this.numItemColumns=2,this.$player=!1}function l(t,i){e.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:t,success:i})}i.prototype={createPage:function(t,i){void 0!==window.sbyajaxurl&&-1!==window.sbyajaxurl.indexOf(window.location.hostname)||(window.sbyajaxurl=window.location.hostname+"/wp-admin/admin-ajax.php"),e(".sby_no_js_error_message").remove(),e(".sby_no_js").removeClass("sby_no_js"),t(i)},maybeAddYTAPI:function(){var t="sby-youtube-api";if(null===document.getElementById(t)){var e=document.createElement("script"),i=document.getElementsByTagName("script")[0];e.src="https://www.youtube.com/iframe_api",e.id=t,i.parentNode.insertBefore(e,i)}},createLightbox:function(){var t,i=new o,s=(t=0,function(e,i){clearTimeout(t),t=setTimeout(e,i)});jQuery(window).on("resize",(function(){s((function(){i.afterResize()}),200)})),function(){var t=jQuery,s=function(){function t(){this.fadeDuration=500,this.fitImagesInViewport=!0,this.resizeDuration=700,this.positionFromTop=50,this.showImageNumberLabel=!0,this.alwaysShowNavOnTouchDevices=!1,this.wrapAround=!1}return t.prototype.albumLabel=function(t,e){return t+" / "+e},t}(),n=function(){function s(t){this.options=t,this.album=[],this.currentImageIndex=void 0,this.init()}return s.prototype.init=function(){this.enable(),this.build()},s.prototype.enable=function(){var e=this;t("body").on("click","a[data-sby-lightbox]",(function(i){return e.start(t(i.currentTarget)),!1}))},s.prototype.build=function(){var e=this;t(""+i.template()).appendTo(t("body")),this.$lightbox=t("#sby_lightbox"),this.$overlay=t("#sby_lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".sby_lb-outerContainer"),this.$container=this.$lightbox.find(".sby_lb-container"),this.containerTopPadding=parseInt(this.$container.css("padding-top"),10),this.containerRightPadding=parseInt(this.$container.css("padding-right"),10),this.containerBottomPadding=parseInt(this.$container.css("padding-bottom"),10),this.containerLeftPadding=parseInt(this.$container.css("padding-left"),10),this.$overlay.hide().on("click",(function(){return e.end(),!1})),jQuery(document).on("click",(function(t,e,s){jQuery(t.target).closest(".sby_lb-outerContainer").length||jQuery(t.target).closest(".sby_lb-dataContainer").length||(i.pausePlayer(),jQuery("#sby_lightboxOverlay, #sby_lightbox").fadeOut())})),this.$lightbox.hide(),jQuery("#sby_lightboxOverlay").on("click",(function(s){return i.pausePlayer(),"sby_lightbox"===t(s.target).attr("id")&&e.end(),!1})),this.$lightbox.find(".sby_lb-prev").on("click",(function(){return i.pausePlayer(),e.changeImage(0===e.currentImageIndex?e.album.length-1:e.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-container").on("swiperight",(function(){return i.pausePlayer(),e.changeImage(0===e.currentImageIndex?e.album.length-1:e.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-next").on("click",(function(){return i.pausePlayer(),e.changeImage(e.currentImageIndex===e.album.length-1?0:e.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-container").on("swipeleft",(function(){return i.pausePlayer(),e.changeImage(e.currentImageIndex===e.album.length-1?0:e.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-loader, .sby_lb-close").on("click",(function(){return i.pausePlayer(),e.end(),!1}))},s.prototype.start=function(e){function s(t){n.album.push(i.getData(t))}var n=this,a=t(window);a.on("resize",t.proxy(this.sizeOverlay,this)),t("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var o,r=0,l=e.attr("data-sby-lightbox");if(l){o=t(e.prop("tagName")+'[data-sby-lightbox="'+l+'"]');for(var d=0;dl||n.height>r)&&(n.width/l>n.height/r?(o=l,a=parseInt(n.height/(n.width/o),10),s.width(o),s.height(a)):(a=r,o=parseInt(n.width/(n.height/a),10),s.width(o),s.height(a)))),i.sizeContainer(s.width(),s.height())},n.src=this.album[e].link,this.currentImageIndex=e},s.prototype.sizeOverlay=function(){this.$overlay.width(t(window).width()).height(t(document).height())},s.prototype.sizeContainer=function(t,e){function i(){s.$lightbox.find(".sby_lb-dataContainer").width(o),s.$lightbox.find(".sby_lb-prevLink").height(r),s.$lightbox.find(".sby_lb-nextLink").height(r),s.showImage()}var s=this,n=this.$outerContainer.outerWidth(),a=this.$outerContainer.outerHeight(),o=t+this.containerLeftPadding+this.containerRightPadding,r=e+this.containerTopPadding+this.containerBottomPadding;n!==o||a!==r?this.$outerContainer.animate({width:o,height:r},this.options.resizeDuration,"swing",(function(){i()})):i()},s.prototype.showImage=function(){this.$lightbox.find(".sby_lb-loader").hide(),this.$lightbox.find(".sby_lb-image").fadeIn("slow"),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},s.prototype.updateNav=function(){var t=!1;try{document.createEvent("TouchEvent"),t=!!this.options.alwaysShowNavOnTouchDevices}catch(t){}this.$lightbox.find(".sby_lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(t&&this.$lightbox.find(".sby_lb-prev, .sby_lb-next").css("opacity","1"),this.$lightbox.find(".sby_lb-prev, .sby_lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".sby_lb-prev").show(),t&&this.$lightbox.find(".sby_lb-prev").css("opacity","1")),this.currentImageIndex')}i.afterPlayerSetup(this.$lightbox,this.album[this.currentImageIndex],this.currentImageIndex,this.album),this.album.length>1&&this.options.showImageNumberLabel?this.$lightbox.find(".sby_lb-number").text(this.options.albumLabel(this.currentImageIndex+1,this.album.length)).fadeIn("fast"):this.$lightbox.find(".sby_lb-number").hide()}},s.prototype.preloadNeighboringImages=function(){this.album.length>this.currentImageIndex+1&&((new Image).src=this.album[this.currentImageIndex+1].link),this.currentImageIndex>0&&((new Image).src=this.album[this.currentImageIndex-1].link)},s.prototype.enableKeyboardNav=function(){t(document).on("keyup.keyboard",t.proxy(this.keyboardAction,this))},s.prototype.disableKeyboardNav=function(){t(document).off(".keyboard")},s.prototype.keyboardAction=function(t){var s=event.keyCode,n=String.fromCharCode(s).toLowerCase();27===s||n.match(/x|o|c/)?(h()&&e("#sby_lightbox video.sby_video")[0].pause(),e("#sby_lightbox iframe").attr("src",""),this.end()):"p"===n||37===s?(0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1),h()&&e("#sby_lightbox video.sby_video")[0].pause(),e("#sby_lightbox iframe").attr("src","")):"n"!==n&&39!==s||(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0),i.pausePlayer())},s.prototype.end=function(){this.disableKeyboardNav(),t(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),t("select, object, embed").css({visibility:"visible"})},s}();t((function(){var t=new s;new n(t),e(".sby_lightbox_action a").off().on("click",(function(){e(this).parent().find(".sby_lightbox_tooltip").toggle()}))}))}.call(this),window.sbyOptions.lightboxCreated=!0},createFeeds:function(t){sbyOptions.isAdmin||void 0!==sbyOptions.lightboxCreated||window.sby.createLightbox(),t.whenFeedsCreated(e(".sb_youtube").each((function(t){e(this).attr("data-sby-index",t+1),e(this).find(".sby_player").replaceWith('
');var i=e(this),s=void 0!==i.attr("data-sby-flags")?i.attr("data-sby-flags").split(","):[],a=void 0!==i.attr("data-options")?JSON.parse(i.attr("data-options")):{};s.indexOf("testAjax")>-1&&(window.sby.triggeredTest=!0,l({action:"sby_on_ajax_test_trigger"},(function(t){console.log("did test")})));var o={cols:i.attr("data-cols"),colsmobile:"same"!==i.attr("data-colsmobile")?i.attr("data-colsmobile"):i.attr("data-cols"),num:i.attr("data-num"),imgRes:i.attr("data-res"),feedID:i.attr("data-feedid"),postID:"undefind"!=typeof i.attr("data-postid")?i.attr("data-postid"):"unknown",shortCodeAtts:i.attr("data-shortcode-atts"),resizingEnabled:-1===s.indexOf("resizeDisable"),imageLoadEnabled:-1===s.indexOf("imageLoadDisable"),debugEnabled:s.indexOf("debug")>-1,favorLocal:s.indexOf("favorLocal")>-1,ajaxPostLoad:s.indexOf("ajaxPostLoad")>-1,checkWPPosts:s.indexOf("checkWPPosts")>-1,singleCheckPosts:s.indexOf("singleCheckPosts")>-1,narrowPlayer:s.indexOf("narrowPlayer")>-1,gdpr:s.indexOf("gdpr")>-1,consentGiven:-1===s.indexOf("gdpr"),noCDN:s.indexOf("disablecdn")>-1,allowCookies:s.indexOf("allowcookies")>-1,lightboxEnabled:void 0!==i.attr("data-sby-supports-lightbox"),locator:s.indexOf("locator")>-1,autoMinRes:1,general:a,subscribeBarEnabled:!0};window.sby.feeds[t]=function(t,e,i){return new n(t,e,i)}(this,t,o),void 0!==window.sbyAPIReady&&(window.sby.feeds[t].playerAPIReady=!0),window.sby.feeds[t].setResizedImages(),window.sby.feeds[t].init();var r=jQuery.Event("sbyafterfeedcreate");r.feed=window.sby.feeds[t],jQuery(window).trigger(r)})))},afterFeedsCreated:function(){if(e(".sb_youtube_header").each((function(){var t=e(this);t.find(".sby_header_link").on("mouseenter mouseleave",(function(e){switch(e.type){case"mouseenter":t.find(".sby_header_img_hover").addClass("sby_fade_in");break;case"mouseleave":t.find(".sby_header_img_hover").removeClass("sby_fade_in")}}))})),window.sbyAPIReady){var t=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(t)}},encodeHTML:function(t){return void 0===t?"":t.replace(/(>)/g,">").replace(/(<)/g,"<").replace(/(<br\/>)/g,"
").replace(/(<br>)/g,"
")},urlDetect:function(t){return t.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g)},ctaDetect:function(t){var e=t.match(/{Link:(.*)}/g),i=!1;if(null!==e){var s=window.sby.urlDetect(e[0]);if(null!==s){var n=s[0].trim();i={callback:"link",url:n,text:e[0].replace("{Link:","").replace("}","").replace(n,"").replace(" "," ").trim()}}else console.log("CTA found but no URL")}return i},shuffle:function(t){for(var e,i,s=t.length;0!==s;)i=Math.floor(Math.random()*s),e=t[s-=1],t[s]=t[i],t[i]=e;return t}},s.prototype={init:function(){var t=this;t.settings.consentGiven=t.checkConsent(),t.settings.consentGiven&&window.sby.maybeAddYTAPI(),t.settings.noCDN&&!t.settings.consentGiven&&(e(this.el).find(".sb_youtube_header").length?e(this.el).find(".sb_youtube_header").addClass("sby_no_consent"):e(this.el).prev(".sb_youtube_header").length&&e(this.el).prev(".sb_youtube_header").addClass("sby_no_consent")),e(this.el).find("#sby_mod_error").length&&e(this.el).prepend(e(this.el).find("#sby_mod_error")),this.settings.ajaxPostLoad?this.getNewPostSet():this.afterInitialImagesLoaded();var i,s=(i=0,function(t,e){clearTimeout(i),i=setTimeout(t,e)});jQuery(window).on("resize",(function(){s((function(){t.afterResize()}),1)}))},initLayout:function(){this.initGalleryLayout()},initGalleryLayout:function(){var i=e(this.el),s=this;i.hasClass("sby_layout_gallery")&&i.find(".sby_player_outer_wrap").length&&(this.maybeRaiseSingleImageResolution(i.find(".sby_player_outer_wrap"),0,!0),i.find(".sby_player_outer_wrap .sby_video_thumbnail").off().on("click",(function(i){!(!s.settings.lightboxEnabled||s.settings.lightboxEnabled&&s.settings.noCDN)||!s.settings.noCDN&&s.settings.consentGiven?(i.preventDefault(),s.onThumbnailClick(e(this),!0)):t(e(this).closest(".sby_item").length)&&void 0!==e(this).closest(".sby_item").attr("data-video-id")&&e(this).attr("href","https://www.youtube.com/watch?v="+e(this).closest(".sby_item").attr("data-video-id"))})),i.find(".sby_item").first().addClass("sby_current"),i.on("mouseenter",(function(){s.canCreatePlayer()&&(i.find(".sby_player_outer_wrap iframe").length?void 0===s.player&&s.playerEagerLoaded()&&s.createPlayer("sby_player"+s.index):(i.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),i.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),s.createPlayer("sby_player"+s.index)))})),window.sbySemiEagerLoading&&s.createPlayer("sby_player"+s.index),s.settings.noCDN&&i.find(".sby_player_outer_wrap").append('
\n \n
'))},createPlayer:function(t,i,s,n){var a=e(this.el),o=this;if(i=void 0!==i?i:this.getVideoID(a.find(".sby_item").first()),s=void 0!==s?s:0,void 0===n&&(n={host:window.location.protocol+o.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s}}),void 0===n.events&&(n.events={onReady:function(){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),e("#"+t).length&&e("#"+t).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").length&&e("#"+t).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").fadeTo(0,"slow",(function(){e(this).css("z-index",-1),e(this).find(".sby_loader").hide().addClass("sby_hidden"),e(this).closest(".sby_item").removeClass("sby_player_loading")}));var i=jQuery.Event("sbyafterplayerready");i.feed=o,i.player=this,jQuery(window).trigger(i)},onStateChange:function(s){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),o.afterStateChange(t,i,s,e("#"+t).closest(".sby_video_thumbnail_wrap")),1===s.data&&void 0!==o.players&&a.find(".sby_item").each((function(){var t=o.getVideoID(e(this));e(this).find("iframe").length&&t!==i&&void 0!==o.players[t]&&"function"==typeof o.players[t].pauseVideo&&o.players[t].pauseVideo()}))}}),window.sbyEagerLoading)var r=YT.get(t);else r=new window.YT.Player(t,n);this.maybeAddCTA(t),a.hasClass("sby_layout_list")&&void 0===this.players[i]?this.players[i]=r:void 0===this.player&&(this.player=r);var l=jQuery.Event("sbyafterplayercreated");return l.feed=this,jQuery(window).trigger(l),a.find(".sby_player_outer_wrap .sby_play_btn").remove(),r},afterStateChange:function(t,e,i,s){},afterInitialImagesLoaded:function(){this.initLayout(),this.loadMoreButtonInit(),this.hideExtraItemsForWidth(),this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.afterFeedSet(),this.sizePlayer(),this.sizeItems(),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},afterResize:function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass()},afterLoadMoreClicked:function(t){t.find(".sby_loader").removeClass("sby_hidden"),t.find(".sby_btn_text").addClass("sby_hidden"),t.closest(".sb_youtube").find(".sby_num_diff_hide").addClass("sby_transition").removeClass("sby_num_diff_hide")},afterNewImagesLoaded:function(){var t=e(this.el),i=this;this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.sizePlayer(),this.sizeItems(),setTimeout((function(){t.find(".sby_loader").addClass("sby_hidden"),t.find(".sby_btn_text").removeClass("sby_hidden"),i.maybeRaiseImageResolution()}),1),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},beforeNewImagesRevealed:function(){this.setImageHeight(),this.maybeRaiseImageResolution(!0),this.setImageSizeClass()},afterFeedSet:function(){},sizePlayer:function(){var t=e(this.el),i=this;if(t.hasClass("sby_layout_gallery")){$playerThumbnail=t.find(".sby_player_item").find(".sby_player_video_thumbnail");var s=$playerThumbnail.innerWidth(),n=Math.floor(9*s/16);i.settings.narrowPlayer&&(n=Math.floor(3*s/4)),$playerThumbnail.css("height",n+"px").css("overflow","hidden")}else t.hasClass("sby_layout_list")&&t.find(".sby_item").each((function(){$playerThumbnail=e(this).find(".sby_item_video_thumbnail");var t=$playerThumbnail.innerWidth(),s=Math.floor(9*t/16);i.settings.narrowPlayer&&(s=Math.floor(3*t/4)),$playerThumbnail.css("height",s+"px").css("overflow","hidden")}))},sizeItems:function(){var t=e(this.el);t.hasClass("sby_layout_list")||t.find(".sby_item").find(".sby_item_video_thumbnail").each((function(){if(e(this).hasClass("sby_imgLiquid_ready")){var t=e(this).innerWidth(),i=Math.floor(9*t/16);e(this).css("height",i+"px").css("overflow","hidden")}}))},revealNewImages:function(){var i=e(this.el),s=this;this.applyImageLiquid(),"function"==typeof sbyCustomJS&&setTimeout((function(){sbyCustomJS()}),100),i.find(".sby-screenreader").find("img").remove(),i.find(".sby_item.sby_new").each((function(i){var n=jQuery(this);videoID=n.attr("data-video-id"),window.sbyEagerLoading&&s.canCreatePlayer()&&e("#sby_player_"+videoID).length&&(player=new YT.Player("sby_player_"+videoID,{height:"100",width:"100",videoId:videoID,playerVars:{modestbranding:1,rel:0,autoplay:0},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&n.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})),n.find(".sby_video_thumbnail").on("mouseenter",(function(){s.onThumbnailEnter(e(this),!1)})),n.find(".sby_player_wrap").on("mouseleave",(function(){s.onThumbnailLeave(e(this),!1)})),n.find(".sby_video_thumbnail").on("click",(function(i){!(!s.settings.lightboxEnabled||s.settings.lightboxEnabled&&s.settings.noCDN)||!s.settings.noCDN&&s.settings.consentGiven?(i.preventDefault(),s.onThumbnailClick(e(this),!1)):t(e(this).closest(".sby_item").length)&&void 0!==e(this).closest(".sby_item").attr("data-video-id")&&e(this).attr("href","https://www.youtube.com/watch?v="+e(this).closest(".sby_item").attr("data-video-id"))})),s.settings.lightboxEnabled&&(n.find(".sby_video_thumbnail").attr("data-sby-lightbox",s.index),"undefined"!=typeof sbyOptions&&void 0!==sbyOptions.lightboxPlaceholder&&(s.settings.narrowPlayer?n.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholderNarrow):n.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholder))),s.afterItemRevealed(n),""===n.find(".sby_info_item").text().trim()&&n.find(".sby_info_item").addClass("sby_no_space")})),i.find(".sby_player_item").each((function(t){var e=jQuery(this);s.afterItemRevealed(e)})),setTimeout((function(){i.find(".sby_item.sby_new").removeClass("sby_new"),i.find(".sby_transition").length,i.find(".sby_transition").each((function(t){var e=jQuery(this);setTimeout((function(){e.removeClass("sby_transition")}),1)}))}),1)},afterItemRevealed:function(){},afterNewImagesRevealed:function(){this.listenForVisibilityChange(),this.sendNeedsResizingToServer(),this.sendCheckWPPostsToServer(),this.settings.imageLoadEnabled||e(".sby_no_resraise").removeClass("sby_no_resraise");var t=e.Event("sbyafterimagesloaded");t.el=e(this.el),e(window).trigger(t)},setResizedImages:function(){e(this.el).find(".sby_resized_image_data").length&&void 0!==e(this.el).find(".sby_resized_image_data").attr("data-resized")&&0===e(this.el).find(".sby_resized_image_data").attr("data-resized").indexOf('{"')&&(this.resizedImages=JSON.parse(e(this.el).find(".sby_resized_image_data").attr("data-resized")),e(this.el).find(".sby_resized_image_data").remove())},sendNeedsResizingToServer:function(){var t=this;if(t.needsResizing.length>0&&t.settings.resizingEnabled){var i=e(this.el).find(".sby_item").length;l({action:"sby_resized_images_submit",needs_resizing:t.needsResizing,offset:i,feed_id:t.settings.feedID,location:t.locationGuess(),post_id:t.settings.postID,atts:t.settings.shortCodeAtts},(function(e){if(0===e.trim().indexOf("{")){var i=JSON.parse(e);t.settings.debugEnabled&&console.log(i)}}))}},sendCheckWPPostsToServer:function(){var t=this;if(t.settings.checkWPPosts||t.settings.singleCheckPosts){var i=void 0!==t.settings.feedID?t.settings.feedID:"sby_single",s=t.mostRecentlyLoadedPosts;t.mostRecentlyLoadedPosts=[],l({action:"sby_check_wp_submit",feed_id:i,atts:t.settings.shortCodeAtts,location:t.locationGuess(),post_id:t.settings.postID,offset:e(this.el).hasClass("sby_layout_carousel")?Math.floor(e(this.el).find(".sby_item").length/2-1):e(this.el).find(".sby_item").length,posts:s},(function(e){if(0===e.trim().indexOf("{")){var i=JSON.parse(e);t.settings.debugEnabled&&console.log(i),t.afterSendCheckWPPostsToServer(i)}}))}},afterSendCheckWPPostsToServer:function(t){},loadMoreButtonInit:function(){var t=e(this.el),i=this;t.find(".sby_footer .sby_load_btn").off().on("click",(function(){i.afterLoadMoreClicked(jQuery(this)),i.getNewPostSet()}))},getNewPostSet:function(){var t=e(this.el),i=this;l({action:"sby_load_more_clicked",offset:t.find(".sby_item").length,feed_id:i.settings.feedID,atts:i.settings.shortCodeAtts,location:i.locationGuess(),post_id:i.settings.postID,current_resolution:i.imageResolution},(function(s){if(0===s.trim().indexOf("{")){var n=JSON.parse(s),a=void 0!==n.feedStatus.checkWPPosts&&n.feedStatus.checkWPPosts;i.settings.debugEnabled&&console.log(n),i.settings.checkWPPosts=!!a,i.appendNewPosts(n.html),i.addResizedImages(n.resizedImages),i.settings.ajaxPostLoad?(i.settings.ajaxPostLoad=!1,i.afterInitialImagesLoaded()):i.afterNewImagesLoaded(),n.feedStatus.shouldPaginate?i.outOfPages=!1:(i.outOfPages=!0,t.find(".sby_load_btn").hide()),e(".sby_no_js").removeClass("sby_no_js")}}))},appendNewPosts:function(t){var i=e(this.el);i.find(".sby_items_wrap .sby_item").length?i.find(".sby_items_wrap .sby_item").last().after(t):i.find(".sby_items_wrap").append(t)},addResizedImages:function(t){for(var e in t)this.resizedImages[e]=t[e]},setImageHeight:function(){},maybeRaiseSingleImageResolution:function(t,i,s){var n=this,a=n.getImageUrls(t),o=t.find(".sby_video_thumbnail > img").attr("src"),r=150;if(s=void 0!==s&&s,!(t.hasClass("sby_no_resraise")||!n.settings.consentGiven&&n.settings.noCDN)){e.each(a,(function(t,e){e===o&&(r=parseInt(t),s=!1)}));var l=640;switch(n.settings.imgRes){case"thumb":l=120;break;case"medium":l=320;break;case"large":l=480;break;case"full":l=640;break;default:var d=Math.max(n.settings.autoMinRes,t.find(".sby_video_thumbnail").innerWidth());switch(n.getBestResolutionForAuto(d,1,e(this.el).find("sby_item").first())){case 480:l=480;break;case 320:l=320;break;case 120:l=120}}if(l>r||o===n.placeholderURL||s){if(n.settings.debugEnabled){var h=o===n.placeholderURL?"was placeholder":"too small";console.log("rais res for "+o,h)}var c=a[l];t.find(".sby_video_thumbnail > img").attr("src",c),t.find(".sby_video_thumbnail").hasClass("sby_imgLiquid_ready")&&t.find(".sby_video_thumbnail").css("background-image",'url("'+c+'")')}t.find("img").on("error",(function(){if(e(this).hasClass("sby_img_error"))console.log("unfixed error "+e(this).attr("src"));else{if(e(this).addClass("sby_img_error"),e(this).attr("src").indexOf("i.ytimg.com")>-1){n.settings.favorLocal=!0;var t=n.getImageUrls(e(this).closest(".sby_item"));void 0!==t[640]&&(e(this).attr("src",t[640]),e(this).closest(".sby_video_thumbnail").css("background-image","url("+t[640]+")"))}else void 0!==e(this).closest(".sby_video_thumbnail").attr("data-full-res")?(e(this).attr("src",e(this).closest(".sby_video_thumbnail").attr("data-full-res")),e(this).closest(".sby_video_thumbnail").css("background-image","url("+e(this).closest(".sby_video_thumbnail").attr("data-full-res")+")")):"undefined"!==e(this).closest(".sby_video_thumbnail").attr("href")&&(e(this).attr("src",e(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l"),e(this).closest(".sby_video_thumbnail").css("background-image","url("+e(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l)"));setTimeout((function(){n.afterResize()}),1)}}))}},maybeRaiseImageResolution:function(t){var i=this,s=void 0!==t&&!0===t?".sby_item.sby_new":".sby_item",n=!i.isInitialized;e(i.el).find(s).each((function(t){!e(this).hasClass("sby_num_diff_hide")&&e(this).find(".sby_video_thumbnail").length&&void 0!==e(this).find(".sby_video_thumbnail").attr("data-img-src-set")&&i.maybeRaiseSingleImageResolution(e(this),t,n)})),i.isInitialized=!0},getBestResolutionForAuto:function(t,i,s){(isNaN(i)||i<1)&&(i=1);var n=t*i,a=10*Math.ceil(n/10),o=[120,320,480,640];if(s.hasClass("sby_highlighted")&&(a*=2),-1===o.indexOf(parseInt(a))){var r=!1;e.each(o,(function(t,e){e>parseInt(a)&&!r&&(a=e,r=!0)}))}return a},hideExtraItemsForWidth:function(){if("carousel"!==this.layout){var t=e(this.el),i=void 0!==t.attr("data-num")&&""!==t.attr("data-num")?parseInt(t.attr("data-num")):1,s=void 0!==t.attr("data-nummobile")&&""!==t.attr("data-nummobile")?parseInt(t.attr("data-nummobile")):i;t.hasClass(".sby_layout_carousel")||(e(window).width()<480?s140&&a<240?t.addClass("sby_medium"):a<=140&&t.addClass("sby_small")},setMinImageWidth:function(){e(this.el).find(".sby_item .sby_video_thumbnail").first().length?this.minImageWidth=e(this.el).find(".sby_item .sby_video_thumbnail").first().innerWidth():this.minImageWidth=150},setImageResolution:function(){if("auto"===this.settings.imgRes)this.imageResolution="auto";else switch(this.settings.imgRes){case"thumb":this.imageResolution=150;break;case"medium":this.imageResolution=320;break;default:this.imageResolution=640}},getImageUrls:function(t){var e=JSON.parse(t.find(".sby_video_thumbnail").attr("data-img-src-set").replace(/\\\//g,"/")),i=t.attr("id").replace("sby_","").replace("player_","");if(void 0!==this.resizedImages[i]&&"video"!==this.resizedImages[i]&&"pending"!==this.resizedImages[i]&&"error"!==this.resizedImages[i].id&&"video"!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id){if(void 0!==this.resizedImages[i].sizes){var s=[];void 0!==this.resizedImages[i].sizes.full&&(s.push(640),e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg",t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")),void 0!==this.resizedImages[i].sizes.low&&(s.push(320),e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg",this.settings.favorLocal&&void 0===this.resizedImages[i].sizes.full&&(t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"))),void 0!==this.resizedImages[i].sizes.thumb&&(s.push(150),e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg"),this.settings.favorLocal&&(-1===s.indexOf(640)&&s.indexOf(320)>-1&&(e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),-1===s.indexOf(320)&&(s.indexOf(640)>-1?e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg":s.indexOf(150)>-1&&(e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg")),-1===s.indexOf(150)&&(s.indexOf(320)>-1?e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg":s.indexOf(640)>-1&&(e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")))}}else(void 0===this.resizedImages[i]||void 0!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id&&"error"!==this.resizedImages[i].id)&&this.addToNeedsResizing(i);return e},getVideoID:function(t){if(t.hasClass("sby_item")||t.hasClass("sby_player_item")){if(void 0!==t.find(".sby_video_thumbnail").attr("data-video-id"))return t.find(".sby_video_thumbnail").attr("data-video-id")}else if(t.closest("sby_item").length||t.closest("sby_player_item").length){var i=t.closest("sby_item").length?t.closest("sby_item"):t.closest("sby_player_item");if(void 0!==i.find(".sby_video_thumbnail").attr("data-video-id"))return i.find(".sby_video_thumbnail").attr("data-video-id")}else{if(t.hasClass("sb_youtube"))return t.find(".sby_item").first().find(".sby_video_thumbnail").attr("data-video-id");if(e(this.el).find(".sby_video_thumbnail").first().length&&void 0!==e(this.el).find(".sby_video_thumbnail").first().attr("data-video-id"))return e(this.el).find(".sby_video_thumbnail").first().attr("data-video-id")}return""},getAvatarUrl:function(t,e){if(""===t)return"";var i=this.settings.general.avatars;return"local"===(e=void 0!==e?e:"local")?void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":void 0!==i[t]?i[t]:"":void 0!==i[t]?i[t]:void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":""},addToNeedsResizing:function(t){-1===this.needsResizing.indexOf(t)&&this.needsResizing.push(t)},applyImageLiquid:function(){var t=e(this.el);(function(){var t,e,i,s,n=n||{VER:"0.9.944"};n.bgs_Available=!1,n.bgs_CheckRunned=!1,(t=jQuery).fn.extend({sby_imgLiquid:function(e){this.defaults={fill:!0,verticalAlign:"center",horizontalAlign:"center",useBackgroundSize:!0,useDataHtmlAttr:!0,responsive:!0,delay:0,fadeInTime:0,removeBoxBackground:!0,hardPixels:!0,responsiveCheckTime:500,timecheckvisibility:500,onStart:null,onFinish:null,onItemStart:null,onItemFinish:null,onItemError:null},function(){if(!n.bgs_CheckRunned){n.bgs_CheckRunned=!0;var e=t('');t("body").append(e),function(){var t=e[0];if(t&&window.getComputedStyle){var i=window.getComputedStyle(t,null);i&&i.backgroundSize&&(n.bgs_Available="cover"===i.backgroundSize)}}(),e.remove()}}();var i=this;return this.options=e,this.settings=t.extend({},this.defaults,this.options),this.settings.onStart&&this.settings.onStart(),this.each((function(e){function s(){(l.responsive||h.data("sby_imgLiquid_oldProcessed"))&&h.data("sby_imgLiquid_settings")&&(l=h.data("sby_imgLiquid_settings"),d.actualSize=d.get(0).offsetWidth+d.get(0).offsetHeight/1e4,d.sizeOld&&d.actualSize!==d.sizeOld&&o(),d.sizeOld=d.actualSize,setTimeout(s,l.responsiveCheckTime))}function a(){h.data("sby_imgLiquid_error",!0),d.addClass("sby_imgLiquid_error"),l.onItemError&&l.onItemError(e,d,h),r()}function o(){var t,i,s,n,a,o,c,u,y=0,g=0,p=d.width(),b=d.height();void 0===h.data("owidth")&&h.data("owidth",h[0].width),void 0===h.data("oheight")&&h.data("oheight",h[0].height),l.fill===p/b>=h.data("owidth")/h.data("oheight")?(t="100%",i="auto",s=Math.floor(p),n=Math.floor(p*(h.data("oheight")/h.data("owidth")))):(t="auto",i="100%",s=Math.floor(b*(h.data("owidth")/h.data("oheight"))),n=Math.floor(b)),c=p-s,"left"===(a=l.horizontalAlign.toLowerCase())&&(g=0),"center"===a&&(g=.5*c),"right"===a&&(g=c),-1!==a.indexOf("%")&&(a=parseInt(a.replace("%",""),10))>0&&(g=c*a*.01),u=b-n,"left"===(o=l.verticalAlign.toLowerCase())&&(y=0),"center"===o&&(y=.5*u),"bottom"===o&&(y=u),-1!==o.indexOf("%")&&(o=parseInt(o.replace("%",""),10))>0&&(y=u*o*.01),l.hardPixels&&(t=s,i=n),h.css({width:t,height:i,"margin-left":Math.floor(g),"margin-top":Math.floor(y)}),h.data("sby_imgLiquid_oldProcessed")||(h.fadeTo(l.fadeInTime,1),h.data("sby_imgLiquid_oldProcessed",!0),l.removeBoxBackground&&d.css("background-image","none"),d.addClass("sby_imgLiquid_nobgSize"),d.addClass("sby_imgLiquid_ready")),l.onItemFinish&&l.onItemFinish(e,d,h),r()}function r(){e===i.length-1&&i.settings.onFinish&&i.settings.onFinish()}var l=i.settings,d=t(this),h=t("img:first",d);return h.length?(h.data("sby_imgLiquid_settings")?(d.removeClass("sby_imgLiquid_error").removeClass("sby_imgLiquid_ready"),l=t.extend({},h.data("sby_imgLiquid_settings"),i.options)):l=t.extend({},i.settings,function(){var t={};if(i.settings.useDataHtmlAttr){var e=d.attr("data-sby_imgLiquid-fill"),s=d.attr("data-sby_imgLiquid-horizontalAlign"),a=d.attr("data-sby_imgLiquid-verticalAlign");("true"===e||"false"===e)&&(t.fill=Boolean("true"===e)),void 0===s||"left"!==s&&"center"!==s&&"right"!==s&&-1===s.indexOf("%")||(t.horizontalAlign=s),void 0===a||"top"!==a&&"bottom"!==a&&"center"!==a&&-1===a.indexOf("%")||(t.verticalAlign=a)}return n.isIE&&i.settings.ieFadeInDisabled&&(t.fadeInTime=0),t}()),h.data("sby_imgLiquid_settings",l),l.onItemStart&&l.onItemStart(e,d,h),void(n.bgs_Available&&l.useBackgroundSize?(-1===d.css("background-image").indexOf(encodeURI(h.attr("src")))&&d.css({"background-image":'url("'+encodeURI(h.attr("src"))+'")'}),d.css({"background-size":l.fill?"cover":"contain","background-position":(l.horizontalAlign+" "+l.verticalAlign).toLowerCase(),"background-repeat":"no-repeat"}),t("a:first",d).css({display:"block",width:"100%",height:"100%"}),t("img",d).css({display:"none"}),l.onItemFinish&&l.onItemFinish(e,d,h),d.addClass("sby_imgLiquid_bgSize"),d.addClass("sby_imgLiquid_ready"),r()):function i(){if(h.data("oldSrc")&&h.data("oldSrc")!==h.attr("src")){var n=h.clone().removeAttr("style");return n.data("sby_imgLiquid_settings",h.data("sby_imgLiquid_settings")),h.parent().prepend(n),h.remove(),(h=n)[0].width=0,void setTimeout(i,10)}return h.data("sby_imgLiquid_oldProcessed")?void o():(h.data("sby_imgLiquid_oldProcessed",!1),h.data("oldSrc",h.attr("src")),t("img:not(:first)",d).css("display","none"),d.css({overflow:"hidden"}),h.fadeTo(0,0).removeAttr("width").removeAttr("height").css({visibility:"visible","max-width":"none","max-height":"none",width:"auto",height:"auto",display:"block"}),h.on("error",a),h[0].onerror=a,function t(){h.data("sby_imgLiquid_error")||h.data("sby_imgLiquid_loaded")||h.data("sby_imgLiquid_oldProcessed")||(d.is(":visible")&&h[0].complete&&h[0].width>0&&h[0].height>0?(h.data("sby_imgLiquid_loaded",!0),setTimeout(o,e*l.delay)):setTimeout(t,l.timecheckvisibility))}(),void s())}())):void a()}))}}),e=n.injectCss,i=document.getElementsByTagName("head")[0],(s=document.createElement("style")).type="text/css",s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e)),i.appendChild(s)})(),"function"==typeof t.find(".sby_player_item").sby_imgLiquid&&(t.find(".sby_player_item").length&&t.find(".sby_player_item .sby_player_video_thumbnail").sby_imgLiquid({fill:!0}),t.find(".sby_item .sby_item_video_thumbnail").sby_imgLiquid({fill:!0}))},listenForVisibilityChange:function(){var t=this;!function(t){var e={callback:function(){},runOnLoad:!0,frequency:100,sbyPreviousVisibility:null},i={sbyCheckVisibility:function(t,e){if(jQuery.contains(document,t[0])){var s=e.sbyPreviousVisibility,n=t.is(":visible");e.sbyPreviousVisibility=n,null==s?e.runOnLoad&&e.callback(t,n):s!==n&&e.callback(t,n),setTimeout((function(){i.sbyCheckVisibility(t,e)}),e.frequency)}}};t.fn.sbyVisibilityChanged=function(s){var n=t.extend({},e,s);return this.each((function(){i.sbyCheckVisibility(t(this),n)}))}}(jQuery),"function"==typeof e(this.el).filter(":hidden").sbyVisibilityChanged&&e(this.el).filter(":hidden").sbyVisibilityChanged({callback:function(e,i){t.afterResize()},runOnLoad:!1})},getColumnCount:function(){var t=e(this.el),i=this.settings.cols,s=this.settings.colsmobile,n=i;return sbyWindowWidth=window.innerWidth,t.hasClass("sby_mob_col_auto")?(sbyWindowWidth<640&&parseInt(i)>2&&parseInt(i)<7&&(n=2),sbyWindowWidth<640&&parseInt(i)>6&&parseInt(i)<11&&(n=4),sbyWindowWidth<=480&&parseInt(i)>2&&(n=1)):sbyWindowWidth<=480&&(n=s),parseInt(n)},onThumbnailClick:function(t,i,s){if(this.canCreatePlayer()){var n=e(this.el);if(n.hasClass("sby_layout_gallery")){if(n.find(".sby_current").removeClass("sby_current"),t.closest(".sby_item").addClass("sby_current"),t.closest(".sby_item").addClass("sby_current"),n.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),n.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),n.find(".sby_player_outer_wrap iframe").length)i?(s=void 0===s?this.getVideoID(n.find(".sby_item").first()):s,this.playVideoInPlayer(s)):(s=void 0===s?this.getVideoID(t.closest(".sby_item")):s,this.changePlayerInfo(t.closest(".sby_item")),this.playVideoInPlayer(s),this.afterVideoChanged());else if(i)this.createPlayer("sby_player"+this.index);else{s=void 0===s?this.getVideoID(t.closest(".sby_item")):s;this.createPlayer("sby_player"+this.index,s)}this.updateGalleryPlayerSubscribeBtn(t)}else if(e(this.el).hasClass("sby_layout_grid")||e(this.el).hasClass("sby_layout_carousel")){var a=t.closest(".sby_item");s=void 0===s?this.getVideoID(a):s,this.playVideoInPlayer(s),this.afterVideoChanged()}else e(this.el).hasClass("sby_layout_list")&&(a=t.closest(".sby_item"),s=void 0===s?this.getVideoID(a):s,a.length&&!a.find("iframe").length?(a.find(".sby_loader").show().removeClass("sby_hidden"),a.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s)):(this.playVideoInPlayer(s,a.attr("data-video-id")),this.afterVideoChanged()))}},onThumbnailEnter:function(t){if(this.canCreatePlayer()&&e(this.el).hasClass("sby_layout_list")){var i=t.closest(".sby_item"),s=this.getVideoID(i);i.find("iframe").length||(i.find(".sby_loader").show().removeClass("sby_hidden"),i.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s,0))}},onThumbnailLeave:function(t){},changePlayerInfo:function(t){},playerEagerLoaded:function(){if(void 0!==this.player||e(this.el).hasClass("sby_player_loaded"))return!0},canCreatePlayer:function(){return!e(this.el).find("#sby_blank").length&&(this.playerEagerLoaded()||this.playerAPIReady&&this.settings.consentGiven||window.sbyAPIReady&&this.settings.consentGiven)},playVideoInPlayer:function(t,e){void 0!==this.player&&void 0!==this.player.loadVideoById?this.player.loadVideoById(t):void 0!==window.sbyLightboxPlayer&&void 0!==window.sbyLightboxPlayer.loadVideoById?window.sbyLightboxPlayer.loadVideoById(t):void 0!==e&&void 0!==this.players&&void 0!==this.players[e]&&void 0!==this.players[e].loadVideoById&&this.players[e].loadVideoById(t)},afterVideoChanged:function(){e(this.el).hasClass("sby_layout_gallery")&&(e(this.el).find(".sby_player_outer_wrap").removeClass("sby_player_loading"),e(this.el).find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").hide().addClass("sby_hidden"),e(window).width()<480&&e("html, body").animate({scrollTop:e(this.el).find(".sby_player_outer_wrap").offset().top},300))},updateGalleryPlayerSubscribeBtn:function(t){var i=t.attr("href").match(/channel\/(.*)$/);if(i){var s="http://www.youtube.com/channel/"+i[1]+"?sub_confirmation=1&feature=subscribe-embed-click";e(".sby-channel-subscribe-btn a").attr("href",s)}},checkConsent:function(){if(this.settings.consentGiven||!this.settings.gdpr)return this.settings.noCDN=!1,!0;if("undefined"!=typeof CLI_Cookie)null!==CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)&&("null"!==CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")),"null"!==CLI_Cookie.read("cookielawinfo-checkbox-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-necessary")));else if(void 0!==window.cnArgs){var t=("; "+document.cookie).split("; cookie_notice_accepted=");if(2===t.length){var e=t.pop().split(";").shift();this.settings.consentGiven="true"===e}}else void 0!==window.complianz?this.settings.consentGiven="allow"===function(t){for(var e="cmplz_marketing=",i=window.document.cookie.split(";"),s=0;s
"},beforePlayerSetup:function(t,e,i,s,n){},afterPlayerSetup:function(t,e,i,s){},afterResize:function(){var t=e("#sby_lightbox .sby_lb-player").height();if(t>100){var i=e("#sby_lightbox .sby_lb-outerContainer").height()-t;i>10&&e("#sby_lightbox .sby_lb-player").css("top",i/2)}},pausePlayer:function(){void 0===window.sbyLightboxPlayer&&"undefined"==typeof YT||(void 0!==YT.get("sby_lb-player")&&"function"==typeof YT.get("sby_lb-player").pauseVideo?YT.get("sby_lb-player").pauseVideo():void 0!==window.sbyLightboxPlayer&&"function"==typeof window.sbyLightboxPlayer.pauseVideo&&window.sbyLightboxPlayer.pauseVideo())}},o.prototype=Object.create(a.prototype),r.prototype={toggleCTA:function(t,i,s){this.$player=s.length?s:e(".sby_lb-container"),this.state=i,this.videoID=t,this.isInitialized=!0,this.resetCTA(),void 0!==window.sby.ctas[t]&&(this.callbackArgs=window.sby.ctas[t]);var n=this.callbackArgs.callback;if("link"===n)this.callback=this.link;else{if("related"!==n)return;this.callback=this.related}2===i||0===i?(this.$player.find(".sby_cta_items_wraps").addClass("sby_cta_is_open"),2===i?this.$player.find(".sby_cta_items_wraps").addClass("sby_cta_state_paused"):this.$player.find(".sby_cta_items_wraps").addClass("sby_cta_state_ended"),this.$player.find(".sby_cta_items_wraps").show(),this.callback(),this.setCTAStyles()):(this.$player.find(".sby_cta_items_wraps").removeClass("sby_cta_is_open"),this.$player.find(".sby_cta_items_wraps").hide().removeClass("sby_cta_state_paused").removeClass("sby_cta_state_ended").removeClass("sby_cta_is_open"))},related:function(t){var i=this,s=this.feedObjInContext,n=window.sby.shuffle(this.getRelated(s)),a=0,o=this.videoID,r=this.$player;this.$player.find(".sby_cta_items_wraps").removeClass("sby_cta_cols_"+this.numItemColumns),this.numItems=4,this.numItemColumns=2,r.width()<480&&(this.numItems=1,this.numItemColumns=1);var l=this.numItems;e.each(n,(function(t,e){e.videoID!==o&&a
'),a++)})),r.find(".sby_cta_items_wraps .sby_video_thumbnail").each((function(){e(this).off().on("click",(function(t){t.preventDefault();var n=e(this).attr("data-video-id");s.onThumbnailClick(e(this),!0,n),i.videoID=n}))}))},getRelated:function(t){if(void 0===t.settings.general.cta.defaultPosts[0]){var i=e(t.el),s=[];return i.find(".sby_item").each((function(){if(void 0!==e(this).find(".sby_item_video_thumbnail").attr("data-full-res")){var t={videoID:e(this).attr("data-video-id"),title:e(this).attr("data-video-title"),thumbnail:e(this).find(".sby_item_video_thumbnail").attr("data-full-res")};s.push(t)}})),s}return t.settings.general.cta.defaultPosts},link:function(t){var e=this.$player,i=this.feedObjInContext;this.$player.find(".sby_cta_items_wraps").removeClass("sby_cta_cols_"+this.numItemColumns),this.numItems=1,this.numItemColumns=1;var s="",n="";""===i.settings.general.cta.color&&""===i.settings.general.cta.textColor||(s=' style="',n=" sby_custom",""!==i.settings.general.cta.color&&(s+="background: rgb("+i.settings.general.cta.color+");"),""!==i.settings.general.cta.textColor&&(s+="color: rgb("+i.settings.general.cta.textColor+");"),s+='"');var a="";"newwindow"===i.settings.general.cta.openType&&(a=' target="_blank" rel="noopener"'),e.find(".sby_cta_items_wraps .sby_cta_inner_wrap").append('")},setCTAStyles:function(){var t=Math.max(90,this.$player.height()-60-49);this.$player.find(".sby_cta_items_wraps").css("height",t+"px").css("width",this.$player.find("iframe").width()-20+"px").addClass("sby_cta_cols_"+this.numItemColumns);var e=Math.max(1,this.numItems/this.numItemColumns),i=2*parseInt(this.$player.find(".sby_cta_items_wraps").css("padding-top").replace("px","")),s=Math.max(90,(t-i)/e);this.$player.find(".sby_cta_item").css("max-height",s+"px").find("img").css({"max-height":s+"px",width:"auto",margin:"auto"}),this.$player.find(".sby_btn_wrap").css("height",s+"px")},resetCTA:function(){this.$player.find(".sby_cta_items_wraps .sby_cta_inner_wrap").empty()}},window.sby_init=function(){window.sby=new i,window.sby.createPage(window.sby.createFeeds,{whenFeedsCreated:window.sby.afterFeedsCreated})},window.sby_carousel_init=function(){console.log("log")}}(jQuery),void 0===window.sbyEagerLoading){if(window.sbyEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.eagerload,jQuery(".elementor-widget-video").length){var c=void 0!==jQuery(".elementor-widget-video").attr("data-settings")&&JSON.parse(jQuery(".elementor-widget-video").attr("data-settings"));c&&void 0!==c.youtube_url&&(window.sbyEagerLoading=!0)}jQuery("div[data-vc-video-bg]").length&&(window.sbyEagerLoading=!0)}void 0===window.sbySemiEagerLoading&&(window.sbySemiEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.semiEagerload,(jQuery("div[data-vc-video-bg]").length||window.sbyEagerLoading)&&(window.sbySemiEagerLoading=!1)),jQuery(document).ready((function(t){window.sbySemiEagerLoading||sby_init(),t("#cookie-notice a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t("#cookie-law-info-bar a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(".cli-user-preference-checkbox").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(window).on("CookiebotOnAccept",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),document.addEventListener("cmplz_status_change",(function(e){"marketing"===e.detail.category&&"allow"===e.detail.value&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("cmplzFireCategories",(function(e){"marketing"===e.detail.category&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("borlabs-cookie-consent-saved",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))})),t("#sby-frce-hide-license-error").on("click",(function(){t("#sby-fr-ce-license-error").slideUp(),jQuery.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:{action:"sby_hide_frontend_license_error",nonce:sbyOptions.nonce},success:function(t){console.log(t)}})}))}))}if(window.sbySemiEagerLoading){var u="sby-youtube-api";if(null===document.getElementById(u)){var y=document.createElement("script"),g=document.getElementsByTagName("script")[0];y.src="https://www.youtube.com/iframe_api",y.id=u,g.parentNode.insertBefore(y,g)}}window.onYouTubeIframeAPIReady=function(){var t=document.getElementsByClassName("sb_youtube").length;if(t>0){if(window.sbySemiEagerLoading){if(void 0!==window.sby)for(var e=0;e
'),player=new YT.Player("sby_lb-player",{height:"100",width:"100",videoId:jQuery(this).find(".sby_item").first().attr("data-video-id"),playerVars:{modestbranding:1,rel:0,autoplay:s}}),window.sbyLightboxPlayer=player)}if(void 0!==window.sby){var n=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(n)}}})(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZmVlZC1wcm8vLi9qcy9zYi15b3V0dWJlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBzYnlfanNfZXhpc3RzID0gKHR5cGVvZiBzYnlfanNfZXhpc3RzICE9PSAndW5kZWZpbmVkJykgPyB0cnVlIDogZmFsc2U7XG5pZighc2J5X2pzX2V4aXN0cykge1xuXG4gICAgZnVuY3Rpb24gc2J5QWRkSW1nTGlxdWlkKCkge1xuICAgICAgICAvKiEgaW1nTGlxdWlkIHYwLjkuOTQ0IC8gMDMtMDUtMjAxMyBodHRwczovL2dpdGh1Yi5jb20va2FyYWNhcy9pbWdMaXF1aWQgKi9cbiAgICAgICAgdmFyIHNieV9pbWdMaXF1aWQgPSBzYnlfaW1nTGlxdWlkIHx8IHtWRVI6IFwiMC45Ljk0NFwifTtcbiAgICAgICAgc2J5X2ltZ0xpcXVpZC5iZ3NfQXZhaWxhYmxlID0gITEsIHNieV9pbWdMaXF1aWQuYmdzX0NoZWNrUnVubmVkID0gITEsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiB0KCkge1xuICAgICAgICAgICAgICAgIGlmICghc2J5X2ltZ0xpcXVpZC5iZ3NfQ2hlY2tSdW5uZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2J5X2ltZ0xpcXVpZC5iZ3NfQ2hlY2tSdW5uZWQgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBpKCc8c3BhbiBzdHlsZT1cImJhY2tncm91bmQtc2l6ZTpjb3ZlclwiIC8+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGkoXCJib2R5XCIpLmFwcGVuZCh0KSwgIWZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlICYmIGUuYmFja2dyb3VuZFNpemUgJiYgKHNieV9pbWdMaXF1aWQuYmdzX0F2YWlsYWJsZSA9IFwiY292ZXJcIiA9PT0gZS5iYWNrZ3JvdW5kU2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSgpLCB0LnJlbW92ZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZuLmV4dGVuZCh7XG4gICAgICAgICAgICAgICAgc2J5X2ltZ0xpcXVpZDogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUJhY2tncm91bmRTaXplOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZURhdGFIdG1sQXR0cjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluVGltZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUJveEJhY2tncm91bmQ6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFyZFBpeGVsczogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zaXZlQ2hlY2tUaW1lOiA1MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lY2hlY2t2aXNpYmlsaXR5OiA1MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvblN0YXJ0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25GaW5pc2g6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkl0ZW1TdGFydDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSXRlbUZpbmlzaDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSXRlbUVycm9yOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0sIHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zID0gZSwgdGhpcy5zZXR0aW5ncyA9IGkuZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzLCB0aGlzLm9wdGlvbnMpLCB0aGlzLnNldHRpbmdzLm9uU3RhcnQgJiYgdGhpcy5zZXR0aW5ncy5vblN0YXJ0KCksIHRoaXMuZWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSA9PT0gdS5jc3MoXCJiYWNrZ3JvdW5kLWltYWdlXCIpLmluZGV4T2YoZW5jb2RlVVJJKGMuYXR0cihcInNyY1wiKSkpICYmIHUuY3NzKHtcImJhY2tncm91bmQtaW1hZ2VcIjogJ3VybChcIicgKyBlbmNvZGVVUkkoYy5hdHRyKFwic3JjXCIpKSArICdcIiknfSksIHUuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLXNpemVcIjogZy5maWxsID8gXCJjb3ZlclwiIDogXCJjb250YWluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1wb3NpdGlvblwiOiAoZy5ob3Jpem9udGFsQWxpZ24gKyBcIiBcIiArIGcudmVydGljYWxBbGlnbikudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLXJlcGVhdFwiOiBcIm5vLXJlcGVhdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGkoXCJhOmZpcnN0XCIsIHUpLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGkoXCJpbWdcIiwgdSkuY3NzKHtkaXNwbGF5OiBcIm5vbmVcIn0pLCBnLm9uSXRlbUZpbmlzaCAmJiBnLm9uSXRlbUZpbmlzaCh0LCB1LCBjKSwgdS5hZGRDbGFzcyhcInNieV9pbWdMaXF1aWRfYmdTaXplXCIpLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9yZWFkeVwiKSwgbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG8oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9lcnJvclwiKSB8fCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX2xvYWRlZFwiKSB8fCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiKSB8fCAodS5pcyhcIjp2aXNpYmxlXCIpICYmIGNbMF0uY29tcGxldGUgJiYgY1swXS53aWR0aCA+IDAgJiYgY1swXS5oZWlnaHQgPiAwID8gKGMuZGF0YShcInNieV9pbWdMaXF1aWRfbG9hZGVkXCIsICEwKSwgc2V0VGltZW91dChyLCB0ICogZy5kZWxheSkpIDogc2V0VGltZW91dChlLCBnLnRpbWVjaGVja3Zpc2liaWxpdHkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjLmRhdGEoXCJvbGRTcmNcIikgJiYgYy5kYXRhKFwib2xkU3JjXCIpICE9PSBjLmF0dHIoXCJzcmNcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBjLmNsb25lKCkucmVtb3ZlQXR0cihcInN0eWxlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5kYXRhKFwic2J5X2ltZ0xpcXVpZF9zZXR0aW5nc1wiLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpKSwgYy5wYXJlbnQoKS5wcmVwZW5kKGEpLCBjLnJlbW92ZSgpLCBjID0gYSwgY1swXS53aWR0aCA9IDAsIHZvaWQgc2V0VGltZW91dChvLCAxMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuZGF0YShcInNieV9pbWdMaXF1aWRfb2xkUHJvY2Vzc2VkXCIpID8gdm9pZCByKCkgOiAoYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIiwgITEpLCBjLmRhdGEoXCJvbGRTcmNcIiwgYy5hdHRyKFwic3JjXCIpKSwgaShcImltZzpub3QoOmZpcnN0KVwiLCB1KS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKSwgdS5jc3Moe292ZXJmbG93OiBcImhpZGRlblwifSksIGMuZmFkZVRvKDAsIDApLnJlbW92ZUF0dHIoXCJ3aWR0aFwiKS5yZW1vdmVBdHRyKFwiaGVpZ2h0XCIpLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwidmlzaWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1heC13aWR0aFwiOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXgtaGVpZ2h0XCI6IFwibm9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBjLm9uKFwiZXJyb3JcIiwgbiksIGNbMF0ub25lcnJvciA9IG4sIGUoKSwgdm9pZCBkKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcucmVzcG9uc2l2ZSB8fCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiKSkgJiYgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9zZXR0aW5nc1wiKSAmJiAoZyA9IGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIiksIHUuYWN0dWFsU2l6ZSA9IHUuZ2V0KDApLm9mZnNldFdpZHRoICsgdS5nZXQoMCkub2Zmc2V0SGVpZ2h0IC8gMWU0LCB1LnNpemVPbGQgJiYgdS5hY3R1YWxTaXplICE9PSB1LnNpemVPbGQgJiYgcigpLCB1LnNpemVPbGQgPSB1LmFjdHVhbFNpemUsIHNldFRpbWVvdXQoZCwgZy5yZXNwb25zaXZlQ2hlY2tUaW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX2Vycm9yXCIsICEwKSwgdS5hZGRDbGFzcyhcInNieV9pbWdMaXF1aWRfZXJyb3JcIiksIGcub25JdGVtRXJyb3IgJiYgZy5vbkl0ZW1FcnJvcih0LCB1LCBjKSwgbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYS5zZXR0aW5ncy51c2VEYXRhSHRtbEF0dHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB1LmF0dHIoXCJkYXRhLXNieV9pbWdMaXF1aWQtZmlsbFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gdS5hdHRyKFwiZGF0YS1zYnlfaW1nTGlxdWlkLWhvcml6b250YWxBbGlnblwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0gdS5hdHRyKFwiZGF0YS1zYnlfaW1nTGlxdWlkLXZlcnRpY2FsQWxpZ25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcInRydWVcIiA9PT0gdCB8fCBcImZhbHNlXCIgPT09IHQpICYmIChpLmZpbGwgPSBCb29sZWFuKFwidHJ1ZVwiID09PSB0KSksIHZvaWQgMCA9PT0gZSB8fCBcImxlZnRcIiAhPT0gZSAmJiBcImNlbnRlclwiICE9PSBlICYmIFwicmlnaHRcIiAhPT0gZSAmJiAtMSA9PT0gZS5pbmRleE9mKFwiJVwiKSB8fCAoaS5ob3Jpem9udGFsQWxpZ24gPSBlKSwgdm9pZCAwID09PSBvIHx8IFwidG9wXCIgIT09IG8gJiYgXCJib3R0b21cIiAhPT0gbyAmJiBcImNlbnRlclwiICE9PSBvICYmIC0xID09PSBvLmluZGV4T2YoXCIlXCIpIHx8IChpLnZlcnRpY2FsQWxpZ24gPSBvKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2J5X2ltZ0xpcXVpZC5pc0lFICYmIGEuc2V0dGluZ3MuaWVGYWRlSW5EaXNhYmxlZCAmJiAoaS5mYWRlSW5UaW1lID0gMCksIGlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgZSwgYSwgbywgZCwgbiwgcywgciwgbSA9IDAsIGggPSAwLCBmID0gdS53aWR0aCgpLCB2ID0gdS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IGMuZGF0YShcIm93aWR0aFwiKSAmJiBjLmRhdGEoXCJvd2lkdGhcIiwgY1swXS53aWR0aCksIHZvaWQgMCA9PT0gYy5kYXRhKFwib2hlaWdodFwiKSAmJiBjLmRhdGEoXCJvaGVpZ2h0XCIsIGNbMF0uaGVpZ2h0KSwgZy5maWxsID09PSBmIC8gdiA+PSBjLmRhdGEoXCJvd2lkdGhcIikgLyBjLmRhdGEoXCJvaGVpZ2h0XCIpID8gKGkgPSBcIjEwMCVcIiwgZSA9IFwiYXV0b1wiLCBhID0gTWF0aC5mbG9vcihmKSwgbyA9IE1hdGguZmxvb3IoZiAqIChjLmRhdGEoXCJvaGVpZ2h0XCIpIC8gYy5kYXRhKFwib3dpZHRoXCIpKSkpIDogKGkgPSBcImF1dG9cIiwgZSA9IFwiMTAwJVwiLCBhID0gTWF0aC5mbG9vcih2ICogKGMuZGF0YShcIm93aWR0aFwiKSAvIGMuZGF0YShcIm9oZWlnaHRcIikpKSwgbyA9IE1hdGguZmxvb3IodikpLCBkID0gZy5ob3Jpem9udGFsQWxpZ24udG9Mb3dlckNhc2UoKSwgcyA9IGYgLSBhLCBcImxlZnRcIiA9PT0gZCAmJiAoaCA9IDApLCBcImNlbnRlclwiID09PSBkICYmIChoID0gLjUgKiBzKSwgXCJyaWdodFwiID09PSBkICYmIChoID0gcyksIC0xICE9PSBkLmluZGV4T2YoXCIlXCIpICYmIChkID0gcGFyc2VJbnQoZC5yZXBsYWNlKFwiJVwiLCBcIlwiKSwgMTApLCBkID4gMCAmJiAoaCA9IHMgKiBkICogLjAxKSksIG4gPSBnLnZlcnRpY2FsQWxpZ24udG9Mb3dlckNhc2UoKSwgciA9IHYgLSBvLCBcImxlZnRcIiA9PT0gbiAmJiAobSA9IDApLCBcImNlbnRlclwiID09PSBuICYmIChtID0gLjUgKiByKSwgXCJib3R0b21cIiA9PT0gbiAmJiAobSA9IHIpLCAtMSAhPT0gbi5pbmRleE9mKFwiJVwiKSAmJiAobiA9IHBhcnNlSW50KG4ucmVwbGFjZShcIiVcIiwgXCJcIiksIDEwKSwgbiA+IDAgJiYgKG0gPSByICogbiAqIC4wMSkpLCBnLmhhcmRQaXhlbHMgJiYgKGkgPSBhLCBlID0gbyksIGMuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXJnaW4tbGVmdFwiOiBNYXRoLmZsb29yKGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmdpbi10b3BcIjogTWF0aC5mbG9vcihtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiKSB8fCAoYy5mYWRlVG8oZy5mYWRlSW5UaW1lLCAxKSwgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIiwgITApLCBnLnJlbW92ZUJveEJhY2tncm91bmQgJiYgdS5jc3MoXCJiYWNrZ3JvdW5kLWltYWdlXCIsIFwibm9uZVwiKSwgdS5hZGRDbGFzcyhcInNieV9pbWdMaXF1aWRfbm9iZ1NpemVcIiksIHUuYWRkQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX3JlYWR5XCIpKSwgZy5vbkl0ZW1GaW5pc2ggJiYgZy5vbkl0ZW1GaW5pc2godCwgdSwgYyksIGwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPT09IGEubGVuZ3RoIC0gMSAmJiBhLnNldHRpbmdzLm9uRmluaXNoICYmIGEuc2V0dGluZ3Mub25GaW5pc2goKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IGEuc2V0dGluZ3MsIHUgPSBpKHRoaXMpLCBjID0gaShcImltZzpmaXJzdFwiLCB1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjLmxlbmd0aCA/IChjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpID8gKHUucmVtb3ZlQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX2Vycm9yXCIpLnJlbW92ZUNsYXNzKFwic2J5X2ltZ0xpcXVpZF9yZWFkeVwiKSwgZyA9IGkuZXh0ZW5kKHt9LCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpLCBhLm9wdGlvbnMpKSA6IGcgPSBpLmV4dGVuZCh7fSwgYS5zZXR0aW5ncywgcygpKSwgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9zZXR0aW5nc1wiLCBnKSwgZy5vbkl0ZW1TdGFydCAmJiBnLm9uSXRlbVN0YXJ0KHQsIHUsIGMpLCB2b2lkIChzYnlfaW1nTGlxdWlkLmJnc19BdmFpbGFibGUgJiYgZy51c2VCYWNrZ3JvdW5kU2l6ZSA/IGUoKSA6IG8oKSkpIDogdm9pZCBuKClcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KGpRdWVyeSk7XG5cbiAgICAgICAgLy8gVXNlIGltYWdlZmlsbCB0byBzZXQgdGhlIGltYWdlcyBhcyBiYWNrZ3JvdW5kcyBzbyB0aGV5IGNhbiBiZSBzcXVhcmVcbiAgICAgICAgIWZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBjc3MgPSBzYnlfaW1nTGlxdWlkLmluamVjdENzcyxcbiAgICAgICAgICAgICAgaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0sXG4gICAgICAgICAgICAgIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgICAgIH0oKTtcbiAgICB9XG5cbiAgICAvKiBKYXZhU2NyaXB0IExpbmtpZnkgLSB2MC4zIC0gNi8yNy8yMDA5IC0gaHR0cDovL2JlbmFsbWFuLmNvbS9wcm9qZWN0cy9qYXZhc2NyaXB0LWxpbmtpZnkvICovXG4gICAgd2luZG93LnNieUxpbmtpZnkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgayA9IFwiW2EtelxcXFxkLi1dKzovL1wiLFxuICAgICAgICAgIGggPSBcIig/Oig/OlswLTldfFsxLTldXFxcXGR8MVxcXFxkezJ9fDJbMC00XVxcXFxkfDI1WzAtNV0pXFxcXC4pezN9KD86WzAtOV18WzEtOV1cXFxcZHwxXFxcXGR7Mn18MlswLTRdXFxcXGR8MjVbMC01XSlcIixcbiAgICAgICAgICBjID0gXCIoPzooPzpbXlxcXFxzIUAjJCVeJiooKV89K1tcXFxcXXt9XFxcXFxcXFx8OzonXFxcIiwuPD4vP10rKVxcXFwuKStcIixcbiAgICAgICAgICBuID0gXCIoPzphY3xhZHxhZXJvfGFlfGFmfGFnfGFpfGFsfGFtfGFufGFvfGFxfGFycGF8YXJ8YXNpYXxhc3xhdHxhdXxhd3xheHxhenxiYXxiYnxiZHxiZXxiZnxiZ3xiaHxiaXp8Yml8Ymp8Ym18Ym58Ym98YnJ8YnN8YnR8YnZ8Ynd8Ynl8Ynp8Y2F0fGNhfGNjfGNkfGNmfGNnfGNofGNpfGNrfGNsfGNtfGNufGNvb3B8Y29tfGNvfGNyfGN1fGN2fGN4fGN5fGN6fGRlfGRqfGRrfGRtfGRvfGR6fGVjfGVkdXxlZXxlZ3xlcnxlc3xldHxldXxmaXxmanxma3xmbXxmb3xmcnxnYXxnYnxnZHxnZXxnZnxnZ3xnaHxnaXxnbHxnbXxnbnxnb3Z8Z3B8Z3F8Z3J8Z3N8Z3R8Z3V8Z3d8Z3l8aGt8aG18aG58aHJ8aHR8aHV8aWR8aWV8aWx8aW18aW5mb3xpbnR8aW58aW98aXF8aXJ8aXN8aXR8amV8am18am9ic3xqb3xqcHxrZXxrZ3xraHxraXxrbXxrbnxrcHxrcnxrd3xreXxrenxsYXxsYnxsY3xsaXxsa3xscnxsc3xsdHxsdXxsdnxseXxtYXxtY3xtZHxtZXxtZ3xtaHxtaWx8bWt8bWx8bW18bW58bW9iaXxtb3xtcHxtcXxtcnxtc3xtdHxtdXNldW18bXV8bXZ8bXd8bXh8bXl8bXp8bmFtZXxuYXxuY3xuZXR8bmV8bmZ8bmd8bml8bmx8bm98bnB8bnJ8bnV8bnp8b218b3JnfHBhfHBlfHBmfHBnfHBofHBrfHBsfHBtfHBufHByb3xwcnxwc3xwdHxwd3xweXxxYXxyZXxyb3xyc3xydXxyd3xzYXxzYnxzY3xzZHxzZXxzZ3xzaHxzaXxzanxza3xzbHxzbXxzbnxzb3xzcnxzdHxzdXxzdnxzeXxzenx0Y3x0ZHx0ZWx8dGZ8dGd8dGh8dGp8dGt8dGx8dG18dG58dG98dHB8dHJhdmVsfHRyfHR0fHR2fHR3fHR6fHVhfHVnfHVrfHVtfHVzfHV5fHV6fHZhfHZjfHZlfHZnfHZpfHZufHZ1fHdmfHdzfHhuLS0wendtNTZkfHhuLS0xMWI1YnMzYTlhajZnfHhuLS04MGFraGJ5a25qNGZ8eG4tLTl0NGIxMXlpNWF8eG4tLWRlYmEwYWR8eG4tLWc2dzI1MWR8eG4tLWhnYms2YWo3ZjUzYmJhfHhuLS1obGNqNmF5YTllc2M3YXx4bi0tanhhbHBkbHB8eG4tLWtnYmVjaHR2fHhuLS16Y2t6YWh8eWV8eXR8eXV8emF8em18encpXCIsXG4gICAgICAgICAgZiA9IFwiKD86XCIgKyBjICsgbiArIFwifFwiICsgaCArIFwiKVwiLCBvID0gXCIoPzpbOy9dW14jPzw+XFxcXHNdKik/XCIsIGUgPSBcIig/OlxcXFw/W14jPD5cXFxcc10qKT8oPzojW148PlxcXFxzXSopP1wiLFxuICAgICAgICAgIGQgPSBcIlxcXFxiXCIgKyBrICsgXCJbXjw+XFxcXHNdK1wiLCBhID0gXCJcXFxcYlwiICsgZiArIG8gKyBlICsgXCIoPyFcXFxcdylcIiwgbSA9IFwibWFpbHRvOlwiLFxuICAgICAgICAgIGogPSBcIig/OlwiICsgbSArIFwiKT9bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKD86XFxcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAXCIgKyBmICsgZSArIFwiKD8hXFxcXHcpXCIsXG4gICAgICAgICAgbCA9IG5ldyBSZWdFeHAoXCIoPzpcIiArIGQgKyBcInxcIiArIGEgKyBcInxcIiArIGogKyBcIilcIiwgXCJpZ1wiKSwgZyA9IG5ldyBSZWdFeHAoXCJeXCIgKyBrLCBcImlcIiksXG4gICAgICAgICAgYiA9IHtcIidcIjogXCJgXCIsIFwiPlwiOiBcIjxcIiwgXCIpXCI6IFwiKFwiLCBcIl1cIjogXCJbXCIsIFwifVwiOiBcIntcIiwgXCJCO1wiOiBcIkIrXCIsIFwiYjpcIjogXCJiOVwifSwgaSA9IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIChxLCBwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcCA/ICc8YSBocmVmPVwiJyArIHAgKyAnXCIgdGl0bGU9XCInICsgcCArICdcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiPicgKyBxICsgXCI8L2E+XCIgOiBxXG4gICAgICAgICAgICAgIH0sIHB1bmN0X3JlZ2V4cDogLyg/OlshPy4sOjsnXCJdfCg/OiZ8JmFtcDspKD86bHR8Z3R8cXVvdHxhcG9zfHJhcXVvfGxhcXVvfHJzYXF1b3xsc2FxdW8pOykkL1xuICAgICAgICAgIH07XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodSwgeikge1xuICAgICAgICAgICAgeiA9IHogfHwge307XG4gICAgICAgICAgICB2YXIgdywgdiwgQSwgcCwgeCA9IFwiXCIsIHQgPSBbXSwgcywgRSwgQywgeSwgcSwgRCwgQiwgcjtcbiAgICAgICAgICAgIGZvciAodiBpbiBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHpbdl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB6W3ZdID0gaVt2XVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlICh3ID0gbC5leGVjKHUpKSB7XG4gICAgICAgICAgICAgICAgQSA9IHdbMF07XG4gICAgICAgICAgICAgICAgRSA9IGwubGFzdEluZGV4O1xuICAgICAgICAgICAgICAgIEMgPSBFIC0gQS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKC9bXFwvOl0vLnRlc3QodS5jaGFyQXQoQyAtIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgIHkgPSBBO1xuICAgICAgICAgICAgICAgICAgICByID0gQS5zdWJzdHIoLTEpO1xuICAgICAgICAgICAgICAgICAgICBCID0gYltyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBBLm1hdGNoKG5ldyBSZWdFeHAoXCJcXFxcXCIgKyBCICsgXCIoPyEkKVwiLCBcImdcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRCA9IEEubWF0Y2gobmV3IFJlZ0V4cChcIlxcXFxcIiArIHIsIFwiZ1wiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHEgPyBxLmxlbmd0aCA6IDApIDwgKEQgPyBELmxlbmd0aCA6IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEEuc3Vic3RyKDAsIEEubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRS0tXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHoucHVuY3RfcmVnZXhwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBID0gQS5yZXBsYWNlKHoucHVuY3RfcmVnZXhwLCBmdW5jdGlvbiAoRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgLT0gRi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IHdoaWxlIChBLmxlbmd0aCAmJiBBICE9PSB5KTtcbiAgICAgICAgICAgICAgICBwID0gQTtcbiAgICAgICAgICAgICAgICBpZiAoIWcudGVzdChwKSkge1xuICAgICAgICAgICAgICAgICAgICBwID0gKHAuaW5kZXhPZihcIkBcIikgIT09IC0xID8gKCFwLmluZGV4T2YobSkgPyBcIlwiIDogbSkgOiAhcC5pbmRleE9mKFwiaXJjLlwiKSA/IFwiaXJjOi8vXCIgOiAhcC5pbmRleE9mKFwiZnRwLlwiKSA/IFwiZnRwOi8vXCIgOiBcImh0dHA6Ly9cIikgKyBwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzICE9IEMpIHtcbiAgICAgICAgICAgICAgICAgICAgdC5wdXNoKFt1LnNsaWNlKHMsIEMpXSk7XG4gICAgICAgICAgICAgICAgICAgIHMgPSBFXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQucHVzaChbQSwgcF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0LnB1c2goW3Uuc3Vic3RyKHMpXSk7XG4gICAgICAgICAgICBmb3IgKHYgPSAwOyB2IDwgdC5sZW5ndGg7IHYrKykge1xuICAgICAgICAgICAgICAgIHggKz0gei5jYWxsYmFjay5hcHBseSh3aW5kb3csIHRbdl0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geCB8fCB1XG4gICAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgLy9DaGVja3Mgd2hldGhlciBicm93c2VyIHN1cHBvcnQgSFRNTDUgdmlkZW8gZWxlbWVudFxuICAgIGZ1bmN0aW9uIHNieV9zdXBwb3J0c192aWRlbygpIHtcbiAgICAgICAgcmV0dXJuICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKS5jYW5QbGF5VHlwZTtcbiAgICB9XG5cbiAgICAvLyBDYXJvdXNlbFxuICAgICFmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICBmdW5jdGlvbiBlKGIsIGMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBudWxsLCB0aGlzLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgYyksIHRoaXMuJGVsZW1lbnQgPSBhKGIpLCB0aGlzLl9oYW5kbGVycyA9IHt9LCB0aGlzLl9wbHVnaW5zID0ge30sIHRoaXMuX3N1cHJlc3MgPSB7fSwgdGhpcy5fY3VycmVudCA9IG51bGwsIHRoaXMuX3NwZWVkID0gbnVsbCwgdGhpcy5fY29vcmRpbmF0ZXMgPSBbXSwgdGhpcy5fYnJlYWtwb2ludCA9IG51bGwsIHRoaXMuX3dpZHRoID0gbnVsbCwgdGhpcy5faXRlbXMgPSBbXSwgdGhpcy5fY2xvbmVzID0gW10sIHRoaXMuX21lcmdlcnMgPSBbXSwgdGhpcy5fd2lkdGhzID0gW10sIHRoaXMuX2ludmFsaWRhdGVkID0ge30sIHRoaXMuX3BpcGUgPSBbXSwgdGhpcy5fZHJhZyA9IHtcbiAgICAgICAgICAgICAgICB0aW1lOiBudWxsLFxuICAgICAgICAgICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgICAgICAgICBwb2ludGVyOiBudWxsLFxuICAgICAgICAgICAgICAgIHN0YWdlOiB7c3RhcnQ6IG51bGwsIGN1cnJlbnQ6IG51bGx9LFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogbnVsbFxuICAgICAgICAgICAgfSwgdGhpcy5fc3RhdGVzID0ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHt9LFxuICAgICAgICAgICAgICAgIHRhZ3M6IHtpbml0aWFsaXppbmc6IFtcImJ1c3lcIl0sIGFuaW1hdGluZzogW1wiYnVzeVwiXSwgZHJhZ2dpbmc6IFtcImludGVyYWN0aW5nXCJdfVxuICAgICAgICAgICAgfSwgYS5lYWNoKFtcIm9uUmVzaXplXCIsIFwib25UaHJvdHRsZWRSZXNpemVcIl0sIGEucHJveHkoZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVyc1tjXSA9IGEucHJveHkodGhpc1tjXSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMpKSwgYS5lYWNoKGUuUGx1Z2lucywgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BsdWdpbnNbYS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGEuc2xpY2UoMSldID0gbmV3IGIodGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMpKSwgYS5lYWNoKGUuV29ya2VycywgYS5wcm94eShmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BpcGUucHVzaCh7ZmlsdGVyOiBjLmZpbHRlciwgcnVuOiBhLnByb3h5KGMucnVuLCB0aGlzKX0pXG4gICAgICAgICAgICB9LCB0aGlzKSksIHRoaXMuc2V0dXAoKSwgdGhpcy5pbml0aWFsaXplKClcbiAgICAgICAgfVxuXG4gICAgICAgIGUuRGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBpdGVtczogMyxcbiAgICAgICAgICAgIGxvb3A6ICExLFxuICAgICAgICAgICAgY2VudGVyOiAhMSxcbiAgICAgICAgICAgIHJld2luZDogITEsXG4gICAgICAgICAgICBtb3VzZURyYWc6ICEwLFxuICAgICAgICAgICAgdG91Y2hEcmFnOiAhMCxcbiAgICAgICAgICAgIHB1bGxEcmFnOiAhMCxcbiAgICAgICAgICAgIGZyZWVEcmFnOiAhMSxcbiAgICAgICAgICAgIG1hcmdpbjogMCxcbiAgICAgICAgICAgIHN0YWdlUGFkZGluZzogMCxcbiAgICAgICAgICAgIG1lcmdlOiAhMSxcbiAgICAgICAgICAgIG1lcmdlRml0OiAhMCxcbiAgICAgICAgICAgIGF1dG9XaWR0aDogITEsXG4gICAgICAgICAgICBzdGFydFBvc2l0aW9uOiAwLFxuICAgICAgICAgICAgcnRsOiAhMSxcbiAgICAgICAgICAgIHNtYXJ0U3BlZWQ6IDI1MCxcbiAgICAgICAgICAgIGZsdWlkU3BlZWQ6ICExLFxuICAgICAgICAgICAgZHJhZ0VuZFNwZWVkOiAhMSxcbiAgICAgICAgICAgIHJlc3BvbnNpdmU6IHt9LFxuICAgICAgICAgICAgcmVzcG9uc2l2ZVJlZnJlc2hSYXRlOiAyMDAsXG4gICAgICAgICAgICByZXNwb25zaXZlQmFzZUVsZW1lbnQ6IGIsXG4gICAgICAgICAgICBmYWxsYmFja0Vhc2luZzogXCJzd2luZ1wiLFxuICAgICAgICAgICAgaW5mbzogITEsXG4gICAgICAgICAgICBuZXN0ZWRJdGVtU2VsZWN0b3I6ICExLFxuICAgICAgICAgICAgaXRlbUVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgICAgICAgICBzdGFnZUVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgICAgICAgICByZWZyZXNoQ2xhc3M6IFwic2J5LW93bC1yZWZyZXNoXCIsXG4gICAgICAgICAgICBsb2FkZWRDbGFzczogXCJzYnktb3dsLWxvYWRlZFwiLFxuICAgICAgICAgICAgbG9hZGluZ0NsYXNzOiBcInNieS1vd2wtbG9hZGluZ1wiLFxuICAgICAgICAgICAgcnRsQ2xhc3M6IFwic2J5LW93bC1ydGxcIixcbiAgICAgICAgICAgIHJlc3BvbnNpdmVDbGFzczogXCJzYnktb3dsLXJlc3BvbnNpdmVcIixcbiAgICAgICAgICAgIGRyYWdDbGFzczogXCJzYnktb3dsLWRyYWdcIixcbiAgICAgICAgICAgIGl0ZW1DbGFzczogXCJzYnktb3dsLWl0ZW1cIixcbiAgICAgICAgICAgIHN0YWdlQ2xhc3M6IFwic2J5LW93bC1zdGFnZVwiLFxuICAgICAgICAgICAgc3RhZ2VPdXRlckNsYXNzOiBcInNieS1vd2wtc3RhZ2Utb3V0ZXJcIixcbiAgICAgICAgICAgIGdyYWJDbGFzczogXCJzYnktb3dsLWdyYWJcIlxuICAgICAgICB9LCBlLldpZHRoID0ge0RlZmF1bHQ6IFwiZGVmYXVsdFwiLCBJbm5lcjogXCJpbm5lclwiLCBPdXRlcjogXCJvdXRlclwifSwgZS5UeXBlID0ge1xuICAgICAgICAgICAgRXZlbnQ6IFwiZXZlbnRcIixcbiAgICAgICAgICAgIFN0YXRlOiBcInN0YXRlXCJcbiAgICAgICAgfSwgZS5QbHVnaW5zID0ge30sIGUuV29ya2VycyA9IFt7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRoID0gdGhpcy4kZWxlbWVudC53aWR0aCgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgYS5jdXJyZW50ID0gdGhpcy5faXRlbXMgJiYgdGhpcy5faXRlbXNbdGhpcy5yZWxhdGl2ZSh0aGlzLl9jdXJyZW50KV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZmlsdGVyOiBbXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5jbG9uZWRcIikucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYiA9IHRoaXMuc2V0dGluZ3MubWFyZ2luIHx8IFwiXCIsIGMgPSAhdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGgsIGQgPSB0aGlzLnNldHRpbmdzLnJ0bCxcbiAgICAgICAgICAgICAgICAgIGUgPSB7d2lkdGg6IFwiYXV0b1wiLCBcIm1hcmdpbi1sZWZ0XCI6IGQgPyBiIDogXCJcIiwgXCJtYXJnaW4tcmlnaHRcIjogZCA/IFwiXCIgOiBifTtcbiAgICAgICAgICAgICAgICAhYyAmJiB0aGlzLiRzdGFnZS5jaGlsZHJlbigpLmNzcyhlKSwgYS5jc3MgPSBlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSAodGhpcy53aWR0aCgpIC8gdGhpcy5zZXR0aW5ncy5pdGVtcykudG9GaXhlZCgzKSAtIHRoaXMuc2V0dGluZ3MubWFyZ2luLCBjID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgIGQgPSB0aGlzLl9pdGVtcy5sZW5ndGgsIGUgPSAhdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGgsIGYgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGEuaXRlbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmdlOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGJcbiAgICAgICAgICAgICAgICB9OyBkLS07KSBjID0gdGhpcy5fbWVyZ2Vyc1tkXSwgYyA9IHRoaXMuc2V0dGluZ3MubWVyZ2VGaXQgJiYgTWF0aC5taW4oYywgdGhpcy5zZXR0aW5ncy5pdGVtcykgfHwgYywgYS5pdGVtcy5tZXJnZSA9IGMgPiAxIHx8IGEuaXRlbXMubWVyZ2UsIGZbZF0gPSBlID8gYiAqIGMgOiB0aGlzLl9pdGVtc1tkXS53aWR0aCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dpZHRocyA9IGZcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZmlsdGVyOiBbXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYiA9IFtdLCBjID0gdGhpcy5faXRlbXMsIGQgPSB0aGlzLnNldHRpbmdzLCBlID0gTWF0aC5tYXgoMiAqIGQuaXRlbXMsIDQpLFxuICAgICAgICAgICAgICAgICAgZiA9IDIgKiBNYXRoLmNlaWwoYy5sZW5ndGggLyAyKSwgZyA9IGQubG9vcCAmJiBjLmxlbmd0aCA/IGQucmV3aW5kID8gZSA6IE1hdGgubWF4KGUsIGYpIDogMCwgaCA9IFwiXCIsXG4gICAgICAgICAgICAgICAgICBpID0gXCJcIjtcbiAgICAgICAgICAgICAgICBmb3IgKGcgLz0gMjsgZy0tOykgYi5wdXNoKHRoaXMubm9ybWFsaXplKGIubGVuZ3RoIC8gMiwgITApKSwgaCArPSBjW2JbYi5sZW5ndGggLSAxXV1bMF0ub3V0ZXJIVE1MLCBiLnB1c2godGhpcy5ub3JtYWxpemUoYy5sZW5ndGggLSAxIC0gKGIubGVuZ3RoIC0gMSkgLyAyLCAhMCkpLCBpID0gY1tiW2IubGVuZ3RoIC0gMV1dWzBdLm91dGVySFRNTCArIGk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvbmVzID0gYiwgYShoKS5hZGRDbGFzcyhcImNsb25lZFwiKS5hcHBlbmRUbyh0aGlzLiRzdGFnZSksIGEoaSkuYWRkQ2xhc3MoXCJjbG9uZWRcIikucHJlcGVuZFRvKHRoaXMuJHN0YWdlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IHRoaXMuc2V0dGluZ3MucnRsID8gMSA6IC0xLCBiID0gdGhpcy5fY2xvbmVzLmxlbmd0aCArIHRoaXMuX2l0ZW1zLmxlbmd0aCwgYyA9IC0xLCBkID0gMCwgZSA9IDAsIGYgPSBbXTsgKytjIDwgYjspIGQgPSBmW2MgLSAxXSB8fCAwLCBlID0gdGhpcy5fd2lkdGhzW3RoaXMucmVsYXRpdmUoYyldICsgdGhpcy5zZXR0aW5ncy5tYXJnaW4sIGYucHVzaChkICsgZSAqIGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nvb3JkaW5hdGVzID0gZlxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLnNldHRpbmdzLnN0YWdlUGFkZGluZywgYiA9IHRoaXMuX2Nvb3JkaW5hdGVzLCBjID0ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogTWF0aC5jZWlsKE1hdGguYWJzKGJbYi5sZW5ndGggLSAxXSkpICsgMiAqIGEsXG4gICAgICAgICAgICAgICAgICAgIFwicGFkZGluZy1sZWZ0XCI6IGEgfHwgXCJcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYWRkaW5nLXJpZ2h0XCI6IGEgfHwgXCJcIlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy4kc3RhZ2UuY3NzKGMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzLl9jb29yZGluYXRlcy5sZW5ndGgsIGMgPSAhdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGgsIGQgPSB0aGlzLiRzdGFnZS5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgIGlmIChjICYmIGEuaXRlbXMubWVyZ2UpIGZvciAoOyBiLS07KSBhLmNzcy53aWR0aCA9IHRoaXMuX3dpZHRoc1t0aGlzLnJlbGF0aXZlKGIpXSwgZC5lcShiKS5jc3MoYS5jc3MpOyBlbHNlIGMgJiYgKGEuY3NzLndpZHRoID0gYS5pdGVtcy53aWR0aCwgZC5jc3MoYS5jc3MpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIml0ZW1zXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb29yZGluYXRlcy5sZW5ndGggPCAxICYmIHRoaXMuJHN0YWdlLnJlbW92ZUF0dHIoXCJzdHlsZVwiKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIGEuY3VycmVudCA9IGEuY3VycmVudCA/IHRoaXMuJHN0YWdlLmNoaWxkcmVuKCkuaW5kZXgoYS5jdXJyZW50KSA6IDAsIGEuY3VycmVudCA9IE1hdGgubWF4KHRoaXMubWluaW11bSgpLCBNYXRoLm1pbih0aGlzLm1heGltdW0oKSwgYS5jdXJyZW50KSksIHRoaXMucmVzZXQoYS5jdXJyZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmaWx0ZXI6IFtcInBvc2l0aW9uXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGUodGhpcy5jb29yZGluYXRlcyh0aGlzLl9jdXJyZW50KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcInBvc2l0aW9uXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGEsIGIsIGMsIGQsIGUgPSB0aGlzLnNldHRpbmdzLnJ0bCA/IDEgOiAtMSwgZiA9IDIgKiB0aGlzLnNldHRpbmdzLnN0YWdlUGFkZGluZyxcbiAgICAgICAgICAgICAgICAgIGcgPSB0aGlzLmNvb3JkaW5hdGVzKHRoaXMuY3VycmVudCgpKSArIGYsIGggPSBnICsgdGhpcy53aWR0aCgpICogZSwgaSA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoYyA9IDAsIGQgPSB0aGlzLl9jb29yZGluYXRlcy5sZW5ndGg7IGMgPCBkOyBjKyspIGEgPSB0aGlzLl9jb29yZGluYXRlc1tjIC0gMV0gfHwgMCwgYiA9IE1hdGguYWJzKHRoaXMuX2Nvb3JkaW5hdGVzW2NdKSArIGYgKiBlLCAodGhpcy5vcChhLCBcIjw9XCIsIGcpICYmIHRoaXMub3AoYSwgXCI+XCIsIGgpIHx8IHRoaXMub3AoYiwgXCI8XCIsIGcpICYmIHRoaXMub3AoYiwgXCI+XCIsIGgpKSAmJiBpLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLCB0aGlzLiRzdGFnZS5jaGlsZHJlbihcIjplcShcIiArIGkuam9pbihcIiksIDplcShcIikgKyBcIilcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIiksIHRoaXMuc2V0dGluZ3MuY2VudGVyICYmICh0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5jZW50ZXJcIikucmVtb3ZlQ2xhc3MoXCJjZW50ZXJcIiksIHRoaXMuJHN0YWdlLmNoaWxkcmVuKCkuZXEodGhpcy5jdXJyZW50KCkpLmFkZENsYXNzKFwiY2VudGVyXCIpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XSwgZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVudGVyKFwiaW5pdGlhbGl6aW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJpbml0aWFsaXplXCIpLCB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMuc2V0dGluZ3MucnRsQ2xhc3MsIHRoaXMuc2V0dGluZ3MucnRsKSwgdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGggJiYgIXRoaXMuaXMoXCJwcmUtbG9hZGluZ1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciBiLCBjLCBlO1xuICAgICAgICAgICAgICAgIGIgPSB0aGlzLiRlbGVtZW50LmZpbmQoXCJpbWdcIiksIGMgPSB0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvciA/IFwiLlwiICsgdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3IgOiBkLCBlID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbihjKS53aWR0aCgpLCBiLmxlbmd0aCAmJiBlIDw9IDAgJiYgdGhpcy5wcmVsb2FkQXV0b1dpZHRoSW1hZ2VzKGIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLCB0aGlzLiRzdGFnZSA9IGEoXCI8XCIgKyB0aGlzLnNldHRpbmdzLnN0YWdlRWxlbWVudCArICcgY2xhc3M9XCInICsgdGhpcy5zZXR0aW5ncy5zdGFnZUNsYXNzICsgJ1wiLz4nKS53cmFwKCc8ZGl2IGNsYXNzPVwiJyArIHRoaXMuc2V0dGluZ3Muc3RhZ2VPdXRlckNsYXNzICsgJ1wiLz4nKSwgdGhpcy4kZWxlbWVudC5hcHBlbmQodGhpcy4kc3RhZ2UucGFyZW50KCkpLCB0aGlzLnJlcGxhY2UodGhpcy4kZWxlbWVudC5jaGlsZHJlbigpLm5vdCh0aGlzLiRzdGFnZS5wYXJlbnQoKSkpLCB0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikgPyB0aGlzLnJlZnJlc2goKSA6IHRoaXMuaW52YWxpZGF0ZShcIndpZHRoXCIpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkZWRDbGFzcyksIHRoaXMucmVnaXN0ZXJFdmVudEhhbmRsZXJzKCksIHRoaXMubGVhdmUoXCJpbml0aWFsaXppbmdcIiksIHRoaXMudHJpZ2dlcihcImluaXRpYWxpemVkXCIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGIgPSB0aGlzLnZpZXdwb3J0KCksIGMgPSB0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZSwgZCA9IC0xLCBlID0gbnVsbDtcbiAgICAgICAgICAgIGMgPyAoYS5lYWNoKGMsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgYSA8PSBiICYmIGEgPiBkICYmIChkID0gTnVtYmVyKGEpKVxuICAgICAgICAgICAgfSksIGUgPSBhLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBjW2RdKSwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLnN0YWdlUGFkZGluZyAmJiAoZS5zdGFnZVBhZGRpbmcgPSBlLnN0YWdlUGFkZGluZygpKSwgZGVsZXRlIGUucmVzcG9uc2l2ZSwgZS5yZXNwb25zaXZlQ2xhc3MgJiYgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIikucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiICsgdGhpcy5vcHRpb25zLnJlc3BvbnNpdmVDbGFzcyArIFwiLSlcXFxcUytcXFxcc1wiLCBcImdcIiksIFwiJDFcIiArIGQpKSkgOiBlID0gYS5leHRlbmQoe30sIHRoaXMub3B0aW9ucyksIHRoaXMudHJpZ2dlcihcImNoYW5nZVwiLCB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHk6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzZXR0aW5nc1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLCB0aGlzLl9icmVha3BvaW50ID0gZCwgdGhpcy5zZXR0aW5ncyA9IGUsIHRoaXMuaW52YWxpZGF0ZShcInNldHRpbmdzXCIpLCB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eToge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNldHRpbmdzXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldHRpbmdzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUub3B0aW9uc0xvZ2ljID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5hdXRvV2lkdGggJiYgKHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nID0gITEsIHRoaXMuc2V0dGluZ3MubWVyZ2UgPSAhMSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucHJlcGFyZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMudHJpZ2dlcihcInByZXBhcmVcIiwge2NvbnRlbnQ6IGJ9KTtcbiAgICAgICAgICAgIHJldHVybiBjLmRhdGEgfHwgKGMuZGF0YSA9IGEoXCI8XCIgKyB0aGlzLnNldHRpbmdzLml0ZW1FbGVtZW50ICsgXCIvPlwiKS5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaXRlbUNsYXNzKS5hcHBlbmQoYikpLCB0aGlzLnRyaWdnZXIoXCJwcmVwYXJlZFwiLCB7Y29udGVudDogYy5kYXRhfSksIGMuZGF0YVxuICAgICAgICB9LCBlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBiID0gMCwgYyA9IHRoaXMuX3BpcGUubGVuZ3RoLCBkID0gYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2FdXG4gICAgICAgICAgICB9LCB0aGlzLl9pbnZhbGlkYXRlZCksIGUgPSB7fTsgYiA8IGM7KSAodGhpcy5faW52YWxpZGF0ZWQuYWxsIHx8IGEuZ3JlcCh0aGlzLl9waXBlW2JdLmZpbHRlciwgZCkubGVuZ3RoID4gMCkgJiYgdGhpcy5fcGlwZVtiXS5ydW4oZSksIGIrKztcbiAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdGVkID0ge30sICF0aGlzLmlzKFwidmFsaWRcIikgJiYgdGhpcy5lbnRlcihcInZhbGlkXCIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLndpZHRoID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYSA9IGEgfHwgZS5XaWR0aC5EZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBlLldpZHRoLklubmVyOlxuICAgICAgICAgICAgICAgIGNhc2UgZS5XaWR0aC5PdXRlcjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dpZHRoO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aCAtIDIgKiB0aGlzLnNldHRpbmdzLnN0YWdlUGFkZGluZyArIHRoaXMuc2V0dGluZ3MubWFyZ2luXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmVudGVyKFwicmVmcmVzaGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwicmVmcmVzaFwiKSwgdGhpcy5zZXR1cCgpLCB0aGlzLm9wdGlvbnNMb2dpYygpLCB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLCB0aGlzLnVwZGF0ZSgpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLCB0aGlzLmxlYXZlKFwicmVmcmVzaGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwicmVmcmVzaGVkXCIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9uVGhyb3R0bGVkUmVzaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYi5jbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lciksIHRoaXMucmVzaXplVGltZXIgPSBiLnNldFRpbWVvdXQodGhpcy5faGFuZGxlcnMub25SZXNpemUsIHRoaXMuc2V0dGluZ3MucmVzcG9uc2l2ZVJlZnJlc2hSYXRlKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5vblJlc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAhIXRoaXMuX2l0ZW1zLmxlbmd0aCAmJiAodGhpcy5fd2lkdGggIT09IHRoaXMuJGVsZW1lbnQud2lkdGgoKSAmJiAoISF0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikgJiYgKHRoaXMuZW50ZXIoXCJyZXNpemluZ1wiKSwgdGhpcy50cmlnZ2VyKFwicmVzaXplXCIpLmlzRGVmYXVsdFByZXZlbnRlZCgpID8gKHRoaXMubGVhdmUoXCJyZXNpemluZ1wiKSwgITEpIDogKHRoaXMuaW52YWxpZGF0ZShcIndpZHRoXCIpLCB0aGlzLnJlZnJlc2goKSwgdGhpcy5sZWF2ZShcInJlc2l6aW5nXCIpLCB2b2lkIHRoaXMudHJpZ2dlcihcInJlc2l6ZWRcIikpKSkpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlZ2lzdGVyRXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGEuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJHN0YWdlLm9uKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCArIFwiLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vblRyYW5zaXRpb25FbmQsIHRoaXMpKSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlICE9PSAhMSAmJiB0aGlzLm9uKGIsIFwicmVzaXplXCIsIHRoaXMuX2hhbmRsZXJzLm9uVGhyb3R0bGVkUmVzaXplKSwgdGhpcy5zZXR0aW5ncy5tb3VzZURyYWcgJiYgKHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRyYWdDbGFzcyksIHRoaXMuJHN0YWdlLm9uKFwibW91c2Vkb3duLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdTdGFydCwgdGhpcykpLCB0aGlzLiRzdGFnZS5vbihcImRyYWdzdGFydC5vd2wuY29yZSBzZWxlY3RzdGFydC5vd2wuY29yZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICExXG4gICAgICAgICAgICB9KSksIHRoaXMuc2V0dGluZ3MudG91Y2hEcmFnICYmICh0aGlzLiRzdGFnZS5vbihcInRvdWNoc3RhcnQub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uRHJhZ1N0YXJ0LCB0aGlzKSksIHRoaXMuJHN0YWdlLm9uKFwidG91Y2hjYW5jZWwub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uRHJhZ0VuZCwgdGhpcykpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdTdGFydCA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB2YXIgZCA9IG51bGw7XG4gICAgICAgICAgICAzICE9PSBiLndoaWNoICYmIChhLnN1cHBvcnQudHJhbnNmb3JtID8gKGQgPSB0aGlzLiRzdGFnZS5jc3MoXCJ0cmFuc2Zvcm1cIikucmVwbGFjZSgvLipcXCh8XFwpfCAvZywgXCJcIikuc3BsaXQoXCIsXCIpLCBkID0ge1xuICAgICAgICAgICAgICAgIHg6IGRbMTYgPT09IGQubGVuZ3RoID8gMTIgOiA0XSxcbiAgICAgICAgICAgICAgICB5OiBkWzE2ID09PSBkLmxlbmd0aCA/IDEzIDogNV1cbiAgICAgICAgICAgIH0pIDogKGQgPSB0aGlzLiRzdGFnZS5wb3NpdGlvbigpLCBkID0ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMuc2V0dGluZ3MucnRsID8gZC5sZWZ0ICsgdGhpcy4kc3RhZ2Uud2lkdGgoKSAtIHRoaXMud2lkdGgoKSArIHRoaXMuc2V0dGluZ3MubWFyZ2luIDogZC5sZWZ0LFxuICAgICAgICAgICAgICAgIHk6IGQudG9wXG4gICAgICAgICAgICB9KSwgdGhpcy5pcyhcImFuaW1hdGluZ1wiKSAmJiAoYS5zdXBwb3J0LnRyYW5zZm9ybSA/IHRoaXMuYW5pbWF0ZShkLngpIDogdGhpcy4kc3RhZ2Uuc3RvcCgpLCB0aGlzLmludmFsaWRhdGUoXCJwb3NpdGlvblwiKSksIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3ModGhpcy5vcHRpb25zLmdyYWJDbGFzcywgXCJtb3VzZWRvd25cIiA9PT0gYi50eXBlKSwgdGhpcy5zcGVlZCgwKSwgdGhpcy5fZHJhZy50aW1lID0gKG5ldyBEYXRlKS5nZXRUaW1lKCksIHRoaXMuX2RyYWcudGFyZ2V0ID0gYShiLnRhcmdldCksIHRoaXMuX2RyYWcuc3RhZ2Uuc3RhcnQgPSBkLCB0aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQgPSBkLCB0aGlzLl9kcmFnLnBvaW50ZXIgPSB0aGlzLnBvaW50ZXIoYiksIGEoYykub24oXCJtb3VzZXVwLm93bC5jb3JlIHRvdWNoZW5kLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdFbmQsIHRoaXMpKSwgYShjKS5vbmUoXCJtb3VzZW1vdmUub3dsLmNvcmUgdG91Y2htb3ZlLm93bC5jb3JlXCIsIGEucHJveHkoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnBvaW50ZXIsIHRoaXMucG9pbnRlcihiKSk7XG4gICAgICAgICAgICAgICAgYShjKS5vbihcIm1vdXNlbW92ZS5vd2wuY29yZSB0b3VjaG1vdmUub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uRHJhZ01vdmUsIHRoaXMpKSwgTWF0aC5hYnMoZC54KSA8IE1hdGguYWJzKGQueSkgJiYgdGhpcy5pcyhcInZhbGlkXCIpIHx8IChiLnByZXZlbnREZWZhdWx0KCksIHRoaXMuZW50ZXIoXCJkcmFnZ2luZ1wiKSwgdGhpcy50cmlnZ2VyKFwiZHJhZ1wiKSlcbiAgICAgICAgICAgIH0sIHRoaXMpKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUub25EcmFnTW92ZSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bGwsIGMgPSBudWxsLCBkID0gbnVsbCwgZSA9IHRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnBvaW50ZXIsIHRoaXMucG9pbnRlcihhKSksXG4gICAgICAgICAgICAgIGYgPSB0aGlzLmRpZmZlcmVuY2UodGhpcy5fZHJhZy5zdGFnZS5zdGFydCwgZSk7XG4gICAgICAgICAgICB0aGlzLmlzKFwiZHJhZ2dpbmdcIikgJiYgKGEucHJldmVudERlZmF1bHQoKSwgdGhpcy5zZXR0aW5ncy5sb29wID8gKGIgPSB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWluaW11bSgpKSwgYyA9IHRoaXMuY29vcmRpbmF0ZXModGhpcy5tYXhpbXVtKCkgKyAxKSAtIGIsIGYueCA9ICgoZi54IC0gYikgJSBjICsgYykgJSBjICsgYikgOiAoYiA9IHRoaXMuc2V0dGluZ3MucnRsID8gdGhpcy5jb29yZGluYXRlcyh0aGlzLm1heGltdW0oKSkgOiB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWluaW11bSgpKSwgYyA9IHRoaXMuc2V0dGluZ3MucnRsID8gdGhpcy5jb29yZGluYXRlcyh0aGlzLm1pbmltdW0oKSkgOiB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWF4aW11bSgpKSwgZCA9IHRoaXMuc2V0dGluZ3MucHVsbERyYWcgPyAtMSAqIGUueCAvIDUgOiAwLCBmLnggPSBNYXRoLm1heChNYXRoLm1pbihmLngsIGIgKyBkKSwgYyArIGQpKSwgdGhpcy5fZHJhZy5zdGFnZS5jdXJyZW50ID0gZiwgdGhpcy5hbmltYXRlKGYueCkpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9uRHJhZ0VuZCA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB2YXIgZCA9IHRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnBvaW50ZXIsIHRoaXMucG9pbnRlcihiKSksIGUgPSB0aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQsXG4gICAgICAgICAgICAgIGYgPSBkLnggPiAwIF4gdGhpcy5zZXR0aW5ncy5ydGwgPyBcImxlZnRcIiA6IFwicmlnaHRcIjtcbiAgICAgICAgICAgIGEoYykub2ZmKFwiLm93bC5jb3JlXCIpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ncmFiQ2xhc3MpLCAoMCAhPT0gZC54ICYmIHRoaXMuaXMoXCJkcmFnZ2luZ1wiKSB8fCAhdGhpcy5pcyhcInZhbGlkXCIpKSAmJiAodGhpcy5zcGVlZCh0aGlzLnNldHRpbmdzLmRyYWdFbmRTcGVlZCB8fCB0aGlzLnNldHRpbmdzLnNtYXJ0U3BlZWQpLCB0aGlzLmN1cnJlbnQodGhpcy5jbG9zZXN0KGUueCwgMCAhPT0gZC54ID8gZiA6IHRoaXMuX2RyYWcuZGlyZWN0aW9uKSksIHRoaXMuaW52YWxpZGF0ZShcInBvc2l0aW9uXCIpLCB0aGlzLnVwZGF0ZSgpLCB0aGlzLl9kcmFnLmRpcmVjdGlvbiA9IGYsIChNYXRoLmFicyhkLngpID4gMyB8fCAobmV3IERhdGUpLmdldFRpbWUoKSAtIHRoaXMuX2RyYWcudGltZSA+IDMwMCkgJiYgdGhpcy5fZHJhZy50YXJnZXQub25lKFwiY2xpY2sub3dsLmNvcmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhMVxuICAgICAgICAgICAgfSkpLCB0aGlzLmlzKFwiZHJhZ2dpbmdcIikgJiYgKHRoaXMubGVhdmUoXCJkcmFnZ2luZ1wiKSwgdGhpcy50cmlnZ2VyKFwiZHJhZ2dlZFwiKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuY2xvc2VzdCA9IGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgICAgICB2YXIgZCA9IC0xLCBlID0gMzAsIGYgPSB0aGlzLndpZHRoKCksIGcgPSB0aGlzLmNvb3JkaW5hdGVzKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5mcmVlRHJhZyB8fCBhLmVhY2goZywgYS5wcm94eShmdW5jdGlvbiAoYSwgaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImxlZnRcIiA9PT0gYyAmJiBiID4gaCAtIGUgJiYgYiA8IGggKyBlID8gZCA9IGEgOiBcInJpZ2h0XCIgPT09IGMgJiYgYiA+IGggLSBmIC0gZSAmJiBiIDwgaCAtIGYgKyBlID8gZCA9IGEgKyAxIDogdGhpcy5vcChiLCBcIjxcIiwgaCkgJiYgdGhpcy5vcChiLCBcIj5cIiwgZ1thICsgMV0gfHwgaCAtIGYpICYmIChkID0gXCJsZWZ0XCIgPT09IGMgPyBhICsgMSA6IGEpLCBkID09PSAtMVxuICAgICAgICAgICAgfSwgdGhpcykpLCB0aGlzLnNldHRpbmdzLmxvb3AgfHwgKHRoaXMub3AoYiwgXCI+XCIsIGdbdGhpcy5taW5pbXVtKCldKSA/IGQgPSBiID0gdGhpcy5taW5pbXVtKCkgOiB0aGlzLm9wKGIsIFwiPFwiLCBnW3RoaXMubWF4aW11bSgpXSkgJiYgKGQgPSBiID0gdGhpcy5tYXhpbXVtKCkpKSwgZFxuICAgICAgICB9LCBlLnByb3RvdHlwZS5hbmltYXRlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5zcGVlZCgpID4gMDtcbiAgICAgICAgICAgIHRoaXMuaXMoXCJhbmltYXRpbmdcIikgJiYgdGhpcy5vblRyYW5zaXRpb25FbmQoKSwgYyAmJiAodGhpcy5lbnRlcihcImFuaW1hdGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwidHJhbnNsYXRlXCIpKSwgYS5zdXBwb3J0LnRyYW5zZm9ybTNkICYmIGEuc3VwcG9ydC50cmFuc2l0aW9uID8gdGhpcy4kc3RhZ2UuY3NzKHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlM2QoXCIgKyBiICsgXCJweCwwcHgsMHB4KVwiLFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3BlZWQoKSAvIDFlMyArIFwic1wiXG4gICAgICAgICAgICB9KSA6IGMgPyB0aGlzLiRzdGFnZS5hbmltYXRlKHtsZWZ0OiBiICsgXCJweFwifSwgdGhpcy5zcGVlZCgpLCB0aGlzLnNldHRpbmdzLmZhbGxiYWNrRWFzaW5nLCBhLnByb3h5KHRoaXMub25UcmFuc2l0aW9uRW5kLCB0aGlzKSkgOiB0aGlzLiRzdGFnZS5jc3Moe2xlZnQ6IGIgKyBcInB4XCJ9KVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5pcyA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmN1cnJlbnRbYV0gJiYgdGhpcy5fc3RhdGVzLmN1cnJlbnRbYV0gPiAwXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgaWYgKGEgPT09IGQpIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICAgICAgICAgICAgaWYgKDAgPT09IHRoaXMuX2l0ZW1zLmxlbmd0aCkgcmV0dXJuIGQ7XG4gICAgICAgICAgICBpZiAoYSA9IHRoaXMubm9ybWFsaXplKGEpLCB0aGlzLl9jdXJyZW50ICE9PSBhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VcIiwge3Byb3BlcnR5OiB7bmFtZTogXCJwb3NpdGlvblwiLCB2YWx1ZTogYX19KTtcbiAgICAgICAgICAgICAgICBiLmRhdGEgIT09IGQgJiYgKGEgPSB0aGlzLm5vcm1hbGl6ZShiLmRhdGEpKSwgdGhpcy5fY3VycmVudCA9IGEsIHRoaXMuaW52YWxpZGF0ZShcInBvc2l0aW9uXCIpLCB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicG9zaXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9jdXJyZW50XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuaW52YWxpZGF0ZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PT0gYS50eXBlKGIpICYmICh0aGlzLl9pbnZhbGlkYXRlZFtiXSA9ICEwLCB0aGlzLmlzKFwidmFsaWRcIikgJiYgdGhpcy5sZWF2ZShcInZhbGlkXCIpKSwgYS5tYXAodGhpcy5faW52YWxpZGF0ZWQsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIGEgPSB0aGlzLm5vcm1hbGl6ZShhKSwgYSAhPT0gZCAmJiAodGhpcy5fc3BlZWQgPSAwLCB0aGlzLl9jdXJyZW50ID0gYSwgdGhpcy5zdXBwcmVzcyhbXCJ0cmFuc2xhdGVcIiwgXCJ0cmFuc2xhdGVkXCJdKSwgdGhpcy5hbmltYXRlKHRoaXMuY29vcmRpbmF0ZXMoYSkpLCB0aGlzLnJlbGVhc2UoW1widHJhbnNsYXRlXCIsIFwidHJhbnNsYXRlZFwiXSkpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgZSA9IGIgPyAwIDogdGhpcy5fY2xvbmVzLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc051bWVyaWMoYSkgfHwgYyA8IDEgPyBhID0gZCA6IChhIDwgMCB8fCBhID49IGMgKyBlKSAmJiAoYSA9ICgoYSAtIGUgLyAyKSAlIGMgKyBjKSAlIGMgKyBlIC8gMiksIGFcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucmVsYXRpdmUgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGEgLT0gdGhpcy5fY2xvbmVzLmxlbmd0aCAvIDIsIHRoaXMubm9ybWFsaXplKGEsICEwKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5tYXhpbXVtID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHZhciBiLCBjLCBkLCBlID0gdGhpcy5zZXR0aW5ncywgZiA9IHRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChlLmxvb3ApIGYgPSB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMiArIHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDE7IGVsc2UgaWYgKGUuYXV0b1dpZHRoIHx8IGUubWVyZ2UpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGIgPSB0aGlzLl9pdGVtcy5sZW5ndGgsIGMgPSB0aGlzLl9pdGVtc1stLWJdLndpZHRoKCksIGQgPSB0aGlzLiRlbGVtZW50LndpZHRoKCk7IGItLSAmJiAoYyArPSB0aGlzLl9pdGVtc1tiXS53aWR0aCgpICsgdGhpcy5zZXR0aW5ncy5tYXJnaW4sICEoYyA+IGQpKTspIDtcbiAgICAgICAgICAgICAgICBmID0gYiArIDFcbiAgICAgICAgICAgIH0gZWxzZSBmID0gZS5jZW50ZXIgPyB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIDogdGhpcy5faXRlbXMubGVuZ3RoIC0gZS5pdGVtcztcbiAgICAgICAgICAgIHJldHVybiBhICYmIChmIC09IHRoaXMuX2Nsb25lcy5sZW5ndGggLyAyKSwgTWF0aC5tYXgoZiwgMClcbiAgICAgICAgfSwgZS5wcm90b3R5cGUubWluaW11bSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICByZXR1cm4gYSA/IDAgOiB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMlxuICAgICAgICB9LCBlLnByb3RvdHlwZS5pdGVtcyA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICByZXR1cm4gYSA9PT0gZCA/IHRoaXMuX2l0ZW1zLnNsaWNlKCkgOiAoYSA9IHRoaXMubm9ybWFsaXplKGEsICEwKSwgdGhpcy5faXRlbXNbYV0pXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm1lcmdlcnMgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGEgPT09IGQgPyB0aGlzLl9tZXJnZXJzLnNsaWNlKCkgOiAoYSA9IHRoaXMubm9ybWFsaXplKGEsICEwKSwgdGhpcy5fbWVyZ2Vyc1thXSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuY2xvbmVzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gdGhpcy5fY2xvbmVzLmxlbmd0aCAvIDIsIGUgPSBjICsgdGhpcy5faXRlbXMubGVuZ3RoLCBmID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYSAlIDIgPT09IDAgPyBlICsgYSAvIDIgOiBjIC0gKGEgKyAxKSAvIDJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gYiA9PT0gZCA/IGEubWFwKHRoaXMuX2Nsb25lcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZihiKVxuICAgICAgICAgICAgfSkgOiBhLm1hcCh0aGlzLl9jbG9uZXMsIGZ1bmN0aW9uIChhLCBjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT09IGIgPyBmKGMpIDogbnVsbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuc3BlZWQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGEgIT09IGQgJiYgKHRoaXMuX3NwZWVkID0gYSksIHRoaXMuX3NwZWVkXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmNvb3JkaW5hdGVzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBjLCBlID0gMSwgZiA9IGIgLSAxO1xuICAgICAgICAgICAgcmV0dXJuIGIgPT09IGQgPyBhLm1hcCh0aGlzLl9jb29yZGluYXRlcywgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVzKGIpXG4gICAgICAgICAgICB9LCB0aGlzKSkgOiAodGhpcy5zZXR0aW5ncy5jZW50ZXIgPyAodGhpcy5zZXR0aW5ncy5ydGwgJiYgKGUgPSAtMSwgZiA9IGIgKyAxKSwgYyA9IHRoaXMuX2Nvb3JkaW5hdGVzW2JdLCBjICs9ICh0aGlzLndpZHRoKCkgLSBjICsgKHRoaXMuX2Nvb3JkaW5hdGVzW2ZdIHx8IDApKSAvIDIgKiBlKSA6IGMgPSB0aGlzLl9jb29yZGluYXRlc1tmXSB8fCAwLCBjID0gTWF0aC5jZWlsKGMpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kdXJhdGlvbiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICByZXR1cm4gMCA9PT0gYyA/IDAgOiBNYXRoLm1pbihNYXRoLm1heChNYXRoLmFicyhiIC0gYSksIDEpLCA2KSAqIE1hdGguYWJzKGMgfHwgdGhpcy5zZXR0aW5ncy5zbWFydFNwZWVkKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS50byA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuY3VycmVudCgpLCBkID0gbnVsbCwgZSA9IGEgLSB0aGlzLnJlbGF0aXZlKGMpLCBmID0gKGUgPiAwKSAtIChlIDwgMCksIGcgPSB0aGlzLl9pdGVtcy5sZW5ndGgsXG4gICAgICAgICAgICAgIGggPSB0aGlzLm1pbmltdW0oKSwgaSA9IHRoaXMubWF4aW11bSgpO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5sb29wID8gKCF0aGlzLnNldHRpbmdzLnJld2luZCAmJiBNYXRoLmFicyhlKSA+IGcgLyAyICYmIChlICs9IGYgKiAtMSAqIGcpLCBhID0gYyArIGUsIGQgPSAoKGEgLSBoKSAlIGcgKyBnKSAlIGcgKyBoLCBkICE9PSBhICYmIGQgLSBlIDw9IGkgJiYgZCAtIGUgPiAwICYmIChjID0gZCAtIGUsIGEgPSBkLCB0aGlzLnJlc2V0KGMpKSkgOiB0aGlzLnNldHRpbmdzLnJld2luZCA/IChpICs9IDEsIGEgPSAoYSAlIGkgKyBpKSAlIGkpIDogYSA9IE1hdGgubWF4KGgsIE1hdGgubWluKGksIGEpKSwgdGhpcy5zcGVlZCh0aGlzLmR1cmF0aW9uKGMsIGEsIGIpKSwgdGhpcy5jdXJyZW50KGEpLCB0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikgJiYgdGhpcy51cGRhdGUoKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIGEgPSBhIHx8ICExLCB0aGlzLnRvKHRoaXMucmVsYXRpdmUodGhpcy5jdXJyZW50KCkpICsgMSwgYSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICBhID0gYSB8fCAhMSwgdGhpcy50byh0aGlzLnJlbGF0aXZlKHRoaXMuY3VycmVudCgpKSAtIDEsIGEpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICBpZiAoYSAhPT0gZCAmJiAoYS5zdG9wUHJvcGFnYXRpb24oKSwgKGEudGFyZ2V0IHx8IGEuc3JjRWxlbWVudCB8fCBhLm9yaWdpbmFsVGFyZ2V0KSAhPT0gdGhpcy4kc3RhZ2UuZ2V0KDApKSkgcmV0dXJuICExO1xuICAgICAgICAgICAgdGhpcy5sZWF2ZShcImFuaW1hdGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwidHJhbnNsYXRlZFwiKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS52aWV3cG9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZXNwb25zaXZlQmFzZUVsZW1lbnQgIT09IGIgPyBkID0gYSh0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUJhc2VFbGVtZW50KS53aWR0aCgpIDogYi5pbm5lcldpZHRoID8gZCA9IGIuaW5uZXJXaWR0aCA6IGMuZG9jdW1lbnRFbGVtZW50ICYmIGMuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID8gZCA9IGMuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDogY29uc29sZS53YXJuKFwiQ2FuIG5vdCBkZXRlY3Qgdmlld3BvcnQgd2lkdGguXCIpLCBkXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdGhpcy4kc3RhZ2UuZW1wdHkoKSwgdGhpcy5faXRlbXMgPSBbXSwgYiAmJiAoYiA9IGIgaW5zdGFuY2VvZiBqUXVlcnkgPyBiIDogYShiKSksIHRoaXMuc2V0dGluZ3MubmVzdGVkSXRlbVNlbGVjdG9yICYmIChiID0gYi5maW5kKFwiLlwiICsgdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3IpKSwgYi5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxID09PSB0aGlzLm5vZGVUeXBlXG4gICAgICAgICAgICB9KS5lYWNoKGEucHJveHkoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBiID0gdGhpcy5wcmVwYXJlKGIpLCB0aGlzLiRzdGFnZS5hcHBlbmQoYiksIHRoaXMuX2l0ZW1zLnB1c2goYiksIHRoaXMuX21lcmdlcnMucHVzaCgxICogYi5maW5kKFwiW2RhdGEtbWVyZ2VdXCIpLmFkZEJhY2soXCJbZGF0YS1tZXJnZV1cIikuYXR0cihcImRhdGEtbWVyZ2VcIikgfHwgMSlcbiAgICAgICAgICAgIH0sIHRoaXMpKSwgdGhpcy5yZXNldCh0aGlzLmlzTnVtZXJpYyh0aGlzLnNldHRpbmdzLnN0YXJ0UG9zaXRpb24pID8gdGhpcy5zZXR0aW5ncy5zdGFydFBvc2l0aW9uIDogMCksIHRoaXMuaW52YWxpZGF0ZShcIml0ZW1zXCIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgICAgICB2YXIgZSA9IHRoaXMucmVsYXRpdmUodGhpcy5fY3VycmVudCk7XG4gICAgICAgICAgICBjID0gYyA9PT0gZCA/IHRoaXMuX2l0ZW1zLmxlbmd0aCA6IHRoaXMubm9ybWFsaXplKGMsICEwKSwgYiA9IGIgaW5zdGFuY2VvZiBqUXVlcnkgPyBiIDogYShiKSwgdGhpcy50cmlnZ2VyKFwiYWRkXCIsIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBiLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBjXG4gICAgICAgICAgICB9KSwgYiA9IHRoaXMucHJlcGFyZShiKSwgMCA9PT0gdGhpcy5faXRlbXMubGVuZ3RoIHx8IGMgPT09IHRoaXMuX2l0ZW1zLmxlbmd0aCA/ICgwID09PSB0aGlzLl9pdGVtcy5sZW5ndGggJiYgdGhpcy4kc3RhZ2UuYXBwZW5kKGIpLCAwICE9PSB0aGlzLl9pdGVtcy5sZW5ndGggJiYgdGhpcy5faXRlbXNbYyAtIDFdLmFmdGVyKGIpLCB0aGlzLl9pdGVtcy5wdXNoKGIpLCB0aGlzLl9tZXJnZXJzLnB1c2goMSAqIGIuZmluZChcIltkYXRhLW1lcmdlXVwiKS5hZGRCYWNrKFwiW2RhdGEtbWVyZ2VdXCIpLmF0dHIoXCJkYXRhLW1lcmdlXCIpIHx8IDEpKSA6ICh0aGlzLl9pdGVtc1tjXS5iZWZvcmUoYiksIHRoaXMuX2l0ZW1zLnNwbGljZShjLCAwLCBiKSwgdGhpcy5fbWVyZ2Vycy5zcGxpY2UoYywgMCwgMSAqIGIuZmluZChcIltkYXRhLW1lcmdlXVwiKS5hZGRCYWNrKFwiW2RhdGEtbWVyZ2VdXCIpLmF0dHIoXCJkYXRhLW1lcmdlXCIpIHx8IDEpKSwgdGhpcy5faXRlbXNbZV0gJiYgdGhpcy5yZXNldCh0aGlzLl9pdGVtc1tlXS5pbmRleCgpKSwgdGhpcy5pbnZhbGlkYXRlKFwiaXRlbXNcIiksIHRoaXMudHJpZ2dlcihcImFkZGVkXCIsIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBiLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBjXG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgYSA9IHRoaXMubm9ybWFsaXplKGEsICEwKSwgYSAhPT0gZCAmJiAodGhpcy50cmlnZ2VyKFwicmVtb3ZlXCIsIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLl9pdGVtc1thXSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYVxuICAgICAgICAgICAgfSksIHRoaXMuX2l0ZW1zW2FdLnJlbW92ZSgpLCB0aGlzLl9pdGVtcy5zcGxpY2UoYSwgMSksIHRoaXMuX21lcmdlcnMuc3BsaWNlKGEsIDEpLCB0aGlzLmludmFsaWRhdGUoXCJpdGVtc1wiKSwgdGhpcy50cmlnZ2VyKFwicmVtb3ZlZFwiLCB7XG4gICAgICAgICAgICAgICAgY29udGVudDogbnVsbCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYVxuICAgICAgICAgICAgfSkpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnByZWxvYWRBdXRvV2lkdGhJbWFnZXMgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgYi5lYWNoKGEucHJveHkoZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyKFwicHJlLWxvYWRpbmdcIiksIGMgPSBhKGMpLCBhKG5ldyBJbWFnZSkub25lKFwibG9hZFwiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGMuYXR0cihcInNyY1wiLCBhLnRhcmdldC5zcmMpLCBjLmNzcyhcIm9wYWNpdHlcIiwgMSksIHRoaXMubGVhdmUoXCJwcmUtbG9hZGluZ1wiKSwgIXRoaXMuaXMoXCJwcmUtbG9hZGluZ1wiKSAmJiAhdGhpcy5pcyhcImluaXRpYWxpemluZ1wiKSAmJiB0aGlzLnJlZnJlc2goKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpKS5hdHRyKFwic3JjXCIsIGMuYXR0cihcInNyY1wiKSB8fCBjLmF0dHIoXCJkYXRhLXNyY1wiKSB8fCBjLmF0dHIoXCJkYXRhLXNyYy1yZXRpbmFcIikpXG4gICAgICAgICAgICB9LCB0aGlzKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQub2ZmKFwiLm93bC5jb3JlXCIpLCB0aGlzLiRzdGFnZS5vZmYoXCIub3dsLmNvcmVcIiksIGEoYykub2ZmKFwiLm93bC5jb3JlXCIpLCB0aGlzLnNldHRpbmdzLnJlc3BvbnNpdmUgIT09ICExICYmIChiLmNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVyKSwgdGhpcy5vZmYoYiwgXCJyZXNpemVcIiwgdGhpcy5faGFuZGxlcnMub25UaHJvdHRsZWRSZXNpemUpKTtcbiAgICAgICAgICAgIGZvciAodmFyIGQgaW4gdGhpcy5fcGx1Z2lucykgdGhpcy5fcGx1Z2luc1tkXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5jbG9uZWRcIikucmVtb3ZlKCksIHRoaXMuJHN0YWdlLnVud3JhcCgpLCB0aGlzLiRzdGFnZS5jaGlsZHJlbigpLmNvbnRlbnRzKCkudW53cmFwKCksIHRoaXMuJHN0YWdlLmNoaWxkcmVuKCkudW53cmFwKCksIHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLnJlZnJlc2hDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRpbmdDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmxvYWRlZENsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMucnRsQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5kcmFnQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ncmFiQ2xhc3MpLmF0dHIoXCJjbGFzc1wiLCB0aGlzLiRlbGVtZW50LmF0dHIoXCJjbGFzc1wiKS5yZXBsYWNlKG5ldyBSZWdFeHAodGhpcy5vcHRpb25zLnJlc3BvbnNpdmVDbGFzcyArIFwiLVxcXFxTK1xcXFxzXCIsIFwiZ1wiKSwgXCJcIikpLnJlbW92ZURhdGEoXCJvd2wuY2Fyb3VzZWxcIilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUub3AgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgdmFyIGQgPSB0aGlzLnNldHRpbmdzLnJ0bDtcbiAgICAgICAgICAgIHN3aXRjaCAoYikge1xuICAgICAgICAgICAgICAgIGNhc2VcIjxcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQgPyBhID4gYyA6IGEgPCBjO1xuICAgICAgICAgICAgICAgIGNhc2VcIj5cIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQgPyBhIDwgYyA6IGEgPiBjO1xuICAgICAgICAgICAgICAgIGNhc2VcIj49XCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkID8gYSA8PSBjIDogYSA+PSBjO1xuICAgICAgICAgICAgICAgIGNhc2VcIjw9XCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkID8gYSA+PSBjIDogYSA8PSBjXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lciA/IGEuYWRkRXZlbnRMaXN0ZW5lcihiLCBjLCBkKSA6IGEuYXR0YWNoRXZlbnQgJiYgYS5hdHRhY2hFdmVudChcIm9uXCIgKyBiLCBjKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgYS5yZW1vdmVFdmVudExpc3RlbmVyID8gYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsIGMsIGQpIDogYS5kZXRhY2hFdmVudCAmJiBhLmRldGFjaEV2ZW50KFwib25cIiArIGIsIGMpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAoYiwgYywgZCwgZiwgZykge1xuICAgICAgICAgICAgdmFyIGggPSB7aXRlbToge2NvdW50OiB0aGlzLl9pdGVtcy5sZW5ndGgsIGluZGV4OiB0aGlzLmN1cnJlbnQoKX19LFxuICAgICAgICAgICAgICBpID0gYS5jYW1lbENhc2UoYS5ncmVwKFtcIm9uXCIsIGIsIGRdLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFcbiAgICAgICAgICAgICAgfSkuam9pbihcIi1cIikudG9Mb3dlckNhc2UoKSksXG4gICAgICAgICAgICAgIGogPSBhLkV2ZW50KFtiLCBcIm93bFwiLCBkIHx8IFwiY2Fyb3VzZWxcIl0uam9pbihcIi5cIikudG9Mb3dlckNhc2UoKSwgYS5leHRlbmQoe3JlbGF0ZWRUYXJnZXQ6IHRoaXN9LCBoLCBjKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VwcmVzc1tiXSB8fCAoYS5lYWNoKHRoaXMuX3BsdWdpbnMsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgYi5vblRyaWdnZXIgJiYgYi5vblRyaWdnZXIoailcbiAgICAgICAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBlLlR5cGUuRXZlbnQsXG4gICAgICAgICAgICAgICAgbmFtZTogYlxuICAgICAgICAgICAgfSksIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihqKSwgdGhpcy5zZXR0aW5ncyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHRoaXMuc2V0dGluZ3NbaV0gJiYgdGhpcy5zZXR0aW5nc1tpXS5jYWxsKHRoaXMsIGopKSwgalxuICAgICAgICB9LCBlLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICBhLmVhY2goW2JdLmNvbmNhdCh0aGlzLl9zdGF0ZXMudGFnc1tiXSB8fCBbXSksIGEucHJveHkoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZXMuY3VycmVudFtiXSA9PT0gZCAmJiAodGhpcy5fc3RhdGVzLmN1cnJlbnRbYl0gPSAwKSwgdGhpcy5fc3RhdGVzLmN1cnJlbnRbYl0rK1xuICAgICAgICAgICAgfSwgdGhpcykpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmxlYXZlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIGEuZWFjaChbYl0uY29uY2F0KHRoaXMuX3N0YXRlcy50YWdzW2JdIHx8IFtdKSwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdLS1cbiAgICAgICAgICAgIH0sIHRoaXMpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICBpZiAoYi50eXBlID09PSBlLlR5cGUuRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoYS5ldmVudC5zcGVjaWFsW2IubmFtZV0gfHwgKGEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdID0ge30pLCAhYS5ldmVudC5zcGVjaWFsW2IubmFtZV0ub3dsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjID0gYS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdLl9kZWZhdWx0ID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhYyB8fCAhYy5hcHBseSB8fCBhLm5hbWVzcGFjZSAmJiBhLm5hbWVzcGFjZS5pbmRleE9mKFwib3dsXCIpICE9PSAtMSA/IGEubmFtZXNwYWNlICYmIGEubmFtZXNwYWNlLmluZGV4T2YoXCJvd2xcIikgPiAtMSA6IGMuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICB9LCBhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXS5vd2wgPSAhMFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBiLnR5cGUgPT09IGUuVHlwZS5TdGF0ZSAmJiAodGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXSA/IHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0gPSB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdLmNvbmNhdChiLnRhZ3MpIDogdGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXSA9IGIudGFncywgdGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXSA9IGEuZ3JlcCh0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdLCBhLnByb3h5KGZ1bmN0aW9uIChjLCBkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5BcnJheShjLCB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdKSA9PT0gZFxuICAgICAgICAgICAgfSwgdGhpcykpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5zdXBwcmVzcyA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICBhLmVhY2goYiwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1cHJlc3NbYl0gPSAhMFxuICAgICAgICAgICAgfSwgdGhpcykpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgYS5lYWNoKGIsIGEucHJveHkoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc3VwcmVzc1tiXVxuICAgICAgICAgICAgfSwgdGhpcykpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnBvaW50ZXIgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgdmFyIGMgPSB7eDogbnVsbCwgeTogbnVsbH07XG4gICAgICAgICAgICByZXR1cm4gYSA9IGEub3JpZ2luYWxFdmVudCB8fCBhIHx8IGIuZXZlbnQsIGEgPSBhLnRvdWNoZXMgJiYgYS50b3VjaGVzLmxlbmd0aCA/IGEudG91Y2hlc1swXSA6IGEuY2hhbmdlZFRvdWNoZXMgJiYgYS5jaGFuZ2VkVG91Y2hlcy5sZW5ndGggPyBhLmNoYW5nZWRUb3VjaGVzWzBdIDogYSwgYS5wYWdlWCA/IChjLnggPSBhLnBhZ2VYLCBjLnkgPSBhLnBhZ2VZKSA6IChjLnggPSBhLmNsaWVudFgsIGMueSA9IGEuY2xpZW50WSksIGNcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuaXNOdW1lcmljID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChhKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4ge3g6IGEueCAtIGIueCwgeTogYS55IC0gYi55fVxuICAgICAgICB9LCBhLmZuLnNieU93bENhcm91c2VsID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBjID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBkID0gYSh0aGlzKSwgZiA9IGQuZGF0YShcIm93bC5jYXJvdXNlbFwiKTtcbiAgICAgICAgICAgICAgICBmIHx8IChmID0gbmV3IGUodGhpcywgXCJvYmplY3RcIiA9PSB0eXBlb2YgYiAmJiBiKSwgZC5kYXRhKFwib3dsLmNhcm91c2VsXCIsIGYpLCBhLmVhY2goW1wibmV4dFwiLCBcInByZXZcIiwgXCJ0b1wiLCBcImRlc3Ryb3lcIiwgXCJyZWZyZXNoXCIsIFwicmVwbGFjZVwiLCBcImFkZFwiLCBcInJlbW92ZVwiXSwgZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgICAgICAgICAgICAgZi5yZWdpc3Rlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlLlR5cGUuRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBjXG4gICAgICAgICAgICAgICAgICAgIH0pLCBmLiRlbGVtZW50Lm9uKGMgKyBcIi5vd2wuY2Fyb3VzZWwuY29yZVwiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiBhLnJlbGF0ZWRUYXJnZXQgIT09IHRoaXMgJiYgKHRoaXMuc3VwcHJlc3MoW2NdKSwgZltjXS5hcHBseSh0aGlzLCBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpLCB0aGlzLnJlbGVhc2UoW2NdKSlcbiAgICAgICAgICAgICAgICAgICAgfSwgZikpXG4gICAgICAgICAgICAgICAgfSkpLCBcInN0cmluZ1wiID09IHR5cGVvZiBiICYmIFwiX1wiICE9PSBiLmNoYXJBdCgwKSAmJiBmW2JdLmFwcGx5KGYsIGMpXG4gICAgICAgICAgICB9KVxuICAgICAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yID0gZVxuICAgIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3JlID0gYiwgdGhpcy5faW50ZXJ2YWwgPSBudWxsLCB0aGlzLl92aXNpYmxlID0gbnVsbCwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgICAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9SZWZyZXNoICYmIHRoaXMud2F0Y2goKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICB9LCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKSwgdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycylcbiAgICAgICAgfTtcbiAgICAgICAgZS5EZWZhdWx0cyA9IHthdXRvUmVmcmVzaDogITAsIGF1dG9SZWZyZXNoSW50ZXJ2YWw6IDUwMH0sIGUucHJvdG90eXBlLndhdGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5faW50ZXJ2YWwgfHwgKHRoaXMuX3Zpc2libGUgPSB0aGlzLl9jb3JlLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIiksIHRoaXMuX2ludGVydmFsID0gYi5zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMucmVmcmVzaCwgdGhpcyksIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b1JlZnJlc2hJbnRlcnZhbCkpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3JlLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikgIT09IHRoaXMuX3Zpc2libGUgJiYgKHRoaXMuX3Zpc2libGUgPSAhdGhpcy5fdmlzaWJsZSwgdGhpcy5fY29yZS4kZWxlbWVudC50b2dnbGVDbGFzcyhcInNieS1vd2wtaGlkZGVuXCIsICF0aGlzLl92aXNpYmxlKSwgdGhpcy5fdmlzaWJsZSAmJiB0aGlzLl9jb3JlLmludmFsaWRhdGUoXCJ3aWR0aFwiKSAmJiB0aGlzLl9jb3JlLnJlZnJlc2goKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBjO1xuICAgICAgICAgICAgYi5jbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKTtcbiAgICAgICAgICAgIGZvciAoYSBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYSwgdGhpcy5faGFuZGxlcnNbYV0pO1xuICAgICAgICAgICAgZm9yIChjIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbY10gJiYgKHRoaXNbY10gPSBudWxsKVxuICAgICAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQXV0b1JlZnJlc2ggPSBlXG4gICAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl9sb2FkZWQgPSBbXSwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgICAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWwgY2hhbmdlLm93bC5jYXJvdXNlbCByZXNpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MubGF6eUxvYWQgJiYgKGIucHJvcGVydHkgJiYgXCJwb3NpdGlvblwiID09IGIucHJvcGVydHkubmFtZSB8fCBcImluaXRpYWxpemVkXCIgPT0gYi50eXBlKSkgZm9yICh2YXIgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGUgPSBjLmNlbnRlciAmJiBNYXRoLmNlaWwoYy5pdGVtcyAvIDIpIHx8IGMuaXRlbXMsIGYgPSBjLmNlbnRlciAmJiBlICogLTEgfHwgMCwgZyA9IChiLnByb3BlcnR5ICYmIGIucHJvcGVydHkudmFsdWUgIT09IGQgPyBiLnByb3BlcnR5LnZhbHVlIDogdGhpcy5fY29yZS5jdXJyZW50KCkpICsgZiwgaCA9IHRoaXMuX2NvcmUuY2xvbmVzKCkubGVuZ3RoLCBpID0gYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKGIpXG4gICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpOyBmKysgPCBlOykgdGhpcy5sb2FkKGggLyAyICsgdGhpcy5fY29yZS5yZWxhdGl2ZShnKSksIGggJiYgYS5lYWNoKHRoaXMuX2NvcmUuY2xvbmVzKHRoaXMuX2NvcmUucmVsYXRpdmUoZykpLCBpKSwgZysrXG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgICAgICB9O1xuICAgICAgICBlLkRlZmF1bHRzID0ge2xhenlMb2FkOiAhMX0sIGUucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgdmFyIGQgPSB0aGlzLl9jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKGMpLCBlID0gZCAmJiBkLmZpbmQoXCIuc2J5LW93bC1sYXp5XCIpO1xuICAgICAgICAgICAgIWUgfHwgYS5pbkFycmF5KGQuZ2V0KDApLCB0aGlzLl9sb2FkZWQpID4gLTEgfHwgKGUuZWFjaChhLnByb3h5KGZ1bmN0aW9uIChjLCBkKSB7XG4gICAgICAgICAgICAgICAgdmFyIGUsIGYgPSBhKGQpLCBnID0gYi5kZXZpY2VQaXhlbFJhdGlvID4gMSAmJiBmLmF0dHIoXCJkYXRhLXNyYy1yZXRpbmFcIikgfHwgZi5hdHRyKFwiZGF0YS1zcmNcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGYsXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ1xuICAgICAgICAgICAgICAgIH0sIFwibGF6eVwiKSwgZi5pcyhcImltZ1wiKSA/IGYub25lKFwibG9hZC5vd2wubGF6eVwiLCBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZi5jc3MoXCJvcGFjaXR5XCIsIDEpLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJsb2FkZWRcIiwge2VsZW1lbnQ6IGYsIHVybDogZ30sIFwibGF6eVwiKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpKS5hdHRyKFwic3JjXCIsIGcpIDogKGUgPSBuZXcgSW1hZ2UsIGUub25sb2FkID0gYS5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGYuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1pbWFnZVwiOiAndXJsKFwiJyArIGcgKyAnXCIpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJsb2FkZWRcIiwge2VsZW1lbnQ6IGYsIHVybDogZ30sIFwibGF6eVwiKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBlLnNyYyA9IGcpXG4gICAgICAgICAgICB9LCB0aGlzKSksIHRoaXMuX2xvYWRlZC5wdXNoKGQuZ2V0KDApKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBiO1xuICAgICAgICAgICAgZm9yIChhIGluIHRoaXMuaGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuaGFuZGxlcnNbYV0pO1xuICAgICAgICAgICAgZm9yIChiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbYl0gJiYgKHRoaXNbYl0gPSBudWxsKVxuICAgICAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuTGF6eSA9IGVcbiAgICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgICAgICAgICAgIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsIHJlZnJlc2hlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9IZWlnaHQgJiYgdGhpcy51cGRhdGUoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0ICYmIFwicG9zaXRpb25cIiA9PSBhLnByb3BlcnR5Lm5hbWUgJiYgdGhpcy51cGRhdGUoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcImxvYWRlZC5vd2wubGF6eVwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCAmJiBhLmVsZW1lbnQuY2xvc2VzdChcIi5cIiArIHRoaXMuX2NvcmUuc2V0dGluZ3MuaXRlbUNsYXNzKS5pbmRleCgpID09PSB0aGlzLl9jb3JlLmN1cnJlbnQoKSAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgICAgICB9O1xuICAgICAgICBlLkRlZmF1bHRzID0ge2F1dG9IZWlnaHQ6ICExLCBhdXRvSGVpZ2h0Q2xhc3M6IFwic2J5LW93bC1oZWlnaHRcIn0sIGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBiID0gdGhpcy5fY29yZS5fY3VycmVudCwgYyA9IGIgKyB0aGlzLl9jb3JlLnNldHRpbmdzLml0ZW1zLFxuICAgICAgICAgICAgICBkID0gdGhpcy5fY29yZS4kc3RhZ2UuY2hpbGRyZW4oKS50b0FycmF5KCkuc2xpY2UoYiwgYyksIGUgPSBbXSwgZiA9IDA7XG4gICAgICAgICAgICBhLmVhY2goZCwgZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgICAgICAgICBlLnB1c2goYShjKS5oZWlnaHQoKSlcbiAgICAgICAgICAgIH0pLCBmID0gTWF0aC5tYXguYXBwbHkobnVsbCwgZSksIHRoaXMuX2NvcmUuJHN0YWdlLnBhcmVudCgpLmhlaWdodChmKS5hZGRDbGFzcyh0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9IZWlnaHRDbGFzcylcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBiO1xuICAgICAgICAgICAgZm9yIChhIGluIHRoaXMuX2hhbmRsZXJzKSB0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLCB0aGlzLl9oYW5kbGVyc1thXSk7XG4gICAgICAgICAgICBmb3IgKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tiXSAmJiAodGhpc1tiXSA9IG51bGwpXG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5BdXRvSGVpZ2h0ID0gZVxuICAgIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB0aGlzLl9jb3JlID0gYiwgdGhpcy5fdmlkZW9zID0ge30sIHRoaXMuX3BsYXlpbmcgPSBudWxsLCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgICAgICAgICBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUucmVnaXN0ZXIoe3R5cGU6IFwic3RhdGVcIiwgbmFtZTogXCJwbGF5aW5nXCIsIHRhZ3M6IFtcImludGVyYWN0aW5nXCJdfSlcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJyZXNpemUub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy52aWRlbyAmJiB0aGlzLmlzSW5GdWxsU2NyZWVuKCkgJiYgYS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwicmVmcmVzaGVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuaXMoXCJyZXNpemluZ1wiKSAmJiB0aGlzLl9jb3JlLiRzdGFnZS5maW5kKFwiLmNsb25lZCAuc2J5LW93bC12aWRlby1mcmFtZVwiKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09PSBhLnByb3BlcnR5Lm5hbWUgJiYgdGhpcy5fcGxheWluZyAmJiB0aGlzLnN0b3AoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcInByZXBhcmVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBhKGIuY29udGVudCkuZmluZChcIi5zYnktb3dsLXZpZGVvXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5sZW5ndGggJiYgKGMuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIiksIHRoaXMuZmV0Y2goYywgYShiLmNvbnRlbnQpKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICB9LCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKSwgdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksIHRoaXMuX2NvcmUuJGVsZW1lbnQub24oXCJjbGljay5vd2wudmlkZW9cIiwgXCIuc2J5LW93bC12aWRlby1wbGF5LWljb25cIiwgYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGxheShhKVxuICAgICAgICAgICAgfSwgdGhpcykpXG4gICAgICAgIH07XG4gICAgICAgIGUuRGVmYXVsdHMgPSB7dmlkZW86ICExLCB2aWRlb0hlaWdodDogITEsIHZpZGVvV2lkdGg6ICExfSwgZS5wcm90b3R5cGUuZmV0Y2ggPSBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgdmFyIGMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYS5hdHRyKFwiZGF0YS12aW1lby1pZFwiKSA/IFwidmltZW9cIiA6IGEuYXR0cihcImRhdGEtdnphYXItaWRcIikgPyBcInZ6YWFyXCIgOiBcInlvdXR1YmVcIlxuICAgICAgICAgICAgICB9KCksIGQgPSBhLmF0dHIoXCJkYXRhLXZpbWVvLWlkXCIpIHx8IGEuYXR0cihcImRhdGEteW91dHViZS1pZFwiKSB8fCBhLmF0dHIoXCJkYXRhLXZ6YWFyLWlkXCIpLFxuICAgICAgICAgICAgICBlID0gYS5hdHRyKFwiZGF0YS13aWR0aFwiKSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvV2lkdGgsXG4gICAgICAgICAgICAgIGYgPSBhLmF0dHIoXCJkYXRhLWhlaWdodFwiKSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvSGVpZ2h0LCBnID0gYS5hdHRyKFwiaHJlZlwiKTtcbiAgICAgICAgICAgIGlmICghZykgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB2aWRlbyBVUkwuXCIpO1xuICAgICAgICAgICAgaWYgKGQgPSBnLm1hdGNoKC8oaHR0cDp8aHR0cHM6fClcXC9cXC8ocGxheWVyLnx3d3cufGFwcC4pPyh2aW1lb1xcLmNvbXx5b3V0dShiZVxcLmNvbXxcXC5iZXxiZVxcLmdvb2dsZWFwaXNcXC5jb20pfHZ6YWFyXFwuY29tKVxcLyh2aWRlb1xcL3x2aWRlb3NcXC98ZW1iZWRcXC98Y2hhbm5lbHNcXC8uK1xcL3xncm91cHNcXC8uK1xcL3x3YXRjaFxcP3Y9fHZcXC8pPyhbQS1aYS16MC05Ll8lLV0qKShcXCZcXFMrKT8vKSwgZFszXS5pbmRleE9mKFwieW91dHVcIikgPiAtMSkgYyA9IFwieW91dHViZVwiOyBlbHNlIGlmIChkWzNdLmluZGV4T2YoXCJ2aW1lb1wiKSA+IC0xKSBjID0gXCJ2aW1lb1wiOyBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIShkWzNdLmluZGV4T2YoXCJ2emFhclwiKSA+IC0xKSkgdGhyb3cgbmV3IEVycm9yKFwiVmlkZW8gVVJMIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgICAgICAgICAgICAgIGMgPSBcInZ6YWFyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGQgPSBkWzZdLCB0aGlzLl92aWRlb3NbZ10gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogYyxcbiAgICAgICAgICAgICAgICBpZDogZCxcbiAgICAgICAgICAgICAgICB3aWR0aDogZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGZcbiAgICAgICAgICAgIH0sIGIuYXR0cihcImRhdGEtdmlkZW9cIiwgZyksIHRoaXMudGh1bWJuYWlsKGEsIHRoaXMuX3ZpZGVvc1tnXSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUudGh1bWJuYWlsID0gZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgICAgIHZhciBkLCBlLCBmLCBnID0gYy53aWR0aCAmJiBjLmhlaWdodCA/ICdzdHlsZT1cIndpZHRoOicgKyBjLndpZHRoICsgXCJweDtoZWlnaHQ6XCIgKyBjLmhlaWdodCArICdweDtcIicgOiBcIlwiLFxuICAgICAgICAgICAgICBoID0gYi5maW5kKFwiaW1nXCIpLCBpID0gXCJzcmNcIiwgaiA9IFwiXCIsIGsgPSB0aGlzLl9jb3JlLnNldHRpbmdzLCBsID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgIGUgPSAnPGRpdiBjbGFzcz1cInNieS1vd2wtdmlkZW8tcGxheS1pY29uXCI+PC9kaXY+JywgZCA9IGsubGF6eUxvYWQgPyAnPGRpdiBjbGFzcz1cInNieS1vd2wtdmlkZW8tdG4gJyArIGogKyAnXCIgJyArIGkgKyAnPVwiJyArIGEgKyAnXCI+PC9kaXY+JyA6ICc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby10blwiIHN0eWxlPVwib3BhY2l0eToxO2JhY2tncm91bmQtaW1hZ2U6dXJsKCcgKyBhICsgJylcIj48L2Rpdj4nLCBiLmFmdGVyKGQpLCBiLmFmdGVyKGUpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoYi53cmFwKCc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby13cmFwcGVyXCInICsgZyArIFwiPjwvZGl2PlwiKSwgdGhpcy5fY29yZS5zZXR0aW5ncy5sYXp5TG9hZCAmJiAoaSA9IFwiZGF0YS1zcmNcIiwgaiA9IFwic2J5LW93bC1sYXp5XCIpLCBoLmxlbmd0aCkgcmV0dXJuIGwoaC5hdHRyKGkpKSwgaC5yZW1vdmUoKSwgITE7XG4gICAgICAgICAgICBcInlvdXR1YmVcIiA9PT0gYy50eXBlID8gKGYgPSBcIi8vaW1nLnlvdXR1YmUuY29tL3ZpL1wiICsgYy5pZCArIFwiL2hxZGVmYXVsdC5qcGdcIiwgbChmKSkgOiBcInZpbWVvXCIgPT09IGMudHlwZSA/IGEuYWpheCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJHRVRcIixcbiAgICAgICAgICAgICAgICB1cmw6IFwiLy92aW1lby5jb20vYXBpL3YyL3ZpZGVvL1wiICsgYy5pZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgICBqc29ucDogXCJjYWxsYmFja1wiLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZiA9IGFbMF0udGh1bWJuYWlsX2xhcmdlLCBsKGYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkgOiBcInZ6YWFyXCIgPT09IGMudHlwZSAmJiBhLmFqYXgoe1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgdXJsOiBcIi8vdnphYXIuY29tL2FwaS92aWRlb3MvXCIgKyBjLmlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICAgIGpzb25wOiBcImNhbGxiYWNrXCIsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBmID0gYS5mcmFtZWdyYWJfdXJsLCBsKGYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUudHJpZ2dlcihcInN0b3BcIiwgbnVsbCwgXCJ2aWRlb1wiKSwgdGhpcy5fcGxheWluZy5maW5kKFwiLnNieS1vd2wtdmlkZW8tZnJhbWVcIikucmVtb3ZlKCksIHRoaXMuX3BsYXlpbmcucmVtb3ZlQ2xhc3MoXCJzYnktb3dsLXZpZGVvLXBsYXlpbmdcIiksIHRoaXMuX3BsYXlpbmcgPSBudWxsLCB0aGlzLl9jb3JlLmxlYXZlKFwicGxheWluZ1wiKSwgdGhpcy5fY29yZS50cmlnZ2VyKFwic3RvcHBlZFwiLCBudWxsLCBcInZpZGVvXCIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnBsYXkgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdmFyIGMsIGQgPSBhKGIudGFyZ2V0KSwgZSA9IGQuY2xvc2VzdChcIi5cIiArIHRoaXMuX2NvcmUuc2V0dGluZ3MuaXRlbUNsYXNzKSxcbiAgICAgICAgICAgICAgZiA9IHRoaXMuX3ZpZGVvc1tlLmF0dHIoXCJkYXRhLXZpZGVvXCIpXSwgZyA9IGYud2lkdGggfHwgXCIxMDAlXCIsXG4gICAgICAgICAgICAgIGggPSBmLmhlaWdodCB8fCB0aGlzLl9jb3JlLiRzdGFnZS5oZWlnaHQoKTtcbiAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgfHwgKHRoaXMuX2NvcmUuZW50ZXIoXCJwbGF5aW5nXCIpLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJwbGF5XCIsIG51bGwsIFwidmlkZW9cIiksIGUgPSB0aGlzLl9jb3JlLml0ZW1zKHRoaXMuX2NvcmUucmVsYXRpdmUoZS5pbmRleCgpKSksIHRoaXMuX2NvcmUucmVzZXQoZS5pbmRleCgpKSwgXCJ5b3V0dWJlXCIgPT09IGYudHlwZSA/IGMgPSAnPGlmcmFtZSB3aWR0aD1cIicgKyBnICsgJ1wiIGhlaWdodD1cIicgKyBoICsgJ1wiIHNyYz1cIi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLycgKyBmLmlkICsgXCI/YXV0b3BsYXk9MSZyZWw9MCZ2PVwiICsgZi5pZCArICdcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+JyA6IFwidmltZW9cIiA9PT0gZi50eXBlID8gYyA9ICc8aWZyYW1lIHNyYz1cIi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8nICsgZi5pZCArICc/YXV0b3BsYXk9MVwiIHdpZHRoPVwiJyArIGcgKyAnXCIgaGVpZ2h0PVwiJyArIGggKyAnXCIgZnJhbWVib3JkZXI9XCIwXCIgd2Via2l0YWxsb3dmdWxsc2NyZWVuIG1vemFsbG93ZnVsbHNjcmVlbiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+JyA6IFwidnphYXJcIiA9PT0gZi50eXBlICYmIChjID0gJzxpZnJhbWUgZnJhbWVib3JkZXI9XCIwXCJoZWlnaHQ9XCInICsgaCArICdcIndpZHRoPVwiJyArIGcgKyAnXCIgYWxsb3dmdWxsc2NyZWVuIG1vemFsbG93ZnVsbHNjcmVlbiB3ZWJraXRBbGxvd0Z1bGxTY3JlZW4gc3JjPVwiLy92aWV3LnZ6YWFyLmNvbS8nICsgZi5pZCArICcvcGxheWVyP2F1dG9wbGF5PXRydWVcIj48L2lmcmFtZT4nKSwgYSgnPGRpdiBjbGFzcz1cInNieS1vd2wtdmlkZW8tZnJhbWVcIj4nICsgYyArIFwiPC9kaXY+XCIpLmluc2VydEFmdGVyKGUuZmluZChcIi5zYnktb3dsLXZpZGVvXCIpKSwgdGhpcy5fcGxheWluZyA9IGUuYWRkQ2xhc3MoXCJzYnktb3dsLXZpZGVvLXBsYXlpbmdcIikpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmlzSW5GdWxsU2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGIgPSBjLmZ1bGxzY3JlZW5FbGVtZW50IHx8IGMubW96RnVsbFNjcmVlbkVsZW1lbnQgfHwgYy53ZWJraXRGdWxsc2NyZWVuRWxlbWVudDtcbiAgICAgICAgICAgIHJldHVybiBiICYmIGEoYikucGFyZW50KCkuaGFzQ2xhc3MoXCJzYnktb3dsLXZpZGVvLWZyYW1lXCIpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYSwgYjtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKFwiY2xpY2sub3dsLnZpZGVvXCIpO1xuICAgICAgICAgICAgZm9yIChhIGluIHRoaXMuX2hhbmRsZXJzKSB0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLCB0aGlzLl9oYW5kbGVyc1thXSk7XG4gICAgICAgICAgICBmb3IgKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tiXSAmJiAodGhpc1tiXSA9IG51bGwpXG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5WaWRlbyA9IGVcbiAgICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgdGhpcy5jb3JlID0gYiwgdGhpcy5jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5jb3JlLm9wdGlvbnMpLCB0aGlzLnN3YXBwaW5nID0gITAsIHRoaXMucHJldmlvdXMgPSBkLCB0aGlzLm5leHQgPSBkLCB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgICAgICAgICAgIFwiY2hhbmdlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIFwicG9zaXRpb25cIiA9PSBhLnByb3BlcnR5Lm5hbWUgJiYgKHRoaXMucHJldmlvdXMgPSB0aGlzLmNvcmUuY3VycmVudCgpLCB0aGlzLm5leHQgPSBhLnByb3BlcnR5LnZhbHVlKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcImRyYWcub3dsLmNhcm91c2VsIGRyYWdnZWQub3dsLmNhcm91c2VsIHRyYW5zbGF0ZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgKHRoaXMuc3dhcHBpbmcgPSBcInRyYW5zbGF0ZWRcIiA9PSBhLnR5cGUpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwidHJhbnNsYXRlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuc3dhcHBpbmcgJiYgKHRoaXMuY29yZS5vcHRpb25zLmFuaW1hdGVPdXQgfHwgdGhpcy5jb3JlLm9wdGlvbnMuYW5pbWF0ZUluKSAmJiB0aGlzLnN3YXAoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICB9LCB0aGlzLmNvcmUuJGVsZW1lbnQub24odGhpcy5oYW5kbGVycylcbiAgICAgICAgfTtcbiAgICAgICAgZS5EZWZhdWx0cyA9IHthbmltYXRlT3V0OiAhMSwgYW5pbWF0ZUluOiAhMX0sIGUucHJvdG90eXBlLnN3YXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoMSA9PT0gdGhpcy5jb3JlLnNldHRpbmdzLml0ZW1zICYmIGEuc3VwcG9ydC5hbmltYXRpb24gJiYgYS5zdXBwb3J0LnRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcmUuc3BlZWQoMCk7XG4gICAgICAgICAgICAgICAgdmFyIGIsIGMgPSBhLnByb3h5KHRoaXMuY2xlYXIsIHRoaXMpLCBkID0gdGhpcy5jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKHRoaXMucHJldmlvdXMpLFxuICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuY29yZS4kc3RhZ2UuY2hpbGRyZW4oKS5lcSh0aGlzLm5leHQpLCBmID0gdGhpcy5jb3JlLnNldHRpbmdzLmFuaW1hdGVJbixcbiAgICAgICAgICAgICAgICAgIGcgPSB0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZU91dDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcmUuY3VycmVudCgpICE9PSB0aGlzLnByZXZpb3VzICYmIChnICYmIChiID0gdGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMucHJldmlvdXMpIC0gdGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMubmV4dCksIGQub25lKGEuc3VwcG9ydC5hbmltYXRpb24uZW5kLCBjKS5jc3Moe2xlZnQ6IGIgKyBcInB4XCJ9KS5hZGRDbGFzcyhcImFuaW1hdGVkIHNieS1vd2wtYW5pbWF0ZWQtb3V0XCIpLmFkZENsYXNzKGcpKSwgZiAmJiBlLm9uZShhLnN1cHBvcnQuYW5pbWF0aW9uLmVuZCwgYykuYWRkQ2xhc3MoXCJhbmltYXRlZCBzYnktb3dsLWFuaW1hdGVkLWluXCIpLmFkZENsYXNzKGYpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICBhKGIudGFyZ2V0KS5jc3Moe2xlZnQ6IFwiXCJ9KS5yZW1vdmVDbGFzcyhcImFuaW1hdGVkIHNieS1vd2wtYW5pbWF0ZWQtb3V0IHNieS1vd2wtYW5pbWF0ZWQtaW5cIikucmVtb3ZlQ2xhc3ModGhpcy5jb3JlLnNldHRpbmdzLmFuaW1hdGVJbikucmVtb3ZlQ2xhc3ModGhpcy5jb3JlLnNldHRpbmdzLmFuaW1hdGVPdXQpLCB0aGlzLmNvcmUub25UcmFuc2l0aW9uRW5kKClcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBiO1xuICAgICAgICAgICAgZm9yIChhIGluIHRoaXMuaGFuZGxlcnMpIHRoaXMuY29yZS4kZWxlbWVudC5vZmYoYSwgdGhpcy5oYW5kbGVyc1thXSk7XG4gICAgICAgICAgICBmb3IgKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tiXSAmJiAodGhpc1tiXSA9IG51bGwpXG4gICAgICAgIH0sXG4gICAgICAgICAgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLkFuaW1hdGUgPSBlXG4gICAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl90aW1lb3V0ID0gbnVsbCwgdGhpcy5fcGF1c2VkID0gITEsIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgICAgICAgICAgIFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiBcInNldHRpbmdzXCIgPT09IGEucHJvcGVydHkubmFtZSA/IHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXkgPyB0aGlzLnBsYXkoKSA6IHRoaXMuc3RvcCgpIDogYS5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09PSBhLnByb3BlcnR5Lm5hbWUgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheSAmJiB0aGlzLl9zZXRBdXRvUGxheUludGVydmFsKClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5ICYmIHRoaXMucGxheSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwicGxheS5vd2wuYXV0b3BsYXlcIjogYS5wcm94eShmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLnBsYXkoYiwgYylcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJzdG9wLm93bC5hdXRvcGxheVwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuc3RvcCgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwibW91c2VvdmVyLm93bC5hdXRvcGxheVwiOiBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UgJiYgdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpICYmIHRoaXMucGF1c2UoKVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpLCBcIm1vdXNlbGVhdmUub3dsLmF1dG9wbGF5XCI6IGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5SG92ZXJQYXVzZSAmJiB0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikgJiYgdGhpcy5wbGF5KClcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJ0b3VjaHN0YXJ0Lm93bC5jb3JlXCI6IGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5SG92ZXJQYXVzZSAmJiB0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikgJiYgdGhpcy5wYXVzZSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwidG91Y2hlbmQub3dsLmNvcmVcIjogYS5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlICYmIHRoaXMucGxheSgpXG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgICBlLkRlZmF1bHRzID0ge1xuICAgICAgICAgICAgYXV0b3BsYXk6ICExLFxuICAgICAgICAgICAgYXV0b3BsYXlUaW1lb3V0OiA1ZTMsXG4gICAgICAgICAgICBhdXRvcGxheUhvdmVyUGF1c2U6ICExLFxuICAgICAgICAgICAgYXV0b3BsYXlTcGVlZDogITFcbiAgICAgICAgfSwgZS5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXVzZWQgPSAhMSwgdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpIHx8ICh0aGlzLl9jb3JlLmVudGVyKFwicm90YXRpbmdcIiksIHRoaXMuX3NldEF1dG9QbGF5SW50ZXJ2YWwoKSlcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuX2dldE5leHRUaW1lb3V0ID0gZnVuY3Rpb24gKGQsIGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90aW1lb3V0ICYmIGIuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpLCBiLnNldFRpbWVvdXQoYS5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGF1c2VkIHx8IHRoaXMuX2NvcmUuaXMoXCJidXN5XCIpIHx8IHRoaXMuX2NvcmUuaXMoXCJpbnRlcmFjdGluZ1wiKSB8fCBjLmhpZGRlbiB8fCB0aGlzLl9jb3JlLm5leHQoZSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5U3BlZWQpXG4gICAgICAgICAgICB9LCB0aGlzKSwgZCB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5VGltZW91dClcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuX3NldEF1dG9QbGF5SW50ZXJ2YWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lb3V0ID0gdGhpcy5fZ2V0TmV4dFRpbWVvdXQoKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpICYmIChiLmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSwgdGhpcy5fY29yZS5sZWF2ZShcInJvdGF0aW5nXCIpKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiAodGhpcy5fcGF1c2VkID0gITApXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYSwgYjtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgZm9yIChhIGluIHRoaXMuX2hhbmRsZXJzKSB0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLCB0aGlzLl9oYW5kbGVyc1thXSk7XG4gICAgICAgICAgICBmb3IgKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tiXSAmJiAodGhpc1tiXSA9IG51bGwpXG4gICAgICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5hdXRvcGxheSA9IGVcbiAgICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl9pbml0aWFsaXplZCA9ICExLCB0aGlzLl9wYWdlcyA9IFtdLCB0aGlzLl9jb250cm9scyA9IHt9LCB0aGlzLl90ZW1wbGF0ZXMgPSBbXSwgdGhpcy4kZWxlbWVudCA9IHRoaXMuX2NvcmUuJGVsZW1lbnQsIHRoaXMuX292ZXJyaWRlcyA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiB0aGlzLl9jb3JlLm5leHQsXG4gICAgICAgICAgICAgICAgcHJldjogdGhpcy5fY29yZS5wcmV2LFxuICAgICAgICAgICAgICAgIHRvOiB0aGlzLl9jb3JlLnRvXG4gICAgICAgICAgICB9LCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgICAgICAgICBcInByZXBhcmVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICAgICAgIGIubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuZG90c0RhdGEgJiYgdGhpcy5fdGVtcGxhdGVzLnB1c2goJzxkaXYgY2xhc3M9XCInICsgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RDbGFzcyArICdcIj4nICsgYShiLmNvbnRlbnQpLmZpbmQoXCJbZGF0YS1kb3RdXCIpLmFkZEJhY2soXCJbZGF0YS1kb3RdXCIpLmF0dHIoXCJkYXRhLWRvdFwiKSArIFwiPC9kaXY+XCIpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwiYWRkZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSAmJiB0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sIDAsIHRoaXMuX3RlbXBsYXRlcy5wb3AoKSlcbiAgICAgICAgICAgICAgICB9LCB0aGlzKSwgXCJyZW1vdmUub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSAmJiB0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sIDEpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICBhLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT0gYS5wcm9wZXJ0eS5uYW1lICYmIHRoaXMuZHJhdygpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5uYW1lc3BhY2UgJiYgIXRoaXMuX2luaXRpYWxpemVkICYmICh0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSwgdGhpcy5pbml0aWFsaXplKCksIHRoaXMudXBkYXRlKCksIHRoaXMuZHJhdygpLCB0aGlzLl9pbml0aWFsaXplZCA9ICEwLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiLCBudWxsLCBcIm5hdmlnYXRpb25cIikpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwicmVmcmVzaGVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2luaXRpYWxpemVkICYmICh0aGlzLl9jb3JlLnRyaWdnZXIoXCJyZWZyZXNoXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSwgdGhpcy51cGRhdGUoKSwgdGhpcy5kcmF3KCksIHRoaXMuX2NvcmUudHJpZ2dlcihcInJlZnJlc2hlZFwiLCBudWxsLCBcIm5hdmlnYXRpb25cIikpXG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgICAgICB9O1xuICAgICAgICBlLkRlZmF1bHRzID0ge1xuICAgICAgICAgICAgbmF2OiAhMSxcbiAgICAgICAgICAgIG5hdlRleHQ6IFtcInByZXZcIiwgXCJuZXh0XCJdLFxuICAgICAgICAgICAgbmF2U3BlZWQ6ICExLFxuICAgICAgICAgICAgbmF2RWxlbWVudDogXCJkaXZcIixcbiAgICAgICAgICAgIG5hdkNvbnRhaW5lcjogITEsXG4gICAgICAgICAgICBuYXZDb250YWluZXJDbGFzczogXCJzYnktb3dsLW5hdlwiLFxuICAgICAgICAgICAgbmF2Q2xhc3M6IFtcInNieS1vd2wtcHJldlwiLCBcInNieS1vd2wtbmV4dFwiXSxcbiAgICAgICAgICAgIHNsaWRlQnk6IDEsXG4gICAgICAgICAgICBkb3RDbGFzczogXCJzYnktb3dsLWRvdFwiLFxuICAgICAgICAgICAgZG90c0NsYXNzOiBcInNieS1vd2wtZG90c1wiLFxuICAgICAgICAgICAgZG90czogITAsXG4gICAgICAgICAgICBkb3RzRWFjaDogITEsXG4gICAgICAgICAgICBkb3RzRGF0YTogITEsXG4gICAgICAgICAgICBkb3RzU3BlZWQ6ICExLFxuICAgICAgICAgICAgZG90c0NvbnRhaW5lcjogITFcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBiLCBjID0gdGhpcy5fY29yZS5zZXR0aW5ncztcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSA9IChjLm5hdkNvbnRhaW5lciA/IGEoYy5uYXZDb250YWluZXIpIDogYShcIjxkaXY+XCIpLmFkZENsYXNzKGMubmF2Q29udGFpbmVyQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGVsZW1lbnQpKS5hZGRDbGFzcyhcImRpc2FibGVkXCIpLCB0aGlzLl9jb250cm9scy4kcHJldmlvdXMgPSBhKFwiPFwiICsgYy5uYXZFbGVtZW50ICsgXCI+XCIpLmFkZENsYXNzKGMubmF2Q2xhc3NbMF0pLmh0bWwoYy5uYXZUZXh0WzBdKS5wcmVwZW5kVG8odGhpcy5fY29udHJvbHMuJHJlbGF0aXZlKS5vbihcImNsaWNrXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXYoYy5uYXZTcGVlZClcbiAgICAgICAgICAgIH0sIHRoaXMpKSwgdGhpcy5fY29udHJvbHMuJG5leHQgPSBhKFwiPFwiICsgYy5uYXZFbGVtZW50ICsgXCI+XCIpLmFkZENsYXNzKGMubmF2Q2xhc3NbMV0pLmh0bWwoYy5uYXZUZXh0WzFdKS5hcHBlbmRUbyh0aGlzLl9jb250cm9scy4kcmVsYXRpdmUpLm9uKFwiY2xpY2tcIiwgYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dChjLm5hdlNwZWVkKVxuICAgICAgICAgICAgfSwgdGhpcykpLCBjLmRvdHNEYXRhIHx8ICh0aGlzLl90ZW1wbGF0ZXMgPSBbYShcIjxkaXY+XCIpLmFkZENsYXNzKGMuZG90Q2xhc3MpLmFwcGVuZChhKFwiPHNwYW4+XCIpKS5wcm9wKFwib3V0ZXJIVE1MXCIpXSksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZSA9IChjLmRvdHNDb250YWluZXIgPyBhKGMuZG90c0NvbnRhaW5lcikgOiBhKFwiPGRpdj5cIikuYWRkQ2xhc3MoYy5kb3RzQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGVsZW1lbnQpKS5hZGRDbGFzcyhcImRpc2FibGVkXCIpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUub24oXCJjbGlja1wiLCBcImRpdlwiLCBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGQgPSBhKGIudGFyZ2V0KS5wYXJlbnQoKS5pcyh0aGlzLl9jb250cm9scy4kYWJzb2x1dGUpID8gYShiLnRhcmdldCkuaW5kZXgoKSA6IGEoYi50YXJnZXQpLnBhcmVudCgpLmluZGV4KCk7XG4gICAgICAgICAgICAgICAgYi5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLnRvKGQsIGMuZG90c1NwZWVkKVxuICAgICAgICAgICAgfSwgdGhpcykpO1xuICAgICAgICAgICAgZm9yIChiIGluIHRoaXMuX292ZXJyaWRlcykgdGhpcy5fY29yZVtiXSA9IGEucHJveHkodGhpc1tiXSwgdGhpcylcbiAgICAgICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBiLCBjLCBkO1xuICAgICAgICAgICAgZm9yIChhIGluIHRoaXMuX2hhbmRsZXJzKSB0aGlzLiRlbGVtZW50Lm9mZihhLCB0aGlzLl9oYW5kbGVyc1thXSk7XG4gICAgICAgICAgICBmb3IgKGIgaW4gdGhpcy5fY29udHJvbHMpIHRoaXMuX2NvbnRyb2xzW2JdLnJlbW92ZSgpO1xuICAgICAgICAgICAgZm9yIChkIGluIHRoaXMub3ZlcmlkZXMpIHRoaXMuX2NvcmVbZF0gPSB0aGlzLl9vdmVycmlkZXNbZF07XG4gICAgICAgICAgICBmb3IgKGMgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tjXSAmJiAodGhpc1tjXSA9IG51bGwpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhLCBiLCBjLCBkID0gdGhpcy5fY29yZS5jbG9uZXMoKS5sZW5ndGggLyAyLCBlID0gZCArIHRoaXMuX2NvcmUuaXRlbXMoKS5sZW5ndGgsXG4gICAgICAgICAgICAgIGYgPSB0aGlzLl9jb3JlLm1heGltdW0oITApLCBnID0gdGhpcy5fY29yZS5zZXR0aW5ncyxcbiAgICAgICAgICAgICAgaCA9IGcuY2VudGVyIHx8IGcuYXV0b1dpZHRoIHx8IGcuZG90c0RhdGEgPyAxIDogZy5kb3RzRWFjaCB8fCBnLml0ZW1zO1xuICAgICAgICAgICAgaWYgKFwicGFnZVwiICE9PSBnLnNsaWRlQnkgJiYgKGcuc2xpZGVCeSA9IE1hdGgubWluKGcuc2xpZGVCeSwgZy5pdGVtcykpLCBnLmRvdHMgfHwgXCJwYWdlXCIgPT0gZy5zbGlkZUJ5KSBmb3IgKHRoaXMuX3BhZ2VzID0gW10sIGEgPSBkLCBiID0gMCwgYyA9IDA7IGEgPCBlOyBhKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYiA+PSBoIHx8IDAgPT09IGIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3BhZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IE1hdGgubWluKGYsIGEgLSBkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogYSAtIGQgKyBoIC0gMVxuICAgICAgICAgICAgICAgICAgICB9KSwgTWF0aC5taW4oZiwgYSAtIGQpID09PSBmKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgYiA9IDAsICsrY1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiICs9IHRoaXMuX2NvcmUubWVyZ2Vycyh0aGlzLl9jb3JlLnJlbGF0aXZlKGEpKVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGIsIGMgPSB0aGlzLl9jb3JlLnNldHRpbmdzLCBkID0gdGhpcy5fY29yZS5pdGVtcygpLmxlbmd0aCA8PSBjLml0ZW1zLFxuICAgICAgICAgICAgICBlID0gdGhpcy5fY29yZS5yZWxhdGl2ZSh0aGlzLl9jb3JlLmN1cnJlbnQoKSksIGYgPSBjLmxvb3AgfHwgYy5yZXdpbmQ7XG4gICAgICAgICAgICB0aGlzLl9jb250cm9scy4kcmVsYXRpdmUudG9nZ2xlQ2xhc3MoXCJkaXNhYmxlZFwiLCAhYy5uYXYgfHwgZCksIGMubmF2ICYmICh0aGlzLl9jb250cm9scy4kcHJldmlvdXMudG9nZ2xlQ2xhc3MoXCJkaXNhYmxlZFwiLCAhZiAmJiBlIDw9IHRoaXMuX2NvcmUubWluaW11bSghMCkpLCB0aGlzLl9jb250cm9scy4kbmV4dC50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFmICYmIGUgPj0gdGhpcy5fY29yZS5tYXhpbXVtKCEwKSkpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUudG9nZ2xlQ2xhc3MoXCJkaXNhYmxlZFwiLCAhYy5kb3RzIHx8IGQpLCBjLmRvdHMgJiYgKGIgPSB0aGlzLl9wYWdlcy5sZW5ndGggLSB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuY2hpbGRyZW4oKS5sZW5ndGgsIGMuZG90c0RhdGEgJiYgMCAhPT0gYiA/IHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5odG1sKHRoaXMuX3RlbXBsYXRlcy5qb2luKFwiXCIpKSA6IGIgPiAwID8gdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmFwcGVuZChuZXcgQXJyYXkoYiArIDEpLmpvaW4odGhpcy5fdGVtcGxhdGVzWzBdKSkgOiBiIDwgMCAmJiB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuY2hpbGRyZW4oKS5zbGljZShiKS5yZW1vdmUoKSwgdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuY2hpbGRyZW4oKS5lcShhLmluQXJyYXkodGhpcy5jdXJyZW50KCksIHRoaXMuX3BhZ2VzKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIikpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm9uVHJpZ2dlciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3M7XG4gICAgICAgICAgICBiLnBhZ2UgPSB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSwgdGhpcy5fcGFnZXMpLFxuICAgICAgICAgICAgICAgIGNvdW50OiB0aGlzLl9wYWdlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc2l6ZTogYyAmJiAoYy5jZW50ZXIgfHwgYy5hdXRvV2lkdGggfHwgYy5kb3RzRGF0YSA/IDEgOiBjLmRvdHNFYWNoIHx8IGMuaXRlbXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGUucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYiA9IHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpO1xuICAgICAgICAgICAgcmV0dXJuIGEuZ3JlcCh0aGlzLl9wYWdlcywgYS5wcm94eShmdW5jdGlvbiAoYSwgYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnN0YXJ0IDw9IGIgJiYgYS5lbmQgPj0gYlxuICAgICAgICAgICAgfSwgdGhpcykpLnBvcCgpXG4gICAgICAgIH0sIGUucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIHZhciBjLCBkLCBlID0gdGhpcy5fY29yZS5zZXR0aW5ncztcbiAgICAgICAgICAgIHJldHVybiBcInBhZ2VcIiA9PSBlLnNsaWRlQnkgPyAoYyA9IGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSwgdGhpcy5fcGFnZXMpLCBkID0gdGhpcy5fcGFnZXMubGVuZ3RoLCBiID8gKytjIDogLS1jLCBjID0gdGhpcy5fcGFnZXNbKGMgJSBkICsgZCkgJSBkXS5zdGFydCkgOiAoYyA9IHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpLCBkID0gdGhpcy5fY29yZS5pdGVtcygpLmxlbmd0aCwgYiA/IGMgKz0gZS5zbGlkZUJ5IDogYyAtPSBlLnNsaWRlQnkpLCBjXG4gICAgICAgIH0sIGUucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoYikge1xuICAgICAgICAgICAgYS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sIHRoaXMuX2NvcmUpKHRoaXMuZ2V0UG9zaXRpb24oITApLCBiKVxuICAgICAgICB9LCBlLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgIGEucHJveHkodGhpcy5fb3ZlcnJpZGVzLnRvLCB0aGlzLl9jb3JlKSh0aGlzLmdldFBvc2l0aW9uKCExKSwgYilcbiAgICAgICAgfSwgZS5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAoYiwgYywgZCkge1xuICAgICAgICAgICAgdmFyIGU7XG4gICAgICAgICAgICAhZCAmJiB0aGlzLl9wYWdlcy5sZW5ndGggPyAoZSA9IHRoaXMuX3BhZ2VzLmxlbmd0aCwgYS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sIHRoaXMuX2NvcmUpKHRoaXMuX3BhZ2VzWyhiICUgZSArIGUpICUgZV0uc3RhcnQsIGMpKSA6IGEucHJveHkodGhpcy5fb3ZlcnJpZGVzLnRvLCB0aGlzLl9jb3JlKShiLCBjKVxuICAgICAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuTmF2aWdhdGlvbiA9IGVcbiAgICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgIHZhciBlID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvcmUgPSBjLCB0aGlzLl9oYXNoZXMgPSB7fSwgdGhpcy4kZWxlbWVudCA9IHRoaXMuX2NvcmUuJGVsZW1lbnQsIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgICAgICAgICAgIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgYy5uYW1lc3BhY2UgJiYgXCJVUkxIYXNoXCIgPT09IHRoaXMuX2NvcmUuc2V0dGluZ3Muc3RhcnRQb3NpdGlvbiAmJiBhKGIpLnRyaWdnZXIoXCJoYXNoY2hhbmdlLm93bC5uYXZpZ2F0aW9uXCIpXG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwicHJlcGFyZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIubmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGEoYi5jb250ZW50KS5maW5kKFwiW2RhdGEtaGFzaF1cIikuYWRkQmFjayhcIltkYXRhLWhhc2hdXCIpLmF0dHIoXCJkYXRhLWhhc2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWMpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhc2hlc1tjXSA9IGIuY29udGVudFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhpcyksIFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYy5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09PSBjLnByb3BlcnR5Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gdGhpcy5fY29yZS5pdGVtcyh0aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBhLm1hcCh0aGlzLl9oYXNoZXMsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA9PT0gZCA/IGIgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmpvaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZSB8fCBiLmxvY2F0aW9uLmhhc2guc2xpY2UoMSkgPT09IGUpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGIubG9jYXRpb24uaGFzaCA9IGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHRoaXMpXG4gICAgICAgICAgICB9LCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKSwgdGhpcy4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksIGEoYikub24oXCJoYXNoY2hhbmdlLm93bC5uYXZpZ2F0aW9uXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IGIubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksIGUgPSB0aGlzLl9jb3JlLiRzdGFnZS5jaGlsZHJlbigpLFxuICAgICAgICAgICAgICAgICAgZiA9IHRoaXMuX2hhc2hlc1tjXSAmJiBlLmluZGV4KHRoaXMuX2hhc2hlc1tjXSk7XG4gICAgICAgICAgICAgICAgZiAhPT0gZCAmJiBmICE9PSB0aGlzLl9jb3JlLmN1cnJlbnQoKSAmJiB0aGlzLl9jb3JlLnRvKHRoaXMuX2NvcmUucmVsYXRpdmUoZiksICExLCAhMClcbiAgICAgICAgICAgIH0sIHRoaXMpKVxuICAgICAgICB9O1xuICAgICAgICBlLkRlZmF1bHRzID0ge1VSTGhhc2hMaXN0ZW5lcjogITF9LCBlLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGMsIGQ7XG4gICAgICAgICAgICBhKGIpLm9mZihcImhhc2hjaGFuZ2Uub3dsLm5hdmlnYXRpb25cIik7XG4gICAgICAgICAgICBmb3IgKGMgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGMsIHRoaXMuX2hhbmRsZXJzW2NdKTtcbiAgICAgICAgICAgIGZvciAoZCBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2RdICYmICh0aGlzW2RdID0gbnVsbClcbiAgICAgICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLkhhc2ggPSBlXG4gICAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIGZ1bmN0aW9uIGUoYiwgYykge1xuICAgICAgICAgICAgdmFyIGUgPSAhMSwgZiA9IGIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBiLnNsaWNlKDEpO1xuICAgICAgICAgICAgcmV0dXJuIGEuZWFjaCgoYiArIFwiIFwiICsgaC5qb2luKGYgKyBcIiBcIikgKyBmKS5zcGxpdChcIiBcIiksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdbYl0gIT09IGQpIHJldHVybiBlID0gIWMgfHwgYiwgITFcbiAgICAgICAgICAgIH0pLCBlXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBlKGEsICEwKVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGcgPSBhKFwiPHN1cHBvcnQ+XCIpLmdldCgwKS5zdHlsZSwgaCA9IFwiV2Via2l0IE1veiBPIG1zXCIuc3BsaXQoXCIgXCIpLCBpID0ge1xuICAgICAgICAgICAgdHJhbnNpdGlvbjoge1xuICAgICAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgICAgICBXZWJraXRUcmFuc2l0aW9uOiBcIndlYmtpdFRyYW5zaXRpb25FbmRcIixcbiAgICAgICAgICAgICAgICAgICAgTW96VHJhbnNpdGlvbjogXCJ0cmFuc2l0aW9uZW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIE9UcmFuc2l0aW9uOiBcIm9UcmFuc2l0aW9uRW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IFwidHJhbnNpdGlvbmVuZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFuaW1hdGlvbjoge1xuICAgICAgICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgICAgICAgICBXZWJraXRBbmltYXRpb246IFwid2Via2l0QW5pbWF0aW9uRW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIE1vekFuaW1hdGlvbjogXCJhbmltYXRpb25lbmRcIixcbiAgICAgICAgICAgICAgICAgICAgT0FuaW1hdGlvbjogXCJvQW5pbWF0aW9uRW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogXCJhbmltYXRpb25lbmRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgaiA9IHtcbiAgICAgICAgICAgIGNzc3RyYW5zZm9ybXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFlKFwidHJhbnNmb3JtXCIpXG4gICAgICAgICAgICB9LCBjc3N0cmFuc2Zvcm1zM2Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFlKFwicGVyc3BlY3RpdmVcIilcbiAgICAgICAgICAgIH0sIGNzc3RyYW5zaXRpb25zOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhZShcInRyYW5zaXRpb25cIilcbiAgICAgICAgICAgIH0sIGNzc2FuaW1hdGlvbnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFlKFwiYW5pbWF0aW9uXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGouY3NzdHJhbnNpdGlvbnMoKSAmJiAoYS5zdXBwb3J0LnRyYW5zaXRpb24gPSBuZXcgU3RyaW5nKGYoXCJ0cmFuc2l0aW9uXCIpKSwgYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kID0gaS50cmFuc2l0aW9uLmVuZFthLnN1cHBvcnQudHJhbnNpdGlvbl0pLCBqLmNzc2FuaW1hdGlvbnMoKSAmJiAoYS5zdXBwb3J0LmFuaW1hdGlvbiA9IG5ldyBTdHJpbmcoZihcImFuaW1hdGlvblwiKSksIGEuc3VwcG9ydC5hbmltYXRpb24uZW5kID0gaS5hbmltYXRpb24uZW5kW2Euc3VwcG9ydC5hbmltYXRpb25dKSwgai5jc3N0cmFuc2Zvcm1zKCkgJiYgKGEuc3VwcG9ydC50cmFuc2Zvcm0gPSBuZXcgU3RyaW5nKGYoXCJ0cmFuc2Zvcm1cIikpLCBhLnN1cHBvcnQudHJhbnNmb3JtM2QgPSBqLmNzc3RyYW5zZm9ybXMzZCgpKVxuICAgIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpO1xuXG4gICAgLy8gVHdvIFJvdyBDYXJvdXNlbFxuICAgIDsoZnVuY3Rpb24gKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkge1xuICAgICAgICBPd2wycm93ID0gZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICAgICAgICB0aGlzLm93bCA9IHNjb3BlO1xuICAgICAgICAgICAgdGhpcy5vd2wub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBPd2wycm93LkRlZmF1bHRzLCB0aGlzLm93bC5vcHRpb25zKTtcbiAgICAgICAgICAgIC8vbGluayBjYWxsYmFjayBldmVudHMgd2l0aCBvd2wgY2Fyb3VzZWwgaGVyZVxuXG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgICAgICAgICAgICdpbml0aWFsaXplLm93bC5jYXJvdXNlbCc6ICQucHJveHkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3dsLnNldHRpbmdzLm93bDJyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGQycm93KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMub3dsLiRlbGVtZW50Lm9uKHRoaXMuaGFuZGxlcnMpO1xuICAgICAgICB9O1xuXG4gICAgICAgIE93bDJyb3cuRGVmYXVsdHMgPSB7XG4gICAgICAgICAgICBvd2wycm93OiBmYWxzZSxcbiAgICAgICAgICAgIG93bDJyb3dUYXJnZXQ6ICdzYnlfaXRlbScsXG4gICAgICAgICAgICBvd2wycm93Q29udGFpbmVyOiAnc2J5X293bDJyb3ctaXRlbScsXG4gICAgICAgICAgICBvd2wycm93RGlyZWN0aW9uOiAndXRkJyAvLyBsdHJcbiAgICAgICAgfTtcblxuICAgICAgICAvL21laHRvZHM6XG4gICAgICAgIE93bDJyb3cucHJvdG90eXBlLmJ1aWxkMnJvdyA9IGZ1bmN0aW9uICh0aGlzU2NvcGUpIHtcblxuICAgICAgICAgICAgdmFyIGNhcm91c2VsID0gJCh0aGlzU2NvcGUub3dsLiRlbGVtZW50KTtcbiAgICAgICAgICAgIHZhciBjYXJvdXNlbEl0ZW1zID0gY2Fyb3VzZWwuZmluZCgnLicgKyB0aGlzU2NvcGUub3dsLm9wdGlvbnMub3dsMnJvd1RhcmdldCk7XG5cbiAgICAgICAgICAgIHZhciBhRXZlbkVsZW1lbnRzID0gW107XG4gICAgICAgICAgICB2YXIgYU9kZEVsZW1lbnRzID0gW107XG5cbiAgICAgICAgICAgICQuZWFjaChjYXJvdXNlbEl0ZW1zLCBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggJSAyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFFdmVuRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhT2RkRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy9jYXJvdXNlbC5lbXB0eSgpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXNTY29wZS5vd2wub3B0aW9ucy5vd2wycm93RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbHRyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpc1Njb3BlLmxlZnRUb3JpZ2h0KHRoaXNTY29wZSwgY2Fyb3VzZWwsIGNhcm91c2VsSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzU2NvcGUudXBUb2Rvd24odGhpc1Njb3BlLCBhRXZlbkVsZW1lbnRzLCBhT2RkRWxlbWVudHMsIGNhcm91c2VsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIE93bDJyb3cucHJvdG90eXBlLmxlZnRUb3JpZ2h0ID0gZnVuY3Rpb24gKHRoaXNTY29wZSwgY2Fyb3VzZWwsIGNhcm91c2VsSXRlbXMpIHtcblxuICAgICAgICAgICAgdmFyIG8yd0NvbnRhaW5lckNsYXNzID0gdGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dDb250YWluZXI7XG4gICAgICAgICAgICB2YXIgb3dsTWFyZ2luID0gdGhpc1Njb3BlLm93bC5vcHRpb25zLm1hcmdpbjtcbiAgICAgICAgICAgIHZhciBjYXJvdXNlbEl0ZW1zTGVuZ3RoID0gY2Fyb3VzZWxJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZmlyc0FyciA9IFtdO1xuICAgICAgICAgICAgdmFyIHNlY29uZEFyciA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoY2Fyb3VzZWxJdGVtc0xlbmd0aCAlIDIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjYXJvdXNlbEl0ZW1zTGVuZ3RoID0gKChjYXJvdXNlbEl0ZW1zTGVuZ3RoIC0gMSkgLyAyKSArIDE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhcm91c2VsSXRlbXNMZW5ndGggPSBjYXJvdXNlbEl0ZW1zTGVuZ3RoIC8gMjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJC5lYWNoKGNhcm91c2VsSXRlbXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBjYXJvdXNlbEl0ZW1zTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpcnNBcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWNvbmRBcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgJC5lYWNoKGZpcnNBcnIsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciByb3dDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwiJyArIG8yd0NvbnRhaW5lckNsYXNzICsgJ1wiLz4nKTtcblxuICAgICAgICAgICAgICAgIHZhciBmaXJzdFJvd0VsZW1lbnQgPSBmaXJzQXJyW2luZGV4XTtcbiAgICAgICAgICAgICAgICBmaXJzdFJvd0VsZW1lbnQuc3R5bGUubWFyZ2luQm90dG9tID0gb3dsTWFyZ2luICsgJ3B4JztcblxuICAgICAgICAgICAgICAgIHJvd0NvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgLmFwcGVuZChmaXJzdFJvd0VsZW1lbnQpXG4gICAgICAgICAgICAgICAgICAuYXBwZW5kKHNlY29uZEFycltpbmRleF0pO1xuXG4gICAgICAgICAgICAgICAgY2Fyb3VzZWwuYXBwZW5kKHJvd0NvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9O1xuXG4gICAgICAgIE93bDJyb3cucHJvdG90eXBlLnVwVG9kb3duID0gZnVuY3Rpb24gKHRoaXNTY29wZSwgYUV2ZW5FbGVtZW50cywgYU9kZEVsZW1lbnRzLCBjYXJvdXNlbCkge1xuXG4gICAgICAgICAgICB2YXIgbzJ3Q29udGFpbmVyQ2xhc3MgPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMub3dsMnJvd0NvbnRhaW5lcjtcbiAgICAgICAgICAgIHZhciBvd2xNYXJnaW4gPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMubWFyZ2luO1xuXG4gICAgICAgICAgICAkLmVhY2goYUV2ZW5FbGVtZW50cywgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgcm93Q29udGFpbmVyID0gJCgnPGRpdiBjbGFzcz1cIicgKyBvMndDb250YWluZXJDbGFzcyArICdcIi8+Jyk7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW5FbGVtZW50ID0gYUV2ZW5FbGVtZW50c1tpbmRleF07XG5cbiAgICAgICAgICAgICAgICBldmVuRWxlbWVudC5zdHlsZS5tYXJnaW5Cb3R0b20gPSBvd2xNYXJnaW4gKyAncHgnO1xuXG4gICAgICAgICAgICAgICAgcm93Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAuYXBwZW5kKGV2ZW5FbGVtZW50KVxuICAgICAgICAgICAgICAgICAgLmFwcGVuZChhT2RkRWxlbWVudHNbaW5kZXhdKTtcblxuICAgICAgICAgICAgICAgIGNhcm91c2VsLmFwcGVuZChyb3dDb250YWluZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4uXG4gICAgICAgICAqL1xuICAgICAgICBPd2wycm93LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIsIHByb3BlcnR5O1xuICAgICAgICB9O1xuXG4gICAgICAgICQuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2luc1snb3dsMnJvdyddID0gT3dsMnJvdztcbiAgICB9KSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCk7XG5cbiAgICAoZnVuY3Rpb24oJCl7XG5cbiAgICAgICAgZnVuY3Rpb24gc2J5QWRkVmlzaWJpbGl0eUxpc3RlbmVyKCkge1xuICAgICAgICAgICAgLyogRGV0ZWN0IHdoZW4gZWxlbWVudCBiZWNvbWVzIHZpc2libGUuIFVzZWQgZm9yIHdoZW4gdGhlIGZlZWQgaXMgaW5pdGlhbGx5IGhpZGRlbiwgaW4gYSB0YWIgZm9yIGV4YW1wbGUuIGh0dHBzOi8vZ2l0aHViLmNvbS9zaGF1bmJvd2UvanF1ZXJ5LnZpc2liaWxpdHlDaGFuZ2VkICovXG4gICAgICAgICAgICAhZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgfSwgcnVuT25Mb2FkOiAhMCwgZnJlcXVlbmN5OiAxMDAsIHNieVByZXZpb3VzVmlzaWJpbGl0eTogbnVsbFxuICAgICAgICAgICAgICAgIH0sIGMgPSB7fTtcbiAgICAgICAgICAgICAgICBjLnNieUNoZWNrVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChpLCBuKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkuY29udGFpbnMoZG9jdW1lbnQsIGlbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IG4uc2J5UHJldmlvdXNWaXNpYmlsaXR5LCB0ID0gaS5pcyhcIjp2aXNpYmxlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbi5zYnlQcmV2aW91c1Zpc2liaWxpdHkgPSB0LCBudWxsID09IGUgPyBuLnJ1bk9uTG9hZCAmJiBuLmNhbGxiYWNrKGksIHQpIDogZSAhPT0gdCAmJiBuLmNhbGxiYWNrKGksIHQpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLnNieUNoZWNrVmlzaWJpbGl0eShpLCBuKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbi5mcmVxdWVuY3kpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBpLmZuLnNieVZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBpLmV4dGVuZCh7fSwgbiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5zYnlDaGVja1Zpc2liaWxpdHkoaSh0aGlzKSwgdClcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KGpRdWVyeSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBTYnkoKSB7XG4gICAgICAgICAgICB0aGlzLmZlZWRzID0ge307XG4gICAgICAgICAgICB0aGlzLmN0YXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHNieU9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLmlzVG91Y2ggPSBzYnlJc1RvdWNoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBTYnkucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgY3JlYXRlUGFnZTogZnVuY3Rpb24gKGNyZWF0ZUZlZWRzLCBjcmVhdGVGZWVkc0FyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zYnlhamF4dXJsID09PSAndW5kZWZpbmVkJyB8fCB3aW5kb3cuc2J5YWpheHVybC5pbmRleE9mKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlhamF4dXJsID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgJy93cC1hZG1pbi9hZG1pbi1hamF4LnBocCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJCgnLnNieV9ub19qc19lcnJvcl9tZXNzYWdlJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnLnNieV9ub19qcycpLnJlbW92ZUNsYXNzKCdzYnlfbm9fanMnKTtcblxuICAgICAgICAgICAgICAgIGNyZWF0ZUZlZWRzKGNyZWF0ZUZlZWRzQXJncyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWF5YmVBZGRZVEFQSTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHlvdXR1YmVTY3JpcHRJZCA9IFwic2J5LXlvdXR1YmUtYXBpXCI7XG4gICAgICAgICAgICAgICAgdmFyIHlvdXR1YmVTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh5b3V0dWJlU2NyaXB0SWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHlvdXR1YmVTY3JpcHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgIHRhZy5zcmMgPSBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGlcIjtcbiAgICAgICAgICAgICAgICAgICAgdGFnLmlkID0geW91dHViZVNjcmlwdElkO1xuICAgICAgICAgICAgICAgICAgICBmaXJzdFNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0YWcsIGZpcnN0U2NyaXB0KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjcmVhdGVMaWdodGJveDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxiQnVpbGRlciA9IHNieUdldGxpZ2h0Ym94QnVpbGRlcigpO1xuICAgICAgICAgICAgICAgIHZhciBzYnlfbGJfZGVsYXkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2J5X3RpbWVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzYnlfY2FsbGJhY2ssIHNieV9tcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNieV90aW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYnlfdGltZXIgPSBzZXRUaW1lb3V0KHNieV9jYWxsYmFjaywgc2J5X21zKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgc2J5X2xiX2RlbGF5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8qIExpZ2h0Ym94IHYyLjcuMSBieSBMb2tlc2ggRGhha2FyIC0gaHR0cDovL2xva2VzaGRoYWthci5jb20vcHJvamVjdHMvbGlnaHRib3gyLyAtIEhlYXZpbHkgbW9kaWZpZWQgc3BlY2lmaWNhbGx5IGZvciB0aGlzIHBsdWdpbiAqL1xuICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBqUXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWRlRHVyYXRpb24gPSA1MDAsIHRoaXMuZml0SW1hZ2VzSW5WaWV3cG9ydCA9ICEwLCB0aGlzLnJlc2l6ZUR1cmF0aW9uID0gNzAwLCB0aGlzLnBvc2l0aW9uRnJvbVRvcCA9IDUwLCB0aGlzLnNob3dJbWFnZU51bWJlckxhYmVsID0gITAsIHRoaXMuYWx3YXlzU2hvd05hdk9uVG91Y2hEZXZpY2VzID0gITEsIHRoaXMud3JhcEFyb3VuZCA9ICExXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEucHJvdG90eXBlLmFsYnVtTGFiZWwgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSArIFwiIC8gXCIgKyBiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGFcbiAgICAgICAgICAgICAgICAgICAgICB9KCksXG4gICAgICAgICAgICAgICAgICAgICAgYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBiKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IGEsIHRoaXMuYWxidW0gPSBbXSwgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IHZvaWQgMCwgdGhpcy5pbml0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKSwgdGhpcy5idWlsZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYShcImJvZHlcIikub24oXCJjbGlja1wiLCBcImFbZGF0YS1zYnktbGlnaHRib3hdXCIsIGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5zdGFydChhKGMuY3VycmVudFRhcmdldCkpLCAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoXCJcIitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnRlbXBsYXRlKCkpLmFwcGVuZFRvKGEoXCJib2R5XCIpKSwgdGhpcy4kbGlnaHRib3ggPSBhKFwiI3NieV9saWdodGJveFwiKSwgdGhpcy4kb3ZlcmxheSA9IGEoXCIjc2J5X2xpZ2h0Ym94T3ZlcmxheVwiKSwgdGhpcy4kb3V0ZXJDb250YWluZXIgPSB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1vdXRlckNvbnRhaW5lclwiKSwgdGhpcy4kY29udGFpbmVyID0gdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItY29udGFpbmVyXCIpLCB0aGlzLmNvbnRhaW5lclRvcFBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRjb250YWluZXIuY3NzKFwicGFkZGluZy10b3BcIiksIDEwKSwgdGhpcy5jb250YWluZXJSaWdodFBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRjb250YWluZXIuY3NzKFwicGFkZGluZy1yaWdodFwiKSwgMTApLCB0aGlzLmNvbnRhaW5lckJvdHRvbVBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRjb250YWluZXIuY3NzKFwicGFkZGluZy1ib3R0b21cIiksIDEwKSwgdGhpcy5jb250YWluZXJMZWZ0UGFkZGluZyA9IHBhcnNlSW50KHRoaXMuJGNvbnRhaW5lci5jc3MoXCJwYWRkaW5nLWxlZnRcIiksIDEwKSwgdGhpcy4kb3ZlcmxheS5oaWRlKCkub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5lbmQoKSwgITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBqUXVlcnkoZG9jdW1lbnQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50LCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GYWRlIG91dCB0aGUgbGlnaHRib3ggaWYgY2xpY2sgYW55d2hlcmUgb3V0c2lkZSBvZiB0aGUgdHdvIGVsZW1lbnRzIGRlZmluZWQgYmVsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWpRdWVyeShldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5zYnlfbGItb3V0ZXJDb250YWluZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFqUXVlcnkoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcuc2J5X2xiLWRhdGFDb250YWluZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRmFkZSBvdXQgbGlnaHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5wYXVzZVBsYXllcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3hPdmVybGF5LCAjc2J5X2xpZ2h0Ym94JykuZmFkZU91dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmhpZGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94T3ZlcmxheScpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInNieV9saWdodGJveFwiID09PSBhKGMudGFyZ2V0KS5hdHRyKFwiaWRcIikgJiYgYi5lbmQoKSwgITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLXByZXZcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmNoYW5nZUltYWdlKDAgPT09IGIuY3VycmVudEltYWdlSW5kZXggPyBiLmFsYnVtLmxlbmd0aCAtIDEgOiBiLmN1cnJlbnRJbWFnZUluZGV4IC0gMSksICExXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItY29udGFpbmVyXCIpLm9uKFwic3dpcGVyaWdodFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmNoYW5nZUltYWdlKDAgPT09IGIuY3VycmVudEltYWdlSW5kZXggPyBiLmFsYnVtLmxlbmd0aCAtIDEgOiBiLmN1cnJlbnRJbWFnZUluZGV4IC0gMSksICExXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5wYXVzZVBsYXllcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuY2hhbmdlSW1hZ2UoYi5jdXJyZW50SW1hZ2VJbmRleCA9PT0gYi5hbGJ1bS5sZW5ndGggLSAxID8gMCA6IGIuY3VycmVudEltYWdlSW5kZXggKyAxKSwgITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1jb250YWluZXJcIikub24oXCJzd2lwZWxlZnRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5jaGFuZ2VJbWFnZShiLmN1cnJlbnRJbWFnZUluZGV4ID09PSBiLmFsYnVtLmxlbmd0aCAtIDEgPyAwIDogYi5jdXJyZW50SW1hZ2VJbmRleCArIDEpLCAhMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWxvYWRlciwgLnNieV9sYi1jbG9zZVwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5lbmQoKSwgITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYyhhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5hbGJ1bS5wdXNoKGxiQnVpbGRlci5nZXREYXRhKGEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gYSh3aW5kb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5vbihcInJlc2l6ZVwiLCBhLnByb3h5KHRoaXMuc2l6ZU92ZXJsYXksIHRoaXMpKSwgYShcInNlbGVjdCwgb2JqZWN0LCBlbWJlZFwiKS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzLnNpemVPdmVybGF5KCksIHRoaXMuYWxidW0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmLCBnID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IGIuYXR0cihcImRhdGEtc2J5LWxpZ2h0Ym94XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gYShiLnByb3AoXCJ0YWdOYW1lXCIpICsgJ1tkYXRhLXNieS1saWdodGJveD1cIicgKyBoICsgJ1wiXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZi5sZW5ndGg7IGkgPSArK2kpIGMoYShmW2ldKSksIGZbaV0gPT09IGJbMF0gJiYgKGcgPSBpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcImxpZ2h0Ym94XCIgPT09IGIuYXR0cihcInJlbFwiKSkgYyhiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBhKGIucHJvcChcInRhZ05hbWVcIikgKyAnW3JlbD1cIicgKyBiLmF0dHIoXCJyZWxcIikgKyAnXCJdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmLmxlbmd0aDsgaiA9ICsraikgYyhhKGZbal0pKSwgZltqXSA9PT0gYlswXSAmJiAoZyA9IGopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IGUuc2Nyb2xsVG9wKCkgKyB0aGlzLm9wdGlvbnMucG9zaXRpb25Gcm9tVG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gZS5zY3JvbGxMZWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogayArIFwicHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBsICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5mYWRlSW4odGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiksIHRoaXMuY2hhbmdlSW1hZ2UoZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuY2hhbmdlSW1hZ2UgPSBmdW5jdGlvbihiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVLZXlib2FyZE5hdigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1pbWFnZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJsYXkuZmFkZUluKHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pLCBhKFwiLnNieV9sYi1sb2FkZXJcIikuZmFkZUluKFwic2xvd1wiKSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItaW1hZ2UsIC5zYnlfbGItbmF2LCAuc2J5X2xiLXByZXYsIC5zYnlfbGItbmV4dCwgLnNieV9sYi1kYXRhQ29udGFpbmVyLCAuc2J5X2xiLW51bWJlcnMsIC5zYnlfbGItY2FwdGlvblwiKS5oaWRlKCksIHRoaXMuJG91dGVyQ29udGFpbmVyLmFkZENsYXNzKFwiYW5pbWF0aW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBuZXcgSW1hZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmLCBnLCBoLCBpLCBqLCBrLCBsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzYnlBcnJvd1dpZHRoID0gMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuYXR0cihcInNyY1wiLCBjLmFsYnVtW2JdLmxpbmspLCBmID0gYShlKSwgZC53aWR0aChlLndpZHRoKSwgZC5oZWlnaHQoZS5oZWlnaHQpLCBjLm9wdGlvbnMuZml0SW1hZ2VzSW5WaWV3cG9ydCAmJiAobCA9IGEod2luZG93KS53aWR0aCgpLCBrID0gYSh3aW5kb3cpLmhlaWdodCgpLCBqID0gbCAtIGMuY29udGFpbmVyTGVmdFBhZGRpbmcgLSBjLmNvbnRhaW5lclJpZ2h0UGFkZGluZyAtIDIwIC0gc2J5QXJyb3dXaWR0aCwgaSA9IGsgLSBjLmNvbnRhaW5lclRvcFBhZGRpbmcgLSBjLmNvbnRhaW5lckJvdHRvbVBhZGRpbmcgLSAxNTAsIChlLndpZHRoID4gaiB8fCBlLmhlaWdodCA+IGkpICYmIChlLndpZHRoIC8gaiA+IGUuaGVpZ2h0IC8gaSA/IChoID0gaiwgZyA9IHBhcnNlSW50KGUuaGVpZ2h0IC8gKGUud2lkdGggLyBoKSwgMTApLCBkLndpZHRoKGgpLCBkLmhlaWdodChnKSkgOiAoZyA9IGksIGggPSBwYXJzZUludChlLndpZHRoIC8gKGUuaGVpZ2h0IC8gZyksIDEwKSwgZC53aWR0aChoKSwgZC5oZWlnaHQoZykpKSksIGMuc2l6ZUNvbnRhaW5lcihkLndpZHRoKCksIGQuaGVpZ2h0KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBlLnNyYyA9IHRoaXMuYWxidW1bYl0ubGluaywgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IGJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuc2l6ZU92ZXJsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJsYXkud2lkdGgoYSh3aW5kb3cpLndpZHRoKCkpLmhlaWdodChhKGRvY3VtZW50KS5oZWlnaHQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuc2l6ZUNvbnRhaW5lciA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC4kbGlnaHRib3guZmluZChcIi5zYnlfbGItZGF0YUNvbnRhaW5lclwiKS53aWR0aChnKSwgZC4kbGlnaHRib3guZmluZChcIi5zYnlfbGItcHJldkxpbmtcIikuaGVpZ2h0KGgpLCBkLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1uZXh0TGlua1wiKS5oZWlnaHQoaCksIGQuc2hvd0ltYWdlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHRoaXMuJG91dGVyQ29udGFpbmVyLm91dGVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHRoaXMuJG91dGVyQ29udGFpbmVyLm91dGVySGVpZ2h0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBhICsgdGhpcy5jb250YWluZXJMZWZ0UGFkZGluZyArIHRoaXMuY29udGFpbmVyUmlnaHRQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gYiArIHRoaXMuY29udGFpbmVyVG9wUGFkZGluZyArIHRoaXMuY29udGFpbmVyQm90dG9tUGFkZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgIT09IGcgfHwgZiAhPT0gaCA/IHRoaXMuJG91dGVyQ29udGFpbmVyLmFuaW1hdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5vcHRpb25zLnJlc2l6ZUR1cmF0aW9uLCBcInN3aW5nXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiBjKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuc2hvd0ltYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1sb2FkZXJcIikuaGlkZSgpLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1pbWFnZVwiKS5mYWRlSW4oXCJzbG93XCIpLCB0aGlzLnVwZGF0ZU5hdigpLCB0aGlzLnVwZGF0ZURldGFpbHMoKSwgdGhpcy5wcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMoKSwgdGhpcy5lbmFibGVLZXlib2FyZE5hdigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnVwZGF0ZU5hdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJUb3VjaEV2ZW50XCIpLCBhID0gdGhpcy5vcHRpb25zLmFsd2F5c1Nob3dOYXZPblRvdWNoRGV2aWNlcyA/ICEwIDogITFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGIpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1uYXZcIikuc2hvdygpLCB0aGlzLmFsYnVtLmxlbmd0aCA+IDEgJiYgKHRoaXMub3B0aW9ucy53cmFwQXJvdW5kID8gKGEgJiYgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItcHJldiwgLnNieV9sYi1uZXh0XCIpLmNzcyhcIm9wYWNpdHlcIiwgXCIxXCIpLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2LCAuc2J5X2xiLW5leHRcIikuc2hvdygpKSA6ICh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID4gMCAmJiAodGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItcHJldlwiKS5zaG93KCksIGEgJiYgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItcHJldlwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKSksIHRoaXMuY3VycmVudEltYWdlSW5kZXggPCB0aGlzLmFsYnVtLmxlbmd0aCAtIDEgJiYgKHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW5leHRcIikuc2hvdygpLCBhICYmIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW5leHRcIikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIikpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUudXBkYXRlRGV0YWlscyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogTkVXIFBIT1RPIEFDVElPTiAqKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpRdWVyeSgnaWZyYW1lLnNieV9sYi1wbGF5ZXItbG9hZGVkJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcuc2J5X2xiLXBsYXllci1wbGFjZWhvbGRlcicpLnJlcGxhY2VXaXRoKGpRdWVyeSgnaWZyYW1lLnNieV9sYi1wbGF5ZXItbG9hZGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnaWZyYW1lLnNieV9sYi1wbGF5ZXItbG9hZGVkJykucmVtb3ZlQ2xhc3MoJ3NieV9sYi1wbGF5ZXItbG9hZGVkJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Td2l0Y2ggdmlkZW8gd2hlbiBlaXRoZXIgYSBuZXcgcG9wdXAgb3IgbmF2aWdhdGluZyB0byBuZXcgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS5mZWVkSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLmJlZm9yZVBsYXllclNldHVwKHRoaXMuJGxpZ2h0Ym94LHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0sdGhpcy5jdXJyZW50SW1hZ2VJbmRleCx0aGlzLmFsYnVtLGZlZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggc2J5X3N1cHBvcnRzX3ZpZGVvKCkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3gnKS5yZW1vdmVDbGFzcygnc2J5X3ZpZGVvX2xpZ2h0Ym94Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuICYmIHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8ubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcuc2J5X2dkcHJfbm90aWNlJykucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXllcklEID0gJ3NieV9sYi1wbGF5ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3gnKS5hZGRDbGFzcygnc2J5X3ZpZGVvX2xpZ2h0Ym94Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISB3aW5kb3cuc2J5T3B0aW9ucy5pc1BybyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmFkZENsYXNzKCdzYnlfbGlnaHRib3hfZnJlZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSB0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLnZpZGVvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gc2J5T3B0aW9ucy5hdXRvcGxheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0OiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBmZWVkLmVtYmVkVVJMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25TdGF0ZUNoYW5nZSc6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsdmlkZW9JRCxkYXRhLCQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5tYXliZUFkZENUQShwbGF5ZXJJRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllci5sb2FkVmlkZW9CeUlkKHZpZGVvSUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kb3V0ZXJDb250YWluZXIucmVtb3ZlQ2xhc3MoXCJhbmltYXRpbmdcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWRhdGFDb250YWluZXJcIikuZmFkZUluKHRoaXMub3B0aW9ucy5yZXNpemVEdXJhdGlvbiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5zaXplT3ZlcmxheSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItcGxheWVyJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JyA6ICQoJyNzYnlfbGlnaHRib3ggLnNieV9sYi1vdXRlckNvbnRhaW5lcicpLmhlaWdodCgpKydweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJyA6ICQoJyNzYnlfbGlnaHRib3ggLnNieV9sYi1vdXRlckNvbnRhaW5lcicpLndpZHRoKCkrJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG9wJzogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGxpZ2h0Ym94LmZpbmQoJ2lmcmFtZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZCgnaWZyYW1lJykuYXR0cigndGl0bGUnLHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW9UaXRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxJbWFnZSA9ICQoJy5zYnlfaXRlbVtkYXRhLXZpZGVvLWlkPScgKyB0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLnZpZGVvKyddJykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWZ1bGwtcmVzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5zYnlfbGItaW1hZ2UnKS5hdHRyKCdzcmMnLGZ1bGxJbWFnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJG91dGVyQ29udGFpbmVyLnJlbW92ZUNsYXNzKFwiYW5pbWF0aW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1kYXRhQ29udGFpbmVyXCIpLmZhZGVJbih0aGlzLm9wdGlvbnMucmVzaXplRHVyYXRpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuc2l6ZU92ZXJsYXkoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KFwiLnNieV9sYi1jb250YWluZXJcIikucHJlcGVuZCgnPGEgaHJlZj1cImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9Jyt0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLnZpZGVvKydcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgY2xhc3M9XCJzYnlfZ2Rwcl9ub3RpY2VcIj48c3ZnIHN0eWxlPVwiY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMSlcIiBjbGFzcz1cInN2Zy1pbmxpbmUtLWZhIGZhLXBsYXkgZmEtdy0xNCBzYnlfcGxheWJ0blwiIGFyaWEtbGFiZWw9XCJQbGF5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1mYS1wcm9jZXNzZWQ9XCJcIiBkYXRhLXByZWZpeD1cImZhXCIgZGF0YS1pY29uPVwicGxheVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA0NDggNTEyXCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNDI0LjQgMjE0LjdMNzIuNCA2LjZDNDMuOC0xMC4zIDAgNi4xIDAgNDcuOVY0NjRjMCAzNy41IDQwLjcgNjAuMSA3Mi40IDQxLjNsMzUyLTIwOGMzMS40LTE4LjUgMzEuNS02NC4xIDAtODIuNnpcIj48L3BhdGg+PC9zdmc+PC9hPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIuYWZ0ZXJQbGF5ZXJTZXR1cCh0aGlzLiRsaWdodGJveCx0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLHRoaXMuY3VycmVudEltYWdlSW5kZXgsdGhpcy5hbGJ1bSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGJ1bS5sZW5ndGggPiAxICYmIHRoaXMub3B0aW9ucy5zaG93SW1hZ2VOdW1iZXJMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1udW1iZXJcIikudGV4dCh0aGlzLm9wdGlvbnMuYWxidW1MYWJlbCh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMSwgdGhpcy5hbGJ1bS5sZW5ndGgpKS5mYWRlSW4oXCJmYXN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW51bWJlclwiKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnByZWxvYWROZWlnaGJvcmluZ0ltYWdlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWxidW0ubGVuZ3RoID4gdGhpcy5jdXJyZW50SW1hZ2VJbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG5ldyBJbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnNyYyA9IHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleCArIDFdLmxpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gbmV3IEltYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuc3JjID0gdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4IC0gMV0ubGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5lbmFibGVLZXlib2FyZE5hdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYShkb2N1bWVudCkub24oXCJrZXl1cC5rZXlib2FyZFwiLCBhLnByb3h5KHRoaXMua2V5Ym9hcmRBY3Rpb24sIHRoaXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5kaXNhYmxlS2V5Ym9hcmROYXYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEoZG9jdW1lbnQpLm9mZihcIi5rZXlib2FyZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5rZXlib2FyZEFjdGlvbiA9IGZ1bmN0aW9uKGEpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEtFWUNPREVfRVNDICAgICAgICA9IDI3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEtFWUNPREVfTEVGVEFSUk9XICA9IDM3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEtFWUNPREVfUklHSFRBUlJPVyA9IDM5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5Y29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ICAgICA9IFN0cmluZy5mcm9tQ2hhckNvZGUoa2V5Y29kZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXljb2RlID09PSBLRVlDT0RFX0VTQyB8fCBrZXkubWF0Y2goL3h8b3xjLykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggc2J5X3N1cHBvcnRzX3ZpZGVvKCkgKSAkKCcjc2J5X2xpZ2h0Ym94IHZpZGVvLnNieV92aWRlbycpWzBdLnBhdXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3NieV9saWdodGJveCBpZnJhbWUnKS5hdHRyKCdzcmMnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAncCcgfHwga2V5Y29kZSA9PT0gS0VZQ09ERV9MRUZUQVJST1cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SW1hZ2VJbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuY3VycmVudEltYWdlSW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy53cmFwQXJvdW5kICYmIHRoaXMuYWxidW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuYWxidW0ubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHNieV9zdXBwb3J0c192aWRlbygpICkgJCgnI3NieV9saWdodGJveCB2aWRlby5zYnlfdmlkZW8nKVswXS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNzYnlfbGlnaHRib3ggaWZyYW1lJykuYXR0cignc3JjJywgJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ24nIHx8IGtleWNvZGUgPT09IEtFWUNPREVfUklHSFRBUlJPVykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICE9PSB0aGlzLmFsYnVtLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZSh0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMud3JhcEFyb3VuZCAmJiB0aGlzLmFsYnVtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VJbWFnZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVLZXlib2FyZE5hdigpLCBhKHdpbmRvdykub2ZmKFwicmVzaXplXCIsIHRoaXMuc2l6ZU92ZXJsYXkpLCB0aGlzLiRsaWdodGJveC5mYWRlT3V0KHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pLCB0aGlzLiRvdmVybGF5LmZhZGVPdXQodGhpcy5vcHRpb25zLmZhZGVEdXJhdGlvbiksIGEoXCJzZWxlY3QsIG9iamVjdCwgZW1iZWRcIikuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgYlxuICAgICAgICAgICAgICAgICAgICAgIH0oKTtcbiAgICAgICAgICAgICAgICAgICAgYShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG5ldyBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBjKGEpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0xpZ2h0Ym94IGhpZGUgcGhvdG8gZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuc2J5X2xpZ2h0Ym94X2FjdGlvbiBhJykub2ZmKCkub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5maW5kKCcuc2J5X2xpZ2h0Ym94X3Rvb2x0aXAnKS50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9KS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlPcHRpb25zLmxpZ2h0Ym94Q3JlYXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3JlYXRlRmVlZHM6IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCAhc2J5T3B0aW9ucy5pc0FkbWluICYmIHNieU9wdGlvbnMubGlnaHRib3hDcmVhdGVkID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuY3JlYXRlTGlnaHRib3goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJncy53aGVuRmVlZHNDcmVhdGVkKFxuICAgICAgICAgICAgICAgICAgJCgnLnNiX3lvdXR1YmUnKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1zYnktaW5kZXgnLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9wbGF5ZXInKS5yZXBsYWNlV2l0aCgnPGRpdiBpZD1cInNieV9wbGF5ZXInK2luZGV4KydcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSB0eXBlb2YgJHNlbGYuYXR0cignZGF0YS1zYnktZmxhZ3MnKSAhPT0gJ3VuZGVmaW5lZCcgPyAkc2VsZi5hdHRyKCdkYXRhLXNieS1mbGFncycpLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWwgPSB0eXBlb2YgJHNlbGYuYXR0cignZGF0YS1vcHRpb25zJykgIT09ICd1bmRlZmluZWQnID8gSlNPTi5wYXJzZSgkc2VsZi5hdHRyKCdkYXRhLW9wdGlvbnMnKSkgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MuaW5kZXhPZigndGVzdEFqYXgnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkudHJpZ2dlcmVkVGVzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJtaXREYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJyA6ICdzYnlfb25fYWpheF90ZXN0X3RyaWdnZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkaWQgdGVzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNieUFqYXgoc3VibWl0RGF0YSxvblN1Y2Nlc3MpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHZhciBmZWVkT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29scyA6ICRzZWxmLmF0dHIoJ2RhdGEtY29scycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xzbW9iaWxlIDogJHNlbGYuYXR0cignZGF0YS1jb2xzbW9iaWxlJykgIT09ICdzYW1lJyA/ICRzZWxmLmF0dHIoJ2RhdGEtY29sc21vYmlsZScpIDogJHNlbGYuYXR0cignZGF0YS1jb2xzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA6ICRzZWxmLmF0dHIoJ2RhdGEtbnVtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1JlcyA6ICRzZWxmLmF0dHIoJ2RhdGEtcmVzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRJRCA6ICRzZWxmLmF0dHIoJ2RhdGEtZmVlZGlkJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RJRCA6IHR5cGVvZiAkc2VsZi5hdHRyKCAnZGF0YS1wb3N0aWQnICkgIT09ICd1bmRlZmluZCcgPyAkc2VsZi5hdHRyKCAnZGF0YS1wb3N0aWQnICkgOiAndW5rbm93bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0Q29kZUF0dHMgOiAkc2VsZi5hdHRyKCdkYXRhLXNob3J0Y29kZS1hdHRzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6aW5nRW5hYmxlZCA6IChmbGFncy5pbmRleE9mKCdyZXNpemVEaXNhYmxlJykgPT09IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VMb2FkRW5hYmxlZCA6IChmbGFncy5pbmRleE9mKCdpbWFnZUxvYWREaXNhYmxlJykgPT09IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdFbmFibGVkIDogKGZsYWdzLmluZGV4T2YoJ2RlYnVnJykgPiAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZhdm9yTG9jYWwgOiAoZmxhZ3MuaW5kZXhPZignZmF2b3JMb2NhbCcpID4gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhamF4UG9zdExvYWQgOiAoZmxhZ3MuaW5kZXhPZignYWpheFBvc3RMb2FkJykgPiAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrV1BQb3N0cyA6IChmbGFncy5pbmRleE9mKCdjaGVja1dQUG9zdHMnKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlQ2hlY2tQb3N0cyA6IChmbGFncy5pbmRleE9mKCdzaW5nbGVDaGVja1Bvc3RzJykgPiAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hcnJvd1BsYXllciA6IChmbGFncy5pbmRleE9mKCduYXJyb3dQbGF5ZXInKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RwciA6IChmbGFncy5pbmRleE9mKCdnZHByJykgPiAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNlbnRHaXZlbiA6IChmbGFncy5pbmRleE9mKCdnZHByJykgPT09IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbm9DRE4gOiAoZmxhZ3MuaW5kZXhPZignZGlzYWJsZWNkbicpID4gLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0Nvb2tpZXM6IChmbGFncy5pbmRleE9mKCdhbGxvd2Nvb2tpZXMnKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlnaHRib3hFbmFibGVkIDogdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtc2J5LXN1cHBvcnRzLWxpZ2h0Ym94JykgIT09ICd1bmRlZmluZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdG9yIDogKGZsYWdzLmluZGV4T2YoJ2xvY2F0b3InKSA+IC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b01pblJlcyA6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYWwgOiBnZW5lcmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVCYXJFbmFibGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdID0gc2J5R2V0TmV3RmVlZCh0aGlzLCBpbmRleCwgZmVlZE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieUFQSVJlYWR5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzW2luZGV4XS5wbGF5ZXJBUElSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLnNldFJlc2l6ZWRJbWFnZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzW2luZGV4XS5pbml0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlhZnRlcmZlZWRjcmVhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICBldnQuZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcblxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyRmVlZHNDcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gZW5hYmxlIGhlYWRlciBob3ZlciBhY3Rpb25cbiAgICAgICAgICAgICAgICAkKCcuc2JfeW91dHViZV9oZWFkZXInKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICR0aGlzSGVhZGVyID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgJHRoaXNIZWFkZXIuZmluZCgnLnNieV9oZWFkZXJfbGluaycpLm9uKCdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW91c2VlbnRlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzSGVhZGVyLmZpbmQoJy5zYnlfaGVhZGVyX2ltZ19ob3ZlcicpLmFkZENsYXNzKCdzYnlfZmFkZV9pbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXNIZWFkZXIuZmluZCgnLnNieV9oZWFkZXJfaW1nX2hvdmVyJykucmVtb3ZlQ2xhc3MoJ3NieV9mYWRlX2luJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2J5QVBJUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5ZmVlZGFuZHl0cmVhZHknKTtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVuY29kZUhUTUw6IGZ1bmN0aW9uKHJhdykge1xuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBwYXNzZWQgdmFyaWFibGUgaXMgZGVmaW5lZFxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmF3ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgZ3JlYXRlciB0aGFuIGFuZCBsZXNzIHRoYW4gc3ltYm9scyB3aXRoIGh0bWwgZW50aXR5IHRvIGRpc2FsbG93IGh0bWwgaW4gY29tbWVudHNcbiAgICAgICAgICAgICAgICB2YXIgZW5jb2RlZCA9IHJhdy5yZXBsYWNlKC8oPikvZywnJmd0OycpLFxuICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGVuY29kZWQucmVwbGFjZSgvKDwpL2csJyZsdDsnKTtcbiAgICAgICAgICAgICAgICBlbmNvZGVkID0gZW5jb2RlZC5yZXBsYWNlKC8oJmx0O2JyXFwvJmd0OykvZywnPGJyPicpO1xuICAgICAgICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLygmbHQ7YnImZ3Q7KS9nLCc8YnI+Jyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cmxEZXRlY3Q6IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdXJsUmVnZXggPSAvaHR0cHM/OlxcL1xcLyh3d3dcXC4pP1stYS16QS1aMC05QDolLl9cXCt+Iz1dezIsMjU2fVxcLlthLXpdezIsNn1cXGIoWy1hLXpBLVowLTlAOiVfXFwrLn4jPyYvLz1dKikvZztcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dC5tYXRjaCh1cmxSZWdleCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY3RhRGV0ZWN0OiBmdW5jdGlvbih0ZXh0KSB7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3RhTWF0Y2hlcyA9IHRleHQubWF0Y2goL3tMaW5rOiguKil9L2cpLFxuICAgICAgICAgICAgICAgICAgY3RhID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3RhTWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdXJsTWF0Y2hlcyA9IHdpbmRvdy5zYnkudXJsRGV0ZWN0KGN0YU1hdGNoZXNbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmxNYXRjaGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gdXJsTWF0Y2hlc1swXS50cmltKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNieUJ1dHRvblRleHQgPSBjdGFNYXRjaGVzWzBdLnJlcGxhY2UoJ3tMaW5rOicsJycpLnJlcGxhY2UoJ30nLCcnKS5yZXBsYWNlKHVybCwnJykucmVwbGFjZSgnICAnLCcgJykudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3RhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAnbGluaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc2J5QnV0dG9uVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDVEEgZm91bmQgYnV0IG5vIFVSTCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0YTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaHVmZmxlOiBmdW5jdGlvbihhcnJheSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICB0ZW1wb3JhcnlWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIHJhbmRvbUluZGV4O1xuXG4gICAgICAgICAgICAgICAgLy8gV2hpbGUgdGhlcmUgcmVtYWluIGVsZW1lbnRzIHRvIHNodWZmbGUuLi5cbiAgICAgICAgICAgICAgICB3aGlsZSAoMCAhPT0gY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBpY2sgYSByZW1haW5pbmcgZWxlbWVudC4uLlxuICAgICAgICAgICAgICAgICAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCAtPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFuZCBzd2FwIGl0IHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAgICAgdGVtcG9yYXJ5VmFsdWUgPSBhcnJheVtjdXJyZW50SW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtjdXJyZW50SW5kZXhdID0gYXJyYXlbcmFuZG9tSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtyYW5kb21JbmRleF0gPSB0ZW1wb3JhcnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gU2J5RmVlZChlbCwgaW5kZXgsIHNldHRpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyVVJMID0gd2luZG93LnNieS5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLm5hcnJvd1BsYXllcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJVUkwgPSB3aW5kb3cuc2J5Lm9wdGlvbnMucGxhY2Vob2xkZXJOYXJyb3dcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGxheWVyQVBJUmVhZHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29uc2VudEdpdmVuID0gc2V0dGluZ3MuY29uc2VudEdpdmVuO1xuICAgICAgICAgICAgdGhpcy5wbGF5ZXJzID0ge307XG4gICAgICAgICAgICB0aGlzLm1pbkltYWdlV2lkdGggPSAwO1xuICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAxNTA7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZWRJbWFnZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubmVlZHNSZXNpemluZyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubW9zdFJlY2VudGx5TG9hZGVkUG9zdHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZW1iZWRVUkwgPSAnLy93d3cueW91dHViZS1ub2Nvb2tpZS5jb20nO1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmFsbG93Q29va2llcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRVUkwgPSAnLy93d3cueW91dHViZS5jb20nXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIFNieUZlZWQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gZmVlZC5jaGVja0NvbnNlbnQoKTtcblxuICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbikge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5Lm1heWJlQWRkWVRBUEkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5ub0NETiAmJiAhZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcy5lbCkuZmluZCgnLnNiX3lvdXR1YmVfaGVhZGVyJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMuZWwpLmZpbmQoJy5zYl95b3V0dWJlX2hlYWRlcicpLmFkZENsYXNzKCdzYnlfbm9fY29uc2VudCcpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJCh0aGlzLmVsKS5wcmV2KCcuc2JfeW91dHViZV9oZWFkZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcy5lbCkucHJldignLnNiX3lvdXR1YmVfaGVhZGVyJykuYWRkQ2xhc3MoJ3NieV9ub19jb25zZW50JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcjc2J5X21vZF9lcnJvcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMuZWwpLnByZXBlbmQoJCh0aGlzLmVsKS5maW5kKCcjc2J5X21vZF9lcnJvcicpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYWpheFBvc3RMb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TmV3UG9zdFNldCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vT25seSBjaGVjayB0aGUgd2lkdGggb25jZSB0aGUgcmVzaXplIGV2ZW50IGlzIG92ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHNieV9kZWxheSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYnlfdGltZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNieV9jYWxsYmFjaywgc2J5X21zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoc2J5X3RpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNieV90aW1lciA9IHNldFRpbWVvdXQoc2J5X2NhbGxiYWNrLCBzYnlfbXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBzYnlfZGVsYXkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbml0TGF5b3V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRHYWxsZXJ5TGF5b3V0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdEdhbGxlcnlMYXlvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ2FsbGVyeScpICYmICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXliZVJhaXNlU2luZ2xlSW1hZ2VSZXNvbHV0aW9uKCRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKSwgMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAgLnNieV92aWRlb190aHVtYm5haWwnKS5vZmYoKS5vbignY2xpY2snLGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCghZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQgfHwgKGZlZWQuc2V0dGluZ3MubGlnaHRib3hFbmFibGVkICYmIGZlZWQuc2V0dGluZ3Mubm9DRE4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoZmVlZC5zZXR0aW5ncy5ub0NETiB8fCAhZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mICQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykuYXR0cignZGF0YS12aWRlby1pZCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2hyZWYnLCdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PScrJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbENsaWNrKCQodGhpcyksIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkuYWRkQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHNlbGYub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmZWVkLmNhbkNyZWF0ZVBsYXllcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIGlmcmFtZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmFkZENsYXNzKCdzYnlfcGxheWVyX2FkZGVkJykuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIC5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmluZCgnLnNieV9sb2FkZXInKS5zaG93KCkucmVtb3ZlQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmNyZWF0ZVBsYXllcignc2J5X3BsYXllcicrZmVlZC5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmZWVkLnBsYXllciA9PT0gJ3VuZGVmaW5lZCcgJiYgZmVlZC5wbGF5ZXJFYWdlckxvYWRlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LnNieVNlbWlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5vQ0ROKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykuYXBwZW5kKCc8ZGl2IGNsYXNzPVwic2J5X3BsYXlfYnRuXCI+XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNieV9wbGF5X2J0bl9iZ1wiPjwvc3Bhbj5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgPHN2ZyBhcmlhLWhpZGRlbj1cInRydWVcIiBmb2N1c2FibGU9XCJmYWxzZVwiIGRhdGEtcHJlZml4PVwiZmFiXCIgZGF0YS1pY29uPVwieW91dHViZVwiIHJvbGU9XCJpbWdcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1NzYgNTEyXCIgY2xhc3M9XCJzdmctaW5saW5lLS1mYSBmYS15b3V0dWJlIGZhLXctMThcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk01NDkuNjU1IDEyNC4wODNjLTYuMjgxLTIzLjY1LTI0Ljc4Ny00Mi4yNzYtNDguMjg0LTQ4LjU5N0M0NTguNzgxIDY0IDI4OCA2NCAyODggNjRTMTE3LjIyIDY0IDc0LjYyOSA3NS40ODZjLTIzLjQ5NyA2LjMyMi00Mi4wMDMgMjQuOTQ3LTQ4LjI4NCA0OC41OTctMTEuNDEyIDQyLjg2Ny0xMS40MTIgMTMyLjMwNS0xMS40MTIgMTMyLjMwNXMwIDg5LjQzOCAxMS40MTIgMTMyLjMwNWM2LjI4MSAyMy42NSAyNC43ODcgNDEuNSA0OC4yODQgNDcuODIxQzExNy4yMiA0NDggMjg4IDQ0OCAyODggNDQ4czE3MC43OCAwIDIxMy4zNzEtMTEuNDg2YzIzLjQ5Ny02LjMyMSA0Mi4wMDMtMjQuMTcxIDQ4LjI4NC00Ny44MjEgMTEuNDEyLTQyLjg2NyAxMS40MTItMTMyLjMwNSAxMS40MTItMTMyLjMwNXMwLTg5LjQzOC0xMS40MTItMTMyLjMwNXptLTMxNy41MSAyMTMuNTA4VjE3NS4xODVsMTQyLjczOSA4MS4yMDUtMTQyLjczOSA4MS4yMDF6XCIgY2xhc3M9XCJcIj48L3BhdGg+PC9zdmc+ICAgICAgICAgICAgICAgICAgICA8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNyZWF0ZVBsYXllcjogZnVuY3Rpb24ocGxheWVySUQsdmlkZW9JRCxhdXRvcGxheSxhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCAhPT0gJ3VuZGVmaW5lZCcgPyB2aWRlb0lEIDogdGhpcy5nZXRWaWRlb0lEKCRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkpO1xuICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gdHlwZW9mIGF1dG9wbGF5ICE9PSAndW5kZWZpbmVkJyA/IGF1dG9wbGF5IDogMDtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIGZlZWQuZW1iZWRVUkwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzLmV2ZW50cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5ldmVudHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnb25SZWFkeSc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykucmVtb3ZlQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZycpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCd6LWluZGV4JywgLTEpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQoJyMnICsgcGxheWVySUQpLmxlbmd0aCAmJiAkKCcjJyArIHBsYXllcklEKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbF93cmFwJykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycgKyBwbGF5ZXJJRCkuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWxfd3JhcCcpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmFkZVRvKDAsICdzbG93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ3otaW5kZXgnLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVycGxheWVycmVhZHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnQuZmVlZCA9IGZlZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZ0LnBsYXllciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5yZW1vdmVDbGFzcygnc2J5X3BsYXllcl9sb2FkaW5nJykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ3otaW5kZXgnLCAtMSkuZmluZCgnLnNieV9sb2FkZXInKS5oaWRlKCkuYWRkQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsdmlkZW9JRCxkYXRhLCQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAhPT0gMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmVlZC5wbGF5ZXJzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1WaWRJRCA9IGZlZWQuZ2V0VmlkZW9JRCgkKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmZpbmQoJ2lmcmFtZScpLmxlbmd0aCAmJiAoaXRlbVZpZElEICE9PSB2aWRlb0lEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmVlZC5wbGF5ZXJzW2l0ZW1WaWRJRF0gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBmZWVkLnBsYXllcnNbaXRlbVZpZElEXS5wYXVzZVZpZGVvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQucGxheWVyc1tpdGVtVmlkSURdLnBhdXNlVmlkZW8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAod2luZG93LnNieUVhZ2VyTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UGxheWVyID0gWVQuZ2V0KHBsYXllcklEKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3UGxheWVyID0gbmV3IHdpbmRvdy5ZVC5QbGF5ZXIocGxheWVySUQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubWF5YmVBZGRDVEEocGxheWVySUQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSAmJiB0eXBlb2YgdGhpcy5wbGF5ZXJzW3ZpZGVvSURdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXllcnNbdmlkZW9JRF0gPSBuZXdQbGF5ZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wbGF5ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyID0gbmV3UGxheWVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVycGxheWVyY3JlYXRlZCcpO1xuICAgICAgICAgICAgICAgIGV2dC5mZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG5cbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIC5zYnlfcGxheV9idG4nKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdQbGF5ZXI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJTdGF0ZUNoYW5nZTogZnVuY3Rpb24ocGxheWVySUQsdmlkZW9JRCxkYXRhLCRwbGF5ZXIpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlckluaXRpYWxJbWFnZXNMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdExheW91dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vcmVCdXR0b25Jbml0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlRXh0cmFJdGVtc0ZvcldpZHRoKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVOZXdJbWFnZXNSZXZlYWxlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmV2ZWFsTmV3SW1hZ2VzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlck5ld0ltYWdlc1JldmVhbGVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckZlZWRTZXQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpemVQbGF5ZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpemVJdGVtcygpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5RnVsbEZlYXR1cmVzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGZWF0dXJlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlclJlc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZUhlaWdodCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyTG9hZE1vcmVDbGlja2VkOiBmdW5jdGlvbigkYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgJGJ1dHRvbi5maW5kKCcuc2J5X2xvYWRlcicpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgJGJ1dHRvbi5maW5kKCcuc2J5X2J0bl90ZXh0JykuYWRkQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAkYnV0dG9uLmNsb3Nlc3QoJy5zYl95b3V0dWJlJykuZmluZCgnLnNieV9udW1fZGlmZl9oaWRlJykuYWRkQ2xhc3MoJ3NieV90cmFuc2l0aW9uJykucmVtb3ZlQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJOZXdJbWFnZXNMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZU5ld0ltYWdlc1JldmVhbGVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXZlYWxOZXdJbWFnZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyTmV3SW1hZ2VzUmV2ZWFsZWQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpemVQbGF5ZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNpemVJdGVtcygpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvL0hpZGUgdGhlIGxvYWRlciBpbiB0aGUgbG9hZCBtb3JlIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRlcicpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfYnRuX3RleHQnKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICBmZWVkLm1heWJlUmFpc2VJbWFnZVJlc29sdXRpb24oKTtcbiAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUZ1bGxGZWF0dXJlcygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmVhdHVyZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVmb3JlTmV3SW1hZ2VzUmV2ZWFsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VIZWlnaHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1heWJlUmFpc2VJbWFnZVJlc29sdXRpb24odHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyRmVlZFNldDogZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaXplUGxheWVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgICAgICAgICAgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICAgICAgICAgICAkcGxheWVyVGh1bWJuYWlsID0gJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmZpbmQoJy5zYnlfcGxheWVyX3ZpZGVvX3RodW1ibmFpbCcpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGxheWVyV2lkdGggPSAkcGxheWVyVGh1bWJuYWlsLmlubmVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICBuZXdQbGF5ZXJIZWlnaHQgPSBNYXRoLmZsb29yKHBsYXllcldpZHRoICogOSAvIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MubmFycm93UGxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdQbGF5ZXJIZWlnaHQgPSBNYXRoLmZsb29yKHBsYXllcldpZHRoICogMyAvIDQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwuY3NzKCdoZWlnaHQnLG5ld1BsYXllckhlaWdodCsncHgnKS5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAkcGxheWVyVGh1bWJuYWlsID0gJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxheWVyV2lkdGggPSAkcGxheWVyVGh1bWJuYWlsLmlubmVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDkgLyAxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5uYXJyb3dQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQbGF5ZXJIZWlnaHQgPSBNYXRoLmZsb29yKHBsYXllcldpZHRoICogMyAvIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHBsYXllclRodW1ibmFpbC5jc3MoJ2hlaWdodCcsbmV3UGxheWVySGVpZ2h0KydweCcpLmNzcygnb3ZlcmZsb3cnLCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpemVJdGVtczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICghJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfbGlzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ3NieV9pbWdMaXF1aWRfcmVhZHknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aHVtYldpZHRoID0gJCh0aGlzKS5pbm5lcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdUaHVtYkhlaWdodCA9IE1hdGguZmxvb3IodGh1bWJXaWR0aCAqIDkgLyAxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ2hlaWdodCcsbmV3VGh1bWJIZWlnaHQrJ3B4JykuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXZlYWxOZXdJbWFnZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5SW1hZ2VMaXF1aWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIENhbGwgQ3VzdG9tIEpTIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2J5Q3VzdG9tSlMgPT0gJ2Z1bmN0aW9uJykgc2V0VGltZW91dChmdW5jdGlvbigpeyBzYnlDdXN0b21KUygpOyB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieS1zY3JlZW5yZWFkZXInKS5maW5kKCdpbWcnKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbS5zYnlfbmV3JykuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRzZWxmID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vUGhvdG8gbGlua3NcbiAgICAgICAgICAgICAgICAgICAgLy9JZiBsaWdodGJveCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICB2aWRlb0lEID0gJHNlbGYuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2J5RWFnZXJMb2FkaW5nICYmIGZlZWQuY2FuQ3JlYXRlUGxheWVyKCkgJiYgJCgnI3NieV9wbGF5ZXJfJyt2aWRlb0lEKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJ3NieV9wbGF5ZXJfJyt2aWRlb0lELCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9JZDogdmlkZW9JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uU3RhdGVDaGFuZ2UnOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IGRhdGEudGFyZ2V0LmdldFZpZGVvRGF0YSgpWyd2aWRlb19pZCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAhPT0gMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVZpZElEID0galF1ZXJ5KHRoaXMpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykubGVuZ3RoICYmIGpRdWVyeShkYXRhLnRhcmdldC5hKS5hdHRyKCdpZCcpICE9PSBqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZVC5nZXQoJ3NieV9wbGF5ZXJfJytpdGVtVmlkSUQpLnBhdXNlVmlkZW8oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5vbignbW91c2VlbnRlcicsZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm9uVGh1bWJuYWlsRW50ZXIoJCh0aGlzKSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfd3JhcCcpLm9uKCdtb3VzZWxlYXZlJyxmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQub25UaHVtYm5haWxMZWF2ZSgkKHRoaXMpLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAvL2luaXQgY2xpY2tcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5vbignY2xpY2snLGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCFmZWVkLnNldHRpbmdzLmxpZ2h0Ym94RW5hYmxlZCB8fCAoZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQgJiYgZmVlZC5zZXR0aW5ncy5ub0NETikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICYmIChmZWVkLnNldHRpbmdzLm5vQ0ROIHx8ICFmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaHJlZicsJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9JyskKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm9uVGh1bWJuYWlsQ2xpY2soJCh0aGlzKSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBsaWdodGJveFxuICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1zYnktbGlnaHRib3gnLGZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzYnlPcHRpb25zICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2J5T3B0aW9ucy5saWdodGJveFBsYWNlaG9sZGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5hcnJvd1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2hyZWYnLHNieU9wdGlvbnMubGlnaHRib3hQbGFjZWhvbGRlck5hcnJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdocmVmJyxzYnlPcHRpb25zLmxpZ2h0Ym94UGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySXRlbVJldmVhbGVkKCRzZWxmKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBubyBpbmZvXG4gICAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X2luZm9faXRlbScpLnRleHQoKS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2luZm9faXRlbScpLmFkZENsYXNzKCdzYnlfbm9fc3BhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pOyAvL0VuZCAuc2J5X2l0ZW0gZWFjaFxuXG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9IGpRdWVyeSh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySXRlbVJldmVhbGVkKCRzZWxmKTtcbiAgICAgICAgICAgICAgICB9KTsgLy9FbmQgLnNieV9pdGVtIGVhY2hcblxuICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBuZXcgY2xhc3MgYWZ0ZXIgNTAwbXMsIG9uY2UgdGhlIHNvcnRpbmcgaXMgZG9uZVxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0uc2J5X25ldycpLnJlbW92ZUNsYXNzKCdzYnlfbmV3Jyk7XG4gICAgICAgICAgICAgICAgICAgIC8vTG9vcCB0aHJvdWdoIGl0ZW1zIGFuZCByZW1vdmUgY2xhc3MgdG8gcmV2ZWFsIHRoZW1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWUgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgIG51bSA9ICRzZWxmLmZpbmQoJy5zYnlfdHJhbnNpdGlvbicpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV90cmFuc2l0aW9uJykuZWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRzYnlfaXRlbV90cmFuc2l0aW9uX2VsID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzYnlfaXRlbV90cmFuc2l0aW9uX2VsLnJlbW92ZUNsYXNzKCdzYnlfdHJhbnNpdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RpbWUgKz0gMTA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIDEpO1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJJdGVtUmV2ZWFsZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kTmVlZHNSZXNpemluZ1RvU2VydmVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuaW1hZ2VMb2FkRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAkKCcuc2J5X25vX3Jlc3JhaXNlJykucmVtb3ZlQ2xhc3MoJ3NieV9ub19yZXNyYWlzZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBldnQgPSAkLkV2ZW50KCdzYnlhZnRlcmltYWdlc2xvYWRlZCcpO1xuICAgICAgICAgICAgICAgIGV2dC5lbCA9ICQodGhpcy5lbCk7XG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRSZXNpemVkSW1hZ2VzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcy5lbCkuZmluZCgnLnNieV9yZXNpemVkX2ltYWdlX2RhdGEnKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykuaW5kZXhPZigne1wiJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVkSW1hZ2VzID0gSlNPTi5wYXJzZSgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykpO1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoZmVlZC5uZWVkc1Jlc2l6aW5nLmxlbmd0aCA+IDAgJiYgZmVlZC5zZXR0aW5ncy5yZXNpemluZ0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1PZmZzZXQgPSAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NieV9yZXNpemVkX2ltYWdlc19zdWJtaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNfcmVzaXppbmc6IGZlZWQubmVlZHNSZXNpemluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogaXRlbU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWQuc2V0dGluZ3MuZmVlZElELFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGZlZWQubG9jYXRpb25HdWVzcygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdF9pZDogZmVlZC5zZXR0aW5ncy5wb3N0SUQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRzOiBmZWVkLnNldHRpbmdzLnNob3J0Q29kZUF0dHMsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50cmltKCkuaW5kZXhPZigneycpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5kZWJ1Z0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc2J5QWpheChzdWJtaXREYXRhLG9uU3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbmRDaGVja1dQUG9zdHNUb1NlcnZlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmNoZWNrV1BQb3N0cyB8fCBmZWVkLnNldHRpbmdzLnNpbmdsZUNoZWNrUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWRJRCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmZlZWRJRCAhPT0gJ3VuZGVmaW5lZCcgPyBmZWVkLnNldHRpbmdzLmZlZWRJRCA6ICdzYnlfc2luZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICBwb3N0cyA9IGZlZWQubW9zdFJlY2VudGx5TG9hZGVkUG9zdHM7XG4gICAgICAgICAgICAgICAgICAgIGZlZWQubW9zdFJlY2VudGx5TG9hZGVkUG9zdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdzYnlfY2hlY2tfd3Bfc3VibWl0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWRJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHM6IGZlZWQuc2V0dGluZ3Muc2hvcnRDb2RlQXR0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBmZWVkLmxvY2F0aW9uR3Vlc3MoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAhICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfY2Fyb3VzZWwnKSA/ICQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoIDogTWF0aC5mbG9vcigoJCh0aGlzLmVsKS5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGggLyAyKSAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0czogcG9zdHNcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9uU3VjY2VzcyA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnRyaW0oKS5pbmRleE9mKCd7JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJTZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHNieUFqYXgoc3VibWl0RGF0YSxvblN1Y2Nlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlclNlbmRDaGVja1dQUG9zdHNUb1NlcnZlcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2FkTW9yZUJ1dHRvbkluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgICAgICAgICAgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9mb290ZXIgLnNieV9sb2FkX2J0bicpLm9mZigpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlckxvYWRNb3JlQ2xpY2tlZChqUXVlcnkodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICBmZWVkLmdldE5ld1Bvc3RTZXQoKTtcbiAgICAgICAgICAgICAgICB9KTsgLy9FbmQgY2xpY2sgZXZlbnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXROZXdQb3N0U2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciBpdGVtT2Zmc2V0ID0gJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdzYnlfbG9hZF9tb3JlX2NsaWNrZWQnLFxuICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogaXRlbU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICBmZWVkX2lkOiBmZWVkLnNldHRpbmdzLmZlZWRJRCxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRzOiBmZWVkLnNldHRpbmdzLnNob3J0Q29kZUF0dHMsXG4gICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246IGZlZWQubG9jYXRpb25HdWVzcygpLFxuICAgICAgICAgICAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcmVzb2x1dGlvbjogZmVlZC5pbWFnZVJlc29sdXRpb25cbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdmFyIG9uU3VjY2VzcyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnRyaW0oKS5pbmRleE9mKCd7JykgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrV1BQb3N0cyA9IHR5cGVvZiByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgPyByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyA6IGZhbHNlOztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1dQUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLnNldHRpbmdzLmNoZWNrV1BQb3N0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFwcGVuZE5ld1Bvc3RzKHJlc3BvbnNlLmh0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZGRSZXNpemVkSW1hZ2VzKHJlc3BvbnNlLnJlc2l6ZWRJbWFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuYWpheFBvc3RMb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5hamF4UG9zdExvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySW5pdGlhbEltYWdlc0xvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyTmV3SW1hZ2VzTG9hZGVkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZmVlZFN0YXR1cy5zaG91bGRQYWdpbmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQub3V0T2ZQYWdlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9sb2FkX2J0bicpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5zYnlfbm9fanMnKS5yZW1vdmVDbGFzcygnc2J5X25vX2pzJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgc2J5QWpheChzdWJtaXREYXRhLCBvblN1Y2Nlc3MpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwcGVuZE5ld1Bvc3RzOiBmdW5jdGlvbiAobmV3UG9zdHNIdG1sKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAgLnNieV9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCAuc2J5X2l0ZW0nKS5sYXN0KCkuYWZ0ZXIobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5hcHBlbmQobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkUmVzaXplZEltYWdlczogZnVuY3Rpb24gKHJlc2l6ZWRJbWFnZXNUb0FkZCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGltYWdlSUQgaW4gcmVzaXplZEltYWdlc1RvQWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplZEltYWdlc1tpbWFnZUlEXSA9IHJlc2l6ZWRJbWFnZXNUb0FkZFtpbWFnZUlEXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0SW1hZ2VIZWlnaHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uICgkaXRlbSwgaW5kZXgsIGZvcmNlQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgaW1nU3JjU2V0ID0gZmVlZC5nZXRJbWFnZVVybHMoJGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgY3VycmVudFVybCA9ICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsID4gaW1nJykuYXR0cignc3JjJyksXG4gICAgICAgICAgICAgICAgICBjdXJyZW50UmVzID0gMTUwLFxuICAgICAgICAgICAgICAgICAgYXNwZWN0UmF0aW8gPSAxLCAvLyBhbGwgdGh1bWJuYWlscyBhcmUgb3JpZW50ZWQgdGhlIHNhbWUgc28gdGhlIGJlc3QgY2FsY3VsYXRpb24gdXNlcyAxXG4gICAgICAgICAgICAgICAgICBmb3JjZUNoYW5nZSA9IHR5cGVvZiBmb3JjZUNoYW5nZSAhPT0gJ3VuZGVmaW5lZCcgPyBmb3JjZUNoYW5nZSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKCdzYnlfbm9fcmVzcmFpc2UnKSAgIHx8XG4gICAgICAgICAgICAgICAgICAoIWZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuICYmIGZlZWQuc2V0dGluZ3Mubm9DRE4pICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJC5lYWNoKGltZ1NyY1NldCwgZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IGN1cnJlbnRVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRSZXMgPSBwYXJzZUludChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgaW1hZ2UgaGFzIGFscmVhZHkgYmVlbiBjaGFuZ2VkIHRvIGFuIGV4aXN0aW5nIHJlYWwgc291cmNlLCBkb24ndCBmb3JjZSB0aGUgY2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZUNoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy9JbWFnZSByZXNcbiAgICAgICAgICAgICAgICB2YXIgbmV3UmVzID0gNjQwO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZmVlZC5zZXR0aW5ncy5pbWdSZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGh1bWInOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzID0gMTIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ21lZGl1bSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdSZXMgPSAzMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGFyZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzID0gNDgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzID0gNjQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluSW1hZ2VXaWR0aCA9IE1hdGgubWF4KGZlZWQuc2V0dGluZ3MuYXV0b01pblJlcywkaXRlbS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmlubmVyV2lkdGgoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNJbWFnZVJlcGxhY2UgPSBmZWVkLmdldEJlc3RSZXNvbHV0aW9uRm9yQXV0byhtaW5JbWFnZVdpZHRoLCBhc3BlY3RSYXRpbywgJCh0aGlzLmVsKS5maW5kKCdzYnlfaXRlbScpLmZpcnN0KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzSW1hZ2VSZXBsYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0ODA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlcyA9IDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMjA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlcyA9IDMyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1JlcyA9IDEyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobmV3UmVzID4gY3VycmVudFJlcyB8fCBjdXJyZW50VXJsID09PSBmZWVkLnBsYWNlaG9sZGVyVVJMIHx8IGZvcmNlQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYXNvbiA9IGN1cnJlbnRVcmwgPT09IGZlZWQucGxhY2Vob2xkZXJVUkwgPyAnd2FzIHBsYWNlaG9sZGVyJyA6ICd0b28gc21hbGwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3JhaXMgcmVzIGZvciAnICsgY3VycmVudFVybCwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VXJsID0gaW1nU3JjU2V0W25ld1Jlc107XG4gICAgICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsID4gaW1nJykuYXR0cignc3JjJywgbmV3VXJsKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuaGFzQ2xhc3MoJ3NieV9pbWdMaXF1aWRfcmVhZHknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKFwiJyArIG5ld1VybCArICdcIiknKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJ2ltZycpLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCdzYnlfaW1nX2Vycm9yJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ3NieV9pbWdfZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VGcm9tQVBJID0gKCQodGhpcykuYXR0cignc3JjJykuaW5kZXhPZignaS55dGltZy5jb20nKSA+IC0xKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VGcm9tQVBJKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWZ1bGwtcmVzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgnICsgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtZnVsbC1yZXMnKSArICcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3NyYycsICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdocmVmJykgKyAnbWVkaWE/c2l6ZT1sJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICsgJ21lZGlhP3NpemU9bCknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuZmF2b3JMb2NhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY1NldCA9IGZlZWQuZ2V0SW1hZ2VVcmxzKCQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3JjU2V0WzY0MF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3JjJywgc3JjU2V0WzY0MF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgJ3VybCgnICsgc3JjU2V0WzY0MF0gKyAnKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1bmZpeGVkIGVycm9yICcgKyAkKHRoaXMpLmF0dHIoJ3NyYycpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1heWJlUmFpc2VJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uIChqdXN0TmV3KSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgaXRlbXNTZWxlY3RvciA9IHR5cGVvZiBqdXN0TmV3ICE9PSAndW5kZWZpbmVkJyAmJiBqdXN0TmV3ID09PSB0cnVlID8gJy5zYnlfaXRlbS5zYnlfbmV3JyA6ICcuc2J5X2l0ZW0nLFxuICAgICAgICAgICAgICAgICAgZm9yY2VDaGFuZ2UgPSAhZmVlZC5pc0luaXRpYWxpemVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICQoZmVlZC5lbCkuZmluZChpdGVtc1NlbGVjdG9yKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJylcbiAgICAgICAgICAgICAgICAgICAgICAmJiAkKHRoaXMpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWltZy1zcmMtc2V0JykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb24oJCh0aGlzKSxpbmRleCxmb3JjZUNoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTsgLy9FbmQgLnNieV9pdGVtIGVhY2hcbiAgICAgICAgICAgICAgICBmZWVkLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldEJlc3RSZXNvbHV0aW9uRm9yQXV0bzogZnVuY3Rpb24oY29sV2lkdGgsIGFzcGVjdFJhdGlvLCAkaXRlbSkge1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihhc3BlY3RSYXRpbykgfHwgYXNwZWN0UmF0aW8gPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGJlc3RXaWR0aCA9IGNvbFdpZHRoICogYXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgICBiZXN0V2lkdGhSb3VuZGVkID0gTWF0aC5jZWlsKGJlc3RXaWR0aCAvIDEwKSAqIDEwLFxuICAgICAgICAgICAgICAgICAgY3VzdG9tU2l6ZXMgPSBbMTIwLCAzMjAsIDQ4MCwgNjQwXTtcblxuICAgICAgICAgICAgICAgIGlmICgkaXRlbS5oYXNDbGFzcygnc2J5X2hpZ2hsaWdodGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgYmVzdFdpZHRoUm91bmRlZCA9IGJlc3RXaWR0aFJvdW5kZWQgKjI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbVNpemVzLmluZGV4T2YocGFyc2VJbnQoYmVzdFdpZHRoUm91bmRlZCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAkLmVhY2goY3VzdG9tU2l6ZXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPiBwYXJzZUludChiZXN0V2lkdGhSb3VuZGVkKSAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RXaWR0aFJvdW5kZWQgPSBpdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYmVzdFdpZHRoUm91bmRlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoaWRlRXh0cmFJdGVtc0ZvcldpZHRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYXlvdXQgPT09ICdjYXJvdXNlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgICAgICAgICAgbnVtID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICd1bmRlZmluZWQnICYmICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICcnID8gcGFyc2VJbnQoJHNlbGYuYXR0cignZGF0YS1udW0nKSkgOiAxLFxuICAgICAgICAgICAgICAgICAgbnVtbW9iaWxlID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtbnVtbW9iaWxlJykgIT09ICd1bmRlZmluZWQnICYmICRzZWxmLmF0dHIoJ2RhdGEtbnVtbW9iaWxlJykgIT09ICcnID8gcGFyc2VJbnQoJHNlbGYuYXR0cignZGF0YS1udW1tb2JpbGUnKSkgOiBudW07XG5cbiAgICAgICAgICAgICAgICBpZiAoISRzZWxmLmhhc0NsYXNzKCcuc2J5X2xheW91dF9jYXJvdXNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDQ4MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bW1vYmlsZSA8ICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLnNsaWNlKG51bW1vYmlsZSAtICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCkuYWRkQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtIDwgJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuc2xpY2UobnVtIC0gJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoKS5hZGRDbGFzcygnc2J5X251bV9kaWZmX2hpZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldEltYWdlU2l6ZUNsYXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgICAgICAgICAkc2VsZi5yZW1vdmVDbGFzcygnc2J5X3NtYWxsIHNieV9tZWRpdW0nKTtcbiAgICAgICAgICAgICAgICB2YXIgZmVlZFdpZHRoID0gJHNlbGYuaW5uZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgICAgcGhvdG9QYWRkaW5nID0gcGFyc2VJbnQoKCRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLm91dGVyV2lkdGgoKSAtICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLndpZHRoKCkpKSAvIDIsXG4gICAgICAgICAgICAgICAgICBjb2xzID0gdGhpcy5nZXRDb2x1bW5Db3VudCgpLFxuICAgICAgICAgICAgICAgICAgZmVlZFdpZHRoU2Fuc1BhZGRpbmcgPSBmZWVkV2lkdGggLSAocGhvdG9QYWRkaW5nICogKGNvbHMrMikpLFxuICAgICAgICAgICAgICAgICAgY29sV2lkdGggPSAoZmVlZFdpZHRoU2Fuc1BhZGRpbmcgLyBjb2xzKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb2xXaWR0aCA+IDE0MCAmJiBjb2xXaWR0aCA8IDI0MCkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5hZGRDbGFzcygnc2J5X21lZGl1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sV2lkdGggPD0gMTQwKSB7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmFkZENsYXNzKCdzYnlfc21hbGwnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0TWluSW1hZ2VXaWR0aDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfaXRlbSAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWluSW1hZ2VXaWR0aCA9ICQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtIC5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5pbm5lcldpZHRoKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5JbWFnZVdpZHRoID0gMTUwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5pbWdSZXMgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlUmVzb2x1dGlvbiA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2V0dGluZ3MuaW1nUmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0aHVtYic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAxNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtZWRpdW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VSZXNvbHV0aW9uID0gMzIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlUmVzb2x1dGlvbiA9IDY0MDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRJbWFnZVVybHM6IGZ1bmN0aW9uICgkaXRlbSkge1xuICAgICAgICAgICAgICAgIHZhciBzcmNTZXQgPSBKU09OLnBhcnNlKCRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1pbWctc3JjLXNldCcpLnJlcGxhY2UoL1xcXFxcXC8vZywgJy8nKSksXG4gICAgICAgICAgICAgICAgICBpZCA9ICRpdGVtLmF0dHIoJ2lkJykucmVwbGFjZSgnc2J5XycsICcnKS5yZXBsYWNlKCdwbGF5ZXJfJywnJyk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3ZpZGVvJ1xuICAgICAgICAgICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3BlbmRpbmcnXG4gICAgICAgICAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAnZXJyb3InXG4gICAgICAgICAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAndmlkZW8nXG4gICAgICAgICAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAncGVuZGluZycpIHtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF1bJ3NpemVzJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmRTaXplcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydzaXplcyddWydmdWxsJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDY0MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzY0MF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9saW5rX2FyZWEnKS5hdHRyKCAnaHJlZicsIHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2Z1bGwuanBnJyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0ciggJ2RhdGEtZnVsbC1yZXMnLCBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZycgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXVsnbG93J10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDMyMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdsb3cuanBnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5mYXZvckxvY2FsICYmIHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydzaXplcyddWydmdWxsJ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfbGlua19hcmVhJykuYXR0ciggJ2hyZWYnLCBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdsb3cuanBnJyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoICdkYXRhLWZ1bGwtcmVzJywgc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZycgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF1bJ3NpemVzJ11bJ3RodW1iJ10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDE1MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzE1MF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICd0aHVtYi5qcGcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZmF2b3JMb2NhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFNpemVzLmluZGV4T2YoNjQwKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1NldFs2NDBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRTaXplcy5pbmRleE9mKDY0MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTaXplcy5pbmRleE9mKDE1MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICd0aHVtYi5qcGcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZFNpemVzLmluZGV4T2YoMTUwKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1NldFsxNTBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTaXplcy5pbmRleE9mKDY0MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU2V0WzE1MF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgfHwgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAncGVuZGluZycgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnaWQnXSAhPT0gJ2Vycm9yJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRUb05lZWRzUmVzaXppbmcoaWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBzcmNTZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0VmlkZW9JRDogZnVuY3Rpb24gKCRlbCkge1xuICAgICAgICAgICAgICAgIGlmICgkZWwuaGFzQ2xhc3MoJ3NieV9pdGVtJykgfHwgJGVsLmhhc0NsYXNzKCdzYnlfcGxheWVyX2l0ZW0nKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRlbC5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRlbC5jbG9zZXN0KCdzYnlfaXRlbScpLmxlbmd0aCB8fCAkZWwuY2xvc2VzdCgnc2J5X3BsYXllcl9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkdGFyZ2VFbCA9ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpLmxlbmd0aCA/ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpIDogJGVsLmNsb3Nlc3QoJ3NieV9wbGF5ZXJfaXRlbScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICR0YXJnZUVsLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0YXJnZUVsLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkZWwuaGFzQ2xhc3MoJ3NiX3lvdXR1YmUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVsLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5sZW5ndGggJiYgdHlwZW9mICQodGhpcy5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCh0aGlzLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0QXZhdGFyVXJsOiBmdW5jdGlvbiAodXNlcm5hbWUsZmF2b3JUeXBlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXJuYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGF2YWlsYWJsZUF2YXRhcnMgPSB0aGlzLnNldHRpbmdzLmdlbmVyYWwuYXZhdGFycyxcbiAgICAgICAgICAgICAgICAgIGZhdm9yVHlwZSA9IHR5cGVvZiBmYXZvclR5cGUgIT09ICd1bmRlZmluZWQnID8gZmF2b3JUeXBlIDogJ2xvY2FsJztcblxuICAgICAgICAgICAgICAgIGlmIChmYXZvclR5cGUgPT09ICdsb2NhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhdmFpbGFibGVBdmF0YXJzWydMQ0wnK3VzZXJuYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGFyc2VJbnQoYXZhaWxhYmxlQXZhdGFyc1snTENMJyt1c2VybmFtZV0pID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHVzZXJuYW1lICsgJy5qcGcnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdmFpbGFibGVBdmF0YXJzW3VzZXJuYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdmFpbGFibGVBdmF0YXJzW3VzZXJuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF2YWlsYWJsZUF2YXRhcnNbJ0xDTCcrdXNlcm5hbWVdICE9PSAndW5kZWZpbmVkJyAmJiBwYXJzZUludChhdmFpbGFibGVBdmF0YXJzWydMQ0wnK3VzZXJuYW1lXSkgPT09IDEpICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHVzZXJuYW1lICsgJy5qcGcnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFkZFRvTmVlZHNSZXNpemluZzogZnVuY3Rpb24gKGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmVlZHNSZXNpemluZy5pbmRleE9mKGlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZWVkc1Jlc2l6aW5nLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhcHBseUltYWdlTGlxdWlkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHNieUFkZEltZ0xpcXVpZCgpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJHNlbGYuZmluZChcIi5zYnlfcGxheWVyX2l0ZW1cIikuc2J5X2ltZ0xpcXVpZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9pdGVtJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKFwiLnNieV9wbGF5ZXJfaXRlbSAuc2J5X3BsYXllcl92aWRlb190aHVtYm5haWxcIikuc2J5X2ltZ0xpcXVpZCh7ZmlsbDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoXCIuc2J5X2l0ZW0gLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbFwiKS5zYnlfaW1nTGlxdWlkKHtmaWxsOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpc3RlbkZvclZpc2liaWxpdHlDaGFuZ2U6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBzYnlBZGRWaXNpYmlsaXR5TGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mICQodGhpcy5lbCkuZmlsdGVyKCc6aGlkZGVuJykuc2J5VmlzaWJpbGl0eUNoYW5nZWQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBmZWVkIGlzIGluaXRpYWxseSBoaWRkZW4gKGluIGEgdGFiIGZvciBleGFtcGxlKSB0aGVuIGNoZWNrIGZvciB3aGVuIGl0IGJlY29tZXMgdmlzaWJsZSBhbmQgc2V0IHRoZW4gc2V0IHRoZSBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmVsKS5maWx0ZXIoJzpoaWRkZW4nKS5zYnlWaXNpYmlsaXR5Q2hhbmdlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKGVsZW1lbnQsIHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuT25Mb2FkOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0Q29sdW1uQ291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBjb2xzID0gdGhpcy5zZXR0aW5ncy5jb2xzLFxuICAgICAgICAgICAgICAgICAgY29sc21vYmlsZSA9IHRoaXMuc2V0dGluZ3MuY29sc21vYmlsZSxcbiAgICAgICAgICAgICAgICAgIHJldHVybkNvbHMgPSBjb2xzO1xuXG4gICAgICAgICAgICAgICAgc2J5V2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X21vYl9jb2xfYXV0bycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzYnlXaW5kb3dXaWR0aCA8IDY0MCAmJiAocGFyc2VJbnQoY29scykgPiAyICYmIHBhcnNlSW50KGNvbHMpIDwgNykpIHJldHVybkNvbHMgPSAyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2J5V2luZG93V2lkdGggPCA2NDAgJiYgKHBhcnNlSW50KGNvbHMpID4gNiAmJiBwYXJzZUludChjb2xzKSA8IDExKSkgcmV0dXJuQ29scyA9IDQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzYnlXaW5kb3dXaWR0aCA8PSA0ODAgJiYgcGFyc2VJbnQoY29scykgPiAyKSByZXR1cm5Db2xzID0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNieVdpbmRvd1dpZHRoIDw9IDQ4MCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5Db2xzID0gY29sc21vYmlsZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQocmV0dXJuQ29scyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25UaHVtYm5haWxDbGljazogZnVuY3Rpb24oJGNsaWNrZWQsaXNQbGF5ZXIsdmlkZW9JRCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW5DcmVhdGVQbGF5ZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCk7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2N1cnJlbnQnKS5yZW1vdmVDbGFzcygnc2J5X2N1cnJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykuYWRkQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykuYWRkQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICRzZWxmLmFkZENsYXNzKCdzYnlfcGxheWVyX2FkZGVkJykuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpbmQoJy5zYnlfbG9hZGVyJykuc2hvdygpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJyt0aGlzLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykpIDogdmlkZW9JRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVBsYXllcignc2J5X3BsYXllcicrdGhpcy5pbmRleCx2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1BsYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkpIDogdmlkZW9JRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpKSA6IHZpZGVvSUQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBsYXllckluZm8oJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZnRlclZpZGVvQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR2FsbGVyeVBsYXllclN1YnNjcmliZUJ0bigkY2xpY2tlZCk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ3JpZCcpIHx8ICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfY2Fyb3VzZWwnKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHNieUl0ZW0gPSAkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSxcbiAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRzYnlJdGVtKSA6IHZpZGVvSUQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJWaWRlb0NoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfbGlzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2J5SXRlbSA9ICRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpLFxuICAgICAgICAgICAgICAgICAgICAgIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJHNieUl0ZW0pIDogdmlkZW9JRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRzYnlJdGVtLmxlbmd0aCAmJiAhJHNieUl0ZW0uZmluZCgnaWZyYW1lJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2J5SXRlbS5maW5kKCcuc2J5X2xvYWRlcicpLnNob3coKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNieUl0ZW0uYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZyBzYnlfcGxheWVyX2xvYWRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXJfJyt2aWRlb0lELHZpZGVvSUQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5VmlkZW9JblBsYXllcih2aWRlb0lELCRzYnlJdGVtLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFmdGVyVmlkZW9DaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25UaHVtYm5haWxFbnRlcjogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuQ3JlYXRlUGxheWVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpO1xuICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRzYnlJdGVtID0gJGhvdmVyZWQuY2xvc2VzdCgnLnNieV9pdGVtJyksXG4gICAgICAgICAgICAgICAgICAgICAgdmlkZW9JRCA9IHRoaXMuZ2V0VmlkZW9JRCgkc2J5SXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghJHNieUl0ZW0uZmluZCgnaWZyYW1lJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2J5SXRlbS5maW5kKCcuc2J5X2xvYWRlcicpLnNob3coKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNieUl0ZW0uYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZyBzYnlfcGxheWVyX2xvYWRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXJfJyt2aWRlb0lELHZpZGVvSUQsMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25UaHVtYm5haWxMZWF2ZTogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGFuZ2VQbGF5ZXJJbmZvOiBmdW5jdGlvbigkbmV3SXRlbSkge1xuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGxheWVyRWFnZXJMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbGF5ZXIgIT09ICd1bmRlZmluZWQnIHx8ICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhbkNyZWF0ZVBsYXllcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcy5lbCkuZmluZCgnI3NieV9ibGFuaycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYXllckVhZ2VyTG9hZGVkKCkgfHwgKHRoaXMucGxheWVyQVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHx8ICh3aW5kb3cuc2J5QVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBsYXlWaWRlb0luUGxheWVyOiBmdW5jdGlvbih2aWRlb0lELHBsYXllcklEKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBsYXllciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHRoaXMucGxheWVyLmxvYWRWaWRlb0J5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllci5sb2FkVmlkZW9CeUlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIubG9hZFZpZGVvQnlJZCh2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbGF5ZXJJRCAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiB0aGlzLnBsYXllcnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgdGhpcy5wbGF5ZXJzW3BsYXllcklEXSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgICAgICYmIHR5cGVvZiB0aGlzLnBsYXllcnNbcGxheWVySURdLmxvYWRWaWRlb0J5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxheWVyc1twbGF5ZXJJRF0ubG9hZFZpZGVvQnlJZCh2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJWaWRlb0NoYW5nZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5yZW1vdmVDbGFzcygnc2J5X3BsYXllcl9sb2FkaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpIDwgNDgwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wOiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5vZmZzZXQoKS50b3BcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGVHYWxsZXJ5UGxheWVyU3Vic2NyaWJlQnRuOiBmdW5jdGlvbigkY2xpY2tlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1VUkwgPSAkY2xpY2tlZC5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSAvY2hhbm5lbFxcLyguKikkLztcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IGl0ZW1VUkwubWF0Y2gocmVnZXgpO1xuICAgICAgICAgICAgICAgIGlmICggISBtYXRjaCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjaGFubmVsSWQgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpYmVCdG5VUkwgPSAnaHR0cDovL3d3dy55b3V0dWJlLmNvbS9jaGFubmVsLycrIGNoYW5uZWxJZCArJz9zdWJfY29uZmlybWF0aW9uPTEmZmVhdHVyZT1zdWJzY3JpYmUtZW1iZWQtY2xpY2snO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICQoJy5zYnktY2hhbm5lbC1zdWJzY3JpYmUtYnRuIGEnKS5hdHRyKCdocmVmJywgc3Vic2NyaWJlQnRuVVJMKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjaGVja0NvbnNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiB8fCAhdGhpcy5zZXR0aW5ncy5nZHByKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3Mubm9DRE4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQ0xJX0Nvb2tpZSAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBHRFBSIENvb2tpZSBDb25zZW50IGJ5IFdlYlRvZmZlZVxuICAgICAgICAgICAgICAgICAgICBpZiAoQ0xJX0Nvb2tpZS5yZWFkKENMSV9BQ0NFUFRfQ09PS0lFX05BTUUpICE9PSBudWxsKSAge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZWJUb2ZmZWUgbm8gbG9uZ2VyIHVzZXMgdGhpcyBjb29raWUgYnV0IGJlaW5nIGxlZnQgaGVyZSB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENMSV9Db29raWUucmVhZCgnY29va2llbGF3aW5mby1jaGVja2JveC1ub24tbmVjZXNzYXJ5JykgIT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gQ0xJX0Nvb2tpZS5yZWFkKCdjb29raWVsYXdpbmZvLWNoZWNrYm94LW5vbi1uZWNlc3NhcnknKSA9PT0gJ3llcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDTElfQ29va2llLnJlYWQoJ2Nvb2tpZWxhd2luZm8tY2hlY2tib3gtbmVjZXNzYXJ5JykgIT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gQ0xJX0Nvb2tpZS5yZWFkKCdjb29raWVsYXdpbmZvLWNoZWNrYm94LW5lY2Vzc2FyeScpID09PSAneWVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNuQXJncyAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IFwiOyBcIiArIGRvY3VtZW50LmNvb2tpZSxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHZhbHVlLnNwbGl0KCAnOyBjb29raWVfbm90aWNlX2FjY2VwdGVkPScgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA9PT0gMiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwgPSBwYXJ0cy5wb3AoKS5zcGxpdCggJzsnICkuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSAodmFsID09PSAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNvbXBsaWFueiAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gQ29tcGxpYW56IGJ5IFJlYWxseSBTaW1wbGUgUGx1Z2luc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9ICggc2J5Q21wbHpHZXRDb29raWUoJ2NtcGx6X21hcmtldGluZycpID09PSAnYWxsb3cnIHx8IGpRdWVyeSgnYm9keScpLmhhc0NsYXNzKCdjbXBsei1zdGF0dXMtbWFya2V0aW5nJykgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cuQ29va2llYm90ICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIENvb2tpZWJvdCBieSBDeWJvdCBBL1NcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSBDb29raWVib3QuY29uc2VudGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5Cb3JsYWJzQ29va2llICE9PSAndW5kZWZpbmVkJykgeyAvLyBCb3JsYWJzIENvb2tpZSBieSBCb3JsYWJzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gd2luZG93LkJvcmxhYnNDb29raWUuY2hlY2tDb29raWVDb25zZW50KCd5b3V0dWJlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5Y2hlY2tjb25zZW50Jyk7XG4gICAgICAgICAgICAgICAgZXZ0LmZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLm5vQ0ROID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuOyAvLyBHRFBSIG5vdCBlbmFibGVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJDb25zZW50VG9nZ2xlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tDb25zZW50KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5Lm1heWJlQWRkWVRBUEkoKTtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGZlZWQuYXBwbHlGdWxsRmVhdHVyZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSw1MDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmVGZWF0dXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5vQ0ROKSB7XG4gICAgICAgICAgICAgICAgICAgICQoZmVlZC5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVBdHRyKCdkYXRhLXNieS1saWdodGJveCcpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBwbHlGdWxsRmVhdHVyZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcblxuICAgICAgICAgICAgICAgICQoZmVlZC5lbCkuZmluZCgnLnNieV9oZWFkZXJfaW1nIGltZycpLmF0dHIoJ3NyYycsJChmZWVkLmVsKS5maW5kKCcuc2J5X2hlYWRlcl9pbWcnKS5hdHRyKCdkYXRhLWF2YXRhci11cmwnKSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKGZlZWQuZWwpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5hdHRyKCdkYXRhLXNieS1saWdodGJveCcpID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJChmZWVkLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtc2J5LWxpZ2h0Ym94JyxmZWVkLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciAkc2VsZiA9ICQoZmVlZC5lbCk7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9ub19jb25zZW50JykucmVtb3ZlQ2xhc3MoJ3NieV9ub19jb25zZW50Jyk7XG4gICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSAmJiAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF5YmVSYWlzZVNpbmdsZUltYWdlUmVzb2x1dGlvbigkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJyksIDAsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmFkZENsYXNzKCdzYnlfY3VycmVudCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmVlZC5jYW5DcmVhdGVQbGF5ZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvY2F0aW9uR3Vlc3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciAkZmVlZCA9ICQodGhpcy5lbCksXG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9ICdjb250ZW50JztcblxuICAgICAgICAgICAgICAgIGlmICgkZmVlZC5jbG9zZXN0KCdmb290ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSAnZm9vdGVyJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRmZWVkLmNsb3Nlc3QoJy5oZWFkZXInKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIHx8ICRmZWVkLmNsb3Nlc3QoJ2hlYWRlcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9ICdoZWFkZXInO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJGZlZWQuY2xvc2VzdCgnLnNpZGViYXInKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgIHx8ICRmZWVkLmNsb3Nlc3QoJ2FzaWRlJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gJ3NpZGViYXInO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBTYnlGZWVkUHJvKGVsLCBpbmRleCwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIFNieUZlZWQuY2FsbCh0aGlzLCBlbCwgaW5kZXgsIHNldHRpbmdzKTtcblxuICAgICAgICAgICAgdGhpcy5DVEEgPSB7fTtcblxuICAgICAgICAgICAgdGhpcy5pbml0TGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0R2FsbGVyeUxheW91dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEdyaWQoKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENhcm91c2VscygpO1xuICAgICAgICAgICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVybGF5b3V0aW5pdCcpO1xuICAgICAgICAgICAgICAgIGV2dC5mZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmluaXRHcmlkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nICYmIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHBsYXllcklEID0gJ3NieV9sYi1wbGF5ZXInO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3gnKS5hZGRDbGFzcygnc2J5X3ZpZGVvX2xpZ2h0Ym94Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggISB3aW5kb3cuc2J5T3B0aW9ucy5pc1BybyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmFkZENsYXNzKCdzYnlfbGlnaHRib3hfZnJlZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSAkKHRoaXMuZWwpLmZpbmQoJ3NieV9pdGVtJykuZmlyc3QoKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgPSBzYnlPcHRpb25zLmF1dG9wbGF5O1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIGZlZWQuZW1iZWRVUkwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9JZDogdmlkZW9JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsIHZpZGVvSUQsIGRhdGEsICQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5tYXliZUFkZENUQShwbGF5ZXJJRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdENhcm91c2VscyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcyxcbiAgICAgICAgICAgICAgICAgICRzZWxmID0gJCh0aGlzLmVsKTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjb2xzID0gdGhpcy5zZXR0aW5ncy5jb2xzLFxuICAgICAgICAgICAgICAgICAgY29sc21vYmlsZSA9IHRoaXMuc2V0dGluZ3MuY29sc21vYmlsZTtcblxuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmFkZENsYXNzKCdzYnlfY2Fyb3VzZWwnKTtcbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRfYnRuJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wJyA6ICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKSxcbiAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctcmlnaHQnIDogJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLFxuICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b20nIDogJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLFxuICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1sZWZ0JyA6ICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3R5bGUnLCQodGhpcykuYXR0cignc3R5bGUnKS5yZXBsYWNlKCdwYWRkaW5nOiAnKyRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKSwncGFkZGluZzogJyskc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJykgKyAnICFpbXBvcnRhbnQnKSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXJyb3dzID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzBdLFxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbiA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFsxXSxcbiAgICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzJdLFxuICAgICAgICAgICAgICAgICAgdGltZSA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFszXSxcbiAgICAgICAgICAgICAgICAgIGxvb3AgPSBmZWVkLnNldHRpbmdzLmdlbmVyYWwuY2Fyb3VzZWxbNF0sXG4gICAgICAgICAgICAgICAgICByb3dzID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdO1xuICAgICAgICAgICAgICAgIC8vSW5pdGlhdGUgY2Fyb3VzZWxcbiAgICAgICAgICAgICAgICBpZiggIWF1dG9wbGF5ICkgdGltZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLy9TZXQgZGVmYXVsdHMgZm9yIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAgICAgICAgICAgICAgICB2YXIgaXRlbXNUYWJsZXRTbWFsbCA9IGNvbHMsXG4gICAgICAgICAgICAgICAgICBpdGVtc01vYmlsZSA9IGNvbHMsXG4gICAgICAgICAgICAgICAgICBhcnJvd3MgPSBhcnJvd3MgPyAnb25ob3ZlcicgOiAnaGlkZScsXG4gICAgICAgICAgICAgICAgICBhdXRvcGxheSA9IHRpbWUgIT09IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgaGFzMnJvd3MgPSAocm93cyA9PSAyKSxcbiAgICAgICAgICAgICAgICAgIGxvb3AgPSAoIWxvb3ApLFxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhZnRlckluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkoZmVlZC5lbCk7XG4gICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwLnNieV9jYXJvdXNlbCcpLmZhZGVJbigpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwLnNieV9jYXJvdXNlbCAuc2J5X2luZm8sIC5zYnlfb3dsMnJvdy1pdGVtLC5zYnlfaXRlbXNfd3JhcC5zYnlfY2Fyb3VzZWwnKS5mYWRlSW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgIH0sIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkbmF2RWxlbWVudHNXcmFwcGVyID0gJHNlbGYuZmluZCgnLnNieS1vd2wtbmF2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJvd3MgPT09ICdvbmhvdmVyJykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyb3dzID09PSAnYmVsb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGRvdHMgPSAkc2VsZi5maW5kKCcuc2J5LW93bC1kb3RzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2ID0gJHNlbGYuZmluZCgnLnNieS1vd2wtcHJldicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV4dCA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLW5leHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hdiA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLW5hdicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG90ID0gJHNlbGYuZmluZCgnLnNieS1vd2wtZG90JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoRG90cyA9ICRkb3QubGVuZ3RoICogJGRvdC5pbm5lcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoID0gJHNlbGYuaW5uZXJXaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJldi5hZnRlcigkZG90cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuYXYuY3NzKCdwb3NpdGlvbicsICdyZWxhdGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5leHQuY3NzKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpLmNzcygndG9wJywgJy02cHgnKS5jc3MoJ3JpZ2h0JywgTWF0aC5tYXgoKC41ICogJG5hdi5pbm5lcldpZHRoKCkgLSAuNSAqICh3aWR0aERvdHMpIC0gJG5leHQuaW5uZXJXaWR0aCgpIC0gNiksIDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2LmNzcygncG9zaXRpb24nLCAnYWJzb2x1dGUnKS5jc3MoJ3RvcCcsICctNnB4JykuY3NzKCdsZWZ0JywgTWF0aC5tYXgoKC41ICogJG5hdi5pbm5lcldpZHRoKCkgLSAuNSAqICh3aWR0aERvdHMpIC0gJHByZXYuaW5uZXJXaWR0aCgpIC0gNiksIDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcnJvd3MgPT09ICdoaWRlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5hdkVsZW1lbnRzV3JhcHBlci5hZGRDbGFzcygnaGlkZScpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgfSwgMSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy9EaXNhYmxlIG1vYmlsZSBsYXlvdXRcbiAgICAgICAgICAgICAgICBpZiggJHNlbGYuaGFzQ2xhc3MoJ3NieV9tb2JfY29sX2F1dG8nKSApIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNUYWJsZXRTbWFsbCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGlmKCBwYXJzZUludChjb2xzKSAhPSAyICkgaXRlbXNNb2JpbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiggcGFyc2VJbnQoY29scykgPT0gMiApIGl0ZW1zTW9iaWxlID0gMjsgLy9JZiB0aGUgY29scyBhcmUgc2V0IHRvIDIgdGhlbiBkb24ndCBjaGFuZ2UgdG8gMSBjb2wgb24gbW9iaWxlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXNNb2JpbGUgPSBjb2xzbW9iaWxlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY2Fyb3VzZWxBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtczogY29scyxcbiAgICAgICAgICAgICAgICAgICAgbG9vcDogbG9vcCxcbiAgICAgICAgICAgICAgICAgICAgcmV3aW5kOiAhbG9vcCxcbiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5LFxuICAgICAgICAgICAgICAgICAgICBhdXRvcGxheVRpbWVvdXQ6IE1hdGgubWF4KHRpbWUsMjAwMCksXG4gICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5SG92ZXJQYXVzZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbmF2OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBuYXZUZXh0OiBbJzxzdmcgY2xhc3M9XCJzdmctaW5saW5lLS1mYSBmYS1jaGV2cm9uLWxlZnQgZmEtdy0xMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtZmEtcHJvY2Vzc2VkPVwiXCIgZGF0YS1wcmVmaXg9XCJmYVwiIGRhdGEtaWNvbj1cImNoZXZyb24tbGVmdFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMjAgNTEyXCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMzQuNTIgMjM5LjAzTDIyOC44NyA0NC42OWM5LjM3LTkuMzcgMjQuNTctOS4zNyAzMy45NCAwbDIyLjY3IDIyLjY3YzkuMzYgOS4zNiA5LjM3IDI0LjUyLjA0IDMzLjlMMTMxLjQ5IDI1NmwxNTQuMDIgMTU0Ljc1YzkuMzQgOS4zOCA5LjMyIDI0LjU0LS4wNCAzMy45bC0yMi42NyAyMi42N2MtOS4zNyA5LjM3LTI0LjU3IDkuMzctMzMuOTQgMEwzNC41MiAyNzIuOTdjLTkuMzctOS4zNy05LjM3LTI0LjU3IDAtMzMuOTR6XCI+PC9wYXRoPjwvc3ZnPicsICc8c3ZnIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtY2hldnJvbi1yaWdodCBmYS13LTEwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1mYS1wcm9jZXNzZWQ9XCJcIiBkYXRhLXByZWZpeD1cImZhXCIgZGF0YS1pY29uPVwiY2hldnJvbi1yaWdodFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMjAgNTEyXCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMjg1LjQ3NiAyNzIuOTcxTDkxLjEzMiA0NjcuMzE0Yy05LjM3MyA5LjM3My0yNC41NjkgOS4zNzMtMzMuOTQxIDBsLTIyLjY2Ny0yMi42NjdjLTkuMzU3LTkuMzU3LTkuMzc1LTI0LjUyMi0uMDQtMzMuOTAxTDE4OC41MDUgMjU2IDM0LjQ4NCAxMDEuMjU1Yy05LjMzNS05LjM3OS05LjMxNy0yNC41NDQuMDQtMzMuOTAxbDIyLjY2Ny0yMi42NjdjOS4zNzMtOS4zNzMgMjQuNTY5LTkuMzczIDMzLjk0MSAwTDI4NS40NzUgMjM5LjAzYzkuMzczIDkuMzcyIDkuMzczIDI0LjU2OC4wMDEgMzMuOTQxelwiPjwvcGF0aD48L3N2Zz4nXSxcbiAgICAgICAgICAgICAgICAgICAgZG90czogcGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgICAgICAgb3dsMnJvdzogaGFzMnJvd3MsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpdmU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogaXRlbXNNb2JpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICA0ODA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogaXRlbXNUYWJsZXRTbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDY0MDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBjb2xzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgb25Jbml0aWFsaXplOiBhZnRlckluaXRcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnN0cmlwRW1vamlodG1sID0gZnVuY3Rpb24gKCRlbCkge1xuICAgICAgICAgICAgICAgICRlbC5maW5kKCcuZW1vamknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlcGxhY2VXaXRoKCQodGhpcykuYXR0cignYWx0JykpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICRlbC5odG1sKCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmFmdGVySXRlbVJldmVhbGVkID0gZnVuY3Rpb24oJGl0ZW0pIHtcblxuICAgICAgICAgICAgICAgIHZhciBmZWVkID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykubGVuZ3RoICYmICEgJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykuaGFzQ2xhc3MoJ3NieV9mdWxsX2NhcHRpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICAvL0V4cGFuZCBwb3N0XG4gICAgICAgICAgICAgICAgICAgIHZhciAkY2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV9jYXB0aW9uX3dyYXAgLnNieV9jYXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgJGhvdmVyQ2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwgLnNieV9jYXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dF9saW1pdCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGVzY3JpcHRpb25sZW5ndGggIT09ICd1bmRlZmluZWQnID8gcGFyc2VJbnQoZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmRlc2NyaXB0aW9ubGVuZ3RoKSA6IDE1MDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRfbGltaXQgPCAxKSB0ZXh0X2xpbWl0ID0gOTk5OTk7XG4gICAgICAgICAgICAgICAgICAgIC8vU2V0IHRoZSBmdWxsIHRleHQgdG8gYmUgdGhlIGNhcHRpb24gKHVzZWQgaW4gdGhlIGltYWdlIGFsdClcblxuICAgICAgICAgICAgICAgICAgICB2YXIgY2FwdGlvblRleHQgPSB0aGlzLnN0cmlwRW1vamlodG1sKCRpdGVtLmZpbmQoJy5zYnlfY2FwdGlvbicpLmZpcnN0KCkpLFxuICAgICAgICAgICAgICAgICAgICAgIGJyQ291bnQgPSAoY2FwdGlvblRleHQubWF0Y2goLzxicj4vZykgfHwgW10pLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICBickFkanVzdCA9ICh0eXBlb2Ygc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJ3VuZGVmaW5lZCcgfHwgc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJzEnIHx8IHNieU9wdGlvbnMuYnJBZGp1c3QgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbW1lbnQgb3V0IHVubmVjZXNzYXJ5IGNvZGUgdGhhdCBzdHJpcGVzIG91dCB0ZXh0IGxpbWl0IHdpdGggd3JvbmcgdGV4dCBsaW1pdFxuICAgICAgICAgICAgICAgICAgICAvLyByZXBsYWNlIGVtb2ppIHdpdGggYWx0IGZvciBtb3JlIGFjY3VyYXRlIHNob3J0ZW5pbmdcbi8vICAgICAgICAgICAgICAgICAgICAgaWYgKGJyQWRqdXN0ICYmIGJyQ291bnQgPiAwICYmIGNhcHRpb25UZXh0LmluZGV4T2YoJzxicj4nKSA8IHRleHRfbGltaXQpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkc2l6aW5nQ2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGl0bGUnKS5maXJzdCgpO1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbldpZHRoID0gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA+IDIwID8gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA6ICRpdGVtLndpZHRoKCksXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplID0gJHNpemluZ0NhcHRpb24uY3NzKCdmb250LXNpemUnKSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyc1BlckxpbmUgPSBjYXB0aW9uV2lkdGggLyBwYXJzZUludChmb250U2l6ZSkgKiAxLjg1LFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhDaGFyc1BlckxpbmUgPSBNYXRoLmZsb29yKGNoYXJhY3RlcnNQZXJMaW5lKSxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdGVkTWF4TGluZXMgPSBNYXRoLmNlaWwodGV4dF9saW1pdCAvIGNoYXJhY3RlcnNQZXJMaW5lKTtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcGxpdENhcHRpb24gPSBjYXB0aW9uVGV4dC5zcGxpdCgnPGJyPicpLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc0NvbnN1bWVkID0gMCxcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRUZXh0TGltaXQgPSAwO1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVhY2goc3BsaXRDYXB0aW9uLCBmdW5jdGlvbiAoKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzTGVmdCA9IHByb2plY3RlZE1heExpbmVzIC0gbGluZXNDb25zdW1lZDtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZXNMZWZ0ID4gMCkge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc0xpbmVzQ29uc3VtZWQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwodGhpcy5sZW5ndGggLyBjaGFyYWN0ZXJzUGVyTGluZSkpO1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFRleHRMaW1pdCArPSBNYXRoLm1pbih0aGlzLmxlbmd0aCArIDQsIGxpbmVzTGVmdCAqIG1heENoYXJzUGVyTGluZSk7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzQ29uc3VtZWQgKz0gdGhpc0xpbmVzQ29uc3VtZWQ7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X2xpbWl0ID0gYWRqdXN0ZWRUZXh0TGltaXQ7XG4vLyAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNob3J0X3RleHQgPSBjYXB0aW9uVGV4dC5zdWJzdHJpbmcoMCwgdGV4dF9saW1pdCk7XG4gICAgICAgICAgICAgICAgICAgIHNob3J0X3RleHQgPSBjYXB0aW9uVGV4dC5sZW5ndGggPiB0ZXh0X2xpbWl0ID8gc2hvcnRfdGV4dC5zdWJzdHIoMCwgTWF0aC5taW4oc2hvcnRfdGV4dC5sZW5ndGgsIHNob3J0X3RleHQubGFzdEluZGV4T2YoXCIgXCIpKSkgOiBzaG9ydF90ZXh0O1xuXG5cbiAgICAgICAgICAgICAgICAgICAgLy9DdXQgdGhlIHRleHQgYmFzZWQgb24gbGltaXRzIHNldFxuICAgICAgICAgICAgICAgICAgICBpZiAoJGNhcHRpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY2FwdGlvbi5odG1sKHNieUxpbmtpZnkoc2hvcnRfdGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3J0X3RleHQgPT09IGNhcHRpb25UZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhcHRpb24ubmV4dCgnLnNieV9leHBhbmQnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoJGhvdmVyQ2FwdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3ZlckNhcHRpb25UZXh0ID0gc2hvcnRfdGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG9ydF90ZXh0ICE9PSBjYXB0aW9uVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyQ2FwdGlvblRleHQgKz0gJzxzcGFuIGNsYXNzPVwic2J5X21vcmVcIj4uLi48L3NwYW4+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICRob3ZlckNhcHRpb24uaHRtbChob3ZlckNhcHRpb25UZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vU2hvdyB0aGUgJ1NlZSBNb3JlJyBsaW5rIGlmIG5lZWRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FwdGlvblRleHQubGVuZ3RoID4gdGV4dF9saW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9leHBhbmQnKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy9DbGljayBmdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2V4cGFuZCBhJykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGV4cGFuZCA9IGpRdWVyeSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjYXB0aW9uID0gdHlwZW9mICRjYXB0aW9uICE9PSAndW5kZWZpbmVkJyA/ICRjYXB0aW9uIDogJGl0ZW0uZmluZCgnLnNieV9pbmZvIC5zYnlfY2FwdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGlvblRleHQgPSB0eXBlb2YgY2FwdGlvbnRleHQgIT09ICd1bmRlZmluZWQnID8gY2FwdGlvblRleHQgOiAkaXRlbS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS10aXRsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKCdzYnlfY2FwdGlvbl9mdWxsJykgJiYgdHlwZW9mIHNob3J0X3RleHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNhcHRpb24uaHRtbChzaG9ydF90ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5yZW1vdmVDbGFzcygnc2J5X2NhcHRpb25fZnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2FwdGlvbi5odG1sKHNieUxpbmtpZnkoY2FwdGlvblRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5hZGRDbGFzcygnc2J5X2NhcHRpb25fZnVsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwQ1RBKCRpdGVtKTtcblxuICAgICAgICAgICAgICAgIC8vUGhvdG8gbGlua3NcbiAgICAgICAgICAgICAgICAvL0lmIGxpZ2h0Ym94IGlzIGRpc2FibGVkXG4gICAgICAgICAgICAgICAgdmFyIGRpc2FibGVsaWdodGJveCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGlzYWJsZWxpZ2h0Ym94ICE9PSAndW5kZWZpbmVkJyA/IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5kaXNhYmxlbGlnaHRib3ggOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGNhcHRpb25saW5rcyA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmdlbmVyYWwuY2FwdGlvbmxpbmtzICE9PSAndW5kZWZpbmVkJyA/IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXB0aW9ubGlua3MgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiggZGlzYWJsZWxpZ2h0Ym94IHx8IGNhcHRpb25saW5rcyApe1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXB0aW9ubGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNieVVybERldGVjdCh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybFJlZ2V4ID0gL2h0dHBzPzpcXC9cXC8od3d3XFwuKT9bLWEtekEtWjAtOUA6JS5fXFwrfiM9XXsyLDI1Nn1cXC5bYS16XXsyLDZ9XFxiKFstYS16QS1aMC05QDolX1xcKy5+Iz8mLy89XSopL2c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQubWF0Y2godXJsUmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRpdGVtLmZpbmQoJ2ltZycpLmF0dHIoJ2FsdCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCA9ICRpdGVtLmZpbmQoJ2ltZycpLmF0dHIoJ2FsdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgJGl0ZW0uZmluZCgndmlkZW8nKS5hdHRyKCdhbHQnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAgPSAkaXRlbS5maW5kKCd2aWRlbycpLmF0dHIoJ2FsdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gc2J5VXJsRGV0ZWN0KGNhcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZih1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlbS5maW5kKCdhJykuYXR0cignaHJlZicsIHVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9saW5rJykuYWRkQ2xhc3MoJ3NieV9kaXNhYmxlX2xpZ2h0Ym94Jyk7XG4gICAgICAgICAgICAgICAgICAgIC8vSWYgbGlnaHRib3ggaXMgZW5hYmxlZCBhZGQgbGlnaHRib3ggbGlua3NcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkc2J5X3Bob3RvX3dyYXAgPSAkaXRlbS5maW5kKCcuc2J5X3Bob3RvX3dyYXAnKSxcbiAgICAgICAgICAgICAgICAgICAgICAkc2J5X2xpbmsgPSAkc2J5X3Bob3RvX3dyYXAuZmluZCgnLnNieV9saW5rJyk7XG4gICAgICAgICAgICAgICAgICAgIGZlZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJlZmZlY3Q6ICd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZihmZWVkT3B0aW9ucy5ob3ZlcmVmZmVjdCA9PSAnbm9uZScpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXVuY2ggbGlnaHRib3ggb24gY2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICRzYnlfbGluay5jc3MoJ2JhY2tncm91bmQnLCAnbm9uZScpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRzYnlfbGluay5maW5kKCcqJykuaGlkZSgpLmVuZCgpLmZpbmQoJy5zYnlfbGlua19hcmVhJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNieV9waG90b193cmFwLm9uKCdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGUudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb3VzZWVudGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpdGVtLmFkZENsYXNzKCdzYnlfYW5pbWF0ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vdXNlbGVhdmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3MoJ3NieV9hbmltYXRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IHR5cGVvZiAkaXRlbS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uYXR0cignZGF0YS12aWRlby1pZCcpIDogJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3N0UmVjZW50bHlMb2FkZWRQb3N0cy5wdXNoKHZpZGVvSUQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5hZnRlckZlZWRTZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2Fyb3VzZWxBcmdzICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmVsKS5maW5kKCcuc2J5X2Nhcm91c2VsJykuc2J5T3dsQ2Fyb3VzZWwodGhpcy5jYXJvdXNlbEFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdKSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLmVsKS5hZGRDbGFzcygnc2J5X2Nhcm91c2VsXzJfcm93Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc2V0VXBDVEEgPSBmdW5jdGlvbigkaXRlbSx2aWRlb0lEKSB7XG4gICAgICAgICAgICAgICAgLy93aW5kb3cuc2J5LmN0YXNcblxuICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgIT09ICd1bmRlZmluZWQnID8gdmlkZW9JRCA6ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgICB0ZXh0ID0gdHlwZW9mICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXRpdGxlJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdGl0bGUnKSA6ICcnLFxuICAgICAgICAgICAgICAgICAgY3RhSW5DYXB0aW9uID0gd2luZG93LnNieS5jdGFEZXRlY3QodGV4dCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3RhSW5DYXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuY3Rhc1t2aWRlb0lEXSA9IGN0YUluQ2FwdGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmN0YXNbdmlkZW9JRF0gPSB0aGlzLmdldERlZmF1bHRDVEEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmdldERlZmF1bHRDVEEgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS50eXBlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZ2VuZXJhbC5jdGEudHlwZSA9PT0gJ2xpbmsnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAnbGluaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzLnNldHRpbmdzLmdlbmVyYWwuY3RhLmRlZmF1bHRMaW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc2V0dGluZ3MuZ2VuZXJhbC5jdGEuZGVmYXVsdFRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAncmVsYXRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0UG9zdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLmFmdGVyUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZUhlaWdodCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWxsQ1RBRGltZW5zaW9ucygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZVBsYXllcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2l6ZUl0ZW1zKCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnNldEFsbENUQURpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2godGhpcy5DVEEsIGZ1bmN0aW9uKGluZGV4LCBDVEFPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKENUQU9iai5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDVEFPYmouc2V0Q1RBU3R5bGVzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJTZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIgPSBmdW5jdGlvbihyZXNwb25zZSl7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcblxuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VbICQodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpIF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlWyAkKHRoaXMpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zYnlfdmlld3NfY291bnRcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV92aWV3X2NvdW50JykudGV4dChkYXRhLnNieV92aWV3X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9jb21tZW50X2NvdW50JykudGV4dChkYXRhLnNieV9jb21tZW50X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9saWtlX2NvdW50JykudGV4dChkYXRhLnNieV9saWtlX2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5icm9hZGNhc3RfdHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xzX21lc3NhZ2UnKS50ZXh0KGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3N0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2RhdGUnKS5odG1sKGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX2RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ190aW1lc3RhbXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLWxpdmUtZGF0ZScsZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5zYnlfZGVzY3JpcHRpb24gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS10aXRsZScsZGF0YS5zYnlfZGVzY3JpcHRpb24gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV92aWV3X2NvdW50JykudGV4dChkYXRhLnNieV92aWV3X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9jb21tZW50X2NvdW50JykudGV4dChkYXRhLnNieV9jb21tZW50X2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9saWtlX2NvdW50JykudGV4dChkYXRhLnNieV9saWtlX2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5icm9hZGNhc3RfdHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xzX21lc3NhZ2UnKS50ZXh0KGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3N0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2RhdGUnKS5odG1sKGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX2RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ190aW1lc3RhbXAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLWxpdmUtZGF0ZScsZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5YWZ0ZXJjaGVja3Bvc3RzJyk7XG4gICAgICAgICAgICAgICAgZXZ0LmZlZWQgPSB3aW5kb3cuc2J5LmZlZWRzW2luZGV4XTtcbiAgICAgICAgICAgICAgICBldnQucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG5cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuYWZ0ZXJTdGF0ZUNoYW5nZSA9IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsZGF0YSwkcGxheWVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5DVEFbcGxheWVySURdLnRvZ2dsZUNUQSh2aWRlb0lELGRhdGEuZGF0YSwkcGxheWVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGxheWVySW5mbyA9IGZ1bmN0aW9uKCRuZXdJdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9pdGVtJykuZmluZCgnLnNieV9pbmZvJykucmVwbGFjZVdpdGgoXG4gICAgICAgICAgICAgICAgICAkbmV3SXRlbS5maW5kKCcuc2J5X2luZm8nKS5jbG9uZSh0cnVlLHRydWUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAvL3NieV9pbmZvXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLm1heWJlQWRkQ1RBID0gZnVuY3Rpb24ocGxheWVySUQsJGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLkNUQVtwbGF5ZXJJRF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuQ1RBW3BsYXllcklEXSA9IG5ldyBTYnlDVEEocGxheWVySUQsdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIFNieUZlZWRQcm8ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTYnlGZWVkLnByb3RvdHlwZSk7XG5cbiAgICAgICAgZnVuY3Rpb24gU2J5TGlnaHRib3hCdWlsZGVyKCkge31cblxuICAgICAgICBTYnlMaWdodGJveEJ1aWxkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgZ2V0RGF0YTogZnVuY3Rpb24oYSl7XG4gICAgICAgICAgICAgICAgdmFyIGNsb3Nlc3RGZWVkSW5kZXggPSBwYXJzZUludChhLmNsb3Nlc3QoJy5zYl95b3V0dWJlJykuYXR0cignZGF0YS1zYnktaW5kZXgnKS0xKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmZWVkSW5kZXggOiBjbG9zZXN0RmVlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBhLmF0dHIoXCJocmVmXCIpLFxuICAgICAgICAgICAgICAgICAgICB2aWRlb1RpdGxlOiB0eXBlb2YgYS5hdHRyKFwiZGF0YS12aWRlby10aXRsZVwiKSAhPT0gJ3VuZGVmaW5lZCcgPyBhLmF0dHIoXCJkYXRhLXZpZGVvLXRpdGxlXCIpIDogJ1lvdVR1YmUgVmlkZW8nLFxuICAgICAgICAgICAgICAgICAgICB2aWRlbzogYS5hdHRyKFwiZGF0YS12aWRlby1pZFwiKSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElEOiBhLmF0dHIoXCJkYXRhLWNoYW5uZWwtaWRcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCI8ZGl2IGlkPSdzYnlfbGlnaHRib3hPdmVybGF5JyBjbGFzcz0nc2J5X2xpZ2h0Ym94T3ZlcmxheSc+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgaWQ9J3NieV9saWdodGJveCcgY2xhc3M9J3NieV9saWdodGJveCc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1vdXRlckNvbnRhaW5lcic+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1jb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8aW1nIGNsYXNzPSdzYnlfbGItaW1hZ2UnIGFsdD0nTGlnaHRib3ggaW1hZ2UgcGxhY2Vob2xkZXInIHNyYz0nJyAvPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItcGxheWVyIHNieV9sYi1wbGF5ZXItcGxhY2Vob2xkZXInIGlkPSdzYnlfbGItcGxheWVyJz48L2Rpdj5cIiArXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1uYXYnPjxhIGNsYXNzPSdzYnlfbGItcHJldicgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5QcmV2aW91cyBTbGlkZTwvcD48c3Bhbj48L3NwYW4+PC9hPjxhIGNsYXNzPSdzYnlfbGItbmV4dCcgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5OZXh0IFNsaWRlPC9wPjxzcGFuPjwvc3Bhbj48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1sb2FkZXInPjxhIGNsYXNzPSdzYnlfbGItY2FuY2VsJz48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWRhdGFDb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YSc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1kZXRhaWxzJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWNhcHRpb24nPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItaW5mbyc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1udW1iZXInPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1jbG9zZUNvbnRhaW5lcic+PGEgY2xhc3M9J3NieV9sYi1jbG9zZSc+PC9hPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJlZm9yZVBsYXllclNldHVwOiBmdW5jdGlvbigkbGlnaHRib3gsZGF0YSxpbmRleCxhbGJ1bSxmZWVkKXtcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyUGxheWVyU2V0dXA6IGZ1bmN0aW9uICgkbGlnaHRib3gsZGF0YSxpbmRleCxhbGJ1bSkge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyUmVzaXplOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHZhciBwbGF5ZXJIZWlnaHQgPSAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItcGxheWVyJykuaGVpZ2h0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGxheWVySGVpZ2h0ID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHREaWYgPSAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItb3V0ZXJDb250YWluZXInKS5oZWlnaHQoKSAtIHBsYXllckhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodERpZiA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItcGxheWVyJykuY3NzKCd0b3AnLGhlaWdodERpZi8yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXVzZVBsYXllcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyID09PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICAgICAgJiYgdHlwZW9mIFlUID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgWVQuZ2V0KCdzYnlfbGItcGxheWVyJykgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiB0eXBlb2YgWVQuZ2V0KCdzYnlfbGItcGxheWVyJykucGF1c2VWaWRlbyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBZVC5nZXQoJ3NieV9sYi1wbGF5ZXInKS5wYXVzZVZpZGVvKClcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICAgICAgICAmJiB0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLnBhdXNlVmlkZW8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLnBhdXNlVmlkZW8oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBTYnlMaWdodGJveEJ1aWxkZXJQcm8ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTYnlMaWdodGJveEJ1aWxkZXIucHJvdG90eXBlKTtcblxuICAgICAgICBmdW5jdGlvbiBTYnlMaWdodGJveEJ1aWxkZXJQcm8oKSB7XG4gICAgICAgICAgICBTYnlMaWdodGJveEJ1aWxkZXIuY2FsbCh0aGlzKTtcblxuICAgICAgICAgICAgdmFyIGZlZWRDb250YWluZXIgPSAkKCcuc2JfeW91dHViZScpLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxTdWJzY3JpYmVycyA9IGZlZWRDb250YWluZXIuYXR0cignZGF0YS1jaGFubmVsLXN1YnNjcmliZXJzJyksXG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlQnRuVGV4dCA9IGZlZWRDb250YWluZXIuYXR0cignZGF0YS1zdWJzY3JpYmUtYnRuLXRleHQnKSxcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVCdG4gPSBmZWVkQ29udGFpbmVyLmF0dHIoJ2RhdGEtc3Vic2NyaWJlLWJ0bicpO1xuXG4gICAgICAgICAgICB0aGlzLmdldERhdGEgPSBmdW5jdGlvbihhKXtcbiAgICAgICAgICAgICAgICB2YXIgY2xvc2VzdEZlZWRJbmRleCA9IHBhcnNlSW50KGEuY2xvc2VzdCgnLnNiX3lvdXR1YmUnKS5hdHRyKCdkYXRhLXNieS1pbmRleCcpLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZlZWRJbmRleCA6IGNsb3Nlc3RGZWVkSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IGEuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvOiBhLmF0dHIoXCJkYXRhLXZpZGVvLWlkXCIpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYS5hdHRyKFwiZGF0YS10aXRsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9UaXRsZTogdHlwZW9mIGEuYXR0cihcImRhdGEtdmlkZW8tdGl0bGVcIikgIT09ICd1bmRlZmluZWQnID8gYS5hdHRyKFwiZGF0YS12aWRlby10aXRsZVwiKSA6ICdZb3VUdWJlIFZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiBhLmF0dHIoXCJkYXRhLWF2YXRhclwiKSxcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogYS5hdHRyKFwiZGF0YS11c2VyXCIpLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsVVJMOiBhLmF0dHIoXCJkYXRhLXVybFwiKSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElEOiBhLmF0dHIoXCJkYXRhLWNoYW5uZWwtaWRcIiksXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxTdWJzY3JpYmVyczogY2hhbm5lbFN1YnNjcmliZXJzLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVCdG46IHN1YnNjcmliZUJ0bixcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlQnRuVGV4dDogc3Vic2NyaWJlQnRuVGV4dCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiPGRpdiBpZD0nc2J5X2xpZ2h0Ym94T3ZlcmxheScgY2xhc3M9J3NieV9saWdodGJveE92ZXJsYXknPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGlkPSdzYnlfbGlnaHRib3gnIGNsYXNzPSdzYnlfbGlnaHRib3gnPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItb3V0ZXJDb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY29udGFpbmVyJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiX3ZpZGVvX3RodW1ibmFpbF93cmFwJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPHNwYW4gY2xhc3M9J3NieV9sYl92aWRlb190aHVtYm5haWwnPlwiICtcbiAgICAgICAgICAgICAgICAgIFwiPGltZyBjbGFzcz0nc2J5X2xiLWltYWdlJyBhbHQ9J0xpZ2h0Ym94IGltYWdlIHBsYWNlaG9sZGVyJyBzcmM9JycgLz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLXBsYXllcicgaWQ9J3NieV9sYi1wbGF5ZXInPjwvZGl2PlwiICtcbiAgICAgICAgICAgICAgICAgIFwiPC9zcGFuPlwiICtcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIgK1xuXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1uYXYnPjxhIGNsYXNzPSdzYnlfbGItcHJldicgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5QcmV2aW91cyBTbGlkZTwvcD48c3Bhbj48L3NwYW4+PC9hPjxhIGNsYXNzPSdzYnlfbGItbmV4dCcgaHJlZj0nIycgPjxwIGNsYXNzPSdzYnktc2NyZWVucmVhZGVyJz5OZXh0IFNsaWRlPC9wPjxzcGFuPjwvc3Bhbj48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1sb2FkZXInPjxhIGNsYXNzPSdzYnlfbGItY2FuY2VsJz48L2E+PC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWRhdGFDb250YWluZXInPlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YSc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1kZXRhaWxzJz5cIitcbiAgICAgICAgICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWNhcHRpb24nPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItaW5mbyc+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1udW1iZXInPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1jbG9zZUNvbnRhaW5lcic+PGEgY2xhc3M9J3NieV9sYi1jbG9zZSc+PC9hPjwvZGl2PlwiK1xuICAgICAgICAgICAgICAgICAgXCI8L2Rpdj5cIitcbiAgICAgICAgICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgICAgICAgICBcIjwvZGl2PlwiO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5iZWZvcmVQbGF5ZXJTZXR1cCA9IGZ1bmN0aW9uKCRsaWdodGJveCxkYXRhLGluZGV4LGFsYnVtLGZlZWQpe1xuICAgICAgICAgICAgICAgIGlmICghJGxpZ2h0Ym94LmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICRsaWdodGJveC5maW5kKCcuc2J5X2xiX3ZpZGVvX3RodW1ibmFpbF93cmFwJykuYXBwZW5kKCQoZmVlZC5lbCkuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKS5jbG9uZSgpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkbGlnaHRib3guZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKS5yZXBsYWNlV2l0aCgkKGZlZWQuZWwpLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykuY2xvbmUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5hZnRlclBsYXllclNldHVwID0gZnVuY3Rpb24oJGxpZ2h0Ym94LGRhdGEsaW5kZXgsYWxidW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUF2YXRhclVybHMgPSB7fTtcbiAgICAgICAgICAgICAgICAvL0FkZCBsaW5rcyB0byB0aGUgY2FwdGlvblxuICAgICAgICAgICAgICAgIHZhciBzYnlMaWdodGJveENhcHRpb24gPSBkYXRhLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgaGFzaFJlZ2V4ID0gLyhefFxccykjKFxcd1tcXHUwMDQxLVxcdTAwNUFcXHUwMDYxLVxcdTAwN0FcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MjdcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4QTBcXHUwOEEyLVxcdTA4QUNcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk3N1xcdTA5NzktXFx1MDk3RlxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzMzXFx1MEMzNS1cXHUwQzM5XFx1MEMzRFxcdTBDNThcXHUwQzU5XFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENjBcXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxQ1xcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QzEtXFx1MTlDN1xcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdTRFMDAtXFx1OUZDQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjk3XFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBNzkzXFx1QTdBMC1cXHVBN0FBXFx1QTdGOC1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5Q0ZcXHVBQTAwLVxcdUFBMjhcXHVBQTQwLVxcdUFBNDJcXHVBQTQ0LVxcdUFBNEJcXHVBQTYwLVxcdUFBNzZcXHVBQTdBXFx1QUE4MC1cXHVBQUFGXFx1QUFCMVxcdUFBQjVcXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRERcXHVBQUUwLVxcdUFBRUFcXHVBQUYyLVxcdUFBRjRcXHVBQjAxLVxcdUFCMDZcXHVBQjA5LVxcdUFCMEVcXHVBQjExLVxcdUFCMTZcXHVBQjIwLVxcdUFCMjZcXHVBQjI4LVxcdUFCMkVcXHVBQkMwLVxcdUFCRTJcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFEXFx1RkIxRi1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGREMrMC05X10rKXwoI1thLdGPXSspfCgjW1xcdTMwMDAtXFx1MzAzZlxcdTMwNDAtXFx1MzA5ZlxcdTMwYTAtXFx1MzBmZlxcdWZmMDAtXFx1ZmY5ZlxcdTRlMDAtXFx1OWZhZlxcdTM0MDAtXFx1NGRiZl0rKS9naSxcbiAgICAgICAgICAgICAgICAgIHRhZ1JlZ2V4ID0gL1tAXStbQS1aYS16MC05LV9cXC5cIjxdKy9nO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2J5TGlnaHRib3hDYXB0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBzYnlMaWdodGJveENhcHRpb24gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNieUxpZ2h0Ym94Q2FwdGlvbiA9IHNieUxpZ2h0Ym94Q2FwdGlvbi5yZXBsYWNlKC8oPiMpL2csJz4gIycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoc2J5TGlnaHRib3hDYXB0aW9uKSA/IHNieUxpZ2h0Ym94Q2FwdGlvbiA9IHNieUxpbmtpZnkoc2J5TGlnaHRib3hDYXB0aW9uKSA6IHNieUxpZ2h0Ym94Q2FwdGlvbiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzYnlMaWdodGJveEFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2J5TGlnaHRib3hBY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfSwxMDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYXZhdGFySW1hZ2VIdG1sID0gJycsXG4gICAgICAgICAgICAgICAgICAgIFlvdVR1YmVMb2dvID0gJzxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE3XCIgdmlld0JveD1cIjAgMCAxNiAxN1wiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNNi42NjczMiAxMC4wNjM0TDEwLjEyNzMgOC4wNjM0TDYuNjY3MzIgNi4wNjM0VjEwLjA2MzRaTTE0LjM3NCA0Ljg0MzRDMTQuNDYwNyA1LjE1NjczIDE0LjUyMDcgNS41NzY3MyAxNC41NjA3IDYuMTEwMDZDMTQuNjA3MyA2LjY0MzQgMTQuNjI3MyA3LjEwMzQgMTQuNjI3MyA3LjUwMzRMMTQuNjY3MyA4LjA2MzRDMTQuNjY3MyA5LjUyMzQgMTQuNTYwNyAxMC41OTY3IDE0LjM3NCAxMS4yODM0QzE0LjIwNzMgMTEuODgzNCAxMy44MjA3IDEyLjI3MDEgMTMuMjIwNyAxMi40MzY3QzEyLjkwNzMgMTIuNTIzNCAxMi4zMzQgMTIuNTgzNCAxMS40NTQgMTIuNjIzNEMxMC41ODczIDEyLjY3MDEgOS43OTM5OCAxMi42OTAxIDkuMDYwNjUgMTIuNjkwMUw4LjAwMDY1IDEyLjczMDFDNS4yMDczMiAxMi43MzAxIDMuNDY3MzIgMTIuNjIzNCAyLjc4MDY1IDEyLjQzNjdDMi4xODA2NSAxMi4yNzAxIDEuNzkzOTggMTEuODgzNCAxLjYyNzMyIDExLjI4MzRDMS41NDA2NSAxMC45NzAxIDEuNDgwNjUgMTAuNTUwMSAxLjQ0MDY1IDEwLjAxNjdDMS4zOTM5OCA5LjQ4MzQgMS4zNzM5OCA5LjAyMzQgMS4zNzM5OCA4LjYyMzRMMS4zMzM5OCA4LjA2MzRDMS4zMzM5OCA2LjYwMzQgMS40NDA2NSA1LjUzMDA2IDEuNjI3MzIgNC44NDM0QzEuNzkzOTggNC4yNDM0IDIuMTgwNjUgMy44NTY3MyAyLjc4MDY1IDMuNjkwMDZDMy4wOTM5OCAzLjYwMzQgMy42NjczMiAzLjU0MzQgNC41NDczMiAzLjUwMzRDNS40MTM5OCAzLjQ1NjczIDYuMjA3MzIgMy40MzY3MyA2Ljk0MDY1IDMuNDM2NzNMOC4wMDA2NSAzLjM5NjczQzEwLjc5NCAzLjM5NjczIDEyLjUzNCAzLjUwMzQgMTMuMjIwNyAzLjY5MDA2QzEzLjgyMDcgMy44NTY3MyAxNC4yMDczIDQuMjQzNCAxNC4zNzQgNC44NDM0WlwiIGZpbGw9XCJ3aGl0ZVwiLz48L3N2Zz4nLFxuICAgICAgICAgICAgICAgICAgdXNlckh0bWwgPSAnPGRpdiBjbGFzcz1cInNieS1sYi1jaGFubmVsLWhlYWRlclwiPicsXG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVCdG4gPSBkYXRhLnN1YnNjcmliZUJ0biA/ICc8YSBjbGFzcz1cInNieS1sYi1zdWJzY3JpYmUtYnRuXCIgaHJlZj1cImh0dHA6Ly93d3cueW91dHViZS5jb20vY2hhbm5lbC8nKyBkYXRhLmNoYW5uZWxJRCArJz9zdWJfY29uZmlybWF0aW9uPTEmZmVhdHVyZT1zdWJzY3JpYmUtZW1iZWQtY2xpY2tcIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+JysgWW91VHViZUxvZ28gKycgJyArIHN1YnNjcmliZUJ0blRleHQgKyc8L2E+JyA6ICcnO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuYXZhdGFyICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhLmF2YXRhciAhPT0gJycgJiYgdHlwZW9mIGRhdGEudXNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXZhdGFySW1hZ2VIdG1sID0gKGRhdGEuYXZhdGFyICE9PSAndW5kZWZpbmVkJykgPyAnPGltZyBzcmM9XCInK2RhdGEuYXZhdGFyKydcIiAvPicgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBkYXRhLnN1YnNjcmliZUJ0biApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJIdG1sICs9ICc8YSBjbGFzcz1cInNieV9saWdodGJveF91c2VybmFtZVwiIGhyZWY9XCInK2RhdGEuY2hhbm5lbFVSTCsnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIj4nK2F2YXRhckltYWdlSHRtbCsnPHAgY2xhc3M9XCJzYnktbGItY2hhbm5lbC1uYW1lLXdpdGgtc3Vic1wiPjxzcGFuPkAnK2RhdGEudXNlciArICc8L3NwYW4+PHNwYW4+JyArIGRhdGEuY2hhbm5lbFN1YnNjcmliZXJzICArJzwvc3Bhbj48L3A+PC9hPiAnICsgc3Vic2NyaWJlQnRuICsgJzwvZGl2Pic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VySHRtbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS51c2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5hdmFpbGFibGVBdmF0YXJVcmxzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgdGhpcy5hdmFpbGFibGVBdmF0YXJVcmxzW2RhdGEudXNlcl0gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYXZhaWxhYmxlQXZhdGFyVXJsc1tkYXRhLnVzZXJdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhckltYWdlSHRtbCA9ICc8aW1nIHNyYz1cIicrdGhpcy5hdmFpbGFibGVBdmF0YXJVcmxzW2RhdGEudXNlcl0rJ1wiIC8+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNhcHRpb25cIikuaHRtbCggdXNlckh0bWwgKyAnPHNwYW4gY2xhc3M9XCJzYnlfY2FwdGlvbl90ZXh0XCI+JyArIHNieUxpZ2h0Ym94Q2FwdGlvbiArICc8L3NwYW4+JykuZmFkZUluKFwiZmFzdFwiKTtcblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFNieUNUQSh2aWRlb0lELGZlZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52aWRlb0lEID0gdmlkZW9JRDtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2sgPSB0aGlzLnJlbGF0ZWQ7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXJncyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5mZWVkT2JqSW5Db250ZXh0ID0gZmVlZDtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxO1xuICAgICAgICAgICAgdGhpcy5udW1JdGVtcyA9IDQ7XG4gICAgICAgICAgICB0aGlzLm51bUl0ZW1Db2x1bW5zID0gMjtcbiAgICAgICAgICAgIHRoaXMuJHBsYXllciA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgU2J5Q1RBLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgIHRvZ2dsZUNUQTogZnVuY3Rpb24odmlkZW9JRCxkYXRhTnVtLCRwbGF5ZXIpe1xuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllciA9ICRwbGF5ZXIubGVuZ3RoID8gJHBsYXllciA6ICQoJy5zYnlfbGItY29udGFpbmVyJyk7IC8vIHVzZSB0aGUgbGlnaHRib3ggY29udGFpbmVyIGlmIG5vIHBsYXllciBpcyBzZXRcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gZGF0YU51bTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvSUQgPSB2aWRlb0lEO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldENUQSgpO1xuXG4gICAgICAgICAgICAgICAgLy9jdGFEZXRlY3RcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieS5jdGFzW3ZpZGVvSURdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrQXJncyA9IHdpbmRvdy5zYnkuY3Rhc1t2aWRlb0lEXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5jYWxsYmFja0FyZ3MuY2FsbGJhY2s7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgPT09ICdsaW5rJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gdGhpcy5saW5rO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FsbGJhY2sgPT09ICdyZWxhdGVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gdGhpcy5yZWxhdGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YU51bSA9PT0gMiB8fCBkYXRhTnVtID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLmFkZENsYXNzKCdzYnlfY3RhX2lzX29wZW4nKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIGRhdGFOdW0gPT09IDIgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLmFkZENsYXNzKCdzYnlfY3RhX3N0YXRlX3BhdXNlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykuYWRkQ2xhc3MoJ3NieV9jdGFfc3RhdGVfZW5kZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENUQVN0eWxlcygpO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJykucmVtb3ZlQ2xhc3MoJ3NieV9jdGFfaXNfb3BlbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpLmhpZGUoKVxuICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2J5X2N0YV9zdGF0ZV9wYXVzZWQnKVxuICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2J5X2N0YV9zdGF0ZV9lbmRlZCcpXG4gICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzYnlfY3RhX2lzX29wZW4nKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVsYXRlZDogZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgICAgICAgIHZhciBjdGFPYmogPSB0aGlzLFxuICAgICAgICAgICAgICAgICAgZmVlZE9iakluQ29udGV4dCA9IHRoaXMuZmVlZE9iakluQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgPSB3aW5kb3cuc2J5LnNodWZmbGUodGhpcy5nZXRSZWxhdGVkKGZlZWRPYmpJbkNvbnRleHQpKSxcbiAgICAgICAgICAgICAgICAgIGFkZGVkID0gMCxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWRlb0lkID0gdGhpcy52aWRlb0lELFxuICAgICAgICAgICAgICAgICAgJHBsYXllciA9IHRoaXMuJHBsYXllcjtcblxuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcycpXG4gICAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NieV9jdGFfY29sc18nICsgdGhpcy5udW1JdGVtQ29sdW1ucyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm51bUl0ZW1zID0gNDtcbiAgICAgICAgICAgICAgICB0aGlzLm51bUl0ZW1Db2x1bW5zID0gMjtcblxuICAgICAgICAgICAgICAgIGlmICgkcGxheWVyLndpZHRoKCkgPCA0ODApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1JdGVtcyA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtSXRlbUNvbHVtbnMgPSAxXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG51bUl0ZW1zID0gdGhpcy5udW1JdGVtcztcblxuICAgICAgICAgICAgICAgICQuZWFjaChyZWxhdGVkLCBmdW5jdGlvbihpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnZpZGVvSUQgIT09IGN1cnJlbnRWaWRlb0lkICYmIGFkZGVkIDwgbnVtSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRwbGF5ZXIuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMgLnNieV9jdGFfaW5uZXJfd3JhcCcpLmFwcGVuZCgnPGRpdiBjbGFzcz1cInNieV9jdGFfaXRlbVwiPjxkaXYgY2xhc3M9XCJzYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXBcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxhIGNsYXNzPVwic2J5X3ZpZGVvX3RodW1ibmFpbFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIiBkYXRhLXZpZGVvLWlkPVwiJyt2YWx1ZS52aWRlb0lEKydcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJzYnlfdGh1bWJuYWlsX2hvdmVyXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2J5X3RodW1ibmFpbF9ob3Zlcl9pbm5lclwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzYnlfdmlkZW9fdGl0bGVcIj4nK3ZhbHVlLnRpdGxlKyc8L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzYnktc2NyZWVucmVhZGVyXCI+UGxheTwvc3Bhbj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxpbWcgc3JjPVwiJyt2YWx1ZS50aHVtYm5haWwrJ1wiIGFsdD1cIicrdmFsdWUudGl0bGUrJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJzYnlfbG9hZGVyIHNieV9oaWRkZW5cIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTtcIj48L3NwYW4+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcyAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICQodGhpcykub2ZmKCkub24oJ2NsaWNrJyxmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3VmlkZW9JRCA9ICQodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmVlZE9iakluQ29udGV4dC5vblRodW1ibmFpbENsaWNrKCQodGhpcyksdHJ1ZSxuZXdWaWRlb0lEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0YU9iai52aWRlb0lEID0gbmV3VmlkZW9JRDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRSZWxhdGVkOiBmdW5jdGlvbihmZWVkT2JqSW5Db250ZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLmRlZmF1bHRQb3N0c1swXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRmZWVkRWwgPSAkKGZlZWRPYmpJbkNvbnRleHQuZWwpLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRWaWRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICRmZWVkRWwuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzVmlkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lEOiAkKHRoaXMpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICQodGhpcykuYXR0cignZGF0YS12aWRlby10aXRsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWw6ICQodGhpcykuZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtZnVsbC1yZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZFZpZHMucHVzaCh0aGlzVmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWxhdGVkVmlkcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZlZWRPYmpJbkNvbnRleHQuc2V0dGluZ3MuZ2VuZXJhbC5jdGEuZGVmYXVsdFBvc3RzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxpbms6IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHBsYXllciA9IHRoaXMuJHBsYXllcixcbiAgICAgICAgICAgICAgICAgIGZlZWRPYmpJbkNvbnRleHQgPSB0aGlzLmZlZWRPYmpJbkNvbnRleHQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRwbGF5ZXIuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKVxuICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzYnlfY3RhX2NvbHNfJyArIHRoaXMubnVtSXRlbUNvbHVtbnMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5udW1JdGVtcyA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5udW1JdGVtQ29sdW1ucyA9IDE7XG5cbiAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSAnJyxcbiAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3MgPSAnJztcblxuICAgICAgICAgICAgICAgIGlmIChmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLmNvbG9yICE9PSAnJyB8fCBmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLnRleHRDb2xvciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSAnIHN0eWxlPVwiJztcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcyA9ICcgc2J5X2N1c3RvbSc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZlZWRPYmpJbkNvbnRleHQuc2V0dGluZ3MuZ2VuZXJhbC5jdGEuY29sb3IgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSArPSAnYmFja2dyb3VuZDogcmdiKCcgKyBmZWVkT2JqSW5Db250ZXh0LnNldHRpbmdzLmdlbmVyYWwuY3RhLmNvbG9yICsgJyk7JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmVlZE9iakluQ29udGV4dC5zZXR0aW5ncy5nZW5lcmFsLmN0YS50ZXh0Q29sb3IgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSArPSAnY29sb3I6IHJnYignICsgZmVlZE9iakluQ29udGV4dC5zZXR0aW5ncy5nZW5lcmFsLmN0YS50ZXh0Q29sb3IgKyAnKTsnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlICs9ICdcIic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIG9wZW5BdHRzID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGZlZWRPYmpJbkNvbnRleHQuc2V0dGluZ3MuZ2VuZXJhbC5jdGEub3BlblR5cGUgPT09ICduZXd3aW5kb3cnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5BdHRzID0gJyB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lclwiJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzIC5zYnlfY3RhX2lubmVyX3dyYXAnKS5hcHBlbmQoJzxkaXYgY2xhc3M9XCJzYnlfY3RhX2l0ZW1cIj4nICtcbiAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwic2J5X2J0bl93cmFwXCI+JyArXG4gICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInNieV9idG4nK3N0eWxlQ2xhc3MrJ1wiPicgK1xuXG4gICAgICAgICAgICAgICAgICAnPGEgY2xhc3M9XCJzYnlfY3RhX2J1dHRvblwiIGhyZWY9XCInK3RoaXMuY2FsbGJhY2tBcmdzLnVybCsnXCInK29wZW5BdHRzKycgZGF0YS12aWRlby1pZD1cIicrdGhpcy52aWRlb0lEKydcIicrc3R5bGUrJz4nICtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tBcmdzLnRleHQgK1xuICAgICAgICAgICAgICAgICAgJzwvYT4nICtcbiAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcbiAgICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcblxuICAgICAgICAgICAgICAgICAgJzwvZGl2PidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldENUQVN0eWxlczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBsYXllclRvcEhlaWdodCA9IDYwLFxuICAgICAgICAgICAgICAgICAgcGxheWVyQm90dG9tSGVpZ2h0ID0gNDksXG4gICAgICAgICAgICAgICAgICBtaW5pbXVtSGVpZ2h0ID0gOTAsXG4gICAgICAgICAgICAgICAgICBjdGFPdmVybGF5SGVpZ2h0ID0gTWF0aC5tYXgobWluaW11bUhlaWdodCx0aGlzLiRwbGF5ZXIuaGVpZ2h0KCkgLSBwbGF5ZXJUb3BIZWlnaHQgLSBwbGF5ZXJCb3R0b21IZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW1zX3dyYXBzJylcbiAgICAgICAgICAgICAgICAgIC5jc3MoJ2hlaWdodCcsY3RhT3ZlcmxheUhlaWdodCsncHgnKVxuICAgICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCh0aGlzLiRwbGF5ZXIuZmluZCgnaWZyYW1lJykud2lkdGgoKS0yMCkrJ3B4JylcbiAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2J5X2N0YV9jb2xzXycgKyB0aGlzLm51bUl0ZW1Db2x1bW5zKTtcblxuICAgICAgICAgICAgICAgIHZhciBudW1Sb3dzID0gTWF0aC5tYXgoMSx0aGlzLm51bUl0ZW1zL3RoaXMubnVtSXRlbUNvbHVtbnMpLFxuICAgICAgICAgICAgICAgICAgdG90YWxWZXJ0aWNhbFBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRwbGF5ZXIuZmluZCgnLnNieV9jdGFfaXRlbXNfd3JhcHMnKS5jc3MoJ3BhZGRpbmctdG9wJykucmVwbGFjZSgncHgnLCcnKSkgKiAyLFxuICAgICAgICAgICAgICAgICAgbWF4Q1RBSXRlbUhlaWdodCA9IE1hdGgubWF4KG1pbmltdW1IZWlnaHQsKGN0YU92ZXJsYXlIZWlnaHQtdG90YWxWZXJ0aWNhbFBhZGRpbmcpL251bVJvd3MpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy4kcGxheWVyLmZpbmQoJy5zYnlfY3RhX2l0ZW0nKS5jc3MoJ21heC1oZWlnaHQnLG1heENUQUl0ZW1IZWlnaHQrJ3B4JykuZmluZCgnaW1nJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBtYXhDVEFJdGVtSGVpZ2h0KydweCcsXG4gICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICdhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgJ21hcmdpbic6ICdhdXRvJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2J0bl93cmFwJykuY3NzKCdoZWlnaHQnLG1heENUQUl0ZW1IZWlnaHQrJ3B4Jyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzZXRDVEE6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJHBsYXllci5maW5kKCcuc2J5X2N0YV9pdGVtc193cmFwcyAuc2J5X2N0YV9pbm5lcl93cmFwJykuZW1wdHkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHdpbmRvdy5zYnlfaW5pdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2luZG93LnNieSA9IG5ldyBTYnkoKTtcbiAgICAgICAgICAgIHdpbmRvdy5zYnkuY3JlYXRlUGFnZSggd2luZG93LnNieS5jcmVhdGVGZWVkcywge3doZW5GZWVkc0NyZWF0ZWQ6IHdpbmRvdy5zYnkuYWZ0ZXJGZWVkc0NyZWF0ZWR9KTtcbiAgICAgICAgfTtcblxuXG5cbiAgICAgICAgd2luZG93LnNieV9jYXJvdXNlbF9pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbG9nJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzYnlHZXROZXdGZWVkKGZlZWQsaW5kZXgsZmVlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2J5RmVlZFBybyhmZWVkLGluZGV4LGZlZWRPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNieUdldGxpZ2h0Ym94QnVpbGRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2J5TGlnaHRib3hCdWlsZGVyUHJvKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzYnlBamF4KHN1Ym1pdERhdGEsb25TdWNjZXNzKSB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHN1Ym1pdERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2Vzczogb25TdWNjZXNzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNieUlzVG91Y2goKSB7XG4gICAgICAgICAgICBpZiAoXCJvbnRvdWNoc3RhcnRcIiBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNieUNtcGx6R2V0Q29va2llKGNuYW1lKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGNuYW1lICsgXCI9XCI7IC8vQ3JlYXRlIHRoZSBjb29raWUgbmFtZSB2YXJpYWJsZSB3aXRoIGNvb2tpZSBuYW1lIGNvbmNhdGVuYXRlIHdpdGggPSBzaWduXG4gICAgICAgICAgICB2YXIgY0FyciA9IHdpbmRvdy5kb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgLy9DcmVhdGUgY29va2llIGFycmF5IGJ5IHNwbGl0IHRoZSBjb29raWUgYnkgJzsnXG5cbiAgICAgICAgICAgIC8vTG9vcCB0aHJvdWdoIHRoZSBjb29raWVzIGFuZCByZXR1cm4gdGhlIGNvb2tpZSB2YWx1ZSBpZiBpdCBmaW5kIHRoZSBjb29raWUgbmFtZVxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGMgPSBjQXJyW2ldLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAvL0lmIHRoZSBuYW1lIGlzIHRoZSBjb29raWUgc3RyaW5nIGF0IHBvc2l0aW9uIDAsIHdlIGZvdW5kIHRoZSBjb29raWUgYW5kIHJldHVybiB0aGUgY29va2llIHZhbHVlXG4gICAgICAgICAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cblxuXG4gICAgfSkoalF1ZXJ5KTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93LnNieUVhZ2VyTG9hZGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LnNieUVhZ2VyTG9hZGluZyA9IHR5cGVvZiB3aW5kb3cuc2J5T3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuc2J5T3B0aW9ucy5lYWdlcmxvYWQgOiBmYWxzZTtcbiAgICAgICAgaWYgKGpRdWVyeSgnLmVsZW1lbnRvci13aWRnZXQtdmlkZW8nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IHR5cGVvZiBqUXVlcnkoJy5lbGVtZW50b3Itd2lkZ2V0LXZpZGVvJykuYXR0cignZGF0YS1zZXR0aW5ncycpICE9PSAndW5kZWZpbmVkJyA/IEpTT04ucGFyc2UoIGpRdWVyeSgnLmVsZW1lbnRvci13aWRnZXQtdmlkZW8nKS5hdHRyKCdkYXRhLXNldHRpbmdzJykpIDogZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MgJiYgdHlwZW9mIHNldHRpbmdzLnlvdXR1YmVfdXJsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlFYWdlckxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpRdWVyeSgnZGl2W2RhdGEtdmMtdmlkZW8tYmddJykubGVuZ3RoKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9IHR5cGVvZiB3aW5kb3cuc2J5T3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuc2J5T3B0aW9ucy5zZW1pRWFnZXJsb2FkIDogZmFsc2U7XG4gICAgICAgIGlmIChqUXVlcnkoJ2RpdltkYXRhLXZjLXZpZGVvLWJnXScpLmxlbmd0aCB8fCB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nKSB7XG4gICAgICAgICAgICB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKSB7XG4gICAgICAgIGlmICghd2luZG93LnNieVNlbWlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgICAgIHNieV9pbml0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgICAgICQoJyNjb29raWUtbm90aWNlIGEnKS5vbignY2xpY2snLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwxMDAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29va2llIE5vdGljZSBieSBkRmFjdG9yeVxuICAgICAgICAkKCcjY29va2llLWxhdy1pbmZvLWJhciBhJykub24oJ2NsaWNrJyxmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgJC5lYWNoKHdpbmRvdy5zYnkuZmVlZHMsZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLmFmdGVyQ29uc2VudFRvZ2dsZWQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sMTAwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEdEUFIgQ29va2llIENvbnNlbnQgYnkgV2ViVG9mZmVlXG4gICAgICAgICQoJy5jbGktdXNlci1wcmVmZXJlbmNlLWNoZWNrYm94Jykub24oJ2NsaWNrJyxmdW5jdGlvbigpe1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwxMDAwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29va2llYm90XG4gICAgICAgICQod2luZG93KS5vbignQ29va2llYm90T25BY2NlcHQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29tcGxpYW56IGJ5IFJlYWxseSBTaW1wbGUgUGx1Z2luc1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbXBsel9zdGF0dXNfY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmIChlLmRldGFpbC5jYXRlZ29yeSA9PT0gJ21hcmtldGluZycgJiYgZS5kZXRhaWwudmFsdWU9PT0nYWxsb3cnKSB7XG4gICAgICAgICAgICAgICAgJC5lYWNoKHdpbmRvdy5zYnkuZmVlZHMsZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAkKGRvY3VtZW50KS5vbignY21wbHpGaXJlQ2F0ZWdvcmllcycsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCBldmVudC5kZXRhaWwuY2F0ZWdvcnk9PT0nbWFya2V0aW5nJyApIHtcbiAgICAgICAgICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEJvcmxhYnMgQ29va2llIGJ5IEJvcmxhYnNcbiAgICAgICAgJChkb2N1bWVudCkub24oJ2JvcmxhYnMtY29va2llLWNvbnNlbnQtc2F2ZWQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGhpZGUgbm90aWNlIG9uIGNsaWNrIGFuZCBzZW5kIGFqYXggcmVxdWVzdCB0byBiYWNrZW5kXG4gICAgICAgICQoJyNzYnktZnJjZS1oaWRlLWxpY2Vuc2UtZXJyb3InKS5vbignY2xpY2snLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJCgnI3NieS1mci1jZS1saWNlbnNlLWVycm9yJykuc2xpZGVVcCgpO1xuICAgICAgICAgICAgalF1ZXJ5LmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnc2J5X2hpZGVfZnJvbnRlbmRfbGljZW5zZV9lcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIG5vbmNlOiBzYnlPcHRpb25zLm5vbmNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihtc2cpe1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pO1xuXG59IC8vIGlmIHNieV9qc19leGlzdHNcblxuaWYgKHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nKSB7XG4gICAgdmFyIHNieVlTY3JpcHRJZCA9IFwic2J5LXlvdXR1YmUtYXBpXCI7XG4gICAgdmFyIHNieVlTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzYnlZU2NyaXB0SWQpO1xuXG4gICAgaWYgKHNieVlTY3JpcHQgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgIHZhciBmaXJzdFNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpWzBdO1xuXG4gICAgICAgIHRhZy5zcmMgPSBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGlcIjtcbiAgICAgICAgdGFnLmlkID0gc2J5WVNjcmlwdElkO1xuICAgICAgICBmaXJzdFNjcmlwdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0YWcsIGZpcnN0U2NyaXB0KTtcblxuICAgIH1cbn1cblxud2luZG93Lm9uWW91VHViZUlmcmFtZUFQSVJlYWR5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG51bUZlZWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2JfeW91dHViZScpLmxlbmd0aDtcbiAgICBpZiAobnVtRmVlZHMgPiAwKSB7XG4gICAgICAgIGlmICh3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRmVlZHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzW2ldLnBsYXllckFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlBUElSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzYnlfaW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBpZiAod2luZG93LnNieUVhZ2VyTG9hZGluZykge1xuICAgICAgICAgICAgICAgIHZhciBmbGFnTGlnaHRib3ggPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYl95b3V0dWJlJykuZWFjaChmdW5jdGlvbihpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5jcmVhdGVQbGF5ZXIoLHZpZGVvSUQsMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X3BsYXllcl8nK3ZpZGVvSUQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAhPT0gMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykubGVuZ3RoICYmIGpRdWVyeShkYXRhLnRhcmdldC5hKS5hdHRyKCdpZCcpICE9PSBqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVQuZ2V0KCdzYnlfcGxheWVyXycraXRlbVZpZElEKS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5hZGRDbGFzcygnc2J5X3BsYXllcl9sb2FkZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X3BsYXllcicraW5kZXgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0lkOiBqUXVlcnkodGhpcykuZmluZCgnLnNieV9pdGVtJykuZmlyc3QoKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25TdGF0ZUNoYW5nZSc6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5kYXRhICE9PSAxKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5sZW5ndGggJiYgalF1ZXJ5KGRhdGEudGFyZ2V0LmEpLmF0dHIoJ2lkJykgIT09IGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5hdHRyKCdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlULmdldCgnc2J5X3BsYXllcl8nK2l0ZW1WaWRJRCkucGF1c2VWaWRlbygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnTGlnaHRib3ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zYnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1GZWVkczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaV0ucGxheWVyQVBJUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnNieUFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGpRdWVyeSgnLnNiX3lvdXR1YmUnKS5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkodGhpcyk7XG4gICAgICAgICAgICBpZiAoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmF0dHIoJ2lkJyksIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnb25SZWFkeSc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gWVQuZ2V0KCRzZWxmLmZpbmQoJy5zYnlfbGl2ZV9wbGF5ZXInKS5hdHRyKCdpZCcpKS5nZXRWaWRlb0RhdGEoKS52aWRlb19pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyx2aWRlb0lEKS5jc3MoJ3otaW5kZXgnLC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbU9mZnNldCA9ICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAnc2J5X2xpdmVfcmV0cmlldmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvX2lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWRfaWQ6ICRzZWxmLmF0dHIoJ2RhdGEtZmVlZGlkJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0czogJHNlbGYuYXR0cignZGF0YS1zaG9ydGNvZGUtYXR0cycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25TdWNjZXNzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudHJpbSgpLmluZGV4T2YoJ3snKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlZWQgPSB3aW5kb3cuc2J5LmZlZWRzW2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1dQUG9zdHMgPSB0eXBlb2YgcmVzcG9uc2UuZmVlZFN0YXR1cy5jaGVja1dQUG9zdHMgIT09ICd1bmRlZmluZWQnID8gcmVzcG9uc2UuZmVlZFN0YXR1cy5jaGVja1dQUG9zdHMgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1dQUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLnNldHRpbmdzLmNoZWNrV1BQb3N0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFwcGVuZE5ld1Bvc3RzKHJlc3BvbnNlLmh0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZGRSZXNpemVkSW1hZ2VzKHJlc3BvbnNlLnJlc2l6ZWRJbWFnZXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmFmdGVySW5pdGlhbEltYWdlc0xvYWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmZlZWRTdGF0dXMuc2hvdWxkUGFnaW5hdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWVkLm91dE9mUGFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfbG9hZF9idG4nKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlZWQub3V0T2ZQYWdlcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYnlfbm9fanMnKS5yZW1vdmVDbGFzcygnc2J5X25vX2pzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ2FsbGVyeScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmNzcygnb3BhY2l0eScsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5jc3MoJ29wYWNpdHknLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfbG9hZGluZycpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuY3NzKCd6LWluZGV4JywtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYnlPcHRpb25zLmFkbWluQWpheFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzdWJtaXREYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBvblN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZmxhZ0xpZ2h0Ym94KSB7XG4gICAgICAgICAgICBpZiAoIWpRdWVyeSgnI3NieV9sYi1wbGF5ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkoJy5zYl95b3V0dWJlJykuZmlyc3QoKS5hcHBlbmQoJzxkaXYgY2xhc3M9XCJzYnlfbGItcGxheWVyLWxvYWRlZCBzYnlfbGItcGxheWVyXCIgaWQ9XCJzYnlfbGItcGxheWVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X2xiLXBsYXllcicsIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJyxcbiAgICAgICAgICAgICAgICB2aWRlb0lkOiBqUXVlcnkodGhpcykuZmluZCgnLnNieV9pdGVtJykuZmlyc3QoKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyksXG4gICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IHBsYXllcjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlmZWVkYW5keXRyZWFkeScpO1xuICAgICAgICBqUXVlcnkod2luZG93KS50cmlnZ2VyKGV2dCk7XG4gICAgfVxuXG59OyJdLCJuYW1lcyI6WyIkIiwiYSIsImUiLCJtIiwibCIsImciLCJiIiwiaSIsInNieV9qc19leGlzdHMiLCJzYnlfc3VwcG9ydHNfdmlkZW8iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjYW5QbGF5VHlwZSIsIndpbmRvdyIsInNieUxpbmtpZnkiLCJSZWdFeHAiLCJjYWxsYmFjayIsInEiLCJwIiwicHVuY3RfcmVnZXhwIiwidSIsInoiLCJ3IiwidiIsIkEiLCJzIiwiRSIsIkMiLCJ5IiwiRCIsIkIiLCJyIiwieCIsInQiLCJ1bmRlZmluZWQiLCJleGVjIiwibGFzdEluZGV4IiwibGVuZ3RoIiwidGVzdCIsImNoYXJBdCIsInN1YnN0ciIsIm1hdGNoIiwicmVwbGFjZSIsIkYiLCJpbmRleE9mIiwicHVzaCIsInNsaWNlIiwiYXBwbHkiLCJjIiwiZCIsInRoaXMiLCJzZXR0aW5ncyIsIm9wdGlvbnMiLCJleHRlbmQiLCJEZWZhdWx0cyIsIiRlbGVtZW50IiwiX2hhbmRsZXJzIiwiX3BsdWdpbnMiLCJfc3VwcmVzcyIsIl9jdXJyZW50IiwiX3NwZWVkIiwiX2Nvb3JkaW5hdGVzIiwiX2JyZWFrcG9pbnQiLCJfd2lkdGgiLCJfaXRlbXMiLCJfY2xvbmVzIiwiX21lcmdlcnMiLCJfd2lkdGhzIiwiX2ludmFsaWRhdGVkIiwiX3BpcGUiLCJfZHJhZyIsInRpbWUiLCJ0YXJnZXQiLCJwb2ludGVyIiwic3RhZ2UiLCJzdGFydCIsImN1cnJlbnQiLCJkaXJlY3Rpb24iLCJfc3RhdGVzIiwidGFncyIsImluaXRpYWxpemluZyIsImFuaW1hdGluZyIsImRyYWdnaW5nIiwiZWFjaCIsInByb3h5IiwiUGx1Z2lucyIsInRvTG93ZXJDYXNlIiwiV29ya2VycyIsImZpbHRlciIsInJ1biIsInNldHVwIiwiaW5pdGlhbGl6ZSIsIml0ZW1zIiwibG9vcCIsImNlbnRlciIsInJld2luZCIsIm1vdXNlRHJhZyIsInRvdWNoRHJhZyIsInB1bGxEcmFnIiwiZnJlZURyYWciLCJtYXJnaW4iLCJzdGFnZVBhZGRpbmciLCJtZXJnZSIsIm1lcmdlRml0IiwiYXV0b1dpZHRoIiwic3RhcnRQb3NpdGlvbiIsInJ0bCIsInNtYXJ0U3BlZWQiLCJmbHVpZFNwZWVkIiwiZHJhZ0VuZFNwZWVkIiwicmVzcG9uc2l2ZSIsInJlc3BvbnNpdmVSZWZyZXNoUmF0ZSIsInJlc3BvbnNpdmVCYXNlRWxlbWVudCIsImZhbGxiYWNrRWFzaW5nIiwiaW5mbyIsIm5lc3RlZEl0ZW1TZWxlY3RvciIsIml0ZW1FbGVtZW50Iiwic3RhZ2VFbGVtZW50IiwicmVmcmVzaENsYXNzIiwibG9hZGVkQ2xhc3MiLCJsb2FkaW5nQ2xhc3MiLCJydGxDbGFzcyIsInJlc3BvbnNpdmVDbGFzcyIsImRyYWdDbGFzcyIsIml0ZW1DbGFzcyIsInN0YWdlQ2xhc3MiLCJzdGFnZU91dGVyQ2xhc3MiLCJncmFiQ2xhc3MiLCJXaWR0aCIsIkRlZmF1bHQiLCJJbm5lciIsIk91dGVyIiwiVHlwZSIsIkV2ZW50IiwiU3RhdGUiLCJ3aWR0aCIsInJlbGF0aXZlIiwiJHN0YWdlIiwiY2hpbGRyZW4iLCJyZW1vdmUiLCJjc3MiLCJ0b0ZpeGVkIiwiZiIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjZWlsIiwiaCIsIm5vcm1hbGl6ZSIsIm91dGVySFRNTCIsImFkZENsYXNzIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJhYnMiLCJlcSIsInJlbW92ZUF0dHIiLCJpbmRleCIsIm1pbmltdW0iLCJtYXhpbXVtIiwicmVzZXQiLCJhbmltYXRlIiwiY29vcmRpbmF0ZXMiLCJvcCIsInJlbW92ZUNsYXNzIiwiam9pbiIsInByb3RvdHlwZSIsImVudGVyIiwidHJpZ2dlciIsInRvZ2dsZUNsYXNzIiwiaXMiLCJmaW5kIiwicHJlbG9hZEF1dG9XaWR0aEltYWdlcyIsIndyYXAiLCJhcHBlbmQiLCJwYXJlbnQiLCJub3QiLCJyZWZyZXNoIiwiaW52YWxpZGF0ZSIsInJlZ2lzdGVyRXZlbnRIYW5kbGVycyIsImxlYXZlIiwidmlld3BvcnQiLCJOdW1iZXIiLCJhdHRyIiwicHJvcGVydHkiLCJuYW1lIiwidmFsdWUiLCJvcHRpb25zTG9naWMiLCJwcmVwYXJlIiwiY29udGVudCIsImRhdGEiLCJ1cGRhdGUiLCJhbGwiLCJncmVwIiwib25UaHJvdHRsZWRSZXNpemUiLCJjbGVhclRpbWVvdXQiLCJyZXNpemVUaW1lciIsInNldFRpbWVvdXQiLCJvblJlc2l6ZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsInN1cHBvcnQiLCJ0cmFuc2l0aW9uIiwib24iLCJlbmQiLCJvblRyYW5zaXRpb25FbmQiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ0VuZCIsIndoaWNoIiwidHJhbnNmb3JtIiwic3BsaXQiLCJwb3NpdGlvbiIsImxlZnQiLCJ0b3AiLCJzdG9wIiwidHlwZSIsInNwZWVkIiwiRGF0ZSIsImdldFRpbWUiLCJvbmUiLCJkaWZmZXJlbmNlIiwib25EcmFnTW92ZSIsInByZXZlbnREZWZhdWx0Iiwib2ZmIiwiY2xvc2VzdCIsInRyYW5zZm9ybTNkIiwibWFwIiwic3VwcHJlc3MiLCJyZWxlYXNlIiwiaXNOdW1lcmljIiwibWVyZ2VycyIsImNsb25lcyIsImR1cmF0aW9uIiwidG8iLCJuZXh0IiwicHJldiIsInN0b3BQcm9wYWdhdGlvbiIsInNyY0VsZW1lbnQiLCJvcmlnaW5hbFRhcmdldCIsImdldCIsImlubmVyV2lkdGgiLCJkb2N1bWVudEVsZW1lbnQiLCJjbGllbnRXaWR0aCIsImNvbnNvbGUiLCJ3YXJuIiwiZW1wdHkiLCJqUXVlcnkiLCJub2RlVHlwZSIsImFkZEJhY2siLCJhZGQiLCJhZnRlciIsImJlZm9yZSIsInNwbGljZSIsIkltYWdlIiwic3JjIiwiZGVzdHJveSIsInVud3JhcCIsImNvbnRlbnRzIiwicmVtb3ZlRGF0YSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsIml0ZW0iLCJjb3VudCIsImNhbWVsQ2FzZSIsImoiLCJyZWxhdGVkVGFyZ2V0Iiwib25UcmlnZ2VyIiwicmVnaXN0ZXIiLCJjYWxsIiwiY29uY2F0IiwiZXZlbnQiLCJzcGVjaWFsIiwib3dsIiwiX2RlZmF1bHQiLCJuYW1lc3BhY2UiLCJhcmd1bWVudHMiLCJpbkFycmF5Iiwib3JpZ2luYWxFdmVudCIsInRvdWNoZXMiLCJjaGFuZ2VkVG91Y2hlcyIsInBhZ2VYIiwicGFnZVkiLCJjbGllbnRYIiwiY2xpZW50WSIsImlzTmFOIiwicGFyc2VGbG9hdCIsImZuIiwic2J5T3dsQ2Fyb3VzZWwiLCJBcnJheSIsIkNvbnN0cnVjdG9yIiwiWmVwdG8iLCJfY29yZSIsIl9pbnRlcnZhbCIsIl92aXNpYmxlIiwiYXV0b1JlZnJlc2giLCJ3YXRjaCIsImF1dG9SZWZyZXNoSW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiQXV0b1JlZnJlc2giLCJfbG9hZGVkIiwibGF6eUxvYWQiLCJsb2FkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImVsZW1lbnQiLCJ1cmwiLCJvbmxvYWQiLCJvcGFjaXR5IiwiaGFuZGxlcnMiLCJMYXp5IiwiYXV0b0hlaWdodCIsImF1dG9IZWlnaHRDbGFzcyIsInRvQXJyYXkiLCJoZWlnaHQiLCJBdXRvSGVpZ2h0IiwiX3ZpZGVvcyIsIl9wbGF5aW5nIiwidmlkZW8iLCJpc0luRnVsbFNjcmVlbiIsImZldGNoIiwicGxheSIsInZpZGVvSGVpZ2h0IiwidmlkZW9XaWR0aCIsIkVycm9yIiwiaWQiLCJ0aHVtYm5haWwiLCJrIiwiYWpheCIsImpzb25wIiwiZGF0YVR5cGUiLCJzdWNjZXNzIiwidGh1bWJuYWlsX2xhcmdlIiwiZnJhbWVncmFiX3VybCIsImluc2VydEFmdGVyIiwiZnVsbHNjcmVlbkVsZW1lbnQiLCJtb3pGdWxsU2NyZWVuRWxlbWVudCIsIndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50IiwiaGFzQ2xhc3MiLCJWaWRlbyIsImNvcmUiLCJzd2FwcGluZyIsInByZXZpb3VzIiwiYW5pbWF0ZU91dCIsImFuaW1hdGVJbiIsInN3YXAiLCJhbmltYXRpb24iLCJjbGVhciIsIkFuaW1hdGUiLCJfdGltZW91dCIsIl9wYXVzZWQiLCJhdXRvcGxheSIsIl9zZXRBdXRvUGxheUludGVydmFsIiwiYXV0b3BsYXlIb3ZlclBhdXNlIiwicGF1c2UiLCJhdXRvcGxheVRpbWVvdXQiLCJhdXRvcGxheVNwZWVkIiwiX2dldE5leHRUaW1lb3V0IiwiaGlkZGVuIiwiX2luaXRpYWxpemVkIiwiX3BhZ2VzIiwiX2NvbnRyb2xzIiwiX3RlbXBsYXRlcyIsIl9vdmVycmlkZXMiLCJkb3RzRGF0YSIsImRvdENsYXNzIiwicG9wIiwiZHJhdyIsIm5hdiIsIm5hdlRleHQiLCJuYXZTcGVlZCIsIm5hdkVsZW1lbnQiLCJuYXZDb250YWluZXIiLCJuYXZDb250YWluZXJDbGFzcyIsIm5hdkNsYXNzIiwic2xpZGVCeSIsImRvdHNDbGFzcyIsImRvdHMiLCJkb3RzRWFjaCIsImRvdHNTcGVlZCIsImRvdHNDb250YWluZXIiLCIkcmVsYXRpdmUiLCIkcHJldmlvdXMiLCJodG1sIiwiJG5leHQiLCJwcm9wIiwiJGFic29sdXRlIiwib3ZlcmlkZXMiLCJwYWdlIiwic2l6ZSIsImdldFBvc2l0aW9uIiwiTmF2aWdhdGlvbiIsIl9oYXNoZXMiLCJsb2NhdGlvbiIsImhhc2giLCJzdWJzdHJpbmciLCJVUkxoYXNoTGlzdGVuZXIiLCJIYXNoIiwidG9VcHBlckNhc2UiLCJzdHlsZSIsIldlYmtpdFRyYW5zaXRpb24iLCJNb3pUcmFuc2l0aW9uIiwiT1RyYW5zaXRpb24iLCJXZWJraXRBbmltYXRpb24iLCJNb3pBbmltYXRpb24iLCJPQW5pbWF0aW9uIiwiU3RyaW5nIiwiT3dsMnJvdyIsInNjb3BlIiwib3dsMnJvdyIsImJ1aWxkMnJvdyIsIm93bDJyb3dUYXJnZXQiLCJvd2wycm93Q29udGFpbmVyIiwib3dsMnJvd0RpcmVjdGlvbiIsInRoaXNTY29wZSIsImNhcm91c2VsIiwiY2Fyb3VzZWxJdGVtcyIsImFFdmVuRWxlbWVudHMiLCJhT2RkRWxlbWVudHMiLCJsZWZ0VG9yaWdodCIsInVwVG9kb3duIiwibzJ3Q29udGFpbmVyQ2xhc3MiLCJvd2xNYXJnaW4iLCJjYXJvdXNlbEl0ZW1zTGVuZ3RoIiwiZmlyc0FyciIsInNlY29uZEFyciIsInJvd0NvbnRhaW5lciIsImZpcnN0Um93RWxlbWVudCIsIm1hcmdpbkJvdHRvbSIsImV2ZW5FbGVtZW50IiwiU2J5IiwiZmVlZHMiLCJjdGFzIiwic2J5T3B0aW9ucyIsImlzVG91Y2giLCJTYnlGZWVkIiwiZWwiLCJwbGFjZWhvbGRlclVSTCIsInNieSIsInBsYWNlaG9sZGVyIiwibmFycm93UGxheWVyIiwicGxhY2Vob2xkZXJOYXJyb3ciLCJwbGF5ZXJBUElSZWFkeSIsImNvbnNlbnRHaXZlbiIsInBsYXllcnMiLCJtaW5JbWFnZVdpZHRoIiwiaW1hZ2VSZXNvbHV0aW9uIiwicmVzaXplZEltYWdlcyIsIm5lZWRzUmVzaXppbmciLCJvdXRPZlBhZ2VzIiwiaXNJbml0aWFsaXplZCIsIm1vc3RSZWNlbnRseUxvYWRlZFBvc3RzIiwiZW1iZWRVUkwiLCJhbGxvd0Nvb2tpZXMiLCJTYnlGZWVkUHJvIiwiQ1RBIiwiaW5pdExheW91dCIsImluaXRHYWxsZXJ5TGF5b3V0IiwiaW5pdEdyaWQiLCJpbml0Q2Fyb3VzZWxzIiwiZXZ0IiwiZmVlZCIsInNieVNlbWlFYWdlckxvYWRpbmciLCJwbGF5ZXJJRCIsImlzUHJvIiwidmlkZW9JRCIsImZpcnN0Iiwic2J5TGlnaHRib3hQbGF5ZXIiLCJhcmdzIiwiaG9zdCIsInByb3RvY29sIiwidmlkZW9JZCIsInBsYXllclZhcnMiLCJtb2Rlc3RicmFuZGluZyIsInJlbCIsImV2ZW50cyIsImdldFZpZGVvRGF0YSIsImFmdGVyU3RhdGVDaGFuZ2UiLCJtYXliZUFkZENUQSIsIllUIiwiUGxheWVyIiwiJHNlbGYiLCJnZW5lcmFsIiwiY29scyIsImNvbHNtb2JpbGUiLCJhcnJvd3MiLCJwYWdpbmF0aW9uIiwicm93cyIsIml0ZW1zVGFibGV0U21hbGwiLCJpdGVtc01vYmlsZSIsImhhczJyb3dzIiwicGFyc2VJbnQiLCJjYXJvdXNlbEFyZ3MiLCJvbkNoYW5nZSIsImFmdGVyUmVzaXplIiwib25Jbml0aWFsaXplIiwiZmFkZUluIiwiJG5hdkVsZW1lbnRzV3JhcHBlciIsIiRkb3RzIiwiJHByZXYiLCIkbmF2IiwiJGRvdCIsIndpZHRoRG90cyIsImhpZGUiLCJzdHJpcEVtb2ppaHRtbCIsIiRlbCIsInJlcGxhY2VXaXRoIiwiYWZ0ZXJJdGVtUmV2ZWFsZWQiLCIkaXRlbSIsIiRjYXB0aW9uIiwiJGhvdmVyQ2FwdGlvbiIsInRleHRfbGltaXQiLCJkZXNjcmlwdGlvbmxlbmd0aCIsImNhcHRpb25UZXh0Iiwic2hvcnRfdGV4dCIsImJyQWRqdXN0IiwibGFzdEluZGV4T2YiLCJob3ZlckNhcHRpb25UZXh0Iiwic2hvdyIsImNhcHRpb250ZXh0Iiwic2V0VXBDVEEiLCJkaXNhYmxlbGlnaHRib3giLCJjYXB0aW9ubGlua3MiLCJjYXAiLCIkc2J5X3Bob3RvX3dyYXAiLCIkc2J5X2xpbmsiLCJmZWVkT3B0aW9ucyIsImhvdmVyZWZmZWN0IiwiYWZ0ZXJGZWVkU2V0IiwidGV4dCIsImN0YUluQ2FwdGlvbiIsImN0YURldGVjdCIsImdldERlZmF1bHRDVEEiLCJjdGEiLCJkZWZhdWx0TGluayIsImRlZmF1bHRUZXh0IiwicmVsYXRlZCIsImRlZmF1bHRQb3N0cyIsInNldEltYWdlSGVpZ2h0Iiwic2V0SW1hZ2VSZXNvbHV0aW9uIiwibWF5YmVSYWlzZUltYWdlUmVzb2x1dGlvbiIsInNldEltYWdlU2l6ZUNsYXNzIiwic2V0QWxsQ1RBRGltZW5zaW9ucyIsInNpemVQbGF5ZXIiLCJzaXplSXRlbXMiLCJDVEFPYmoiLCJzZXRDVEFTdHlsZXMiLCJhZnRlclNlbmRDaGVja1dQUG9zdHNUb1NlcnZlciIsInJlc3BvbnNlIiwic2J5X3ZpZXdfY291bnQiLCJzYnlfY29tbWVudF9jb3VudCIsInNieV9saWtlX2NvdW50Iiwic2J5X2xpdmVfYnJvYWRjYXN0IiwiYnJvYWRjYXN0X3R5cGUiLCJsaXZlX3N0cmVhbWluZ19zdHJpbmciLCJsaXZlX3N0cmVhbWluZ19kYXRlIiwibGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wIiwic2J5X2Rlc2NyaXB0aW9uIiwiJHBsYXllciIsInRvZ2dsZUNUQSIsImNoYW5nZVBsYXllckluZm8iLCIkbmV3SXRlbSIsImNsb25lIiwiU2J5Q1RBIiwiU2J5TGlnaHRib3hCdWlsZGVyIiwiU2J5TGlnaHRib3hCdWlsZGVyUHJvIiwiZmVlZENvbnRhaW5lciIsImNoYW5uZWxTdWJzY3JpYmVycyIsInN1YnNjcmliZUJ0blRleHQiLCJzdWJzY3JpYmVCdG4iLCJnZXREYXRhIiwiZmVlZEluZGV4IiwibGluayIsInRpdGxlIiwidmlkZW9UaXRsZSIsImF2YXRhciIsInVzZXIiLCJjaGFubmVsVVJMIiwiY2hhbm5lbElEIiwidGVtcGxhdGUiLCJiZWZvcmVQbGF5ZXJTZXR1cCIsIiRsaWdodGJveCIsImFsYnVtIiwiYWZ0ZXJQbGF5ZXJTZXR1cCIsImF2YWlsYWJsZUF2YXRhclVybHMiLCJzYnlMaWdodGJveENhcHRpb24iLCJzYnlMaWdodGJveEFjdGlvbiIsImF2YXRhckltYWdlSHRtbCIsInVzZXJIdG1sIiwiY2FsbGJhY2tBcmdzIiwiZmVlZE9iakluQ29udGV4dCIsInN0YXRlIiwibnVtSXRlbXMiLCJudW1JdGVtQ29sdW1ucyIsInNieUFqYXgiLCJzdWJtaXREYXRhIiwib25TdWNjZXNzIiwiYWRtaW5BamF4VXJsIiwiY3JlYXRlUGFnZSIsImNyZWF0ZUZlZWRzIiwiY3JlYXRlRmVlZHNBcmdzIiwic2J5YWpheHVybCIsImhvc3RuYW1lIiwibWF5YmVBZGRZVEFQSSIsInlvdXR1YmVTY3JpcHRJZCIsImdldEVsZW1lbnRCeUlkIiwidGFnIiwiZmlyc3RTY3JpcHQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVMaWdodGJveCIsInNieV90aW1lciIsImxiQnVpbGRlciIsInNieV9sYl9kZWxheSIsInNieV9jYWxsYmFjayIsInNieV9tcyIsImZhZGVEdXJhdGlvbiIsImZpdEltYWdlc0luVmlld3BvcnQiLCJyZXNpemVEdXJhdGlvbiIsInBvc2l0aW9uRnJvbVRvcCIsInNob3dJbWFnZU51bWJlckxhYmVsIiwiYWx3YXlzU2hvd05hdk9uVG91Y2hEZXZpY2VzIiwid3JhcEFyb3VuZCIsImFsYnVtTGFiZWwiLCJjdXJyZW50SW1hZ2VJbmRleCIsImluaXQiLCJlbmFibGUiLCJidWlsZCIsImN1cnJlbnRUYXJnZXQiLCIkb3ZlcmxheSIsIiRvdXRlckNvbnRhaW5lciIsIiRjb250YWluZXIiLCJjb250YWluZXJUb3BQYWRkaW5nIiwiY29udGFpbmVyUmlnaHRQYWRkaW5nIiwiY29udGFpbmVyQm90dG9tUGFkZGluZyIsImNvbnRhaW5lckxlZnRQYWRkaW5nIiwicGF1c2VQbGF5ZXIiLCJmYWRlT3V0IiwiY2hhbmdlSW1hZ2UiLCJzaXplT3ZlcmxheSIsInZpc2liaWxpdHkiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZGlzYWJsZUtleWJvYXJkTmF2Iiwic2l6ZUNvbnRhaW5lciIsInNob3dJbWFnZSIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsInVwZGF0ZU5hdiIsInVwZGF0ZURldGFpbHMiLCJwcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMiLCJlbmFibGVLZXlib2FyZE5hdiIsImNyZWF0ZUV2ZW50IiwibG9hZFZpZGVvQnlJZCIsImZ1bGxJbWFnZSIsInByZXBlbmQiLCJrZXlib2FyZEFjdGlvbiIsImtleWNvZGUiLCJrZXlDb2RlIiwia2V5IiwiZnJvbUNoYXJDb2RlIiwidG9nZ2xlIiwibGlnaHRib3hDcmVhdGVkIiwiaXNBZG1pbiIsIndoZW5GZWVkc0NyZWF0ZWQiLCJmbGFncyIsIkpTT04iLCJwYXJzZSIsInRyaWdnZXJlZFRlc3QiLCJsb2ciLCJudW0iLCJpbWdSZXMiLCJmZWVkSUQiLCJwb3N0SUQiLCJzaG9ydENvZGVBdHRzIiwicmVzaXppbmdFbmFibGVkIiwiaW1hZ2VMb2FkRW5hYmxlZCIsImRlYnVnRW5hYmxlZCIsImZhdm9yTG9jYWwiLCJhamF4UG9zdExvYWQiLCJjaGVja1dQUG9zdHMiLCJzaW5nbGVDaGVja1Bvc3RzIiwiZ2RwciIsIm5vQ0ROIiwibGlnaHRib3hFbmFibGVkIiwibG9jYXRvciIsImF1dG9NaW5SZXMiLCJzdWJzY3JpYmVCYXJFbmFibGVkIiwic2J5R2V0TmV3RmVlZCIsInNieUFQSVJlYWR5Iiwic2V0UmVzaXplZEltYWdlcyIsImFmdGVyRmVlZHNDcmVhdGVkIiwiJHRoaXNIZWFkZXIiLCJlbmNvZGVIVE1MIiwicmF3IiwidXJsRGV0ZWN0IiwiY3RhTWF0Y2hlcyIsInVybE1hdGNoZXMiLCJ0cmltIiwic2h1ZmZsZSIsImFycmF5IiwidGVtcG9yYXJ5VmFsdWUiLCJyYW5kb21JbmRleCIsImN1cnJlbnRJbmRleCIsImZsb29yIiwicmFuZG9tIiwiY2hlY2tDb25zZW50IiwiZ2V0TmV3UG9zdFNldCIsImFmdGVySW5pdGlhbEltYWdlc0xvYWRlZCIsInNieV9kZWxheSIsIm1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb24iLCJvblRodW1ibmFpbENsaWNrIiwiY2FuQ3JlYXRlUGxheWVyIiwicGxheWVyIiwicGxheWVyRWFnZXJMb2FkZWQiLCJjcmVhdGVQbGF5ZXIiLCJnZXRWaWRlb0lEIiwiZmFkZVRvIiwiaXRlbVZpZElEIiwicGF1c2VWaWRlbyIsInNieUVhZ2VyTG9hZGluZyIsIm5ld1BsYXllciIsImxvYWRNb3JlQnV0dG9uSW5pdCIsImhpZGVFeHRyYUl0ZW1zRm9yV2lkdGgiLCJiZWZvcmVOZXdJbWFnZXNSZXZlYWxlZCIsInJldmVhbE5ld0ltYWdlcyIsImFmdGVyTmV3SW1hZ2VzUmV2ZWFsZWQiLCJhcHBseUZ1bGxGZWF0dXJlcyIsInJlbW92ZUZlYXR1cmVzIiwiYWZ0ZXJMb2FkTW9yZUNsaWNrZWQiLCIkYnV0dG9uIiwiYWZ0ZXJOZXdJbWFnZXNMb2FkZWQiLCIkcGxheWVyVGh1bWJuYWlsIiwicGxheWVyV2lkdGgiLCJuZXdQbGF5ZXJIZWlnaHQiLCJ0aHVtYldpZHRoIiwibmV3VGh1bWJIZWlnaHQiLCJhcHBseUltYWdlTGlxdWlkIiwic2J5Q3VzdG9tSlMiLCJvblRodW1ibmFpbEVudGVyIiwib25UaHVtYm5haWxMZWF2ZSIsImxpZ2h0Ym94UGxhY2Vob2xkZXIiLCJsaWdodGJveFBsYWNlaG9sZGVyTmFycm93IiwiJHNieV9pdGVtX3RyYW5zaXRpb25fZWwiLCJsaXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlIiwic2VuZE5lZWRzUmVzaXppbmdUb1NlcnZlciIsInNlbmRDaGVja1dQUG9zdHNUb1NlcnZlciIsIml0ZW1PZmZzZXQiLCJhY3Rpb24iLCJuZWVkc19yZXNpemluZyIsIm9mZnNldCIsImZlZWRfaWQiLCJsb2NhdGlvbkd1ZXNzIiwicG9zdF9pZCIsImF0dHMiLCJwb3N0cyIsImN1cnJlbnRfcmVzb2x1dGlvbiIsImZlZWRTdGF0dXMiLCJhcHBlbmROZXdQb3N0cyIsImFkZFJlc2l6ZWRJbWFnZXMiLCJzaG91bGRQYWdpbmF0ZSIsIm5ld1Bvc3RzSHRtbCIsImxhc3QiLCJyZXNpemVkSW1hZ2VzVG9BZGQiLCJpbWFnZUlEIiwiZm9yY2VDaGFuZ2UiLCJpbWdTcmNTZXQiLCJnZXRJbWFnZVVybHMiLCJjdXJyZW50VXJsIiwiY3VycmVudFJlcyIsIm5ld1JlcyIsImdldEJlc3RSZXNvbHV0aW9uRm9yQXV0byIsInJlYXNvbiIsIm5ld1VybCIsInNyY1NldCIsImp1c3ROZXciLCJpdGVtc1NlbGVjdG9yIiwiY29sV2lkdGgiLCJhc3BlY3RSYXRpbyIsImJlc3RXaWR0aCIsImJlc3RXaWR0aFJvdW5kZWQiLCJjdXN0b21TaXplcyIsImRvbmUiLCJsYXlvdXQiLCJudW1tb2JpbGUiLCJmZWVkV2lkdGgiLCJwaG90b1BhZGRpbmciLCJnZXRDb2x1bW5Db3VudCIsInNldE1pbkltYWdlV2lkdGgiLCJmb3VuZFNpemVzIiwicmVzaXplZF91cmwiLCJhZGRUb05lZWRzUmVzaXppbmciLCIkdGFyZ2VFbCIsImdldEF2YXRhclVybCIsInVzZXJuYW1lIiwiZmF2b3JUeXBlIiwiYXZhaWxhYmxlQXZhdGFycyIsImF2YXRhcnMiLCJoZWFkIiwic2J5X2ltZ0xpcXVpZCIsIlZFUiIsImJnc19BdmFpbGFibGUiLCJiZ3NfQ2hlY2tSdW5uZWQiLCJkZWZhdWx0cyIsImZpbGwiLCJ2ZXJ0aWNhbEFsaWduIiwiaG9yaXpvbnRhbEFsaWduIiwidXNlQmFja2dyb3VuZFNpemUiLCJ1c2VEYXRhSHRtbEF0dHIiLCJkZWxheSIsImZhZGVJblRpbWUiLCJyZW1vdmVCb3hCYWNrZ3JvdW5kIiwiaGFyZFBpeGVscyIsInJlc3BvbnNpdmVDaGVja1RpbWUiLCJ0aW1lY2hlY2t2aXNpYmlsaXR5Iiwib25TdGFydCIsIm9uRmluaXNoIiwib25JdGVtU3RhcnQiLCJvbkl0ZW1GaW5pc2giLCJvbkl0ZW1FcnJvciIsImdldENvbXB1dGVkU3R5bGUiLCJiYWNrZ3JvdW5kU2l6ZSIsImFjdHVhbFNpemUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsInNpemVPbGQiLCJuIiwibyIsIkJvb2xlYW4iLCJpc0lFIiwiaWVGYWRlSW5EaXNhYmxlZCIsImVuY29kZVVSSSIsImRpc3BsYXkiLCJvdmVyZmxvdyIsIm9uZXJyb3IiLCJjb21wbGV0ZSIsImluamVjdENzcyIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiYXBwZW5kQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsInNieUFkZEltZ0xpcXVpZCIsInJ1bk9uTG9hZCIsImZyZXF1ZW5jeSIsInNieVByZXZpb3VzVmlzaWJpbGl0eSIsImNvbnRhaW5zIiwic2J5Q2hlY2tWaXNpYmlsaXR5Iiwic2J5VmlzaWJpbGl0eUNoYW5nZWQiLCJ2aXNpYmxlIiwicmV0dXJuQ29scyIsInNieVdpbmRvd1dpZHRoIiwiJGNsaWNrZWQiLCJpc1BsYXllciIsInBsYXlWaWRlb0luUGxheWVyIiwiYWZ0ZXJWaWRlb0NoYW5nZWQiLCJ1cGRhdGVHYWxsZXJ5UGxheWVyU3Vic2NyaWJlQnRuIiwiJHNieUl0ZW0iLCIkaG92ZXJlZCIsInN1YnNjcmliZUJ0blVSTCIsIkNMSV9Db29raWUiLCJyZWFkIiwiQ0xJX0FDQ0VQVF9DT09LSUVfTkFNRSIsImNuQXJncyIsInBhcnRzIiwiY29va2llIiwidmFsIiwic2hpZnQiLCJjb21wbGlhbnoiLCJjbmFtZSIsImNBcnIiLCJzYnlDbXBsekdldENvb2tpZSIsIkNvb2tpZWJvdCIsImNvbnNlbnRlZCIsIkJvcmxhYnNDb29raWUiLCJjaGVja0Nvb2tpZUNvbnNlbnQiLCJhZnRlckNvbnNlbnRUb2dnbGVkIiwiJGZlZWQiLCJjcmVhdGUiLCJwbGF5ZXJIZWlnaHQiLCJoZWlnaHREaWYiLCJkYXRhTnVtIiwicmVzZXRDVEEiLCJjdGFPYmoiLCJnZXRSZWxhdGVkIiwiYWRkZWQiLCJjdXJyZW50VmlkZW9JZCIsIm5ld1ZpZGVvSUQiLCIkZmVlZEVsIiwicmVsYXRlZFZpZHMiLCJ0aGlzVmlkIiwic3R5bGVDbGFzcyIsImNvbG9yIiwidGV4dENvbG9yIiwib3BlbkF0dHMiLCJvcGVuVHlwZSIsImN0YU92ZXJsYXlIZWlnaHQiLCJudW1Sb3dzIiwidG90YWxWZXJ0aWNhbFBhZGRpbmciLCJtYXhDVEFJdGVtSGVpZ2h0Iiwic2J5X2luaXQiLCJzYnlfY2Fyb3VzZWxfaW5pdCIsImVhZ2VybG9hZCIsInlvdXR1YmVfdXJsIiwic2VtaUVhZ2VybG9hZCIsInJlYWR5IiwiZGV0YWlsIiwiY2F0ZWdvcnkiLCJzbGlkZVVwIiwibm9uY2UiLCJtc2ciLCJzYnlZU2NyaXB0SWQiLCJvbllvdVR1YmVJZnJhbWVBUElSZWFkeSIsIm51bUZlZWRzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImZsYWdMaWdodGJveCIsInZpZGVvX2lkIl0sInNvdXJjZVJvb3QiOiIifQ==; /** * Observe how the user enters content into the comment form in order to determine whether it's a bot or not. * * Note that no actual input is being saved here, only counts and timings between events. */ ( function() { // Passive event listeners are guaranteed to never call e.preventDefault(), // but they're not supported in all browsers. Use this feature detection // to determine whether they're available for use. var supportsPassive = false; try { var opts = Object.defineProperty( {}, 'passive', { get : function() { supportsPassive = true; } } ); window.addEventListener( 'testPassive', null, opts ); window.removeEventListener( 'testPassive', null, opts ); } catch ( e ) {} function init() { var input_begin = ''; var keydowns = {}; var lastKeyup = null; var lastKeydown = null; var keypresses = []; var modifierKeys = []; var correctionKeys = []; var lastMouseup = null; var lastMousedown = null; var mouseclicks = []; var mousemoveTimer = null; var lastMousemoveX = null; var lastMousemoveY = null; var mousemoveStart = null; var mousemoves = []; var touchmoveCountTimer = null; var touchmoveCount = 0; var lastTouchEnd = null; var lastTouchStart = null; var touchEvents = []; var scrollCountTimer = null; var scrollCount = 0; var correctionKeyCodes = [ 'Backspace', 'Delete', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End', 'PageUp', 'PageDown' ]; var modifierKeyCodes = [ 'Shift', 'CapsLock' ]; var forms = document.querySelectorAll( 'form[method=post]' ); for ( var i = 0; i < forms.length; i++ ) { var form = forms[i]; var formAction = form.getAttribute( 'action' ); // Ignore forms that POST directly to other domains; these could be things like payment forms. if ( formAction ) { // Check that the form is posting to an external URL, not a path. if ( formAction.indexOf( 'http://' ) == 0 || formAction.indexOf( 'https://' ) == 0 ) { if ( formAction.indexOf( 'http://' + window.location.hostname + '/' ) != 0 && formAction.indexOf( 'https://' + window.location.hostname + '/' ) != 0 ) { continue; } } } form.addEventListener( 'submit', function () { var ak_bkp = prepare_timestamp_array_for_request( keypresses ); var ak_bmc = prepare_timestamp_array_for_request( mouseclicks ); var ak_bte = prepare_timestamp_array_for_request( touchEvents ); var ak_bmm = prepare_timestamp_array_for_request( mousemoves ); var input_fields = { // When did the user begin entering any input? 'ak_bib': input_begin, // When was the form submitted? 'ak_bfs': Date.now(), // How many keypresses did they make? 'ak_bkpc': keypresses.length, // How quickly did they press a sample of keys, and how long between them? 'ak_bkp': ak_bkp, // How quickly did they click the mouse, and how long between clicks? 'ak_bmc': ak_bmc, // How many mouseclicks did they make? 'ak_bmcc': mouseclicks.length, // When did they press modifier keys (like Shift or Capslock)? 'ak_bmk': modifierKeys.join( ';' ), // When did they correct themselves? e.g., press Backspace, or use the arrow keys to move the cursor back 'ak_bck': correctionKeys.join( ';' ), // How many times did they move the mouse? 'ak_bmmc': mousemoves.length, // How many times did they move around using a touchscreen? 'ak_btmc': touchmoveCount, // How many times did they scroll? 'ak_bsc': scrollCount, // How quickly did they perform touch events, and how long between them? 'ak_bte': ak_bte, // How many touch events were there? 'ak_btec' : touchEvents.length, // How quickly did they move the mouse, and how long between moves? 'ak_bmm' : ak_bmm }; for ( var field_name in input_fields ) { var field = document.createElement( 'input' ); field.setAttribute( 'type', 'hidden' ); field.setAttribute( 'name', field_name ); field.setAttribute( 'value', input_fields[ field_name ] ); this.appendChild( field ); } }, supportsPassive ? { passive: true } : false ); form.addEventListener( 'keydown', function ( e ) { // If you hold a key down, some browsers send multiple keydown events in a row. // Ignore any keydown events for a key that hasn't come back up yet. if ( e.key in keydowns ) { return; } var keydownTime = ( new Date() ).getTime(); keydowns[ e.key ] = [ keydownTime ]; if ( ! input_begin ) { input_begin = keydownTime; } // In some situations, we don't want to record an interval since the last keypress -- for example, // on the first keypress, or on a keypress after focus has changed to another element. Normally, // we want to record the time between the last keyup and this keydown. But if they press a // key while already pressing a key, we want to record the time between the two keydowns. var lastKeyEvent = Math.max( lastKeydown, lastKeyup ); if ( lastKeyEvent ) { keydowns[ e.key ].push( keydownTime - lastKeyEvent ); } lastKeydown = keydownTime; }, supportsPassive ? { passive: true } : false ); form.addEventListener( 'keyup', function ( e ) { if ( ! ( e.key in keydowns ) ) { // This key was pressed before this script was loaded, or a mouseclick happened during the keypress, or... return; } var keyupTime = ( new Date() ).getTime(); if ( 'TEXTAREA' === e.target.nodeName || 'INPUT' === e.target.nodeName ) { if ( -1 !== modifierKeyCodes.indexOf( e.key ) ) { modifierKeys.push( keypresses.length - 1 ); } else if ( -1 !== correctionKeyCodes.indexOf( e.key ) ) { correctionKeys.push( keypresses.length - 1 ); } else { // ^ Don't record timings for keys like Shift or backspace, since they // typically get held down for longer than regular typing. var keydownTime = keydowns[ e.key ][0]; var keypress = []; // Keypress duration. keypress.push( keyupTime - keydownTime ); // Amount of time between this keypress and the previous keypress. if ( keydowns[ e.key ].length > 1 ) { keypress.push( keydowns[ e.key ][1] ); } keypresses.push( keypress ); } } delete keydowns[ e.key ]; lastKeyup = keyupTime; }, supportsPassive ? { passive: true } : false ); form.addEventListener( "focusin", function ( e ) { lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); form.addEventListener( "focusout", function ( e ) { lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); } document.addEventListener( 'mousedown', function ( e ) { lastMousedown = ( new Date() ).getTime(); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'mouseup', function ( e ) { if ( ! lastMousedown ) { // If the mousedown happened before this script was loaded, but the mouseup happened after... return; } var now = ( new Date() ).getTime(); var mouseclick = []; mouseclick.push( now - lastMousedown ); if ( lastMouseup ) { mouseclick.push( lastMousedown - lastMouseup ); } mouseclicks.push( mouseclick ); lastMouseup = now; // If the mouse has been clicked, don't record this time as an interval between keypresses. lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'mousemove', function ( e ) { if ( mousemoveTimer ) { clearTimeout( mousemoveTimer ); mousemoveTimer = null; } else { mousemoveStart = ( new Date() ).getTime(); lastMousemoveX = e.offsetX; lastMousemoveY = e.offsetY; } mousemoveTimer = setTimeout( function ( theEvent, originalMousemoveStart ) { var now = ( new Date() ).getTime() - 500; // To account for the timer delay. var mousemove = []; mousemove.push( now - originalMousemoveStart ); mousemove.push( Math.round( Math.sqrt( Math.pow( theEvent.offsetX - lastMousemoveX, 2 ) + Math.pow( theEvent.offsetY - lastMousemoveY, 2 ) ) ) ); if ( mousemove[1] > 0 ) { // If there was no measurable distance, then it wasn't really a move. mousemoves.push( mousemove ); } mousemoveStart = null; mousemoveTimer = null; }, 500, e, mousemoveStart ); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchmove', function ( e ) { if ( touchmoveCountTimer ) { clearTimeout( touchmoveCountTimer ); } touchmoveCountTimer = setTimeout( function () { touchmoveCount++; }, 500 ); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchstart', function ( e ) { lastTouchStart = ( new Date() ).getTime(); }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'touchend', function ( e ) { if ( ! lastTouchStart ) { // If the touchstart happened before this script was loaded, but the touchend happened after... return; } var now = ( new Date() ).getTime(); var touchEvent = []; touchEvent.push( now - lastTouchStart ); if ( lastTouchEnd ) { touchEvent.push( lastTouchStart - lastTouchEnd ); } touchEvents.push( touchEvent ); lastTouchEnd = now; // Don't record this time as an interval between keypresses. lastKeydown = null; lastKeyup = null; keydowns = {}; }, supportsPassive ? { passive: true } : false ); document.addEventListener( 'scroll', function ( e ) { if ( scrollCountTimer ) { clearTimeout( scrollCountTimer ); } scrollCountTimer = setTimeout( function () { scrollCount++; }, 500 ); }, supportsPassive ? { passive: true } : false ); } /** * For the timestamp data that is collected, don't send more than `limit` data points in the request. * Choose a random slice and send those. */ function prepare_timestamp_array_for_request( a, limit ) { if ( ! limit ) { limit = 100; } var rv = ''; if ( a.length > 0 ) { var random_starting_point = Math.max( 0, Math.floor( Math.random() * a.length - limit ) ); for ( var i = 0; i < limit && i < a.length; i++ ) { rv += a[ random_starting_point + i ][0]; if ( a[ random_starting_point + i ].length >= 2 ) { rv += "," + a[ random_starting_point + i ][1]; } rv += ";"; } } return rv; } if ( document.readyState !== 'loading' ) { init(); } else { document.addEventListener( 'DOMContentLoaded', init ); } })();;