!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand (o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
jQuery.noConflict();
"undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],function(e){return t(e,window)}):"object"==typeof module&&module.exports?module.exports=t(require("jquery"),window):t(jQuery,window)}(function(s,n){"use strict";function e(e){return 0<=function(e,t){for(var r=/^(\d+)\.(\d+)\.(\d+)/,n=r.exec(e)||[],o=r.exec(t)||[],a=1;a<=3;a++){if(+o[a]<+n[a])return 1;if(+n[a]<+o[a])return-1}return 0}(s.fn.jquery,e)}s.migrateVersion="3.4.1";var t=Object.create(null);s.migrateDisablePatches=function(){for(var e=0;e<arguments.length;e++)t[arguments[e]]=!0},s.migrateEnablePatches=function(){for(var e=0;e<arguments.length;e++)delete t[arguments[e]]},s.migrateIsPatchEnabled=function(e){return!t[e]},n.console&&n.console.log&&(s&&e("3.0.0")&&!e("5.0.0")||n.console.log("JQMIGRATE: jQuery 3.x-4.x REQUIRED"),s.migrateWarnings&&n.console.log("JQMIGRATE: Migrate plugin loaded multiple times"),n.console.log("JQMIGRATE: Migrate is installed"+(s.migrateMute?"":" with logging active")+", version "+s.migrateVersion));var o={};function u(e,t){var r=n.console;!s.migrateIsPatchEnabled(e)||s.migrateDeduplicateWarnings&&o[t]||(o[t]=!0,s.migrateWarnings.push(t+" ["+e+"]"),r&&r.warn&&!s.migrateMute&&(r.warn("JQMIGRATE: "+t),s.migrateTrace&&r.trace&&r.trace()))}function r(e,t,r,n,o){Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return u(n,o),r},set:function(e){u(n,o),r=e}})}function a(e,t,r,n,o){var a=e[t];e[t]=function(){return o&&u(n,o),(s.migrateIsPatchEnabled(n)?r:a||s.noop).apply(this,arguments)}}function c(e,t,r,n,o){if(!o)throw new Error("No warning message provided");return a(e,t,r,n,o),0}function i(e,t,r,n){return a(e,t,r,n),0}s.migrateDeduplicateWarnings=!0,s.migrateWarnings=[],void 0===s.migrateTrace&&(s.migrateTrace=!0),s.migrateReset=function(){o={},s.migrateWarnings.length=0},"BackCompat"===n.document.compatMode&&u("quirks","jQuery is not compatible with Quirks Mode");var d,l,p,f={},m=s.fn.init,y=s.find,h=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,g=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g,v=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;for(d in i(s.fn,"init",function(e){var t=Array.prototype.slice.call(arguments);return s.migrateIsPatchEnabled("selector-empty-id")&&"string"==typeof e&&"#"===e&&(u("selector-empty-id","jQuery('#') is not a valid selector"),t[0]=[]),m.apply(this,t)},"selector-empty-id"),s.fn.init.prototype=s.fn,i(s,"find",function(t){var r=Array.prototype.slice.call(arguments);if("string"==typeof t&&h.test(t))try{n.document.querySelector(t)}catch(e){t=t.replace(g,function(e,t,r,n){return"["+t+r+'"'+n+'"]'});try{n.document.querySelector(t),u("selector-hash","Attribute selector with '#' must be quoted: "+r[0]),r[0]=t}catch(e){u("selector-hash","Attribute selector with '#' was not fixed: "+r[0])}}return y.apply(this,r)},"selector-hash"),y)Object.prototype.hasOwnProperty.call(y,d)&&(s.find[d]=y[d]);c(s.fn,"size",function(){return this.length},"size","jQuery.fn.size() is deprecated and removed; use the .length property"),c(s,"parseJSON",function(){return JSON.parse.apply(null,arguments)},"parseJSON","jQuery.parseJSON is deprecated; use JSON.parse"),c(s,"holdReady",s.holdReady,"holdReady","jQuery.holdReady is deprecated"),c(s,"unique",s.uniqueSort,"unique","jQuery.unique is deprecated; use jQuery.uniqueSort"),r(s.expr,"filters",s.expr.pseudos,"expr-pre-pseudos","jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"),r(s.expr,":",s.expr.pseudos,"expr-pre-pseudos","jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"),e("3.1.1")&&c(s,"trim",function(e){return null==e?"":(e+"").replace(v,"$1")},"trim","jQuery.trim is deprecated; use String.prototype.trim"),e("3.2.0")&&(c(s,"nodeName",function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},"nodeName","jQuery.nodeName is deprecated"),c(s,"isArray",Array.isArray,"isArray","jQuery.isArray is deprecated; use Array.isArray")),e("3.3.0")&&(c(s,"isNumeric",function(e){var t=typeof e;return("number"==t||"string"==t)&&!isNaN(e-parseFloat(e))},"isNumeric","jQuery.isNumeric() is deprecated"),s.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){f["[object "+t+"]"]=t.toLowerCase()}),c(s,"type",function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?f[Object.prototype.toString.call(e)]||"object":typeof e},"type","jQuery.type is deprecated"),c(s,"isFunction",function(e){return"function"==typeof e},"isFunction","jQuery.isFunction() is deprecated"),c(s,"isWindow",function(e){return null!=e&&e===e.window},"isWindow","jQuery.isWindow() is deprecated")),s.ajax&&(l=s.ajax,p=/(=)\?(?=&|$)|\?\?/,i(s,"ajax",function(){var e=l.apply(this,arguments);return e.promise&&(c(e,"success",e.done,"jqXHR-methods","jQXHR.success is deprecated and removed"),c(e,"error",e.fail,"jqXHR-methods","jQXHR.error is deprecated and removed"),c(e,"complete",e.always,"jqXHR-methods","jQXHR.complete is deprecated and removed")),e},"jqXHR-methods"),e("4.0.0")||s.ajaxPrefilter("+json",function(e){!1!==e.jsonp&&(p.test(e.url)||"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&p.test(e.data))&&u("jsonp-promotion","JSON-to-JSONP auto-promotion is deprecated")}));var j=s.fn.removeAttr,b=s.fn.toggleClass,w=/\S+/g;function x(e){return e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()})}i(s.fn,"removeAttr",function(e){var r=this,n=!1;return s.each(e.match(w),function(e,t){s.expr.match.bool.test(t)&&r.each(function(){if(!1!==s(this).prop(t))return!(n=!0)}),n&&(u("removeAttr-bool","jQuery.fn.removeAttr no longer sets boolean properties: "+t),r.prop(t,!1))}),j.apply(this,arguments)},"removeAttr-bool"),i(s.fn,"toggleClass",function(t){return void 0!==t&&"boolean"!=typeof t?b.apply(this,arguments):(u("toggleClass-bool","jQuery.fn.toggleClass(boolean) is deprecated"),this.each(function(){var e=this.getAttribute&&this.getAttribute("class")||"";e&&s.data(this,"__className__",e),this.setAttribute&&this.setAttribute("class",!e&&!1!==t&&s.data(this,"__className__")||"")}))},"toggleClass-bool");var Q,A,R=!1,C=/^[a-z]/,N=/^(?:Border(?:Top|Right|Bottom|Left)?(?:Width|)|(?:Margin|Padding)?(?:Top|Right|Bottom|Left)?|(?:Min|Max)?(?:Width|Height))$/;s.swap&&s.each(["height","width","reliableMarginRight"],function(e,t){var r=s.cssHooks[t]&&s.cssHooks[t].get;r&&(s.cssHooks[t].get=function(){var e;return R=!0,e=r.apply(this,arguments),R=!1,e})}),i(s,"swap",function(e,t,r,n){var o,a,i={};for(a in R||u("swap","jQuery.swap() is undocumented and deprecated"),t)i[a]=e.style[a],e.style[a]=t[a];for(a in o=r.apply(e,n||[]),t)e.style[a]=i[a];return o},"swap"),e("3.4.0")&&"undefined"!=typeof Proxy&&(s.cssProps=new Proxy(s.cssProps||{},{set:function(){return u("cssProps","jQuery.cssProps is deprecated"),Reflect.set.apply(this,arguments)}})),e("4.0.0")?(A={animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},"undefined"!=typeof Proxy?s.cssNumber=new Proxy(A,{get:function(){return u("css-number","jQuery.cssNumber is deprecated"),Reflect.get.apply(this,arguments)},set:function(){return u("css-number","jQuery.cssNumber is deprecated"),Reflect.set.apply(this,arguments)}}):s.cssNumber=A):A=s.cssNumber,Q=s.fn.css,i(s.fn,"css",function(e,t){var r,n,o=this;return e&&"object"==typeof e&&!Array.isArray(e)?(s.each(e,function(e,t){s.fn.css.call(o,e,t)}),this):("number"==typeof t&&(r=x(e),n=r,C.test(n)&&N.test(n[0].toUpperCase()+n.slice(1))||A[r]||u("css-number",'Number-typed values are deprecated for jQuery.fn.css("'+e+'", value)')),Q.apply(this,arguments))},"css-number");var S,P,k,H,E=s.data;i(s,"data",function(e,t,r){var n,o,a;if(t&&"object"==typeof t&&2===arguments.length){for(a in n=s.hasData(e)&&E.call(this,e),o={},t)a!==x(a)?(u("data-camelCase","jQuery.data() always sets/gets camelCased names: "+a),n[a]=t[a]):o[a]=t[a];return E.call(this,e,o),t}return t&&"string"==typeof t&&t!==x(t)&&(n=s.hasData(e)&&E.call(this,e))&&t in n?(u("data-camelCase","jQuery.data() always sets/gets camelCased names: "+t),2<arguments.length&&(n[t]=r),n[t]):E.apply(this,arguments)},"data-camelCase"),s.fx&&(k=s.Tween.prototype.run,H=function(e){return e},i(s.Tween.prototype,"run",function(){1<s.easing[this.easing].length&&(u("easing-one-arg","'jQuery.easing."+this.easing.toString()+"' should use only one argument"),s.easing[this.easing]=H),k.apply(this,arguments)},"easing-one-arg"),S=s.fx.interval,P="jQuery.fx.interval is deprecated",n.requestAnimationFrame&&Object.defineProperty(s.fx,"interval",{configurable:!0,enumerable:!0,get:function(){return n.document.hidden||u("fx-interval",P),s.migrateIsPatchEnabled("fx-interval")&&void 0===S?13:S},set:function(e){u("fx-interval",P),S=e}}));var M=s.fn.load,q=s.event.add,O=s.event.fix;s.event.props=[],s.event.fixHooks={},r(s.event.props,"concat",s.event.props.concat,"event-old-patch","jQuery.event.props.concat() is deprecated and removed"),i(s.event,"fix",function(e){var t,r=e.type,n=this.fixHooks[r],o=s.event.props;if(o.length){u("event-old-patch","jQuery.event.props are deprecated and removed: "+o.join());while(o.length)s.event.addProp(o.pop())}if(n&&!n._migrated_&&(n._migrated_=!0,u("event-old-patch","jQuery.event.fixHooks are deprecated and removed: "+r),(o=n.props)&&o.length))while(o.length)s.event.addProp(o.pop());return t=O.call(this,e),n&&n.filter?n.filter(t,e):t},"event-old-patch"),i(s.event,"add",function(e,t){return e===n&&"load"===t&&"complete"===n.document.readyState&&u("load-after-event","jQuery(window).on('load'...) called after load event occurred"),q.apply(this,arguments)},"load-after-event"),s.each(["load","unload","error"],function(e,t){i(s.fn,t,function(){var e=Array.prototype.slice.call(arguments,0);return"load"===t&&"string"==typeof e[0]?M.apply(this,e):(u("shorthand-removed-v3","jQuery.fn."+t+"() is deprecated"),e.splice(0,0,t),arguments.length?this.on.apply(this,e):(this.triggerHandler.apply(this,e),this))},"shorthand-removed-v3")}),s.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,r){c(s.fn,r,function(e,t){return 0<arguments.length?this.on(r,null,e,t):this.trigger(r)},"shorthand-deprecated-v3","jQuery.fn."+r+"() event shorthand is deprecated")}),s(function(){s(n.document).triggerHandler("ready")}),s.event.special.ready={setup:function(){this===n.document&&u("ready-event","'ready' event is deprecated")}},c(s.fn,"bind",function(e,t,r){return this.on(e,null,t,r)},"pre-on-methods","jQuery.fn.bind() is deprecated"),c(s.fn,"unbind",function(e,t){return this.off(e,null,t)},"pre-on-methods","jQuery.fn.unbind() is deprecated"),c(s.fn,"delegate",function(e,t,r,n){return this.on(t,e,r,n)},"pre-on-methods","jQuery.fn.delegate() is deprecated"),c(s.fn,"undelegate",function(e,t,r){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",r)},"pre-on-methods","jQuery.fn.undelegate() is deprecated"),c(s.fn,"hover",function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)},"pre-on-methods","jQuery.fn.hover() is deprecated");function T(e){var t=n.document.implementation.createHTMLDocument("");return t.body.innerHTML=e,t.body&&t.body.innerHTML}var F=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi;s.UNSAFE_restoreLegacyHtmlPrefilter=function(){s.migrateEnablePatches("self-closed-tags")},i(s,"htmlPrefilter",function(e){var t,r;return(r=(t=e).replace(F,"<$1></$2>"))!==t&&T(t)!==T(r)&&u("self-closed-tags","HTML tags must be properly nested and closed: "+t),e.replace(F,"<$1></$2>")},"self-closed-tags"),s.migrateDisablePatches("self-closed-tags");var D,W,_,I=s.fn.offset;return i(s.fn,"offset",function(){var e=this[0];return!e||e.nodeType&&e.getBoundingClientRect?I.apply(this,arguments):(u("offset-valid-elem","jQuery.fn.offset() requires a valid DOM element"),arguments.length?this:void 0)},"offset-valid-elem"),s.ajax&&(D=s.param,i(s,"param",function(e,t){var r=s.ajaxSettings&&s.ajaxSettings.traditional;return void 0===t&&r&&(u("param-ajax-traditional","jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),t=r),D.call(this,e,t)},"param-ajax-traditional")),c(s.fn,"andSelf",s.fn.addBack,"andSelf","jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"),s.Deferred&&(W=s.Deferred,_=[["resolve","done",s.Callbacks("once memory"),s.Callbacks("once memory"),"resolved"],["reject","fail",s.Callbacks("once memory"),s.Callbacks("once memory"),"rejected"],["notify","progress",s.Callbacks("memory"),s.Callbacks("memory")]],i(s,"Deferred",function(e){var a=W(),i=a.promise();function t(){var o=arguments;return s.Deferred(function(n){s.each(_,function(e,t){var r="function"==typeof o[e]&&o[e];a[t[1]](function(){var e=r&&r.apply(this,arguments);e&&"function"==typeof e.promise?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[t[0]+"With"](this===i?n.promise():this,r?[e]:arguments)})}),o=null}).promise()}return c(a,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),c(i,"pipe",t,"deferred-pipe","deferred.pipe() is deprecated"),e&&e.call(a,a),a},"deferred-pipe"),s.Deferred.exceptionHook=W.exceptionHook),s});
(()=>{var __webpack_modules__={741:function(__unused_webpack_module,exports){eval('/* @preserve\n * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com\n * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade\n */\n!function (t, e){\n   true ? e(exports):0;\n}(this, function (t){\n  "use strict";\n\n  function l(t){\n    for (var e, i, n=1, o=arguments.length; n < o; n++) for (e in i=arguments[n]) t[e]=i[e];\n    return t;\n  }\n  var R=Object.create||function (t){\n    return N.prototype=t, new N();\n  };\n  function N(){}\n  function a(t, e){\n    var i,\n      n=Array.prototype.slice;\n    return t.bind ? t.bind.apply(t, n.call(arguments, 1)):(i=n.call(arguments, 2), function (){\n      return t.apply(e, i.length ? i.concat(n.call(arguments)):arguments);\n    });\n  }\n  var D=0;\n  function h(t){\n    return "_leaflet_id" in t||(t._leaflet_id=++D), t._leaflet_id;\n  }\n  function j(t, e, i){\n    var n,\n      o,\n      s=function (){\n        n = !1, o&&(r.apply(i, o), o = !1);\n      },\n      r=function (){\n        n ? o=arguments:(t.apply(i, arguments), setTimeout(s, e), n = !0);\n      };\n    return r;\n  }\n  function H(t, e, i){\n    var n=e[1],\n      e=e[0],\n      o=n - e;\n    return t===n&&i ? t:((t - e) % o + o) % o + e;\n  }\n  function u(){\n    return !1;\n  }\n  function i(t, e){\n    return !1===e ? t:(e=Math.pow(10, void 0===e ? 6:e), Math.round(t * e) / e);\n  }\n  function W(t){\n    return t.trim ? t.trim():t.replace(/^\\s+|\\s+$/g, "");\n  }\n  function F(t){\n    return W(t).split(/\\s+/);\n  }\n  function c(t, e){\n    for (var i in Object.prototype.hasOwnProperty.call(t, "options")||(t.options=t.options ? R(t.options):{}), e) t.options[i]=e[i];\n    return t.options;\n  }\n  function U(t, e, i){\n    var n,\n      o=[];\n    for (n in t) o.push(encodeURIComponent(i ? n.toUpperCase():n) + "=" + encodeURIComponent(t[n]));\n    return (e&&-1!==e.indexOf("?") ? "&":"?") + o.join("&");\n  }\n  var V=/\\{ *([\\w_ -]+) *\\}/g;\n  function q(t, i){\n    return t.replace(V, function (t, e){\n      e=i[e];\n      if(void 0===e) throw new Error("No value provided for variable " + t);\n      return e="function"==typeof e ? e(i):e;\n    });\n  }\n  var d=Array.isArray||function (t){\n    return "[object Array]"===Object.prototype.toString.call(t);\n  };\n  function G(t, e){\n    for (var i=0; i < t.length; i++) if(t[i]===e) return i;\n    return -1;\n  }\n  var K="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";\n  function Y(t){\n    return window["webkit" + t]||window["moz" + t]||window["ms" + t];\n  }\n  var X=0;\n  function J(t){\n    var e=+new Date(),\n      i=Math.max(0, 16 - (e - X));\n    return X=e + i, window.setTimeout(t, i);\n  }\n  var $=window.requestAnimationFrame||Y("RequestAnimationFrame")||J,\n    Q=window.cancelAnimationFrame||Y("CancelAnimationFrame")||Y("CancelRequestAnimationFrame")||function (t){\n      window.clearTimeout(t);\n    };\n  function x(t, e, i){\n    if(!i||$!==J) return $.call(window, a(t, e));\n    t.call(e);\n  }\n  function r(t){\n    t&&Q.call(window, t);\n  }\n  var tt={\n    __proto__: null,\n    extend: l,\n    create: R,\n    bind: a,\n    get lastId(){\n      return D;\n    },\n    stamp: h,\n    throttle: j,\n    wrapNum: H,\n    falseFn: u,\n    formatNum: i,\n    trim: W,\n    splitWords: F,\n    setOptions: c,\n    getParamString: U,\n    template: q,\n    isArray: d,\n    indexOf: G,\n    emptyImageUrl: K,\n    requestFn: $,\n    cancelFn: Q,\n    requestAnimFrame: x,\n    cancelAnimFrame: r\n  };\n  function et(){}\n  et.extend=function (t){\n    function e(){\n      c(this), this.initialize&&this.initialize.apply(this, arguments), this.callInitHooks();\n    }\n    var i,\n      n=e.__super__=this.prototype,\n      o=R(n);\n    for (i in (o.constructor=e).prototype=o, this) Object.prototype.hasOwnProperty.call(this, i)&&"prototype"!==i&&"__super__"!==i&&(e[i]=this[i]);\n    if(t.statics&&l(e, t.statics), t.includes){\n      var s=t.includes;\n      if("undefined"!=typeof L&&L && L.Mixin){\n        s=d(s) ? s:[s];\n        for (var r=0; r < s.length; r++) s[r]===L.Mixin.Events&&console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.", new Error().stack);\n      }\n      l.apply(null, [o].concat(t.includes));\n    }\n    return l(o, t), delete o.statics, delete o.includes, o.options&&(o.options=n.options ? R(n.options):{}, l(o.options, t.options)), o._initHooks=[], o.callInitHooks=function (){\n      if(!this._initHooksCalled){\n        n.callInitHooks&&n.callInitHooks.call(this), this._initHooksCalled = !0;\n        for (var t=0, e=o._initHooks.length; t < e; t++) o._initHooks[t].call(this);\n      }\n    }, e;\n  }, et.include=function (t){\n    var e=this.prototype.options;\n    return l(this.prototype, t), t.options&&(this.prototype.options=e, this.mergeOptions(t.options)), this;\n  }, et.mergeOptions=function (t){\n    return l(this.prototype.options, t), this;\n  }, et.addInitHook=function (t){\n    var e=Array.prototype.slice.call(arguments, 1),\n      i="function"==typeof t ? t:function (){\n        this[t].apply(this, e);\n      };\n    return this.prototype._initHooks=this.prototype._initHooks||[], this.prototype._initHooks.push(i), this;\n  };\n  var e={\n      on: function (t, e, i){\n        if("object"==typeof t) for (var n in t) this._on(n, t[n], e);else for (var o=0, s=(t=F(t)).length; o < s; o++) this._on(t[o], e, i);\n        return this;\n      },\n      off: function (t, e, i){\n        if(arguments.length){\n          if("object"==typeof t) for (var n in t) this._off(n, t[n], e);else {\n            t=F(t);\n            for (var o=1===arguments.length, s=0, r=t.length; s < r; s++) o ? this._off(t[s]):this._off(t[s], e, i);\n          }\n        } else delete this._events;\n        return this;\n      },\n      _on: function (t, e, i, n){\n        "function"!=typeof e ? console.warn("wrong listener type: " + typeof e):!1===this._listens(t, e, i)&&(e={\n          fn: e,\n          ctx: i=i===this ? void 0:i\n        }, n&&(e.once = !0), this._events=this._events||{}, this._events[t]=this._events[t]||[], this._events[t].push(e));\n      },\n      _off: function (t, e, i){\n        var n, o, s;\n        if(this._events&&(n=this._events[t])) if(1===arguments.length){\n          if(this._firingCount) for (o=0, s=n.length; o < s; o++) n[o].fn=u;\n          delete this._events[t];\n        } else "function"!=typeof e ? console.warn("wrong listener type: " + typeof e):!1!==(e=this._listens(t, e, i))&&(i=n[e], this._firingCount&&(i.fn=u, this._events[t]=n = n.slice()), n.splice(e, 1));\n      },\n      fire: function (t, e, i){\n        if(this.listens(t, i)){\n          var n=l({}, e, {\n            type: t,\n            target: this,\n            sourceTarget: e&&e.sourceTarget||this\n          });\n          if(this._events){\n            var o=this._events[t];\n            if(o){\n              this._firingCount=this._firingCount + 1||1;\n              for (var s=0, r=o.length; s < r; s++){\n                var a=o[s],\n                  h=a.fn;\n                a.once&&this.off(t, h, a.ctx), h.call(a.ctx||this, n);\n              }\n              this._firingCount--;\n            }\n          }\n          i&&this._propagateEvent(n);\n        }\n        return this;\n      },\n      listens: function (t, e, i, n){\n        "string"!=typeof t&&console.warn(\'"string" type argument expected\');\n        var o=e,\n          s=("function"!=typeof e&&(n = !!e, i=o = void 0), this._events&&this._events[t]);\n        if(s&&s.length&&!1!==this._listens(t, o, i)) return !0;\n        if(n) for (var r in this._eventParents) if(this._eventParents[r].listens(t, e, i, n)) return !0;\n        return !1;\n      },\n      _listens: function (t, e, i){\n        if(this._events){\n          var n=this._events[t]||[];\n          if(!e) return !!n.length;\n          i===this&&(i=void 0);\n          for (var o=0, s=n.length; o < s; o++) if(n[o].fn===e&&n[o].ctx===i) return o;\n        }\n        return !1;\n      },\n      once: function (t, e, i){\n        if("object"==typeof t) for (var n in t) this._on(n, t[n], e, !0);else for (var o=0, s=(t=F(t)).length; o < s; o++) this._on(t[o], e, i, !0);\n        return this;\n      },\n      addEventParent: function (t){\n        return this._eventParents=this._eventParents||{}, this._eventParents[h(t)]=t, this;\n      },\n      removeEventParent: function (t){\n        return this._eventParents&&delete this._eventParents[h(t)], this;\n      },\n      _propagateEvent: function (t){\n        for (var e in this._eventParents) this._eventParents[e].fire(t.type, l({\n          layer: t.target,\n          propagatedFrom: t.target\n        }, t), !0);\n      }\n    },\n    it=(e.addEventListener=e.on, e.removeEventListener=e.clearAllEventListeners=e.off, e.addOneTimeEventListener=e.once, e.fireEvent=e.fire, e.hasEventListeners=e.listens, et.extend(e));\n  function p(t, e, i){\n    this.x=i ? Math.round(t):t, this.y=i ? Math.round(e):e;\n  }\n  var nt=Math.trunc||function (t){\n    return 0 < t ? Math.floor(t):Math.ceil(t);\n  };\n  function m(t, e, i){\n    return t instanceof p ? t:d(t) ? new p(t[0], t[1]):null==t ? t:"object"==typeof t&&"x" in t&&"y" in t ? new p(t.x, t.y):new p(t, e, i);\n  }\n  function f(t, e){\n    if(t) for (var i=e ? [t, e]:t, n=0, o=i.length; n < o; n++) this.extend(i[n]);\n  }\n  function _(t, e){\n    return !t||t instanceof f ? t:new f(t, e);\n  }\n  function s(t, e){\n    if(t) for (var i=e ? [t, e]:t, n=0, o=i.length; n < o; n++) this.extend(i[n]);\n  }\n  function g(t, e){\n    return t instanceof s ? t:new s(t, e);\n  }\n  function v(t, e, i){\n    if(isNaN(t)||isNaN(e)) throw new Error("Invalid LatLng object: (" + t + ", " + e + ")");\n    this.lat=+t, this.lng=+e, void 0!==i&&(this.alt=+i);\n  }\n  function w(t, e, i){\n    return t instanceof v ? t:d(t)&&"object"!=typeof t[0] ? 3===t.length ? new v(t[0], t[1], t[2]):2===t.length ? new v(t[0], t[1]):null:null==t ? t:"object"==typeof t&&"lat" in t ? new v(t.lat, "lng" in t ? t.lng:t.lon, t.alt):void 0===e ? null:new v(t, e, i);\n  }\n  p.prototype={\n    clone: function (){\n      return new p(this.x, this.y);\n    },\n    add: function (t){\n      return this.clone()._add(m(t));\n    },\n    _add: function (t){\n      return this.x +=t.x, this.y +=t.y, this;\n    },\n    subtract: function (t){\n      return this.clone()._subtract(m(t));\n    },\n    _subtract: function (t){\n      return this.x -=t.x, this.y -=t.y, this;\n    },\n    divideBy: function (t){\n      return this.clone()._divideBy(t);\n    },\n    _divideBy: function (t){\n      return this.x /=t, this.y /=t, this;\n    },\n    multiplyBy: function (t){\n      return this.clone()._multiplyBy(t);\n    },\n    _multiplyBy: function (t){\n      return this.x *=t, this.y *=t, this;\n    },\n    scaleBy: function (t){\n      return new p(this.x * t.x, this.y * t.y);\n    },\n    unscaleBy: function (t){\n      return new p(this.x / t.x, this.y / t.y);\n    },\n    round: function (){\n      return this.clone()._round();\n    },\n    _round: function (){\n      return this.x=Math.round(this.x), this.y=Math.round(this.y), this;\n    },\n    floor: function (){\n      return this.clone()._floor();\n    },\n    _floor: function (){\n      return this.x=Math.floor(this.x), this.y=Math.floor(this.y), this;\n    },\n    ceil: function (){\n      return this.clone()._ceil();\n    },\n    _ceil: function (){\n      return this.x=Math.ceil(this.x), this.y=Math.ceil(this.y), this;\n    },\n    trunc: function (){\n      return this.clone()._trunc();\n    },\n    _trunc: function (){\n      return this.x=nt(this.x), this.y=nt(this.y), this;\n    },\n    distanceTo: function (t){\n      var e=(t=m(t)).x - this.x,\n        t=t.y - this.y;\n      return Math.sqrt(e * e + t * t);\n    },\n    equals: function (t){\n      return (t=m(t)).x===this.x&&t.y===this.y;\n    },\n    contains: function (t){\n      return t=m(t), Math.abs(t.x) <=Math.abs(this.x)&&Math.abs(t.y) <=Math.abs(this.y);\n    },\n    toString: function (){\n      return "Point(" + i(this.x) + ", " + i(this.y) + ")";\n    }\n  }, f.prototype={\n    extend: function (t){\n      var e, i;\n      if(t){\n        if(t instanceof p||"number"==typeof t[0]||"x" in t) e=i = m(t);else if(e=(t=_(t)).min, i=t.max, !e||!i) return this;\n        this.min||this.max ? (this.min.x=Math.min(e.x, this.min.x), this.max.x=Math.max(i.x, this.max.x), this.min.y=Math.min(e.y, this.min.y), this.max.y=Math.max(i.y, this.max.y)):(this.min=e.clone(), this.max=i.clone());\n      }\n      return this;\n    },\n    getCenter: function (t){\n      return m((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, t);\n    },\n    getBottomLeft: function (){\n      return m(this.min.x, this.max.y);\n    },\n    getTopRight: function (){\n      return m(this.max.x, this.min.y);\n    },\n    getTopLeft: function (){\n      return this.min;\n    },\n    getBottomRight: function (){\n      return this.max;\n    },\n    getSize: function (){\n      return this.max.subtract(this.min);\n    },\n    contains: function (t){\n      var e, i;\n      return (t=("number"==typeof t[0]||t instanceof p ? m:_)(t)) instanceof f ? (e=t.min, i=t.max):e=i = t, e.x >=this.min.x&&i.x <=this.max.x&&e.y >=this.min.y&&i.y <=this.max.y;\n    },\n    intersects: function (t){\n      t=_(t);\n      var e=this.min,\n        i=this.max,\n        n=t.min,\n        t=t.max,\n        o=t.x >=e.x&&n.x <=i.x,\n        t=t.y >=e.y&&n.y <=i.y;\n      return o&&t;\n    },\n    overlaps: function (t){\n      t=_(t);\n      var e=this.min,\n        i=this.max,\n        n=t.min,\n        t=t.max,\n        o=t.x > e.x&&n.x < i.x,\n        t=t.y > e.y&&n.y < i.y;\n      return o&&t;\n    },\n    isValid: function (){\n      return !(!this.min||!this.max);\n    },\n    pad: function (t){\n      var e=this.min,\n        i=this.max,\n        n=Math.abs(e.x - i.x) * t,\n        t=Math.abs(e.y - i.y) * t;\n      return _(m(e.x - n, e.y - t), m(i.x + n, i.y + t));\n    },\n    equals: function (t){\n      return !!t&&(t=_(t), this.min.equals(t.getTopLeft())&&this.max.equals(t.getBottomRight()));\n    }\n  }, s.prototype={\n    extend: function (t){\n      var e,\n        i,\n        n=this._southWest,\n        o=this._northEast;\n      if(t instanceof v) i=e = t;else {\n        if(!(t instanceof s)) return t ? this.extend(w(t)||g(t)):this;\n        if(e=t._southWest, i=t._northEast, !e||!i) return this;\n      }\n      return n||o ? (n.lat=Math.min(e.lat, n.lat), n.lng=Math.min(e.lng, n.lng), o.lat=Math.max(i.lat, o.lat), o.lng=Math.max(i.lng, o.lng)):(this._southWest=new v(e.lat, e.lng), this._northEast=new v(i.lat, i.lng)), this;\n    },\n    pad: function (t){\n      var e=this._southWest,\n        i=this._northEast,\n        n=Math.abs(e.lat - i.lat) * t,\n        t=Math.abs(e.lng - i.lng) * t;\n      return new s(new v(e.lat - n, e.lng - t), new v(i.lat + n, i.lng + t));\n    },\n    getCenter: function (){\n      return new v((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2);\n    },\n    getSouthWest: function (){\n      return this._southWest;\n    },\n    getNorthEast: function (){\n      return this._northEast;\n    },\n    getNorthWest: function (){\n      return new v(this.getNorth(), this.getWest());\n    },\n    getSouthEast: function (){\n      return new v(this.getSouth(), this.getEast());\n    },\n    getWest: function (){\n      return this._southWest.lng;\n    },\n    getSouth: function (){\n      return this._southWest.lat;\n    },\n    getEast: function (){\n      return this._northEast.lng;\n    },\n    getNorth: function (){\n      return this._northEast.lat;\n    },\n    contains: function (t){\n      t=("number"==typeof t[0]||t instanceof v||"lat" in t ? w:g)(t);\n      var e,\n        i,\n        n=this._southWest,\n        o=this._northEast;\n      return t instanceof s ? (e=t.getSouthWest(), i=t.getNorthEast()):e=i = t, e.lat >=n.lat&&i.lat <=o.lat&&e.lng >=n.lng&&i.lng <=o.lng;\n    },\n    intersects: function (t){\n      t=g(t);\n      var e=this._southWest,\n        i=this._northEast,\n        n=t.getSouthWest(),\n        t=t.getNorthEast(),\n        o=t.lat >=e.lat&&n.lat <=i.lat,\n        t=t.lng >=e.lng&&n.lng <=i.lng;\n      return o&&t;\n    },\n    overlaps: function (t){\n      t=g(t);\n      var e=this._southWest,\n        i=this._northEast,\n        n=t.getSouthWest(),\n        t=t.getNorthEast(),\n        o=t.lat > e.lat&&n.lat < i.lat,\n        t=t.lng > e.lng&&n.lng < i.lng;\n      return o&&t;\n    },\n    toBBoxString: function (){\n      return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(",");\n    },\n    equals: function (t, e){\n      return !!t&&(t=g(t), this._southWest.equals(t.getSouthWest(), e)&&this._northEast.equals(t.getNorthEast(), e));\n    },\n    isValid: function (){\n      return !(!this._southWest||!this._northEast);\n    }\n  };\n  var ot={\n      latLngToPoint: function (t, e){\n        t=this.projection.project(t), e=this.scale(e);\n        return this.transformation._transform(t, e);\n      },\n      pointToLatLng: function (t, e){\n        e=this.scale(e), t=this.transformation.untransform(t, e);\n        return this.projection.unproject(t);\n      },\n      project: function (t){\n        return this.projection.project(t);\n      },\n      unproject: function (t){\n        return this.projection.unproject(t);\n      },\n      scale: function (t){\n        return 256 * Math.pow(2, t);\n      },\n      zoom: function (t){\n        return Math.log(t / 256) / Math.LN2;\n      },\n      getProjectedBounds: function (t){\n        var e;\n        return this.infinite ? null:(e=this.projection.bounds, t=this.scale(t), new f(this.transformation.transform(e.min, t), this.transformation.transform(e.max, t)));\n      },\n      infinite: !(v.prototype={\n        equals: function (t, e){\n          return !!t&&(t=w(t), Math.max(Math.abs(this.lat - t.lat), Math.abs(this.lng - t.lng)) <=(void 0===e ? 1e-9:e));\n        },\n        toString: function (t){\n          return "LatLng(" + i(this.lat, t) + ", " + i(this.lng, t) + ")";\n        },\n        distanceTo: function (t){\n          return st.distance(this, w(t));\n        },\n        wrap: function (){\n          return st.wrapLatLng(this);\n        },\n        toBounds: function (t){\n          var t=180 * t / 40075017,\n            e=t / Math.cos(Math.PI / 180 * this.lat);\n          return g([this.lat - t, this.lng - e], [this.lat + t, this.lng + e]);\n        },\n        clone: function (){\n          return new v(this.lat, this.lng, this.alt);\n        }\n      }),\n      wrapLatLng: function (t){\n        var e=this.wrapLng ? H(t.lng, this.wrapLng, !0):t.lng;\n        return new v(this.wrapLat ? H(t.lat, this.wrapLat, !0):t.lat, e, t.alt);\n      },\n      wrapLatLngBounds: function (t){\n        var e=t.getCenter(),\n          i=this.wrapLatLng(e),\n          n=e.lat - i.lat,\n          e=e.lng - i.lng;\n        return 0==n&&0==e ? t:(i=t.getSouthWest(), t=t.getNorthEast(), new s(new v(i.lat - n, i.lng - e), new v(t.lat - n, t.lng - e)));\n      }\n    },\n    st=l({}, ot, {\n      wrapLng: [-180, 180],\n      R: 6371e3,\n      distance: function (t, e){\n        var i=Math.PI / 180,\n          n=t.lat * i,\n          o=e.lat * i,\n          s=Math.sin((e.lat - t.lat) * i / 2),\n          e=Math.sin((e.lng - t.lng) * i / 2),\n          t=s * s + Math.cos(n) * Math.cos(o) * e * e,\n          i=2 * Math.atan2(Math.sqrt(t), Math.sqrt(1 - t));\n        return this.R * i;\n      }\n    }),\n    rt=6378137,\n    rt={\n      R: rt,\n      MAX_LATITUDE: 85.0511287798,\n      project: function (t){\n        var e=Math.PI / 180,\n          i=this.MAX_LATITUDE,\n          i=Math.max(Math.min(i, t.lat), -i),\n          i=Math.sin(i * e);\n        return new p(this.R * t.lng * e, this.R * Math.log((1 + i) / (1 - i)) / 2);\n      },\n      unproject: function (t){\n        var e=180 / Math.PI;\n        return new v((2 * Math.atan(Math.exp(t.y / this.R)) - Math.PI / 2) * e, t.x * e / this.R);\n      },\n      bounds: new f([-(rt=rt * Math.PI), -rt], [rt, rt])\n    };\n  function at(t, e, i, n){\n    d(t) ? (this._a=t[0], this._b=t[1], this._c=t[2], this._d=t[3]):(this._a=t, this._b=e, this._c=i, this._d=n);\n  }\n  function ht(t, e, i, n){\n    return new at(t, e, i, n);\n  }\n  at.prototype={\n    transform: function (t, e){\n      return this._transform(t.clone(), e);\n    },\n    _transform: function (t, e){\n      return t.x=(e=e||1) * (this._a * t.x + this._b), t.y=e * (this._c * t.y + this._d), t;\n    },\n    untransform: function (t, e){\n      return new p((t.x / (e=e||1) - this._b) / this._a, (t.y / e - this._d) / this._c);\n    }\n  };\n  var lt=l({}, st, {\n      code: "EPSG:3857",\n      projection: rt,\n      transformation: ht(lt=.5 / (Math.PI * rt.R), .5, -lt, .5)\n    }),\n    ut=l({}, lt, {\n      code: "EPSG:900913"\n    });\n  function ct(t){\n    return document.createElementNS("http://www.w3.org/2000/svg", t);\n  }\n  function dt(t, e){\n    for (var i, n, o, s, r="", a=0, h=t.length; a < h; a++){\n      for (i=0, n=(o=t[a]).length; i < n; i++) r +=(i ? "L":"M") + (s=o[i]).x + " " + s.y;\n      r +=e ? b.svg ? "z":"x":"";\n    }\n    return r||"M0 0";\n  }\n  var _t=document.documentElement.style,\n    pt="ActiveXObject" in window,\n    mt=pt&&!document.addEventListener,\n    n="msLaunchUri" in navigator&&!("documentMode" in document),\n    ft=y("webkit"),\n    gt=y("android"),\n    vt=y("android 2")||y("android 3"),\n    yt=parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10),\n    yt=gt&&y("Google")&&yt < 537&&!("AudioNode" in window),\n    xt = !!window.opera,\n    wt = !n&&y("chrome"),\n    bt=y("gecko")&&!ft&&!xt&&!pt,\n    Pt = !wt&&y("safari"),\n    Lt=y("phantom"),\n    o="OTransition" in _t,\n    Tt=0===navigator.platform.indexOf("Win"),\n    Mt=pt&&"transition" in _t,\n    zt="WebKitCSSMatrix" in window&&"m11" in new window.WebKitCSSMatrix()&&!vt,\n    _t="MozPerspective" in _t,\n    Ct = !window.L_DISABLE_3D&&(Mt||zt||_t)&&!o&&!Lt,\n    Zt="undefined"!=typeof orientation||y("mobile"),\n    St=Zt&&ft,\n    Et=Zt&&zt,\n    kt = !window.PointerEvent&&window.MSPointerEvent,\n    Ot = !(!window.PointerEvent&&!kt),\n    At="ontouchstart" in window||!!window.TouchEvent,\n    Bt = !window.L_NO_TOUCH&&(At||Ot),\n    It=Zt&&xt,\n    Rt=Zt&&bt,\n    Nt=1 < (window.devicePixelRatio||window.screen.deviceXDPI / window.screen.logicalXDPI),\n    Dt=function (){\n      var t = !1;\n      try {\n        var e=Object.defineProperty({}, "passive", {\n          get: function (){\n            t = !0;\n          }\n        });\n        window.addEventListener("testPassiveEventSupport", u, e), window.removeEventListener("testPassiveEventSupport", u, e);\n      } catch (t){}\n      return t;\n    }(),\n    jt = !!document.createElement("canvas").getContext,\n    Ht = !(!document.createElementNS||!ct("svg").createSVGRect),\n    Wt = !!Ht&&((Wt=document.createElement("div")).innerHTML="<svg/>", "http://www.w3.org/2000/svg"===(Wt.firstChild&&Wt.firstChild.namespaceURI));\n  function y(t){\n    return 0 <=navigator.userAgent.toLowerCase().indexOf(t);\n  }\n  var b={\n      ie: pt,\n      ielt9: mt,\n      edge: n,\n      webkit: ft,\n      android: gt,\n      android23: vt,\n      androidStock: yt,\n      opera: xt,\n      chrome: wt,\n      gecko: bt,\n      safari: Pt,\n      phantom: Lt,\n      opera12: o,\n      win: Tt,\n      ie3d: Mt,\n      webkit3d: zt,\n      gecko3d: _t,\n      any3d: Ct,\n      mobile: Zt,\n      mobileWebkit: St,\n      mobileWebkit3d: Et,\n      msPointer: kt,\n      pointer: Ot,\n      touch: Bt,\n      touchNative: At,\n      mobileOpera: It,\n      mobileGecko: Rt,\n      retina: Nt,\n      passiveEvents: Dt,\n      canvas: jt,\n      svg: Ht,\n      vml: !Ht&&function (){\n        try {\n          var t=document.createElement("div"),\n            e=(t.innerHTML=\'<v:shape adj="1"/>\', t.firstChild);\n          return e.style.behavior="url(#default#VML)", e&&"object"==typeof e.adj;\n        } catch (t){\n          return !1;\n        }\n      }(),\n      inlineSvg: Wt,\n      mac: 0===navigator.platform.indexOf("Mac"),\n      linux: 0===navigator.platform.indexOf("Linux")\n    },\n    Ft=b.msPointer ? "MSPointerDown":"pointerdown",\n    Ut=b.msPointer ? "MSPointerMove":"pointermove",\n    Vt=b.msPointer ? "MSPointerUp":"pointerup",\n    qt=b.msPointer ? "MSPointerCancel":"pointercancel",\n    Gt={\n      touchstart: Ft,\n      touchmove: Ut,\n      touchend: Vt,\n      touchcancel: qt\n    },\n    Kt={\n      touchstart: function (t, e){\n        e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);\n        ee(t, e);\n      },\n      touchmove: ee,\n      touchend: ee,\n      touchcancel: ee\n    },\n    Yt={},\n    Xt = !1;\n  function Jt(t, e, i){\n    return "touchstart"!==e||Xt||(document.addEventListener(Ft, $t, !0), document.addEventListener(Ut, Qt, !0), document.addEventListener(Vt, te, !0), document.addEventListener(qt, te, !0), Xt = !0), Kt[e] ? (i=Kt[e].bind(this, i), t.addEventListener(Gt[e], i, !1), i):(console.warn("wrong event specified:", e), u);\n  }\n  function $t(t){\n    Yt[t.pointerId]=t;\n  }\n  function Qt(t){\n    Yt[t.pointerId]&&(Yt[t.pointerId]=t);\n  }\n  function te(t){\n    delete Yt[t.pointerId];\n  }\n  function ee(t, e){\n    if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){\n      for (var i in e.touches=[], Yt) e.touches.push(Yt[i]);\n      e.changedTouches=[e], t(e);\n    }\n  }\n  var ie=200;\n  function ne(t, i){\n    t.addEventListener("dblclick", i);\n    var n,\n      o=0;\n    function e(t){\n      var e;\n      1!==t.detail ? n=t.detail:"mouse"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||(e=Ne(t)).some(function (t){\n        return t instanceof HTMLLabelElement&&t.attributes.for;\n      })&&!e.some(function (t){\n        return t instanceof HTMLInputElement||t instanceof HTMLSelectElement;\n      })||((e=Date.now()) - o <=ie ? 2===++n&&i(function (t){\n        var e,\n          i,\n          n={};\n        for (i in t) e=t[i], n[i]=e&&e.bind ? e.bind(t):e;\n        return (t=n).type="dblclick", n.detail=2, n.isTrusted = !1, n._simulated = !0, n;\n      }(t)):n=1, o=e);\n    }\n    return t.addEventListener("click", e), {\n      dblclick: i,\n      simDblclick: e\n    };\n  }\n  var oe,\n    se,\n    re,\n    ae,\n    he,\n    le,\n    ue=we(["transform", "webkitTransform", "OTransform", "MozTransform", "msTransform"]),\n    ce=we(["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]),\n    de="webkitTransition"===ce||"OTransition"===ce ? ce + "End":"transitionend";\n  function _e(t){\n    return "string"==typeof t ? document.getElementById(t):t;\n  }\n  function pe(t, e){\n    var i=t.style[e]||t.currentStyle&&t.currentStyle[e];\n    return "auto"===(i=i&&"auto"!==i||!document.defaultView ? i:(t=document.defaultView.getComputedStyle(t, null)) ? t[e]:null) ? null:i;\n  }\n  function P(t, e, i){\n    t=document.createElement(t);\n    return t.className=e||"", i&&i.appendChild(t), t;\n  }\n  function T(t){\n    var e=t.parentNode;\n    e&&e.removeChild(t);\n  }\n  function me(t){\n    for (; t.firstChild;) t.removeChild(t.firstChild);\n  }\n  function fe(t){\n    var e=t.parentNode;\n    e&&e.lastChild!==t&&e.appendChild(t);\n  }\n  function ge(t){\n    var e=t.parentNode;\n    e&&e.firstChild!==t&&e.insertBefore(t, e.firstChild);\n  }\n  function ve(t, e){\n    return void 0!==t.classList ? t.classList.contains(e):0 < (t=xe(t)).length&&new RegExp("(^|\\\\s)" + e + "(\\\\s|$)").test(t);\n  }\n  function M(t, e){\n    var i;\n    if(void 0!==t.classList) for (var n=F(e), o=0, s=n.length; o < s; o++) t.classList.add(n[o]);else ve(t, e)||ye(t, ((i=xe(t)) ? i + " ":"") + e);\n  }\n  function z(t, e){\n    void 0!==t.classList ? t.classList.remove(e):ye(t, W((" " + xe(t) + " ").replace(" " + e + " ", " ")));\n  }\n  function ye(t, e){\n    void 0===t.className.baseVal ? t.className=e:t.className.baseVal=e;\n  }\n  function xe(t){\n    return void 0===(t=t.correspondingElement ? t.correspondingElement:t).className.baseVal ? t.className:t.className.baseVal;\n  }\n  function C(t, e){\n    if("opacity" in t.style) t.style.opacity=e;else if("filter" in t.style){\n      var i = !1,\n        n="DXImageTransform.Microsoft.Alpha";\n      try {\n        i=t.filters.item(n);\n      } catch (t){\n        if(1===e) return;\n      }\n      e=Math.round(100 * e), i ? (i.Enabled=100!==e, i.Opacity=e):t.style.filter +=" progid:" + n + "(opacity=" + e + ")";\n    }\n  }\n  function we(t){\n    for (var e=document.documentElement.style, i=0; i < t.length; i++) if(t[i] in e) return t[i];\n    return !1;\n  }\n  function be(t, e, i){\n    e=e||new p(0, 0);\n    t.style[ue]=(b.ie3d ? "translate(" + e.x + "px," + e.y + "px)":"translate3d(" + e.x + "px," + e.y + "px,0)") + (i ? " scale(" + i + ")":"");\n  }\n  function Z(t, e){\n    t._leaflet_pos=e, b.any3d ? be(t, e):(t.style.left=e.x + "px", t.style.top=e.y + "px");\n  }\n  function Pe(t){\n    return t._leaflet_pos||new p(0, 0);\n  }\n  function Le(){\n    S(window, "dragstart", O);\n  }\n  function Te(){\n    k(window, "dragstart", O);\n  }\n  function Me(t){\n    for (; -1===t.tabIndex;) t=t.parentNode;\n    t.style&&(ze(), le=(he=t).style.outlineStyle, t.style.outlineStyle="none", S(window, "keydown", ze));\n  }\n  function ze(){\n    he&&(he.style.outlineStyle=le, le=he=void 0, k(window, "keydown", ze));\n  }\n  function Ce(t){\n    for (; !((t=t.parentNode).offsetWidth&&t.offsetHeight||t===document.body););\n    return t;\n  }\n  function Ze(t){\n    var e=t.getBoundingClientRect();\n    return {\n      x: e.width / t.offsetWidth||1,\n      y: e.height / t.offsetHeight||1,\n      boundingClientRect: e\n    };\n  }\n  ae="onselectstart" in document ? (re=function (){\n    S(window, "selectstart", O);\n  }, function (){\n    k(window, "selectstart", O);\n  }):(se=we(["userSelect", "WebkitUserSelect", "OUserSelect", "MozUserSelect", "msUserSelect"]), re=function (){\n    var t;\n    se&&(t=document.documentElement.style, oe=t[se], t[se]="none");\n  }, function (){\n    se&&(document.documentElement.style[se]=oe, oe=void 0);\n  });\n  pt={\n    __proto__: null,\n    TRANSFORM: ue,\n    TRANSITION: ce,\n    TRANSITION_END: de,\n    get: _e,\n    getStyle: pe,\n    create: P,\n    remove: T,\n    empty: me,\n    toFront: fe,\n    toBack: ge,\n    hasClass: ve,\n    addClass: M,\n    removeClass: z,\n    setClass: ye,\n    getClass: xe,\n    setOpacity: C,\n    testProp: we,\n    setTransform: be,\n    setPosition: Z,\n    getPosition: Pe,\n    get disableTextSelection(){\n      return re;\n    },\n    get enableTextSelection(){\n      return ae;\n    },\n    disableImageDrag: Le,\n    enableImageDrag: Te,\n    preventOutline: Me,\n    restoreOutline: ze,\n    getSizedParentNode: Ce,\n    getScale: Ze\n  };\n  function S(t, e, i, n){\n    if(e&&"object"==typeof e) for (var o in e) ke(t, o, e[o], i);else for (var s=0, r=(e=F(e)).length; s < r; s++) ke(t, e[s], i, n);\n    return this;\n  }\n  var E="_leaflet_events";\n  function k(t, e, i, n){\n    if(1===arguments.length) Se(t), delete t[E];else if(e&&"object"==typeof e) for (var o in e) Oe(t, o, e[o], i);else if(e=F(e), 2===arguments.length) Se(t, function (t){\n      return -1!==G(e, t);\n    });else for (var s=0, r=e.length; s < r; s++) Oe(t, e[s], i, n);\n    return this;\n  }\n  function Se(t, e){\n    for (var i in t[E]){\n      var n=i.split(/\\d/)[0];\n      e&&!e(n)||Oe(t, n, null, null, i);\n    }\n  }\n  var Ee={\n    mouseenter: "mouseover",\n    mouseleave: "mouseout",\n    wheel: !("onwheel" in window)&&"mousewheel"\n  };\n  function ke(e, t, i, n){\n    var o,\n      s,\n      r=t + h(i) + (n ? "_" + h(n):"");\n    e[E]&&e[E][r]||(s=o = function (t){\n      return i.call(n||e, t||window.event);\n    }, !b.touchNative&&b.pointer&&0===t.indexOf("touch") ? o=Jt(e, t, o):b.touch&&"dblclick"===t ? o=ne(e, o):"addEventListener" in e ? "touchstart"===t||"touchmove"===t||"wheel"===t||"mousewheel"===t ? e.addEventListener(Ee[t]||t, o, !!b.passiveEvents&&{\n      passive: !1\n    }):"mouseenter"===t||"mouseleave"===t ? e.addEventListener(Ee[t], o=function (t){\n      t=t||window.event, We(e, t)&&s(t);\n    }, !1):e.addEventListener(t, s, !1):e.attachEvent("on" + t, o), e[E]=e[E]||{}, e[E][r]=o);\n  }\n  function Oe(t, e, i, n, o){\n    o=o||e + h(i) + (n ? "_" + h(n):"");\n    var s,\n      r,\n      i=t[E]&&t[E][o];\n    i&&(!b.touchNative&&b.pointer&&0===e.indexOf("touch") ? (n=t, r=i, Gt[s=e] ? n.removeEventListener(Gt[s], r, !1):console.warn("wrong event specified:", s)):b.touch&&"dblclick"===e ? (n=i, (r=t).removeEventListener("dblclick", n.dblclick), r.removeEventListener("click", n.simDblclick)):"removeEventListener" in t ? t.removeEventListener(Ee[e]||e, i, !1):t.detachEvent("on" + e, i), t[E][o]=null);\n  }\n  function Ae(t){\n    return t.stopPropagation ? t.stopPropagation():t.originalEvent ? t.originalEvent._stopped = !0:t.cancelBubble = !0, this;\n  }\n  function Be(t){\n    return ke(t, "wheel", Ae), this;\n  }\n  function Ie(t){\n    return S(t, "mousedown touchstart dblclick contextmenu", Ae), t._leaflet_disable_click = !0, this;\n  }\n  function O(t){\n    return t.preventDefault ? t.preventDefault():t.returnValue = !1, this;\n  }\n  function Re(t){\n    return O(t), Ae(t), this;\n  }\n  function Ne(t){\n    if(t.composedPath) return t.composedPath();\n    for (var e=[], i=t.target; i;) e.push(i), i=i.parentNode;\n    return e;\n  }\n  function De(t, e){\n    var i, n;\n    return e ? (n=(i=Ze(e)).boundingClientRect, new p((t.clientX - n.left) / i.x - e.clientLeft, (t.clientY - n.top) / i.y - e.clientTop)):new p(t.clientX, t.clientY);\n  }\n  var je=b.linux&&b.chrome ? window.devicePixelRatio:b.mac ? 3 * window.devicePixelRatio:0 < window.devicePixelRatio ? 2 * window.devicePixelRatio:1;\n  function He(t){\n    return b.edge ? t.wheelDeltaY / 2:t.deltaY&&0===t.deltaMode ? -t.deltaY / je:t.deltaY&&1===t.deltaMode ? 20 * -t.deltaY:t.deltaY&&2===t.deltaMode ? 60 * -t.deltaY:t.deltaX||t.deltaZ ? 0:t.wheelDelta ? (t.wheelDeltaY||t.wheelDelta) / 2:t.detail&&Math.abs(t.detail) < 32765 ? 20 * -t.detail:t.detail ? t.detail / -32765 * 60:0;\n  }\n  function We(t, e){\n    var i=e.relatedTarget;\n    if(!i) return !0;\n    try {\n      for (; i&&i!==t;) i=i.parentNode;\n    } catch (t){\n      return !1;\n    }\n    return i!==t;\n  }\n  var mt={\n      __proto__: null,\n      on: S,\n      off: k,\n      stopPropagation: Ae,\n      disableScrollPropagation: Be,\n      disableClickPropagation: Ie,\n      preventDefault: O,\n      stop: Re,\n      getPropagationPath: Ne,\n      getMousePosition: De,\n      getWheelDelta: He,\n      isExternalTarget: We,\n      addListener: S,\n      removeListener: k\n    },\n    Fe=it.extend({\n      run: function (t, e, i, n){\n        this.stop(), this._el=t, this._inProgress = !0, this._duration=i||.25, this._easeOutPower=1 / Math.max(n||.5, .2), this._startPos=Pe(t), this._offset=e.subtract(this._startPos), this._startTime=+new Date(), this.fire("start"), this._animate();\n      },\n      stop: function (){\n        this._inProgress&&(this._step(!0), this._complete());\n      },\n      _animate: function (){\n        this._animId=x(this._animate, this), this._step();\n      },\n      _step: function (t){\n        var e=+new Date() - this._startTime,\n          i=1e3 * this._duration;\n        e < i ? this._runFrame(this._easeOut(e / i), t):(this._runFrame(1), this._complete());\n      },\n      _runFrame: function (t, e){\n        t=this._startPos.add(this._offset.multiplyBy(t));\n        e&&t._round(), Z(this._el, t), this.fire("step");\n      },\n      _complete: function (){\n        r(this._animId), this._inProgress = !1, this.fire("end");\n      },\n      _easeOut: function (t){\n        return 1 - Math.pow(1 - t, this._easeOutPower);\n      }\n    }),\n    A=it.extend({\n      options: {\n        crs: lt,\n        center: void 0,\n        zoom: void 0,\n        minZoom: void 0,\n        maxZoom: void 0,\n        layers: [],\n        maxBounds: void 0,\n        renderer: void 0,\n        zoomAnimation: !0,\n        zoomAnimationThreshold: 4,\n        fadeAnimation: !0,\n        markerZoomAnimation: !0,\n        transform3DLimit: 8388608,\n        zoomSnap: 1,\n        zoomDelta: 1,\n        trackResize: !0\n      },\n      initialize: function (t, e){\n        e=c(this, e), this._handlers=[], this._layers={}, this._zoomBoundLayers={}, this._sizeChanged = !0, this._initContainer(t), this._initLayout(), this._onResize=a(this._onResize, this), this._initEvents(), e.maxBounds&&this.setMaxBounds(e.maxBounds), void 0!==e.zoom&&(this._zoom=this._limitZoom(e.zoom)), e.center&&void 0!==e.zoom&&this.setView(w(e.center), e.zoom, {\n          reset: !0\n        }), this.callInitHooks(), this._zoomAnimated=ce&&b.any3d&&!b.mobileOpera&&this.options.zoomAnimation, this._zoomAnimated&&(this._createAnimProxy(), S(this._proxy, de, this._catchTransitionEnd, this)), this._addLayers(this.options.layers);\n      },\n      setView: function (t, e, i){\n        if((e=void 0===e ? this._zoom:this._limitZoom(e), t=this._limitCenter(w(t), e, this.options.maxBounds), i=i||{}, this._stop(), this._loaded&&!i.reset&&!0!==i)&&(void 0!==i.animate&&(i.zoom=l({\n          animate: i.animate\n        }, i.zoom), i.pan=l({\n          animate: i.animate,\n          duration: i.duration\n        }, i.pan)), this._zoom!==e ? this._tryAnimatedZoom&&this._tryAnimatedZoom(t, e, i.zoom):this._tryAnimatedPan(t, i.pan))) return clearTimeout(this._sizeTimer), this;\n        return this._resetView(t, e, i.pan&&i.pan.noMoveStart), this;\n      },\n      setZoom: function (t, e){\n        return this._loaded ? this.setView(this.getCenter(), t, {\n          zoom: e\n        }):(this._zoom=t, this);\n      },\n      zoomIn: function (t, e){\n        return t=t||(b.any3d ? this.options.zoomDelta:1), this.setZoom(this._zoom + t, e);\n      },\n      zoomOut: function (t, e){\n        return t=t||(b.any3d ? this.options.zoomDelta:1), this.setZoom(this._zoom - t, e);\n      },\n      setZoomAround: function (t, e, i){\n        var n=this.getZoomScale(e),\n          o=this.getSize().divideBy(2),\n          t=(t instanceof p ? t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1 - 1 / n),\n          n=this.containerPointToLatLng(o.add(t));\n        return this.setView(n, e, {\n          zoom: i\n        });\n      },\n      _getBoundsCenterZoom: function (t, e){\n        e=e||{}, t=t.getBounds ? t.getBounds():g(t);\n        var i=m(e.paddingTopLeft||e.padding||[0, 0]),\n          n=m(e.paddingBottomRight||e.padding||[0, 0]),\n          o=this.getBoundsZoom(t, !1, i.add(n));\n        return (o="number"==typeof e.maxZoom ? Math.min(e.maxZoom, o):o)===1 / 0 ? {\n          center: t.getCenter(),\n          zoom: o\n        }:(e=n.subtract(i).divideBy(2), n=this.project(t.getSouthWest(), o), i=this.project(t.getNorthEast(), o), {\n          center: this.unproject(n.add(i).divideBy(2).add(e), o),\n          zoom: o\n        });\n      },\n      fitBounds: function (t, e){\n        if((t=g(t)).isValid()) return t=this._getBoundsCenterZoom(t, e), this.setView(t.center, t.zoom, e);\n        throw new Error("Bounds are not valid.");\n      },\n      fitWorld: function (t){\n        return this.fitBounds([[-90, -180], [90, 180]], t);\n      },\n      panTo: function (t, e){\n        return this.setView(t, this._zoom, {\n          pan: e\n        });\n      },\n      panBy: function (t, e){\n        var i;\n        return e=e||{}, (t=m(t).round()).x||t.y ? (!0===e.animate||this.getSize().contains(t) ? (this._panAnim||(this._panAnim=new Fe(), this._panAnim.on({\n          step: this._onPanTransitionStep,\n          end: this._onPanTransitionEnd\n        }, this)), e.noMoveStart||this.fire("movestart"), !1!==e.animate ? (M(this._mapPane, "leaflet-pan-anim"), i=this._getMapPanePos().subtract(t).round(), this._panAnim.run(this._mapPane, i, e.duration||.25, e.easeLinearity)):(this._rawPanBy(t), this.fire("move").fire("moveend"))):this._resetView(this.unproject(this.project(this.getCenter()).add(t)), this.getZoom()), this):this.fire("moveend");\n      },\n      flyTo: function (n, o, t){\n        if(!1===(t=t||{}).animate||!b.any3d) return this.setView(n, o, t);\n        this._stop();\n        var s=this.project(this.getCenter()),\n          r=this.project(n),\n          e=this.getSize(),\n          a=this._zoom,\n          h=(n=w(n), o=void 0===o ? a:o, Math.max(e.x, e.y)),\n          i=h * this.getZoomScale(a, o),\n          l=r.distanceTo(s)||1,\n          u=1.42,\n          c=u * u;\n        function d(t){\n          t=(i * i - h * h + (t ? -1:1) * c * c * l * l) / (2 * (t ? i:h) * c * l), t=Math.sqrt(t * t + 1) - t;\n          return t < 1e-9 ? -18:Math.log(t);\n        }\n        function _(t){\n          return (Math.exp(t) - Math.exp(-t)) / 2;\n        }\n        function p(t){\n          return (Math.exp(t) + Math.exp(-t)) / 2;\n        }\n        var m=d(0);\n        function f(t){\n          return h * (p(m) * (_(t=m + u * t) / p(t)) - _(m)) / c;\n        }\n        var g=Date.now(),\n          v=(d(1) - m) / u,\n          y=t.duration ? 1e3 * t.duration:1e3 * v * .8;\n        return this._moveStart(!0, t.noMoveStart), function t(){\n          var e=(Date.now() - g) / y,\n            i=(1 - Math.pow(1 - e, 1.5)) * v;\n          e <=1 ? (this._flyToFrame=x(t, this), this._move(this.unproject(s.add(r.subtract(s).multiplyBy(f(i) / l)), a), this.getScaleZoom(h / (e=i, h * (p(m) / p(m + u * e))), a), {\n            flyTo: !0\n          })):this._move(n, o)._moveEnd(!0);\n        }.call(this), this;\n      },\n      flyToBounds: function (t, e){\n        t=this._getBoundsCenterZoom(t, e);\n        return this.flyTo(t.center, t.zoom, e);\n      },\n      setMaxBounds: function (t){\n        return t=g(t), this.listens("moveend", this._panInsideMaxBounds)&&this.off("moveend", this._panInsideMaxBounds), t.isValid() ? (this.options.maxBounds=t, this._loaded&&this._panInsideMaxBounds(), this.on("moveend", this._panInsideMaxBounds)):(this.options.maxBounds=null, this);\n      },\n      setMinZoom: function (t){\n        var e=this.options.minZoom;\n        return this.options.minZoom=t, this._loaded&&e!==t&&(this.fire("zoomlevelschange"), this.getZoom() < this.options.minZoom) ? this.setZoom(t):this;\n      },\n      setMaxZoom: function (t){\n        var e=this.options.maxZoom;\n        return this.options.maxZoom=t, this._loaded&&e!==t&&(this.fire("zoomlevelschange"), this.getZoom() > this.options.maxZoom) ? this.setZoom(t):this;\n      },\n      panInsideBounds: function (t, e){\n        this._enforcingBounds = !0;\n        var i=this.getCenter(),\n          t=this._limitCenter(i, this._zoom, g(t));\n        return i.equals(t)||this.panTo(t, e), this._enforcingBounds = !1, this;\n      },\n      panInside: function (t, e){\n        var i=m((e=e||{}).paddingTopLeft||e.padding||[0, 0]),\n          n=m(e.paddingBottomRight||e.padding||[0, 0]),\n          o=this.project(this.getCenter()),\n          t=this.project(t),\n          s=this.getPixelBounds(),\n          i=_([s.min.add(i), s.max.subtract(n)]),\n          s=i.getSize();\n        return i.contains(t)||(this._enforcingBounds = !0, n=t.subtract(i.getCenter()), i=i.extend(t).getSize().subtract(s), o.x +=n.x < 0 ? -i.x:i.x, o.y +=n.y < 0 ? -i.y:i.y, this.panTo(this.unproject(o), e), this._enforcingBounds = !1), this;\n      },\n      invalidateSize: function (t){\n        if(!this._loaded) return this;\n        t=l({\n          animate: !1,\n          pan: !0\n        }, !0===t ? {\n          animate: !0\n        }:t);\n        var e=this.getSize(),\n          i=(this._sizeChanged = !0, this._lastCenter=null, this.getSize()),\n          n=e.divideBy(2).round(),\n          o=i.divideBy(2).round(),\n          n=n.subtract(o);\n        return n.x||n.y ? (t.animate&&t.pan ? this.panBy(n):(t.pan&&this._rawPanBy(n), this.fire("move"), t.debounceMoveend ? (clearTimeout(this._sizeTimer), this._sizeTimer=setTimeout(a(this.fire, this, "moveend"), 200)):this.fire("moveend")), this.fire("resize", {\n          oldSize: e,\n          newSize: i\n        })):this;\n      },\n      stop: function (){\n        return this.setZoom(this._limitZoom(this._zoom)), this.options.zoomSnap||this.fire("viewreset"), this._stop();\n      },\n      locate: function (t){\n        var e, i;\n        return t=this._locateOptions=l({\n          timeout: 1e4,\n          watch: !1\n        }, t), "geolocation" in navigator ? (e=a(this._handleGeolocationResponse, this), i=a(this._handleGeolocationError, this), t.watch ? this._locationWatchId=navigator.geolocation.watchPosition(e, i, t):navigator.geolocation.getCurrentPosition(e, i, t)):this._handleGeolocationError({\n          code: 0,\n          message: "Geolocation not supported."\n        }), this;\n      },\n      stopLocate: function (){\n        return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId), this._locateOptions&&(this._locateOptions.setView = !1), this;\n      },\n      _handleGeolocationError: function (t){\n        var e;\n        this._container._leaflet_id&&(e=t.code, t=t.message||(1===e ? "permission denied":2===e ? "position unavailable":"timeout"), this._locateOptions.setView&&!this._loaded&&this.fitWorld(), this.fire("locationerror", {\n          code: e,\n          message: "Geolocation error: " + t + "."\n        }));\n      },\n      _handleGeolocationResponse: function (t){\n        if(this._container._leaflet_id){\n          var e,\n            i,\n            n=new v(t.coords.latitude, t.coords.longitude),\n            o=n.toBounds(2 * t.coords.accuracy),\n            s=this._locateOptions,\n            r=(s.setView&&(e=this.getBoundsZoom(o), this.setView(n, s.maxZoom ? Math.min(e, s.maxZoom):e)), {\n              latlng: n,\n              bounds: o,\n              timestamp: t.timestamp\n            });\n          for (i in t.coords) "number"==typeof t.coords[i]&&(r[i]=t.coords[i]);\n          this.fire("locationfound", r);\n        }\n      },\n      addHandler: function (t, e){\n        return e&&(e=this[t]=new e(this), this._handlers.push(e), this.options[t]&&e.enable()), this;\n      },\n      remove: function (){\n        if(this._initEvents(!0), this.options.maxBounds&&this.off("moveend", this._panInsideMaxBounds), this._containerId!==this._container._leaflet_id) throw new Error("Map container is being reused by another instance");\n        try {\n          delete this._container._leaflet_id, delete this._containerId;\n        } catch (t){\n          this._container._leaflet_id=void 0, this._containerId=void 0;\n        }\n        for (var t in void 0!==this._locationWatchId&&this.stopLocate(), this._stop(), T(this._mapPane), this._clearControlPos&&this._clearControlPos(), this._resizeRequest&&(r(this._resizeRequest), this._resizeRequest=null), this._clearHandlers(), this._loaded&&this.fire("unload"), this._layers) this._layers[t].remove();\n        for (t in this._panes) T(this._panes[t]);\n        return this._layers=[], this._panes=[], delete this._mapPane, delete this._renderer, this;\n      },\n      createPane: function (t, e){\n        e=P("div", "leaflet-pane" + (t ? " leaflet-" + t.replace("Pane", "") + "-pane":""), e||this._mapPane);\n        return t&&(this._panes[t]=e), e;\n      },\n      getCenter: function (){\n        return this._checkIfLoaded(), this._lastCenter&&!this._moved() ? this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint());\n      },\n      getZoom: function (){\n        return this._zoom;\n      },\n      getBounds: function (){\n        var t=this.getPixelBounds();\n        return new s(this.unproject(t.getBottomLeft()), this.unproject(t.getTopRight()));\n      },\n      getMinZoom: function (){\n        return void 0===this.options.minZoom ? this._layersMinZoom||0:this.options.minZoom;\n      },\n      getMaxZoom: function (){\n        return void 0===this.options.maxZoom ? void 0===this._layersMaxZoom ? 1 / 0:this._layersMaxZoom:this.options.maxZoom;\n      },\n      getBoundsZoom: function (t, e, i){\n        t=g(t), i=m(i||[0, 0]);\n        var n=this.getZoom()||0,\n          o=this.getMinZoom(),\n          s=this.getMaxZoom(),\n          r=t.getNorthWest(),\n          t=t.getSouthEast(),\n          i=this.getSize().subtract(i),\n          t=_(this.project(t, n), this.project(r, n)).getSize(),\n          r=b.any3d ? this.options.zoomSnap:1,\n          a=i.x / t.x,\n          i=i.y / t.y,\n          t=e ? Math.max(a, i):Math.min(a, i),\n          n=this.getScaleZoom(t, n);\n        return r&&(n=Math.round(n / (r / 100)) * (r / 100), n=e ? Math.ceil(n / r) * r:Math.floor(n / r) * r), Math.max(o, Math.min(s, n));\n      },\n      getSize: function (){\n        return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0, this._container.clientHeight||0), this._sizeChanged = !1), this._size.clone();\n      },\n      getPixelBounds: function (t, e){\n        t=this._getTopLeftPoint(t, e);\n        return new f(t, t.add(this.getSize()));\n      },\n      getPixelOrigin: function (){\n        return this._checkIfLoaded(), this._pixelOrigin;\n      },\n      getPixelWorldBounds: function (t){\n        return this.options.crs.getProjectedBounds(void 0===t ? this.getZoom():t);\n      },\n      getPane: function (t){\n        return "string"==typeof t ? this._panes[t]:t;\n      },\n      getPanes: function (){\n        return this._panes;\n      },\n      getContainer: function (){\n        return this._container;\n      },\n      getZoomScale: function (t, e){\n        var i=this.options.crs;\n        return e=void 0===e ? this._zoom:e, i.scale(t) / i.scale(e);\n      },\n      getScaleZoom: function (t, e){\n        var i=this.options.crs,\n          t=(e=void 0===e ? this._zoom:e, i.zoom(t * i.scale(e)));\n        return isNaN(t) ? 1 / 0:t;\n      },\n      project: function (t, e){\n        return e=void 0===e ? this._zoom:e, this.options.crs.latLngToPoint(w(t), e);\n      },\n      unproject: function (t, e){\n        return e=void 0===e ? this._zoom:e, this.options.crs.pointToLatLng(m(t), e);\n      },\n      layerPointToLatLng: function (t){\n        t=m(t).add(this.getPixelOrigin());\n        return this.unproject(t);\n      },\n      latLngToLayerPoint: function (t){\n        return this.project(w(t))._round()._subtract(this.getPixelOrigin());\n      },\n      wrapLatLng: function (t){\n        return this.options.crs.wrapLatLng(w(t));\n      },\n      wrapLatLngBounds: function (t){\n        return this.options.crs.wrapLatLngBounds(g(t));\n      },\n      distance: function (t, e){\n        return this.options.crs.distance(w(t), w(e));\n      },\n      containerPointToLayerPoint: function (t){\n        return m(t).subtract(this._getMapPanePos());\n      },\n      layerPointToContainerPoint: function (t){\n        return m(t).add(this._getMapPanePos());\n      },\n      containerPointToLatLng: function (t){\n        t=this.containerPointToLayerPoint(m(t));\n        return this.layerPointToLatLng(t);\n      },\n      latLngToContainerPoint: function (t){\n        return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)));\n      },\n      mouseEventToContainerPoint: function (t){\n        return De(t, this._container);\n      },\n      mouseEventToLayerPoint: function (t){\n        return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t));\n      },\n      mouseEventToLatLng: function (t){\n        return this.layerPointToLatLng(this.mouseEventToLayerPoint(t));\n      },\n      _initContainer: function (t){\n        t=this._container=_e(t);\n        if(!t) throw new Error("Map container not found.");\n        if(t._leaflet_id) throw new Error("Map container is already initialized.");\n        S(t, "scroll", this._onScroll, this), this._containerId=h(t);\n      },\n      _initLayout: function (){\n        var t=this._container,\n          e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d, M(t, "leaflet-container" + (b.touch ? " leaflet-touch":"") + (b.retina ? " leaflet-retina":"") + (b.ielt9 ? " leaflet-oldie":"") + (b.safari ? " leaflet-safari":"") + (this._fadeAnimated ? " leaflet-fade-anim":"")), pe(t, "position"));\n        "absolute"!==e&&"relative"!==e&&"fixed"!==e&&"sticky"!==e&&(t.style.position="relative"), this._initPanes(), this._initControlPos&&this._initControlPos();\n      },\n      _initPanes: function (){\n        var t=this._panes={};\n        this._paneRenderers={}, this._mapPane=this.createPane("mapPane", this._container), Z(this._mapPane, new p(0, 0)), this.createPane("tilePane"), this.createPane("overlayPane"), this.createPane("shadowPane"), this.createPane("markerPane"), this.createPane("tooltipPane"), this.createPane("popupPane"), this.options.markerZoomAnimation||(M(t.markerPane, "leaflet-zoom-hide"), M(t.shadowPane, "leaflet-zoom-hide"));\n      },\n      _resetView: function (t, e, i){\n        Z(this._mapPane, new p(0, 0));\n        var n = !this._loaded,\n          o=(this._loaded = !0, e=this._limitZoom(e), this.fire("viewprereset"), this._zoom!==e);\n        this._moveStart(o, i)._move(t, e)._moveEnd(o), this.fire("viewreset"), n&&this.fire("load");\n      },\n      _moveStart: function (t, e){\n        return t&&this.fire("zoomstart"), e||this.fire("movestart"), this;\n      },\n      _move: function (t, e, i, n){\n        void 0===e&&(e=this._zoom);\n        var o=this._zoom!==e;\n        return this._zoom=e, this._lastCenter=t, this._pixelOrigin=this._getNewPixelOrigin(t), n ? i&&i.pinch&&this.fire("zoom", i):((o||i&&i.pinch)&&this.fire("zoom", i), this.fire("move", i)), this;\n      },\n      _moveEnd: function (t){\n        return t&&this.fire("zoomend"), this.fire("moveend");\n      },\n      _stop: function (){\n        return r(this._flyToFrame), this._panAnim&&this._panAnim.stop(), this;\n      },\n      _rawPanBy: function (t){\n        Z(this._mapPane, this._getMapPanePos().subtract(t));\n      },\n      _getZoomSpan: function (){\n        return this.getMaxZoom() - this.getMinZoom();\n      },\n      _panInsideMaxBounds: function (){\n        this._enforcingBounds||this.panInsideBounds(this.options.maxBounds);\n      },\n      _checkIfLoaded: function (){\n        if(!this._loaded) throw new Error("Set map center and zoom first.");\n      },\n      _initEvents: function (t){\n        this._targets={};\n        var e=t ? k:S;\n        e((this._targets[h(this._container)]=this)._container, "click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup", this._handleDOMEvent, this), this.options.trackResize&&e(window, "resize", this._onResize, this), b.any3d&&this.options.transform3DLimit&&(t ? this.off:this.on).call(this, "moveend", this._onMoveEnd);\n      },\n      _onResize: function (){\n        r(this._resizeRequest), this._resizeRequest=x(function (){\n          this.invalidateSize({\n            debounceMoveend: !0\n          });\n        }, this);\n      },\n      _onScroll: function (){\n        this._container.scrollTop=0, this._container.scrollLeft=0;\n      },\n      _onMoveEnd: function (){\n        var t=this._getMapPanePos();\n        Math.max(Math.abs(t.x), Math.abs(t.y)) >=this.options.transform3DLimit&&this._resetView(this.getCenter(), this.getZoom());\n      },\n      _findEventTargets: function (t, e){\n        for (var i, n=[], o="mouseout"===e||"mouseover"===e, s=t.target||t.srcElement, r = !1; s;){\n          if((i=this._targets[h(s)])&&("click"===e||"preclick"===e)&&this._draggableMoved(i)){\n            r = !0;\n            break;\n          }\n          if(i&&i.listens(e, !0)){\n            if(o&&!We(s, t)) break;\n            if(n.push(i), o) break;\n          }\n          if(s===this._container) break;\n          s=s.parentNode;\n        }\n        return n=n.length||r || o||!this.listens(e, !0) ? n:[this];\n      },\n      _isClickDisabled: function (t){\n        for (; t&&t!==this._container;){\n          if(t._leaflet_disable_click) return !0;\n          t=t.parentNode;\n        }\n      },\n      _handleDOMEvent: function (t){\n        var e,\n          i=t.target||t.srcElement;\n        !this._loaded||i._leaflet_disable_events||"click"===t.type&&this._isClickDisabled(i)||("mousedown"===(e=t.type)&&Me(i), this._fireDOMEvent(t, e));\n      },\n      _mouseEvents: ["click", "dblclick", "mouseover", "mouseout", "contextmenu"],\n      _fireDOMEvent: function (t, e, i){\n        "click"===t.type&&((a=l({}, t)).type="preclick", this._fireDOMEvent(a, a.type, i));\n        var n=this._findEventTargets(t, e);\n        if(i){\n          for (var o=[], s=0; s < i.length; s++) i[s].listens(e, !0)&&o.push(i[s]);\n          n=o.concat(n);\n        }\n        if(n.length){\n          "contextmenu"===e&&O(t);\n          var r,\n            a=n[0],\n            h={\n              originalEvent: t\n            };\n          for ("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type&&(r=a.getLatLng&&(!a._radius||a._radius <=10), h.containerPoint=r ? this.latLngToContainerPoint(a.getLatLng()):this.mouseEventToContainerPoint(t), h.layerPoint=this.containerPointToLayerPoint(h.containerPoint), h.latlng=r ? a.getLatLng():this.layerPointToLatLng(h.layerPoint)), s=0; s < n.length; s++) if(n[s].fire(e, h, !0), h.originalEvent._stopped||!1===n[s].options.bubblingMouseEvents&&-1!==G(this._mouseEvents, e)) return;\n        }\n      },\n      _draggableMoved: function (t){\n        return (t=t.dragging&&t.dragging.enabled() ? t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved();\n      },\n      _clearHandlers: function (){\n        for (var t=0, e=this._handlers.length; t < e; t++) this._handlers[t].disable();\n      },\n      whenReady: function (t, e){\n        return this._loaded ? t.call(e||this, {\n          target: this\n        }):this.on("load", t, e), this;\n      },\n      _getMapPanePos: function (){\n        return Pe(this._mapPane)||new p(0, 0);\n      },\n      _moved: function (){\n        var t=this._getMapPanePos();\n        return t&&!t.equals([0, 0]);\n      },\n      _getTopLeftPoint: function (t, e){\n        return (t&&void 0!==e ? this._getNewPixelOrigin(t, e):this.getPixelOrigin()).subtract(this._getMapPanePos());\n      },\n      _getNewPixelOrigin: function (t, e){\n        var i=this.getSize()._divideBy(2);\n        return this.project(t, e)._subtract(i)._add(this._getMapPanePos())._round();\n      },\n      _latLngToNewLayerPoint: function (t, e, i){\n        i=this._getNewPixelOrigin(i, e);\n        return this.project(t, e)._subtract(i);\n      },\n      _latLngBoundsToNewLayerBounds: function (t, e, i){\n        i=this._getNewPixelOrigin(i, e);\n        return _([this.project(t.getSouthWest(), e)._subtract(i), this.project(t.getNorthWest(), e)._subtract(i), this.project(t.getSouthEast(), e)._subtract(i), this.project(t.getNorthEast(), e)._subtract(i)]);\n      },\n      _getCenterLayerPoint: function (){\n        return this.containerPointToLayerPoint(this.getSize()._divideBy(2));\n      },\n      _getCenterOffset: function (t){\n        return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint());\n      },\n      _limitCenter: function (t, e, i){\n        var n, o;\n        return !i||(n=this.project(t, e), o=this.getSize().divideBy(2), o=new f(n.subtract(o), n.add(o)), o=this._getBoundsOffset(o, i, e), Math.abs(o.x) <=1&&Math.abs(o.y) <=1) ? t:this.unproject(n.add(o), e);\n      },\n      _limitOffset: function (t, e){\n        var i;\n        return e ? (i=new f((i=this.getPixelBounds()).min.add(t), i.max.add(t)), t.add(this._getBoundsOffset(i, e))):t;\n      },\n      _getBoundsOffset: function (t, e, i){\n        e=_(this.project(e.getNorthEast(), i), this.project(e.getSouthWest(), i)), i=e.min.subtract(t.min), e=e.max.subtract(t.max);\n        return new p(this._rebound(i.x, -e.x), this._rebound(i.y, -e.y));\n      },\n      _rebound: function (t, e){\n        return 0 < t + e ? Math.round(t - e) / 2:Math.max(0, Math.ceil(t)) - Math.max(0, Math.floor(e));\n      },\n      _limitZoom: function (t){\n        var e=this.getMinZoom(),\n          i=this.getMaxZoom(),\n          n=b.any3d ? this.options.zoomSnap:1;\n        return n&&(t=Math.round(t / n) * n), Math.max(e, Math.min(i, t));\n      },\n      _onPanTransitionStep: function (){\n        this.fire("move");\n      },\n      _onPanTransitionEnd: function (){\n        z(this._mapPane, "leaflet-pan-anim"), this.fire("moveend");\n      },\n      _tryAnimatedPan: function (t, e){\n        t=this._getCenterOffset(t)._trunc();\n        return !(!0!==(e&&e.animate)&&!this.getSize().contains(t))&&(this.panBy(t, e), !0);\n      },\n      _createAnimProxy: function (){\n        var t=this._proxy=P("div", "leaflet-proxy leaflet-zoom-animated");\n        this._panes.mapPane.appendChild(t), this.on("zoomanim", function (t){\n          var e=ue,\n            i=this._proxy.style[e];\n          be(this._proxy, this.project(t.center, t.zoom), this.getZoomScale(t.zoom, 1)), i===this._proxy.style[e]&&this._animatingZoom&&this._onZoomTransitionEnd();\n        }, this), this.on("load moveend", this._animMoveEnd, this), this._on("unload", this._destroyAnimProxy, this);\n      },\n      _destroyAnimProxy: function (){\n        T(this._proxy), this.off("load moveend", this._animMoveEnd, this), delete this._proxy;\n      },\n      _animMoveEnd: function (){\n        var t=this.getCenter(),\n          e=this.getZoom();\n        be(this._proxy, this.project(t, e), this.getZoomScale(e, 1));\n      },\n      _catchTransitionEnd: function (t){\n        this._animatingZoom&&0 <=t.propertyName.indexOf("transform")&&this._onZoomTransitionEnd();\n      },\n      _nothingToAnimate: function (){\n        return !this._container.getElementsByClassName("leaflet-zoom-animated").length;\n      },\n      _tryAnimatedZoom: function (t, e, i){\n        if(!this._animatingZoom){\n          if(i=i||{}, !this._zoomAnimated||!1===i.animate||this._nothingToAnimate()||Math.abs(e - this._zoom) > this.options.zoomAnimationThreshold) return !1;\n          var n=this.getZoomScale(e),\n            n=this._getCenterOffset(t)._divideBy(1 - 1 / n);\n          if(!0!==i.animate&&!this.getSize().contains(n)) return !1;\n          x(function (){\n            this._moveStart(!0, i.noMoveStart||!1)._animateZoom(t, e, !0);\n          }, this);\n        }\n        return !0;\n      },\n      _animateZoom: function (t, e, i, n){\n        this._mapPane&&(i&&(this._animatingZoom = !0, this._animateToCenter=t, this._animateToZoom=e, M(this._mapPane, "leaflet-zoom-anim")), this.fire("zoomanim", {\n          center: t,\n          zoom: e,\n          noUpdate: n\n        }), this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom), this._move(this._animateToCenter, this._animateToZoom, void 0, !0), setTimeout(a(this._onZoomTransitionEnd, this), 250));\n      },\n      _onZoomTransitionEnd: function (){\n        this._animatingZoom&&(this._mapPane&&z(this._mapPane, "leaflet-zoom-anim"), this._animatingZoom = !1, this._move(this._animateToCenter, this._animateToZoom, void 0, !0), this._tempFireZoomEvent&&this.fire("zoom"), delete this._tempFireZoomEvent, this.fire("move"), this._moveEnd(!0));\n      }\n    });\n  function Ue(t){\n    return new B(t);\n  }\n  var B=et.extend({\n      options: {\n        position: "topright"\n      },\n      initialize: function (t){\n        c(this, t);\n      },\n      getPosition: function (){\n        return this.options.position;\n      },\n      setPosition: function (t){\n        var e=this._map;\n        return e&&e.removeControl(this), this.options.position=t, e&&e.addControl(this), this;\n      },\n      getContainer: function (){\n        return this._container;\n      },\n      addTo: function (t){\n        this.remove(), this._map=t;\n        var e=this._container=this.onAdd(t),\n          i=this.getPosition(),\n          t=t._controlCorners[i];\n        return M(e, "leaflet-control"), -1!==i.indexOf("bottom") ? t.insertBefore(e, t.firstChild):t.appendChild(e), this._map.on("unload", this.remove, this), this;\n      },\n      remove: function (){\n        return this._map&&(T(this._container), this.onRemove&&this.onRemove(this._map), this._map.off("unload", this.remove, this), this._map=null), this;\n      },\n      _refocusOnMap: function (t){\n        this._map&&t && 0 < t.screenX&&0 < t.screenY&&this._map.getContainer().focus();\n      }\n    }),\n    Ve=(A.include({\n      addControl: function (t){\n        return t.addTo(this), this;\n      },\n      removeControl: function (t){\n        return t.remove(), this;\n      },\n      _initControlPos: function (){\n        var i=this._controlCorners={},\n          n="leaflet-",\n          o=this._controlContainer=P("div", n + "control-container", this._container);\n        function t(t, e){\n          i[t + e]=P("div", n + t + " " + n + e, o);\n        }\n        t("top", "left"), t("top", "right"), t("bottom", "left"), t("bottom", "right");\n      },\n      _clearControlPos: function (){\n        for (var t in this._controlCorners) T(this._controlCorners[t]);\n        T(this._controlContainer), delete this._controlCorners, delete this._controlContainer;\n      }\n    }), B.extend({\n      options: {\n        collapsed: !0,\n        position: "topright",\n        autoZIndex: !0,\n        hideSingleBase: !1,\n        sortLayers: !1,\n        sortFunction: function (t, e, i, n){\n          return i < n ? -1:n < i ? 1:0;\n        }\n      },\n      initialize: function (t, e, i){\n        for (var n in c(this, i), this._layerControlInputs=[], this._layers=[], this._lastZIndex=0, this._handlingClick = !1, this._preventClick = !1, t) this._addLayer(t[n], n);\n        for (n in e) this._addLayer(e[n], n, !0);\n      },\n      onAdd: function (t){\n        this._initLayout(), this._update(), (this._map=t).on("zoomend", this._checkDisabledLayers, this);\n        for (var e=0; e < this._layers.length; e++) this._layers[e].layer.on("add remove", this._onLayerChange, this);\n        return this._container;\n      },\n      addTo: function (t){\n        return B.prototype.addTo.call(this, t), this._expandIfNotCollapsed();\n      },\n      onRemove: function (){\n        this._map.off("zoomend", this._checkDisabledLayers, this);\n        for (var t=0; t < this._layers.length; t++) this._layers[t].layer.off("add remove", this._onLayerChange, this);\n      },\n      addBaseLayer: function (t, e){\n        return this._addLayer(t, e), this._map ? this._update():this;\n      },\n      addOverlay: function (t, e){\n        return this._addLayer(t, e, !0), this._map ? this._update():this;\n      },\n      removeLayer: function (t){\n        t.off("add remove", this._onLayerChange, this);\n        t=this._getLayer(h(t));\n        return t&&this._layers.splice(this._layers.indexOf(t), 1), this._map ? this._update():this;\n      },\n      expand: function (){\n        M(this._container, "leaflet-control-layers-expanded"), this._section.style.height=null;\n        var t=this._map.getSize().y - (this._container.offsetTop + 50);\n        return t < this._section.clientHeight ? (M(this._section, "leaflet-control-layers-scrollbar"), this._section.style.height=t + "px"):z(this._section, "leaflet-control-layers-scrollbar"), this._checkDisabledLayers(), this;\n      },\n      collapse: function (){\n        return z(this._container, "leaflet-control-layers-expanded"), this;\n      },\n      _initLayout: function (){\n        var t="leaflet-control-layers",\n          e=this._container=P("div", t),\n          i=this.options.collapsed,\n          n=(e.setAttribute("aria-haspopup", !0), Ie(e), Be(e), this._section=P("section", t + "-list")),\n          o=(i&&(this._map.on("click", this.collapse, this), S(e, {\n            mouseenter: this._expandSafely,\n            mouseleave: this.collapse\n          }, this)), this._layersLink=P("a", t + "-toggle", e));\n        o.href="#", o.title="Layers", o.setAttribute("role", "button"), S(o, {\n          keydown: function (t){\n            13===t.keyCode&&this._expandSafely();\n          },\n          click: function (t){\n            O(t), this._expandSafely();\n          }\n        }, this), i||this.expand (), this._baseLayersList=P("div", t + "-base", n), this._separator=P("div", t + "-separator", n), this._overlaysList=P("div", t + "-overlays", n), e.appendChild(n);\n      },\n      _getLayer: function (t){\n        for (var e=0; e < this._layers.length; e++) if(this._layers[e]&&h(this._layers[e].layer)===t) return this._layers[e];\n      },\n      _addLayer: function (t, e, i){\n        this._map&&t.on("add remove", this._onLayerChange, this), this._layers.push({\n          layer: t,\n          name: e,\n          overlay: i\n        }), this.options.sortLayers&&this._layers.sort(a(function (t, e){\n          return this.options.sortFunction(t.layer, e.layer, t.name, e.name);\n        }, this)), this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++, t.setZIndex(this._lastZIndex)), this._expandIfNotCollapsed();\n      },\n      _update: function (){\n        if(this._container){\n          me(this._baseLayersList), me(this._overlaysList), this._layerControlInputs=[];\n          for (var t, e, i, n=0, o=0; o < this._layers.length; o++) i=this._layers[o], this._addItem(i), e=e||i.overlay, t=t||!i.overlay, n +=i.overlay ? 0:1;\n          this.options.hideSingleBase&&(this._baseLayersList.style.display=(t=t&&1 < n) ? "":"none"), this._separator.style.display=e&&t ? "":"none";\n        }\n        return this;\n      },\n      _onLayerChange: function (t){\n        this._handlingClick||this._update();\n        var e=this._getLayer(h(t.target)),\n          t=e.overlay ? "add"===t.type ? "overlayadd":"overlayremove":"add"===t.type ? "baselayerchange":null;\n        t&&this._map.fire(t, e);\n      },\n      _createRadioElement: function (t, e){\n        t=\'<input type="radio" class="leaflet-control-layers-selector" name="\' + t + \'"\' + (e ? \' checked="checked"\':"") + "/>", e=document.createElement("div");\n        return e.innerHTML=t, e.firstChild;\n      },\n      _addItem: function (t){\n        var e,\n          i=document.createElement("label"),\n          n=this._map.hasLayer(t.layer),\n          n=(t.overlay ? ((e=document.createElement("input")).type="checkbox", e.className="leaflet-control-layers-selector", e.defaultChecked=n):e=this._createRadioElement("leaflet-base-layers_" + h(this), n), this._layerControlInputs.push(e), e.layerId=h(t.layer), S(e, "click", this._onInputClick, this), document.createElement("span")),\n          o=(n.innerHTML=" " + t.name, document.createElement("span"));\n        return i.appendChild(o), o.appendChild(e), o.appendChild(n), (t.overlay ? this._overlaysList:this._baseLayersList).appendChild(i), this._checkDisabledLayers(), i;\n      },\n      _onInputClick: function (){\n        if(!this._preventClick){\n          var t,\n            e,\n            i=this._layerControlInputs,\n            n=[],\n            o=[];\n          this._handlingClick = !0;\n          for (var s=i.length - 1; 0 <=s; s--) t=i[s], e=this._getLayer(t.layerId).layer, t.checked ? n.push(e):t.checked||o.push(e);\n          for (s=0; s < o.length; s++) this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);\n          for (s=0; s < n.length; s++) this._map.hasLayer(n[s])||this._map.addLayer(n[s]);\n          this._handlingClick = !1, this._refocusOnMap();\n        }\n      },\n      _checkDisabledLayers: function (){\n        for (var t, e, i=this._layerControlInputs, n=this._map.getZoom(), o=i.length - 1; 0 <=o; o--) t=i[o], e=this._getLayer(t.layerId).layer, t.disabled=void 0!==e.options.minZoom&&n < e.options.minZoom||void 0!==e.options.maxZoom&&n > e.options.maxZoom;\n      },\n      _expandIfNotCollapsed: function (){\n        return this._map&&!this.options.collapsed&&this.expand (), this;\n      },\n      _expandSafely: function (){\n        var t=this._section,\n          e=(this._preventClick = !0, S(t, "click", O), this.expand (), this);\n        setTimeout(function (){\n          k(t, "click", O), e._preventClick = !1;\n        });\n      }\n    })),\n    qe=B.extend({\n      options: {\n        position: "topleft",\n        zoomInText: \'<span aria-hidden="true">+</span>\',\n        zoomInTitle: "Zoom in",\n        zoomOutText: \'<span aria-hidden="true">&#x2212;</span>\',\n        zoomOutTitle: "Zoom out"\n      },\n      onAdd: function (t){\n        var e="leaflet-control-zoom",\n          i=P("div", e + " leaflet-bar"),\n          n=this.options;\n        return this._zoomInButton=this._createButton(n.zoomInText, n.zoomInTitle, e + "-in", i, this._zoomIn), this._zoomOutButton=this._createButton(n.zoomOutText, n.zoomOutTitle, e + "-out", i, this._zoomOut), this._updateDisabled(), t.on("zoomend zoomlevelschange", this._updateDisabled, this), i;\n      },\n      onRemove: function (t){\n        t.off("zoomend zoomlevelschange", this._updateDisabled, this);\n      },\n      disable: function (){\n        return this._disabled = !0, this._updateDisabled(), this;\n      },\n      enable: function (){\n        return this._disabled = !1, this._updateDisabled(), this;\n      },\n      _zoomIn: function (t){\n        !this._disabled&&this._map._zoom < this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta * (t.shiftKey ? 3:1));\n      },\n      _zoomOut: function (t){\n        !this._disabled&&this._map._zoom > this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta * (t.shiftKey ? 3:1));\n      },\n      _createButton: function (t, e, i, n, o){\n        i=P("a", i, n);\n        return i.innerHTML=t, i.href="#", i.title=e, i.setAttribute("role", "button"), i.setAttribute("aria-label", e), Ie(i), S(i, "click", Re), S(i, "click", o, this), S(i, "click", this._refocusOnMap, this), i;\n      },\n      _updateDisabled: function (){\n        var t=this._map,\n          e="leaflet-disabled";\n        z(this._zoomInButton, e), z(this._zoomOutButton, e), this._zoomInButton.setAttribute("aria-disabled", "false"), this._zoomOutButton.setAttribute("aria-disabled", "false"), !this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton, e), this._zoomOutButton.setAttribute("aria-disabled", "true")), !this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton, e), this._zoomInButton.setAttribute("aria-disabled", "true"));\n      }\n    }),\n    Ge=(A.mergeOptions({\n      zoomControl: !0\n    }), A.addInitHook(function (){\n      this.options.zoomControl&&(this.zoomControl=new qe(), this.addControl(this.zoomControl));\n    }), B.extend({\n      options: {\n        position: "bottomleft",\n        maxWidth: 100,\n        metric: !0,\n        imperial: !0\n      },\n      onAdd: function (t){\n        var e="leaflet-control-scale",\n          i=P("div", e),\n          n=this.options;\n        return this._addScales(n, e + "-line", i), t.on(n.updateWhenIdle ? "moveend":"move", this._update, this), t.whenReady(this._update, this), i;\n      },\n      onRemove: function (t){\n        t.off(this.options.updateWhenIdle ? "moveend":"move", this._update, this);\n      },\n      _addScales: function (t, e, i){\n        t.metric&&(this._mScale=P("div", e, i)), t.imperial&&(this._iScale=P("div", e, i));\n      },\n      _update: function (){\n        var t=this._map,\n          e=t.getSize().y / 2,\n          t=t.distance(t.containerPointToLatLng([0, e]), t.containerPointToLatLng([this.options.maxWidth, e]));\n        this._updateScales(t);\n      },\n      _updateScales: function (t){\n        this.options.metric&&t && this._updateMetric(t), this.options.imperial&&t && this._updateImperial(t);\n      },\n      _updateMetric: function (t){\n        var e=this._getRoundNum(t);\n        this._updateScale(this._mScale, e < 1e3 ? e + " m":e / 1e3 + " km", e / t);\n      },\n      _updateImperial: function (t){\n        var e,\n          i,\n          t=3.2808399 * t;\n        5280 < t ? (i=this._getRoundNum(e=t / 5280), this._updateScale(this._iScale, i + " mi", i / e)):(i=this._getRoundNum(t), this._updateScale(this._iScale, i + " ft", i / t));\n      },\n      _updateScale: function (t, e, i){\n        t.style.width=Math.round(this.options.maxWidth * i) + "px", t.innerHTML=e;\n      },\n      _getRoundNum: function (t){\n        var e=Math.pow(10, (Math.floor(t) + "").length - 1),\n          t=t / e;\n        return e * (t=10 <=t ? 10:5 <=t ? 5:3 <=t ? 3:2 <=t ? 2:1);\n      }\n    })),\n    Ke=B.extend({\n      options: {\n        position: "bottomright",\n        prefix: \'<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">\' + (b.inlineSvg ? \'<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg> \':"") + "Leaflet</a>"\n      },\n      initialize: function (t){\n        c(this, t), this._attributions={};\n      },\n      onAdd: function (t){\n        for (var e in (t.attributionControl=this)._container=P("div", "leaflet-control-attribution"), Ie(this._container), t._layers) t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());\n        return this._update(), t.on("layeradd", this._addAttribution, this), this._container;\n      },\n      onRemove: function (t){\n        t.off("layeradd", this._addAttribution, this);\n      },\n      _addAttribution: function (t){\n        t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()), t.layer.once("remove", function (){\n          this.removeAttribution(t.layer.getAttribution());\n        }, this));\n      },\n      setPrefix: function (t){\n        return this.options.prefix=t, this._update(), this;\n      },\n      addAttribution: function (t){\n        return t&&(this._attributions[t]||(this._attributions[t]=0), this._attributions[t]++, this._update()), this;\n      },\n      removeAttribution: function (t){\n        return t&&this._attributions[t]&&(this._attributions[t]--, this._update()), this;\n      },\n      _update: function (){\n        if(this._map){\n          var t,\n            e=[];\n          for (t in this._attributions) this._attributions[t]&&e.push(t);\n          var i=[];\n          this.options.prefix&&i.push(this.options.prefix), e.length&&i.push(e.join(", ")), this._container.innerHTML=i.join(\' <span aria-hidden="true">|</span> \');\n        }\n      }\n    }),\n    n=(A.mergeOptions({\n      attributionControl: !0\n    }), A.addInitHook(function (){\n      this.options.attributionControl&&new Ke().addTo(this);\n    }), B.Layers=Ve, B.Zoom=qe, B.Scale=Ge, B.Attribution=Ke, Ue.layers=function (t, e, i){\n      return new Ve(t, e, i);\n    }, Ue.zoom=function (t){\n      return new qe(t);\n    }, Ue.scale=function (t){\n      return new Ge(t);\n    }, Ue.attribution=function (t){\n      return new Ke(t);\n    }, et.extend({\n      initialize: function (t){\n        this._map=t;\n      },\n      enable: function (){\n        return this._enabled||(this._enabled = !0, this.addHooks()), this;\n      },\n      disable: function (){\n        return this._enabled&&(this._enabled = !1, this.removeHooks()), this;\n      },\n      enabled: function (){\n        return !!this._enabled;\n      }\n    })),\n    ft=(n.addTo=function (t, e){\n      return t.addHandler(e, this), this;\n    }, {\n      Events: e\n    }),\n    Ye=b.touch ? "touchstart mousedown":"mousedown",\n    Xe=it.extend({\n      options: {\n        clickTolerance: 3\n      },\n      initialize: function (t, e, i, n){\n        c(this, n), this._element=t, this._dragStartTarget=e||t, this._preventOutline=i;\n      },\n      enable: function (){\n        this._enabled||(S(this._dragStartTarget, Ye, this._onDown, this), this._enabled = !0);\n      },\n      disable: function (){\n        this._enabled&&(Xe._dragging===this&&this.finishDrag(!0), k(this._dragStartTarget, Ye, this._onDown, this), this._enabled = !1, this._moved = !1);\n      },\n      _onDown: function (t){\n        var e, i;\n        this._enabled&&(this._moved = !1, ve(this._element, "leaflet-zoom-anim")||(t.touches&&1!==t.touches.length ? Xe._dragging===this&&this.finishDrag():Xe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Xe._dragging=this)._preventOutline&&Me(this._element), Le(), re(), this._moving||(this.fire("down"), i=t.touches ? t.touches[0]:t, e=Ce(this._element), this._startPoint=new p(i.clientX, i.clientY), this._startPos=Pe(this._element), this._parentScale=Ze(e), i="mousedown"===t.type, S(document, i ? "mousemove":"touchmove", this._onMove, this), S(document, i ? "mouseup":"touchend touchcancel", this._onUp, this)))));\n      },\n      _onMove: function (t){\n        var e;\n        this._enabled&&(t.touches&&1 < t.touches.length ? this._moved = !0:!(e=new p((e=t.touches&&1===t.touches.length ? t.touches[0]:t).clientX, e.clientY)._subtract(this._startPoint)).x&&!e.y||Math.abs(e.x) + Math.abs(e.y) < this.options.clickTolerance||(e.x /=this._parentScale.x, e.y /=this._parentScale.y, O(t), this._moved||(this.fire("dragstart"), this._moved = !0, M(document.body, "leaflet-dragging"), this._lastTarget=t.target||t.srcElement, window.SVGElementInstance&&this._lastTarget instanceof window.SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement), M(this._lastTarget, "leaflet-drag-target")), this._newPos=this._startPos.add(e), this._moving = !0, this._lastEvent=t, this._updatePosition()));\n      },\n      _updatePosition: function (){\n        var t={\n          originalEvent: this._lastEvent\n        };\n        this.fire("predrag", t), Z(this._element, this._newPos), this.fire("drag", t);\n      },\n      _onUp: function (){\n        this._enabled&&this.finishDrag();\n      },\n      finishDrag: function (t){\n        z(document.body, "leaflet-dragging"), this._lastTarget&&(z(this._lastTarget, "leaflet-drag-target"), this._lastTarget=null), k(document, "mousemove touchmove", this._onMove, this), k(document, "mouseup touchend touchcancel", this._onUp, this), Te(), ae();\n        var e=this._moved&&this._moving;\n        this._moving = !1, Xe._dragging = !1, e&&this.fire("dragend", {\n          noInertia: t,\n          distance: this._newPos.distanceTo(this._startPos)\n        });\n      }\n    });\n  function Je(t, e, i){\n    for (var n, o, s, r, a, h, l, u=[1, 4, 2, 8], c=0, d=t.length; c < d; c++) t[c]._code=si(t[c], e);\n    for (s=0; s < 4; s++){\n      for (h=u[s], n=[], c=0, o=(d=t.length) - 1; c < d; o=c++) r=t[c], a=t[o], r._code & h ? a._code & h||((l=oi(a, r, h, e, i))._code=si(l, e), n.push(l)):(a._code & h&&((l=oi(a, r, h, e, i))._code=si(l, e), n.push(l)), n.push(r));\n      t=n;\n    }\n    return t;\n  }\n  function $e(t, e){\n    var i, n, o, s, r, a, h;\n    if(!t||0===t.length) throw new Error("latlngs not passed");\n    I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"), t=t[0]);\n    for (var l=w([0, 0]), u=g(t), c=(u.getNorthWest().distanceTo(u.getSouthWest()) * u.getNorthEast().distanceTo(u.getNorthWest()) < 1700&&(l=Qe(t)), t.length), d=[], _=0; _ < c; _++){\n      var p=w(t[_]);\n      d.push(e.project(w([p.lat - l.lat, p.lng - l.lng])));\n    }\n    for (_=r = a=h = 0, i=c - 1; _ < c; i=_++) n=d[_], o=d[i], s=n.y * o.x - o.y * n.x, a +=(n.x + o.x) * s, h +=(n.y + o.y) * s, r +=3 * s;\n    u=0===r ? d[0]:[a / r, h / r], u=e.unproject(m(u));\n    return w([u.lat + l.lat, u.lng + l.lng]);\n  }\n  function Qe(t){\n    for (var e=0, i=0, n=0, o=0; o < t.length; o++){\n      var s=w(t[o]);\n      e +=s.lat, i +=s.lng, n++;\n    }\n    return w([e / n, i / n]);\n  }\n  var ti,\n    gt={\n      __proto__: null,\n      clipPolygon: Je,\n      polygonCenter: $e,\n      centroid: Qe\n    };\n  function ei(t, e){\n    if(e&&t.length){\n      var i=t = function (t, e){\n          for (var i=[t[0]], n=1, o=0, s=t.length; n < s; n++) (function (t, e){\n            var i=e.x - t.x,\n              e=e.y - t.y;\n            return i * i + e * e;\n          })(t[n], t[o]) > e&&(i.push(t[n]), o=n);\n          o < s - 1&&i.push(t[s - 1]);\n          return i;\n        }(t, e=e * e),\n        n=i.length,\n        o=new (typeof Uint8Array!=void 0 + "" ? Uint8Array:Array)(n);\n      o[0]=o[n - 1]=1, function t(e, i, n, o, s){\n        var r,\n          a,\n          h,\n          l=0;\n        for (a=o + 1; a <=s - 1; a++) h=ri(e[a], e[o], e[s], !0), l < h&&(r=a, l=h);\n        n < l&&(i[r]=1, t(e, i, n, o, r), t(e, i, n, r, s));\n      }(i, o, e, 0, n - 1);\n      var s,\n        r=[];\n      for (s=0; s < n; s++) o[s]&&r.push(i[s]);\n      return r;\n    }\n    return t.slice();\n  }\n  function ii(t, e, i){\n    return Math.sqrt(ri(t, e, i, !0));\n  }\n  function ni(t, e, i, n, o){\n    var s,\n      r,\n      a,\n      h=n ? ti:si(t, i),\n      l=si(e, i);\n    for (ti=l;;){\n      if(!(h | l)) return [t, e];\n      if(h & l) return !1;\n      a=si(r=oi(t, e, s=h||l, i, o), i), s===h ? (t=r, h=a):(e=r, l=a);\n    }\n  }\n  function oi(t, e, i, n, o){\n    var s,\n      r,\n      a=e.x - t.x,\n      e=e.y - t.y,\n      h=n.min,\n      n=n.max;\n    return 8 & i ? (s=t.x + a * (n.y - t.y) / e, r=n.y):4 & i ? (s=t.x + a * (h.y - t.y) / e, r=h.y):2 & i ? (s=n.x, r=t.y + e * (n.x - t.x) / a):1 & i&&(s=h.x, r=t.y + e * (h.x - t.x) / a), new p(s, r, o);\n  }\n  function si(t, e){\n    var i=0;\n    return t.x < e.min.x ? i |=1:t.x > e.max.x&&(i |=2), t.y < e.min.y ? i |=4:t.y > e.max.y&&(i |=8), i;\n  }\n  function ri(t, e, i, n){\n    var o=e.x,\n      e=e.y,\n      s=i.x - o,\n      r=i.y - e,\n      a=s * s + r * r;\n    return 0 < a&&(1 < (a=((t.x - o) * s + (t.y - e) * r) / a) ? (o=i.x, e=i.y):0 < a&&(o +=s * a, e +=r * a)), s=t.x - o, r=t.y - e, n ? s * s + r * r:new p(o, e);\n  }\n  function I(t){\n    return !d(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0];\n  }\n  function ai(t){\n    return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."), I(t);\n  }\n  function hi(t, e){\n    var i, n, o, s, r, a;\n    if(!t||0===t.length) throw new Error("latlngs not passed");\n    I(t)||(console.warn("latlngs are not flat! Only the first ring will be used"), t=t[0]);\n    for (var h=w([0, 0]), l=g(t), u=(l.getNorthWest().distanceTo(l.getSouthWest()) * l.getNorthEast().distanceTo(l.getNorthWest()) < 1700&&(h=Qe(t)), t.length), c=[], d=0; d < u; d++){\n      var _=w(t[d]);\n      c.push(e.project(w([_.lat - h.lat, _.lng - h.lng])));\n    }\n    for (i=d = 0; d < u - 1; d++) i +=c[d].distanceTo(c[d + 1]) / 2;\n    if(0===i) a=c[0];else for (n=d = 0; d < u - 1; d++) if(o=c[d], s=c[d + 1], i < (n +=r = o.distanceTo(s))){\n      a=[s.x - (r=(n - i) / r) * (s.x - o.x), s.y - r * (s.y - o.y)];\n      break;\n    }\n    l=e.unproject(m(a));\n    return w([l.lat + h.lat, l.lng + h.lng]);\n  }\n  var vt={\n      __proto__: null,\n      simplify: ei,\n      pointToSegmentDistance: ii,\n      closestPointOnSegment: function (t, e, i){\n        return ri(t, e, i);\n      },\n      clipSegment: ni,\n      _getEdgeIntersection: oi,\n      _getBitCode: si,\n      _sqClosestPointOnSegment: ri,\n      isFlat: I,\n      _flat: ai,\n      polylineCenter: hi\n    },\n    yt={\n      project: function (t){\n        return new p(t.lng, t.lat);\n      },\n      unproject: function (t){\n        return new v(t.y, t.x);\n      },\n      bounds: new f([-180, -90], [180, 90])\n    },\n    xt={\n      R: 6378137,\n      R_MINOR: 6356752.314245179,\n      bounds: new f([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),\n      project: function (t){\n        var e=Math.PI / 180,\n          i=this.R,\n          n=t.lat * e,\n          o=this.R_MINOR / i,\n          o=Math.sqrt(1 - o * o),\n          s=o * Math.sin(n),\n          s=Math.tan(Math.PI / 4 - n / 2) / Math.pow((1 - s) / (1 + s), o / 2),\n          n=-i * Math.log(Math.max(s, 1e-10));\n        return new p(t.lng * e * i, n);\n      },\n      unproject: function (t){\n        for (var e, i=180 / Math.PI, n=this.R, o=this.R_MINOR / n, s=Math.sqrt(1 - o * o), r=Math.exp(-t.y / n), a=Math.PI / 2 - 2 * Math.atan(r), h=0, l=.1; h < 15&&1e-7 < Math.abs(l); h++) e=s * Math.sin(a), e=Math.pow((1 - e) / (1 + e), s / 2), a +=l = Math.PI / 2 - 2 * Math.atan(r * e) - a;\n        return new v(a * i, t.x * i / n);\n      }\n    },\n    wt={\n      __proto__: null,\n      LonLat: yt,\n      Mercator: xt,\n      SphericalMercator: rt\n    },\n    Pt=l({}, st, {\n      code: "EPSG:3395",\n      projection: xt,\n      transformation: ht(bt=.5 / (Math.PI * xt.R), .5, -bt, .5)\n    }),\n    li=l({}, st, {\n      code: "EPSG:4326",\n      projection: yt,\n      transformation: ht(1 / 180, 1, -1 / 180, .5)\n    }),\n    Lt=l({}, ot, {\n      projection: yt,\n      transformation: ht(1, 0, -1, 0),\n      scale: function (t){\n        return Math.pow(2, t);\n      },\n      zoom: function (t){\n        return Math.log(t) / Math.LN2;\n      },\n      distance: function (t, e){\n        var i=e.lng - t.lng,\n          e=e.lat - t.lat;\n        return Math.sqrt(i * i + e * e);\n      },\n      infinite: !0\n    }),\n    o=(ot.Earth=st, ot.EPSG3395=Pt, ot.EPSG3857=lt, ot.EPSG900913=ut, ot.EPSG4326=li, ot.Simple=Lt, it.extend({\n      options: {\n        pane: "overlayPane",\n        attribution: null,\n        bubblingMouseEvents: !0\n      },\n      addTo: function (t){\n        return t.addLayer(this), this;\n      },\n      remove: function (){\n        return this.removeFrom(this._map||this._mapToAdd);\n      },\n      removeFrom: function (t){\n        return t&&t.removeLayer(this), this;\n      },\n      getPane: function (t){\n        return this._map.getPane(t ? this.options[t]||t:this.options.pane);\n      },\n      addInteractiveTarget: function (t){\n        return this._map._targets[h(t)]=this;\n      },\n      removeInteractiveTarget: function (t){\n        return delete this._map._targets[h(t)], this;\n      },\n      getAttribution: function (){\n        return this.options.attribution;\n      },\n      _layerAdd: function (t){\n        var e,\n          i=t.target;\n        i.hasLayer(this)&&(this._map=i, this._zoomAnimated=i._zoomAnimated, this.getEvents&&(e=this.getEvents(), i.on(e, this), this.once("remove", function (){\n          i.off(e, this);\n        }, this)), this.onAdd(i), this.fire("add"), i.fire("layeradd", {\n          layer: this\n        }));\n      }\n    })),\n    ui=(A.include({\n      addLayer: function (t){\n        var e;\n        if(t._layerAdd) return e=h(t), this._layers[e]||((this._layers[e]=t)._mapToAdd=this, t.beforeAdd&&t.beforeAdd(this), this.whenReady(t._layerAdd, t)), this;\n        throw new Error("The provided object is not a Layer.");\n      },\n      removeLayer: function (t){\n        var e=h(t);\n        return this._layers[e]&&(this._loaded&&t.onRemove(this), delete this._layers[e], this._loaded&&(this.fire("layerremove", {\n          layer: t\n        }), t.fire("remove")), t._map=t._mapToAdd=null), this;\n      },\n      hasLayer: function (t){\n        return h(t) in this._layers;\n      },\n      eachLayer: function (t, e){\n        for (var i in this._layers) t.call(e, this._layers[i]);\n        return this;\n      },\n      _addLayers: function (t){\n        for (var e=0, i=(t=t ? d(t) ? t:[t]:[]).length; e < i; e++) this.addLayer(t[e]);\n      },\n      _addZoomLimit: function (t){\n        isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[h(t)]=t, this._updateZoomLevels());\n      },\n      _removeZoomLimit: function (t){\n        t=h(t);\n        this._zoomBoundLayers[t]&&(delete this._zoomBoundLayers[t], this._updateZoomLevels());\n      },\n      _updateZoomLevels: function (){\n        var t,\n          e=1 / 0,\n          i=-1 / 0,\n          n=this._getZoomSpan();\n        for (t in this._zoomBoundLayers) var o=this._zoomBoundLayers[t].options, e=void 0===o.minZoom ? e:Math.min(e, o.minZoom), i=void 0===o.maxZoom ? i:Math.max(i, o.maxZoom);\n        this._layersMaxZoom=i===-1 / 0 ? void 0:i, this._layersMinZoom=e===1 / 0 ? void 0:e, n!==this._getZoomSpan()&&this.fire("zoomlevelschange"), void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom() > this._layersMaxZoom&&this.setZoom(this._layersMaxZoom), void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom() < this._layersMinZoom&&this.setZoom(this._layersMinZoom);\n      }\n    }), o.extend({\n      initialize: function (t, e){\n        var i, n;\n        if(c(this, e), this._layers={}, t) for (i=0, n=t.length; i < n; i++) this.addLayer(t[i]);\n      },\n      addLayer: function (t){\n        var e=this.getLayerId(t);\n        return this._layers[e]=t, this._map&&this._map.addLayer(t), this;\n      },\n      removeLayer: function (t){\n        t=t in this._layers ? t:this.getLayerId(t);\n        return this._map&&this._layers[t]&&this._map.removeLayer(this._layers[t]), delete this._layers[t], this;\n      },\n      hasLayer: function (t){\n        return ("number"==typeof t ? t:this.getLayerId(t)) in this._layers;\n      },\n      clearLayers: function (){\n        return this.eachLayer(this.removeLayer, this);\n      },\n      invoke: function (t){\n        var e,\n          i,\n          n=Array.prototype.slice.call(arguments, 1);\n        for (e in this._layers) (i=this._layers[e])[t]&&i[t].apply(i, n);\n        return this;\n      },\n      onAdd: function (t){\n        this.eachLayer(t.addLayer, t);\n      },\n      onRemove: function (t){\n        this.eachLayer(t.removeLayer, t);\n      },\n      eachLayer: function (t, e){\n        for (var i in this._layers) t.call(e, this._layers[i]);\n        return this;\n      },\n      getLayer: function (t){\n        return this._layers[t];\n      },\n      getLayers: function (){\n        var t=[];\n        return this.eachLayer(t.push, t), t;\n      },\n      setZIndex: function (t){\n        return this.invoke("setZIndex", t);\n      },\n      getLayerId: h\n    })),\n    ci=ui.extend({\n      addLayer: function (t){\n        return this.hasLayer(t) ? this:(t.addEventParent(this), ui.prototype.addLayer.call(this, t), this.fire("layeradd", {\n          layer: t\n        }));\n      },\n      removeLayer: function (t){\n        return this.hasLayer(t) ? ((t=t in this._layers ? this._layers[t]:t).removeEventParent(this), ui.prototype.removeLayer.call(this, t), this.fire("layerremove", {\n          layer: t\n        })):this;\n      },\n      setStyle: function (t){\n        return this.invoke("setStyle", t);\n      },\n      bringToFront: function (){\n        return this.invoke("bringToFront");\n      },\n      bringToBack: function (){\n        return this.invoke("bringToBack");\n      },\n      getBounds: function (){\n        var t,\n          e=new s();\n        for (t in this._layers){\n          var i=this._layers[t];\n          e.extend(i.getBounds ? i.getBounds():i.getLatLng());\n        }\n        return e;\n      }\n    }),\n    di=et.extend({\n      options: {\n        popupAnchor: [0, 0],\n        tooltipAnchor: [0, 0],\n        crossOrigin: !1\n      },\n      initialize: function (t){\n        c(this, t);\n      },\n      createIcon: function (t){\n        return this._createIcon("icon", t);\n      },\n      createShadow: function (t){\n        return this._createIcon("shadow", t);\n      },\n      _createIcon: function (t, e){\n        var i=this._getIconUrl(t);\n        if(i) return i=this._createImg(i, e&&"IMG"===e.tagName ? e:null), this._setIconStyles(i, t), !this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin = !0===this.options.crossOrigin ? "":this.options.crossOrigin), i;\n        if("icon"===t) throw new Error("iconUrl not set in Icon options (see the docs).");\n        return null;\n      },\n      _setIconStyles: function (t, e){\n        var i=this.options,\n          n=i[e + "Size"],\n          n=m(n="number"==typeof n ? [n, n]:n),\n          o=m("shadow"===e&&i.shadowAnchor||i.iconAnchor||n&&n.divideBy(2, !0));\n        t.className="leaflet-marker-" + e + " " + (i.className||""), o&&(t.style.marginLeft=-o.x + "px", t.style.marginTop=-o.y + "px"), n&&(t.style.width=n.x + "px", t.style.height=n.y + "px");\n      },\n      _createImg: function (t, e){\n        return (e=e||document.createElement("img")).src=t, e;\n      },\n      _getIconUrl: function (t){\n        return b.retina&&this.options[t + "RetinaUrl"]||this.options[t + "Url"];\n      }\n    });\n  var _i=di.extend({\n      options: {\n        iconUrl: "marker-icon.png",\n        iconRetinaUrl: "marker-icon-2x.png",\n        shadowUrl: "marker-shadow.png",\n        iconSize: [25, 41],\n        iconAnchor: [12, 41],\n        popupAnchor: [1, -34],\n        tooltipAnchor: [16, -28],\n        shadowSize: [41, 41]\n      },\n      _getIconUrl: function (t){\n        return "string"!=typeof _i.imagePath&&(_i.imagePath=this._detectIconPath()), (this.options.imagePath||_i.imagePath) + di.prototype._getIconUrl.call(this, t);\n      },\n      _stripUrl: function (t){\n        function e(t, e, i){\n          return (e=e.exec(t))&&e[i];\n        }\n        return (t=e(t, /^url\\(([\'"])?(.+)\\1\\)$/, 2))&&e(t, /^(.*)marker-icon\\.png$/, 1);\n      },\n      _detectIconPath: function (){\n        var t=P("div", "leaflet-default-icon-path", document.body),\n          e=pe(t, "background-image")||pe(t, "backgroundImage");\n        return document.body.removeChild(t), (e=this._stripUrl(e)) ? e:(t=document.querySelector(\'link[href$="leaflet.css"]\')) ? t.href.substring(0, t.href.length - "leaflet.css".length - 1):"";\n      }\n    }),\n    pi=n.extend({\n      initialize: function (t){\n        this._marker=t;\n      },\n      addHooks: function (){\n        var t=this._marker._icon;\n        this._draggable||(this._draggable=new Xe(t, t, !0)), this._draggable.on({\n          dragstart: this._onDragStart,\n          predrag: this._onPreDrag,\n          drag: this._onDrag,\n          dragend: this._onDragEnd\n        }, this).enable(), M(t, "leaflet-marker-draggable");\n      },\n      removeHooks: function (){\n        this._draggable.off({\n          dragstart: this._onDragStart,\n          predrag: this._onPreDrag,\n          drag: this._onDrag,\n          dragend: this._onDragEnd\n        }, this).disable(), this._marker._icon&&z(this._marker._icon, "leaflet-marker-draggable");\n      },\n      moved: function (){\n        return this._draggable&&this._draggable._moved;\n      },\n      _adjustPan: function (t){\n        var e=this._marker,\n          i=e._map,\n          n=this._marker.options.autoPanSpeed,\n          o=this._marker.options.autoPanPadding,\n          s=Pe(e._icon),\n          r=i.getPixelBounds(),\n          a=i.getPixelOrigin(),\n          a=_(r.min._subtract(a).add(o), r.max._subtract(a).subtract(o));\n        a.contains(s)||(o=m((Math.max(a.max.x, s.x) - a.max.x) / (r.max.x - a.max.x) - (Math.min(a.min.x, s.x) - a.min.x) / (r.min.x - a.min.x), (Math.max(a.max.y, s.y) - a.max.y) / (r.max.y - a.max.y) - (Math.min(a.min.y, s.y) - a.min.y) / (r.min.y - a.min.y)).multiplyBy(n), i.panBy(o, {\n          animate: !1\n        }), this._draggable._newPos._add(o), this._draggable._startPos._add(o), Z(e._icon, this._draggable._newPos), this._onDrag(t), this._panRequest=x(this._adjustPan.bind(this, t)));\n      },\n      _onDragStart: function (){\n        this._oldLatLng=this._marker.getLatLng(), this._marker.closePopup&&this._marker.closePopup(), this._marker.fire("movestart").fire("dragstart");\n      },\n      _onPreDrag: function (t){\n        this._marker.options.autoPan&&(r(this._panRequest), this._panRequest=x(this._adjustPan.bind(this, t)));\n      },\n      _onDrag: function (t){\n        var e=this._marker,\n          i=e._shadow,\n          n=Pe(e._icon),\n          o=e._map.layerPointToLatLng(n);\n        i&&Z(i, n), e._latlng=o, t.latlng=o, t.oldLatLng=this._oldLatLng, e.fire("move", t).fire("drag", t);\n      },\n      _onDragEnd: function (t){\n        r(this._panRequest), delete this._oldLatLng, this._marker.fire("moveend").fire("dragend", t);\n      }\n    }),\n    mi=o.extend({\n      options: {\n        icon: new _i(),\n        interactive: !0,\n        keyboard: !0,\n        title: "",\n        alt: "Marker",\n        zIndexOffset: 0,\n        opacity: 1,\n        riseOnHover: !1,\n        riseOffset: 250,\n        pane: "markerPane",\n        shadowPane: "shadowPane",\n        bubblingMouseEvents: !1,\n        autoPanOnFocus: !0,\n        draggable: !1,\n        autoPan: !1,\n        autoPanPadding: [50, 50],\n        autoPanSpeed: 10\n      },\n      initialize: function (t, e){\n        c(this, e), this._latlng=w(t);\n      },\n      onAdd: function (t){\n        this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation, this._zoomAnimated&&t.on("zoomanim", this._animateZoom, this), this._initIcon(), this.update();\n      },\n      onRemove: function (t){\n        this.dragging&&this.dragging.enabled()&&(this.options.draggable = !0, this.dragging.removeHooks()), delete this.dragging, this._zoomAnimated&&t.off("zoomanim", this._animateZoom, this), this._removeIcon(), this._removeShadow();\n      },\n      getEvents: function (){\n        return {\n          zoom: this.update,\n          viewreset: this.update\n        };\n      },\n      getLatLng: function (){\n        return this._latlng;\n      },\n      setLatLng: function (t){\n        var e=this._latlng;\n        return this._latlng=w(t), this.update(), this.fire("move", {\n          oldLatLng: e,\n          latlng: this._latlng\n        });\n      },\n      setZIndexOffset: function (t){\n        return this.options.zIndexOffset=t, this.update();\n      },\n      getIcon: function (){\n        return this.options.icon;\n      },\n      setIcon: function (t){\n        return this.options.icon=t, this._map&&(this._initIcon(), this.update()), this._popup&&this.bindPopup(this._popup, this._popup.options), this;\n      },\n      getElement: function (){\n        return this._icon;\n      },\n      update: function (){\n        var t;\n        return this._icon&&this._map&&(t=this._map.latLngToLayerPoint(this._latlng).round(), this._setPos(t)), this;\n      },\n      _initIcon: function (){\n        var t=this.options,\n          e="leaflet-zoom-" + (this._zoomAnimated ? "animated":"hide"),\n          i=t.icon.createIcon(this._icon),\n          n = !1,\n          i=(i!==this._icon&&(this._icon&&this._removeIcon(), n = !0, t.title&&(i.title=t.title), "IMG"===i.tagName&&(i.alt=t.alt||"")), M(i, e), t.keyboard&&(i.tabIndex="0", i.setAttribute("role", "button")), this._icon=i, t.riseOnHover&&this.on({\n            mouseover: this._bringToFront,\n            mouseout: this._resetZIndex\n          }), this.options.autoPanOnFocus&&S(i, "focus", this._panOnFocus, this), t.icon.createShadow(this._shadow)),\n          o = !1;\n        i!==this._shadow&&(this._removeShadow(), o = !0), i&&(M(i, e), i.alt=""), this._shadow=i, t.opacity < 1&&this._updateOpacity(), n&&this.getPane().appendChild(this._icon), this._initInteraction(), i&&o && this.getPane(t.shadowPane).appendChild(this._shadow);\n      },\n      _removeIcon: function (){\n        this.options.riseOnHover&&this.off({\n          mouseover: this._bringToFront,\n          mouseout: this._resetZIndex\n        }), this.options.autoPanOnFocus&&k(this._icon, "focus", this._panOnFocus, this), T(this._icon), this.removeInteractiveTarget(this._icon), this._icon=null;\n      },\n      _removeShadow: function (){\n        this._shadow&&T(this._shadow), this._shadow=null;\n      },\n      _setPos: function (t){\n        this._icon&&Z(this._icon, t), this._shadow&&Z(this._shadow, t), this._zIndex=t.y + this.options.zIndexOffset, this._resetZIndex();\n      },\n      _updateZIndex: function (t){\n        this._icon&&(this._icon.style.zIndex=this._zIndex + t);\n      },\n      _animateZoom: function (t){\n        t=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center).round();\n        this._setPos(t);\n      },\n      _initInteraction: function (){\n        var t;\n        this.options.interactive&&(M(this._icon, "leaflet-interactive"), this.addInteractiveTarget(this._icon), pi&&(t=this.options.draggable, this.dragging&&(t=this.dragging.enabled(), this.dragging.disable()), this.dragging=new pi(this), t&&this.dragging.enable()));\n      },\n      setOpacity: function (t){\n        return this.options.opacity=t, this._map&&this._updateOpacity(), this;\n      },\n      _updateOpacity: function (){\n        var t=this.options.opacity;\n        this._icon&&C(this._icon, t), this._shadow&&C(this._shadow, t);\n      },\n      _bringToFront: function (){\n        this._updateZIndex(this.options.riseOffset);\n      },\n      _resetZIndex: function (){\n        this._updateZIndex(0);\n      },\n      _panOnFocus: function (){\n        var t,\n          e,\n          i=this._map;\n        i&&(t=(e=this.options.icon.options).iconSize ? m(e.iconSize):m(0, 0), e=e.iconAnchor ? m(e.iconAnchor):m(0, 0), i.panInside(this._latlng, {\n          paddingTopLeft: e,\n          paddingBottomRight: t.subtract(e)\n        }));\n      },\n      _getPopupAnchor: function (){\n        return this.options.icon.options.popupAnchor;\n      },\n      _getTooltipAnchor: function (){\n        return this.options.icon.options.tooltipAnchor;\n      }\n    });\n  var fi=o.extend({\n      options: {\n        stroke: !0,\n        color: "#3388ff",\n        weight: 3,\n        opacity: 1,\n        lineCap: "round",\n        lineJoin: "round",\n        dashArray: null,\n        dashOffset: null,\n        fill: !1,\n        fillColor: null,\n        fillOpacity: .2,\n        fillRule: "evenodd",\n        interactive: !0,\n        bubblingMouseEvents: !0\n      },\n      beforeAdd: function (t){\n        this._renderer=t.getRenderer(this);\n      },\n      onAdd: function (){\n        this._renderer._initPath(this), this._reset(), this._renderer._addPath(this);\n      },\n      onRemove: function (){\n        this._renderer._removePath(this);\n      },\n      redraw: function (){\n        return this._map&&this._renderer._updatePath(this), this;\n      },\n      setStyle: function (t){\n        return c(this, t), this._renderer&&(this._renderer._updateStyle(this), this.options.stroke&&t && Object.prototype.hasOwnProperty.call(t, "weight")&&this._updateBounds()), this;\n      },\n      bringToFront: function (){\n        return this._renderer&&this._renderer._bringToFront(this), this;\n      },\n      bringToBack: function (){\n        return this._renderer&&this._renderer._bringToBack(this), this;\n      },\n      getElement: function (){\n        return this._path;\n      },\n      _reset: function (){\n        this._project(), this._update();\n      },\n      _clickTolerance: function (){\n        return (this.options.stroke ? this.options.weight / 2:0) + (this._renderer.options.tolerance||0);\n      }\n    }),\n    gi=fi.extend({\n      options: {\n        fill: !0,\n        radius: 10\n      },\n      initialize: function (t, e){\n        c(this, e), this._latlng=w(t), this._radius=this.options.radius;\n      },\n      setLatLng: function (t){\n        var e=this._latlng;\n        return this._latlng=w(t), this.redraw(), this.fire("move", {\n          oldLatLng: e,\n          latlng: this._latlng\n        });\n      },\n      getLatLng: function (){\n        return this._latlng;\n      },\n      setRadius: function (t){\n        return this.options.radius=this._radius=t, this.redraw();\n      },\n      getRadius: function (){\n        return this._radius;\n      },\n      setStyle: function (t){\n        var e=t&&t.radius||this._radius;\n        return fi.prototype.setStyle.call(this, t), this.setRadius(e), this;\n      },\n      _project: function (){\n        this._point=this._map.latLngToLayerPoint(this._latlng), this._updateBounds();\n      },\n      _updateBounds: function (){\n        var t=this._radius,\n          e=this._radiusY||t,\n          i=this._clickTolerance(),\n          t=[t + i, e + i];\n        this._pxBounds=new f(this._point.subtract(t), this._point.add(t));\n      },\n      _update: function (){\n        this._map&&this._updatePath();\n      },\n      _updatePath: function (){\n        this._renderer._updateCircle(this);\n      },\n      _empty: function (){\n        return this._radius&&!this._renderer._bounds.intersects(this._pxBounds);\n      },\n      _containsPoint: function (t){\n        return t.distanceTo(this._point) <=this._radius + this._clickTolerance();\n      }\n    });\n  var vi=gi.extend({\n    initialize: function (t, e, i){\n      if(c(this, e="number"==typeof e ? l({}, i, {\n        radius: e\n      }):e), this._latlng=w(t), isNaN(this.options.radius)) throw new Error("Circle radius cannot be NaN");\n      this._mRadius=this.options.radius;\n    },\n    setRadius: function (t){\n      return this._mRadius=t, this.redraw();\n    },\n    getRadius: function (){\n      return this._mRadius;\n    },\n    getBounds: function (){\n      var t=[this._radius, this._radiusY||this._radius];\n      return new s(this._map.layerPointToLatLng(this._point.subtract(t)), this._map.layerPointToLatLng(this._point.add(t)));\n    },\n    setStyle: fi.prototype.setStyle,\n    _project: function (){\n      var t,\n        e,\n        i,\n        n,\n        o,\n        s=this._latlng.lng,\n        r=this._latlng.lat,\n        a=this._map,\n        h=a.options.crs;\n      h.distance===st.distance ? (n=Math.PI / 180, o=this._mRadius / st.R / n, t=a.project([r + o, s]), e=a.project([r - o, s]), e=t.add(e).divideBy(2), i=a.unproject(e).lat, n=Math.acos((Math.cos(o * n) - Math.sin(r * n) * Math.sin(i * n)) / (Math.cos(r * n) * Math.cos(i * n))) / n, !isNaN(n)&&0!==n||(n=o / Math.cos(Math.PI / 180 * r)), this._point=e.subtract(a.getPixelOrigin()), this._radius=isNaN(n) ? 0:e.x - a.project([i, s - n]).x, this._radiusY=e.y - t.y):(o=h.unproject(h.project(this._latlng).subtract([this._mRadius, 0])), this._point=a.latLngToLayerPoint(this._latlng), this._radius=this._point.x - a.latLngToLayerPoint(o).x), this._updateBounds();\n    }\n  });\n  var yi=fi.extend({\n    options: {\n      smoothFactor: 1,\n      noClip: !1\n    },\n    initialize: function (t, e){\n      c(this, e), this._setLatLngs(t);\n    },\n    getLatLngs: function (){\n      return this._latlngs;\n    },\n    setLatLngs: function (t){\n      return this._setLatLngs(t), this.redraw();\n    },\n    isEmpty: function (){\n      return !this._latlngs.length;\n    },\n    closestLayerPoint: function (t){\n      for (var e=1 / 0, i=null, n=ri, o=0, s=this._parts.length; o < s; o++) for (var r=this._parts[o], a=1, h=r.length; a < h; a++){\n        var l,\n          u,\n          c=n(t, l=r[a - 1], u=r[a], !0);\n        c < e&&(e=c, i=n(t, l, u));\n      }\n      return i&&(i.distance=Math.sqrt(e)), i;\n    },\n    getCenter: function (){\n      if(this._map) return hi(this._defaultShape(), this._map.options.crs);\n      throw new Error("Must add layer to map before using getCenter()");\n    },\n    getBounds: function (){\n      return this._bounds;\n    },\n    addLatLng: function (t, e){\n      return e=e||this._defaultShape(), t=w(t), e.push(t), this._bounds.extend(t), this.redraw();\n    },\n    _setLatLngs: function (t){\n      this._bounds=new s(), this._latlngs=this._convertLatLngs(t);\n    },\n    _defaultShape: function (){\n      return I(this._latlngs) ? this._latlngs:this._latlngs[0];\n    },\n    _convertLatLngs: function (t){\n      for (var e=[], i=I(t), n=0, o=t.length; n < o; n++) i ? (e[n]=w(t[n]), this._bounds.extend(e[n])):e[n]=this._convertLatLngs(t[n]);\n      return e;\n    },\n    _project: function (){\n      var t=new f();\n      this._rings=[], this._projectLatlngs(this._latlngs, this._rings, t), this._bounds.isValid()&&t.isValid()&&(this._rawPxBounds=t, this._updateBounds());\n    },\n    _updateBounds: function (){\n      var t=this._clickTolerance(),\n        t=new p(t, t);\n      this._rawPxBounds&&(this._pxBounds=new f([this._rawPxBounds.min.subtract(t), this._rawPxBounds.max.add(t)]));\n    },\n    _projectLatlngs: function (t, e, i){\n      var n,\n        o,\n        s=t[0] instanceof v,\n        r=t.length;\n      if(s){\n        for (o=[], n=0; n < r; n++) o[n]=this._map.latLngToLayerPoint(t[n]), i.extend(o[n]);\n        e.push(o);\n      } else for (n=0; n < r; n++) this._projectLatlngs(t[n], e, i);\n    },\n    _clipPoints: function (){\n      var t=this._renderer._bounds;\n      if(this._parts=[], this._pxBounds&&this._pxBounds.intersects(t)) if(this.options.noClip) this._parts=this._rings;else for (var e, i, n, o, s=this._parts, r=0, a=0, h=this._rings.length; r < h; r++) for (e=0, i=(o=this._rings[r]).length; e < i - 1; e++) (n=ni(o[e], o[e + 1], t, e, !0))&&(s[a]=s[a]||[], s[a].push(n[0]), n[1]===o[e + 1]&&e!==i - 2||(s[a].push(n[1]), a++));\n    },\n    _simplifyPoints: function (){\n      for (var t=this._parts, e=this.options.smoothFactor, i=0, n=t.length; i < n; i++) t[i]=ei(t[i], e);\n    },\n    _update: function (){\n      this._map&&(this._clipPoints(), this._simplifyPoints(), this._updatePath());\n    },\n    _updatePath: function (){\n      this._renderer._updatePoly(this);\n    },\n    _containsPoint: function (t, e){\n      var i,\n        n,\n        o,\n        s,\n        r,\n        a,\n        h=this._clickTolerance();\n      if(this._pxBounds&&this._pxBounds.contains(t)) for (i=0, s=this._parts.length; i < s; i++) for (n=0, o=(r=(a=this._parts[i]).length) - 1; n < r; o=n++) if((e||0!==n)&&ii(t, a[o], a[n]) <=h) return !0;\n      return !1;\n    }\n  });\n  yi._flat=ai;\n  var xi=yi.extend({\n    options: {\n      fill: !0\n    },\n    isEmpty: function (){\n      return !this._latlngs.length||!this._latlngs[0].length;\n    },\n    getCenter: function (){\n      if(this._map) return $e(this._defaultShape(), this._map.options.crs);\n      throw new Error("Must add layer to map before using getCenter()");\n    },\n    _convertLatLngs: function (t){\n      var t=yi.prototype._convertLatLngs.call(this, t),\n        e=t.length;\n      return 2 <=e&&t[0] instanceof v&&t[0].equals(t[e - 1])&&t.pop(), t;\n    },\n    _setLatLngs: function (t){\n      yi.prototype._setLatLngs.call(this, t), I(this._latlngs)&&(this._latlngs=[this._latlngs]);\n    },\n    _defaultShape: function (){\n      return (I(this._latlngs[0]) ? this._latlngs:this._latlngs[0])[0];\n    },\n    _clipPoints: function (){\n      var t=this._renderer._bounds,\n        e=this.options.weight,\n        e=new p(e, e),\n        t=new f(t.min.subtract(e), t.max.add(e));\n      if(this._parts=[], this._pxBounds&&this._pxBounds.intersects(t)) if(this.options.noClip) this._parts=this._rings;else for (var i, n=0, o=this._rings.length; n < o; n++) (i=Je(this._rings[n], t, !0)).length&&this._parts.push(i);\n    },\n    _updatePath: function (){\n      this._renderer._updatePoly(this, !0);\n    },\n    _containsPoint: function (t){\n      var e,\n        i,\n        n,\n        o,\n        s,\n        r,\n        a,\n        h,\n        l = !1;\n      if(!this._pxBounds||!this._pxBounds.contains(t)) return !1;\n      for (o=0, a=this._parts.length; o < a; o++) for (s=0, r=(h=(e=this._parts[o]).length) - 1; s < h; r=s++) i=e[s], n=e[r], i.y > t.y!=n.y > t.y&&t.x < (n.x - i.x) * (t.y - i.y) / (n.y - i.y) + i.x&&(l = !l);\n      return l||yi.prototype._containsPoint.call(this, t, !0);\n    }\n  });\n  var wi=ci.extend({\n    initialize: function (t, e){\n      c(this, e), this._layers={}, t&&this.addData(t);\n    },\n    addData: function (t){\n      var e,\n        i,\n        n,\n        o=d(t) ? t:t.features;\n      if(o){\n        for (e=0, i=o.length; e < i; e++) ((n=o[e]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);\n        return this;\n      }\n      var s,\n        r=this.options;\n      return (!r.filter||r.filter(t))&&(s=bi(t, r)) ? (s.feature=Zi(t), s.defaultOptions=s.options, this.resetStyle(s), r.onEachFeature&&r.onEachFeature(t, s), this.addLayer(s)):this;\n    },\n    resetStyle: function (t){\n      return void 0===t ? this.eachLayer(this.resetStyle, this):(t.options=l({}, t.defaultOptions), this._setLayerStyle(t, this.options.style), this);\n    },\n    setStyle: function (e){\n      return this.eachLayer(function (t){\n        this._setLayerStyle(t, e);\n      }, this);\n    },\n    _setLayerStyle: function (t, e){\n      t.setStyle&&("function"==typeof e&&(e=e(t.feature)), t.setStyle(e));\n    }\n  });\n  function bi(t, e){\n    var i,\n      n,\n      o,\n      s,\n      r="Feature"===t.type ? t.geometry:t,\n      a=r ? r.coordinates:null,\n      h=[],\n      l=e&&e.pointToLayer,\n      u=e&&e.coordsToLatLng||Li;\n    if(!a&&!r) return null;\n    switch (r.type){\n      case "Point":\n        return Pi(l, t, i=u(a), e);\n      case "MultiPoint":\n        for (o=0, s=a.length; o < s; o++) i=u(a[o]), h.push(Pi(l, t, i, e));\n        return new ci(h);\n      case "LineString":\n      case "MultiLineString":\n        return n=Ti(a, "LineString"===r.type ? 0:1, u), new yi(n, e);\n      case "Polygon":\n      case "MultiPolygon":\n        return n=Ti(a, "Polygon"===r.type ? 1:2, u), new xi(n, e);\n      case "GeometryCollection":\n        for (o=0, s=r.geometries.length; o < s; o++){\n          var c=bi({\n            geometry: r.geometries[o],\n            type: "Feature",\n            properties: t.properties\n          }, e);\n          c&&h.push(c);\n        }\n        return new ci(h);\n      case "FeatureCollection":\n        for (o=0, s=r.features.length; o < s; o++){\n          var d=bi(r.features[o], e);\n          d&&h.push(d);\n        }\n        return new ci(h);\n      default:\n        throw new Error("Invalid GeoJSON object.");\n    }\n  }\n  function Pi(t, e, i, n){\n    return t ? t(e, i):new mi(i, n&&n.markersInheritOptions&&n);\n  }\n  function Li(t){\n    return new v(t[1], t[0], t[2]);\n  }\n  function Ti(t, e, i){\n    for (var n, o=[], s=0, r=t.length; s < r; s++) n=e ? Ti(t[s], e - 1, i):(i||Li)(t[s]), o.push(n);\n    return o;\n  }\n  function Mi(t, e){\n    return void 0!==(t=w(t)).alt ? [i(t.lng, e), i(t.lat, e), i(t.alt, e)]:[i(t.lng, e), i(t.lat, e)];\n  }\n  function zi(t, e, i, n){\n    for (var o=[], s=0, r=t.length; s < r; s++) o.push(e ? zi(t[s], I(t[s]) ? 0:e - 1, i, n):Mi(t[s], n));\n    return !e&&i && 0 < o.length&&o.push(o[0].slice()), o;\n  }\n  function Ci(t, e){\n    return t.feature ? l({}, t.feature, {\n      geometry: e\n    }):Zi(e);\n  }\n  function Zi(t){\n    return "Feature"===t.type||"FeatureCollection"===t.type ? t:{\n      type: "Feature",\n      properties: {},\n      geometry: t\n    };\n  }\n  Tt={\n    toGeoJSON: function (t){\n      return Ci(this, {\n        type: "Point",\n        coordinates: Mi(this.getLatLng(), t)\n      });\n    }\n  };\n  function Si(t, e){\n    return new wi(t, e);\n  }\n  mi.include(Tt), vi.include(Tt), gi.include(Tt), yi.include({\n    toGeoJSON: function (t){\n      var e = !I(this._latlngs);\n      return Ci(this, {\n        type: (e ? "Multi":"") + "LineString",\n        coordinates: zi(this._latlngs, e ? 1:0, !1, t)\n      });\n    }\n  }), xi.include({\n    toGeoJSON: function (t){\n      var e = !I(this._latlngs),\n        i=e&&!I(this._latlngs[0]),\n        t=zi(this._latlngs, i ? 2:e ? 1:0, !0, t);\n      return Ci(this, {\n        type: (i ? "Multi":"") + "Polygon",\n        coordinates: t=e ? t:[t]\n      });\n    }\n  }), ui.include({\n    toMultiPoint: function (e){\n      var i=[];\n      return this.eachLayer(function (t){\n        i.push(t.toGeoJSON(e).geometry.coordinates);\n      }), Ci(this, {\n        type: "MultiPoint",\n        coordinates: i\n      });\n    },\n    toGeoJSON: function (e){\n      var i,\n        n,\n        t=this.feature&&this.feature.geometry&&this.feature.geometry.type;\n      return "MultiPoint"===t ? this.toMultiPoint(e):(i="GeometryCollection"===t, n=[], this.eachLayer(function (t){\n        t.toGeoJSON&&(t=t.toGeoJSON(e), i ? n.push(t.geometry):"FeatureCollection"===(t=Zi(t)).type ? n.push.apply(n, t.features):n.push(t));\n      }), i ? Ci(this, {\n        geometries: n,\n        type: "GeometryCollection"\n      }):{\n        type: "FeatureCollection",\n        features: n\n      });\n    }\n  });\n  var Mt=Si,\n    Ei=o.extend({\n      options: {\n        opacity: 1,\n        alt: "",\n        interactive: !1,\n        crossOrigin: !1,\n        errorOverlayUrl: "",\n        zIndex: 1,\n        className: ""\n      },\n      initialize: function (t, e, i){\n        this._url=t, this._bounds=g(e), c(this, i);\n      },\n      onAdd: function (){\n        this._image||(this._initImage(), this.options.opacity < 1&&this._updateOpacity()), this.options.interactive&&(M(this._image, "leaflet-interactive"), this.addInteractiveTarget(this._image)), this.getPane().appendChild(this._image), this._reset();\n      },\n      onRemove: function (){\n        T(this._image), this.options.interactive&&this.removeInteractiveTarget(this._image);\n      },\n      setOpacity: function (t){\n        return this.options.opacity=t, this._image&&this._updateOpacity(), this;\n      },\n      setStyle: function (t){\n        return t.opacity&&this.setOpacity(t.opacity), this;\n      },\n      bringToFront: function (){\n        return this._map&&fe(this._image), this;\n      },\n      bringToBack: function (){\n        return this._map&&ge(this._image), this;\n      },\n      setUrl: function (t){\n        return this._url=t, this._image&&(this._image.src=t), this;\n      },\n      setBounds: function (t){\n        return this._bounds=g(t), this._map&&this._reset(), this;\n      },\n      getEvents: function (){\n        var t={\n          zoom: this._reset,\n          viewreset: this._reset\n        };\n        return this._zoomAnimated&&(t.zoomanim=this._animateZoom), t;\n      },\n      setZIndex: function (t){\n        return this.options.zIndex=t, this._updateZIndex(), this;\n      },\n      getBounds: function (){\n        return this._bounds;\n      },\n      getElement: function (){\n        return this._image;\n      },\n      _initImage: function (){\n        var t="IMG"===this._url.tagName,\n          e=this._image=t ? this._url:P("img");\n        M(e, "leaflet-image-layer"), this._zoomAnimated&&M(e, "leaflet-zoom-animated"), this.options.className&&M(e, this.options.className), e.onselectstart=u, e.onmousemove=u, e.onload=a(this.fire, this, "load"), e.onerror=a(this._overlayOnError, this, "error"), !this.options.crossOrigin&&""!==this.options.crossOrigin||(e.crossOrigin = !0===this.options.crossOrigin ? "":this.options.crossOrigin), this.options.zIndex&&this._updateZIndex(), t ? this._url=e.src:(e.src=this._url, e.alt=this.options.alt);\n      },\n      _animateZoom: function (t){\n        var e=this._map.getZoomScale(t.zoom),\n          t=this._map._latLngBoundsToNewLayerBounds(this._bounds, t.zoom, t.center).min;\n        be(this._image, t, e);\n      },\n      _reset: function (){\n        var t=this._image,\n          e=new f(this._map.latLngToLayerPoint(this._bounds.getNorthWest()), this._map.latLngToLayerPoint(this._bounds.getSouthEast())),\n          i=e.getSize();\n        Z(t, e.min), t.style.width=i.x + "px", t.style.height=i.y + "px";\n      },\n      _updateOpacity: function (){\n        C(this._image, this.options.opacity);\n      },\n      _updateZIndex: function (){\n        this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex);\n      },\n      _overlayOnError: function (){\n        this.fire("error");\n        var t=this.options.errorOverlayUrl;\n        t&&this._url!==t&&(this._url=t, this._image.src=t);\n      },\n      getCenter: function (){\n        return this._bounds.getCenter();\n      }\n    }),\n    ki=Ei.extend({\n      options: {\n        autoplay: !0,\n        loop: !0,\n        keepAspectRatio: !0,\n        muted: !1,\n        playsInline: !0\n      },\n      _initImage: function (){\n        var t="VIDEO"===this._url.tagName,\n          e=this._image=t ? this._url:P("video");\n        if(M(e, "leaflet-image-layer"), this._zoomAnimated&&M(e, "leaflet-zoom-animated"), this.options.className&&M(e, this.options.className), e.onselectstart=u, e.onmousemove=u, e.onloadeddata=a(this.fire, this, "load"), t){\n          for (var i=e.getElementsByTagName("source"), n=[], o=0; o < i.length; o++) n.push(i[o].src);\n          this._url=0 < i.length ? n:[e.src];\n        }else{\n          d(this._url)||(this._url=[this._url]), !this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style, "objectFit")&&(e.style.objectFit="fill"), e.autoplay = !!this.options.autoplay, e.loop = !!this.options.loop, e.muted = !!this.options.muted, e.playsInline = !!this.options.playsInline;\n          for (var s=0; s < this._url.length; s++){\n            var r=P("source");\n            r.src=this._url[s], e.appendChild(r);\n          }\n        }\n      }\n    });\n  var Oi=Ei.extend({\n    _initImage: function (){\n      var t=this._image=this._url;\n      M(t, "leaflet-image-layer"), this._zoomAnimated&&M(t, "leaflet-zoom-animated"), this.options.className&&M(t, this.options.className), t.onselectstart=u, t.onmousemove=u;\n    }\n  });\n  var Ai=o.extend({\n      options: {\n        interactive: !1,\n        offset: [0, 0],\n        className: "",\n        pane: void 0,\n        content: ""\n      },\n      initialize: function (t, e){\n        t&&(t instanceof v||d(t)) ? (this._latlng=w(t), c(this, e)):(c(this, t), this._source=e), this.options.content&&(this._content=this.options.content);\n      },\n      openOn: function (t){\n        return (t=arguments.length ? t:this._source._map).hasLayer(this)||t.addLayer(this), this;\n      },\n      close: function (){\n        return this._map&&this._map.removeLayer(this), this;\n      },\n      toggle: function (t){\n        return this._map ? this.close():(arguments.length ? this._source=t:t=this._source, this._prepareOpen(), this.openOn(t._map)), this;\n      },\n      onAdd: function (t){\n        this._zoomAnimated=t._zoomAnimated, this._container||this._initLayout(), t._fadeAnimated&&C(this._container, 0), clearTimeout(this._removeTimeout), this.getPane().appendChild(this._container), this.update(), t._fadeAnimated&&C(this._container, 1), this.bringToFront(), this.options.interactive&&(M(this._container, "leaflet-interactive"), this.addInteractiveTarget(this._container));\n      },\n      onRemove: function (t){\n        t._fadeAnimated ? (C(this._container, 0), this._removeTimeout=setTimeout(a(T, void 0, this._container), 200)):T(this._container), this.options.interactive&&(z(this._container, "leaflet-interactive"), this.removeInteractiveTarget(this._container));\n      },\n      getLatLng: function (){\n        return this._latlng;\n      },\n      setLatLng: function (t){\n        return this._latlng=w(t), this._map&&(this._updatePosition(), this._adjustPan()), this;\n      },\n      getContent: function (){\n        return this._content;\n      },\n      setContent: function (t){\n        return this._content=t, this.update(), this;\n      },\n      getElement: function (){\n        return this._container;\n      },\n      update: function (){\n        this._map&&(this._container.style.visibility="hidden", this._updateContent(), this._updateLayout(), this._updatePosition(), this._container.style.visibility="", this._adjustPan());\n      },\n      getEvents: function (){\n        var t={\n          zoom: this._updatePosition,\n          viewreset: this._updatePosition\n        };\n        return this._zoomAnimated&&(t.zoomanim=this._animateZoom), t;\n      },\n      isOpen: function (){\n        return !!this._map&&this._map.hasLayer(this);\n      },\n      bringToFront: function (){\n        return this._map&&fe(this._container), this;\n      },\n      bringToBack: function (){\n        return this._map&&ge(this._container), this;\n      },\n      _prepareOpen: function (t){\n        if(!(i=this._source)._map) return !1;\n        if(i instanceof ci){\n          var e,\n            i=null,\n            n=this._source._layers;\n          for (e in n) if(n[e]._map){\n            i=n[e];\n            break;\n          }\n          if(!i) return !1;\n          this._source=i;\n        }\n        if(!t) if(i.getCenter) t=i.getCenter();else if(i.getLatLng) t=i.getLatLng();else {\n          if(!i.getBounds) throw new Error("Unable to get source layer LatLng.");\n          t=i.getBounds().getCenter();\n        }\n        return this.setLatLng(t), this._map&&this.update(), !0;\n      },\n      _updateContent: function (){\n        if(this._content){\n          var t=this._contentNode,\n            e="function"==typeof this._content ? this._content(this._source||this):this._content;\n          if("string"==typeof e) t.innerHTML=e;else {\n            for (; t.hasChildNodes();) t.removeChild(t.firstChild);\n            t.appendChild(e);\n          }\n          this.fire("contentupdate");\n        }\n      },\n      _updatePosition: function (){\n        var t, e, i;\n        this._map&&(e=this._map.latLngToLayerPoint(this._latlng), t=m(this.options.offset), i=this._getAnchor(), this._zoomAnimated ? Z(this._container, e.add(i)):t=t.add(e).add(i), e=this._containerBottom=-t.y, i=this._containerLeft=-Math.round(this._containerWidth / 2) + t.x, this._container.style.bottom=e + "px", this._container.style.left=i + "px");\n      },\n      _getAnchor: function (){\n        return [0, 0];\n      }\n    }),\n    Bi=(A.include({\n      _initOverlay: function (t, e, i, n){\n        var o=e;\n        return o instanceof t||(o=new t(n).setContent(e)), i&&o.setLatLng(i), o;\n      }\n    }), o.include({\n      _initOverlay: function (t, e, i, n){\n        var o=i;\n        return o instanceof t ? (c(o, n), o._source=this):(o=e&&!n ? e:new t(n, this)).setContent(i), o;\n      }\n    }), Ai.extend({\n      options: {\n        pane: "popupPane",\n        offset: [0, 7],\n        maxWidth: 300,\n        minWidth: 50,\n        maxHeight: null,\n        autoPan: !0,\n        autoPanPaddingTopLeft: null,\n        autoPanPaddingBottomRight: null,\n        autoPanPadding: [5, 5],\n        keepInView: !1,\n        closeButton: !0,\n        autoClose: !0,\n        closeOnEscapeKey: !0,\n        className: ""\n      },\n      openOn: function (t){\n        return !(t=arguments.length ? t:this._source._map).hasLayer(this)&&t._popup&&t._popup.options.autoClose&&t.removeLayer(t._popup), t._popup=this, Ai.prototype.openOn.call(this, t);\n      },\n      onAdd: function (t){\n        Ai.prototype.onAdd.call(this, t), t.fire("popupopen", {\n          popup: this\n        }), this._source&&(this._source.fire("popupopen", {\n          popup: this\n        }, !0), this._source instanceof fi||this._source.on("preclick", Ae));\n      },\n      onRemove: function (t){\n        Ai.prototype.onRemove.call(this, t), t.fire("popupclose", {\n          popup: this\n        }), this._source&&(this._source.fire("popupclose", {\n          popup: this\n        }, !0), this._source instanceof fi||this._source.off("preclick", Ae));\n      },\n      getEvents: function (){\n        var t=Ai.prototype.getEvents.call(this);\n        return (void 0!==this.options.closeOnClick ? this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this.close), this.options.keepInView&&(t.moveend=this._adjustPan), t;\n      },\n      _initLayout: function (){\n        var t="leaflet-popup",\n          e=this._container=P("div", t + " " + (this.options.className||"") + " leaflet-zoom-animated"),\n          i=this._wrapper=P("div", t + "-content-wrapper", e);\n        this._contentNode=P("div", t + "-content", i), Ie(e), Be(this._contentNode), S(e, "contextmenu", Ae), this._tipContainer=P("div", t + "-tip-container", e), this._tip=P("div", t + "-tip", this._tipContainer), this.options.closeButton&&((i=this._closeButton=P("a", t + "-close-button", e)).setAttribute("role", "button"), i.setAttribute("aria-label", "Close popup"), i.href="#close", i.innerHTML=\'<span aria-hidden="true">&#215;</span>\', S(i, "click", function (t){\n          O(t), this.close();\n        }, this));\n      },\n      _updateLayout: function (){\n        var t=this._contentNode,\n          e=t.style,\n          i=(e.width="", e.whiteSpace="nowrap", t.offsetWidth),\n          i=Math.min(i, this.options.maxWidth),\n          i=(i=Math.max(i, this.options.minWidth), e.width=i + 1 + "px", e.whiteSpace="", e.height="", t.offsetHeight),\n          n=this.options.maxHeight,\n          o="leaflet-popup-scrolled";\n        (n&&n < i ? (e.height=n + "px", M):z)(t, o), this._containerWidth=this._container.offsetWidth;\n      },\n      _animateZoom: function (t){\n        var t=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center),\n          e=this._getAnchor();\n        Z(this._container, t.add(e));\n      },\n      _adjustPan: function (){\n        var t, e, i, n, o, s, r, a;\n        this.options.autoPan&&(this._map._panAnim&&this._map._panAnim.stop(), this._autopanning ? this._autopanning = !1:(t=this._map, e=parseInt(pe(this._container, "marginBottom"), 10)||0, e=this._container.offsetHeight + e, a=this._containerWidth, (i=new p(this._containerLeft, -e - this._containerBottom))._add(Pe(this._container)), i=t.layerPointToContainerPoint(i), o=m(this.options.autoPanPadding), n=m(this.options.autoPanPaddingTopLeft||o), o=m(this.options.autoPanPaddingBottomRight||o), s=t.getSize(), r=0, i.x + a + o.x > s.x&&(r=i.x + a - s.x + o.x), i.x - r - n.x < (a=0)&&(r=i.x - n.x), i.y + e + o.y > s.y&&(a=i.y + e - s.y + o.y), i.y - a - n.y < 0&&(a=i.y - n.y), (r||a)&&(this.options.keepInView&&(this._autopanning = !0), t.fire("autopanstart").panBy([r, a]))));\n      },\n      _getAnchor: function (){\n        return m(this._source&&this._source._getPopupAnchor ? this._source._getPopupAnchor():[0, 0]);\n      }\n    })),\n    Ii=(A.mergeOptions({\n      closePopupOnClick: !0\n    }), A.include({\n      openPopup: function (t, e, i){\n        return this._initOverlay(Bi, t, e, i).openOn(this), this;\n      },\n      closePopup: function (t){\n        return (t=arguments.length ? t:this._popup)&&t.close(), this;\n      }\n    }), o.include({\n      bindPopup: function (t, e){\n        return this._popup=this._initOverlay(Bi, this._popup, t, e), this._popupHandlersAdded||(this.on({\n          click: this._openPopup,\n          keypress: this._onKeyPress,\n          remove: this.closePopup,\n          move: this._movePopup\n        }), this._popupHandlersAdded = !0), this;\n      },\n      unbindPopup: function (){\n        return this._popup&&(this.off({\n          click: this._openPopup,\n          keypress: this._onKeyPress,\n          remove: this.closePopup,\n          move: this._movePopup\n        }), this._popupHandlersAdded = !1, this._popup=null), this;\n      },\n      openPopup: function (t){\n        return this._popup&&(this instanceof ci||(this._popup._source=this), this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)), this;\n      },\n      closePopup: function (){\n        return this._popup&&this._popup.close(), this;\n      },\n      togglePopup: function (){\n        return this._popup&&this._popup.toggle(this), this;\n      },\n      isPopupOpen: function (){\n        return !!this._popup&&this._popup.isOpen();\n      },\n      setPopupContent: function (t){\n        return this._popup&&this._popup.setContent(t), this;\n      },\n      getPopup: function (){\n        return this._popup;\n      },\n      _openPopup: function (t){\n        var e;\n        this._popup&&this._map&&(Re(t), e=t.layer||t.target, this._popup._source!==e||e instanceof fi ? (this._popup._source=e, this.openPopup(t.latlng)):this._map.hasLayer(this._popup) ? this.closePopup():this.openPopup(t.latlng));\n      },\n      _movePopup: function (t){\n        this._popup.setLatLng(t.latlng);\n      },\n      _onKeyPress: function (t){\n        13===t.originalEvent.keyCode&&this._openPopup(t);\n      }\n    }), Ai.extend({\n      options: {\n        pane: "tooltipPane",\n        offset: [0, 0],\n        direction: "auto",\n        permanent: !1,\n        sticky: !1,\n        opacity: .9\n      },\n      onAdd: function (t){\n        Ai.prototype.onAdd.call(this, t), this.setOpacity(this.options.opacity), t.fire("tooltipopen", {\n          tooltip: this\n        }), this._source&&(this.addEventParent(this._source), this._source.fire("tooltipopen", {\n          tooltip: this\n        }, !0));\n      },\n      onRemove: function (t){\n        Ai.prototype.onRemove.call(this, t), t.fire("tooltipclose", {\n          tooltip: this\n        }), this._source&&(this.removeEventParent(this._source), this._source.fire("tooltipclose", {\n          tooltip: this\n        }, !0));\n      },\n      getEvents: function (){\n        var t=Ai.prototype.getEvents.call(this);\n        return this.options.permanent||(t.preclick=this.close), t;\n      },\n      _initLayout: function (){\n        var t="leaflet-tooltip " + (this.options.className||"") + " leaflet-zoom-" + (this._zoomAnimated ? "animated":"hide");\n        this._contentNode=this._container=P("div", t), this._container.setAttribute("role", "tooltip"), this._container.setAttribute("id", "leaflet-tooltip-" + h(this));\n      },\n      _updateLayout: function (){},\n      _adjustPan: function (){},\n      _setPosition: function (t){\n        var e,\n          i=this._map,\n          n=this._container,\n          o=i.latLngToContainerPoint(i.getCenter()),\n          i=i.layerPointToContainerPoint(t),\n          s=this.options.direction,\n          r=n.offsetWidth,\n          a=n.offsetHeight,\n          h=m(this.options.offset),\n          l=this._getAnchor(),\n          i="top"===s ? (e=r / 2, a):"bottom"===s ? (e=r / 2, 0):(e="center"===s ? r / 2:"right"===s ? 0:"left"===s ? r:i.x < o.x ? (s="right", 0):(s="left", r + 2 * (h.x + l.x)), a / 2);\n        t=t.subtract(m(e, i, !0)).add(h).add(l), z(n, "leaflet-tooltip-right"), z(n, "leaflet-tooltip-left"), z(n, "leaflet-tooltip-top"), z(n, "leaflet-tooltip-bottom"), M(n, "leaflet-tooltip-" + s), Z(n, t);\n      },\n      _updatePosition: function (){\n        var t=this._map.latLngToLayerPoint(this._latlng);\n        this._setPosition(t);\n      },\n      setOpacity: function (t){\n        this.options.opacity=t, this._container&&C(this._container, t);\n      },\n      _animateZoom: function (t){\n        t=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center);\n        this._setPosition(t);\n      },\n      _getAnchor: function (){\n        return m(this._source&&this._source._getTooltipAnchor&&!this.options.sticky ? this._source._getTooltipAnchor():[0, 0]);\n      }\n    })),\n    Ri=(A.include({\n      openTooltip: function (t, e, i){\n        return this._initOverlay(Ii, t, e, i).openOn(this), this;\n      },\n      closeTooltip: function (t){\n        return t.close(), this;\n      }\n    }), o.include({\n      bindTooltip: function (t, e){\n        return this._tooltip&&this.isTooltipOpen()&&this.unbindTooltip(), this._tooltip=this._initOverlay(Ii, this._tooltip, t, e), this._initTooltipInteractions(), this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(), this;\n      },\n      unbindTooltip: function (){\n        return this._tooltip&&(this._initTooltipInteractions(!0), this.closeTooltip(), this._tooltip=null), this;\n      },\n      _initTooltipInteractions: function (t){\n        var e, i;\n        !t&&this._tooltipHandlersAdded||(e=t ? "off":"on", i={\n          remove: this.closeTooltip,\n          move: this._moveTooltip\n        }, this._tooltip.options.permanent ? i.add=this._openTooltip:(i.mouseover=this._openTooltip, i.mouseout=this.closeTooltip, i.click=this._openTooltip, this._map ? this._addFocusListeners():i.add=this._addFocusListeners), this._tooltip.options.sticky&&(i.mousemove=this._moveTooltip), this[e](i), this._tooltipHandlersAdded = !t);\n      },\n      openTooltip: function (t){\n        return this._tooltip&&(this instanceof ci||(this._tooltip._source=this), this._tooltip._prepareOpen(t)&&(this._tooltip.openOn(this._map), this.getElement ? this._setAriaDescribedByOnLayer(this):this.eachLayer&&this.eachLayer(this._setAriaDescribedByOnLayer, this))), this;\n      },\n      closeTooltip: function (){\n        if(this._tooltip) return this._tooltip.close();\n      },\n      toggleTooltip: function (){\n        return this._tooltip&&this._tooltip.toggle(this), this;\n      },\n      isTooltipOpen: function (){\n        return this._tooltip.isOpen();\n      },\n      setTooltipContent: function (t){\n        return this._tooltip&&this._tooltip.setContent(t), this;\n      },\n      getTooltip: function (){\n        return this._tooltip;\n      },\n      _addFocusListeners: function (){\n        this.getElement ? this._addFocusListenersOnLayer(this):this.eachLayer&&this.eachLayer(this._addFocusListenersOnLayer, this);\n      },\n      _addFocusListenersOnLayer: function (t){\n        var e="function"==typeof t.getElement&&t.getElement();\n        e&&(S(e, "focus", function (){\n          this._tooltip._source=t, this.openTooltip();\n        }, this), S(e, "blur", this.closeTooltip, this));\n      },\n      _setAriaDescribedByOnLayer: function (t){\n        t="function"==typeof t.getElement&&t.getElement();\n        t&&t.setAttribute("aria-describedby", this._tooltip._container.id);\n      },\n      _openTooltip: function (t){\n        var e;\n        this._tooltip&&this._map&&(this._map.dragging&&this._map.dragging.moving()&&!this._openOnceFlag ? (this._openOnceFlag = !0, (e=this)._map.once("moveend", function (){\n          e._openOnceFlag = !1, e._openTooltip(t);\n        })):(this._tooltip._source=t.layer||t.target, this.openTooltip(this._tooltip.options.sticky ? t.latlng:void 0)));\n      },\n      _moveTooltip: function (t){\n        var e=t.latlng;\n        this._tooltip.options.sticky&&t.originalEvent&&(t=this._map.mouseEventToContainerPoint(t.originalEvent), t=this._map.containerPointToLayerPoint(t), e=this._map.layerPointToLatLng(t)), this._tooltip.setLatLng(e);\n      }\n    }), di.extend({\n      options: {\n        iconSize: [12, 12],\n        html: !1,\n        bgPos: null,\n        className: "leaflet-div-icon"\n      },\n      createIcon: function (t){\n        var t=t&&"DIV"===t.tagName ? t:document.createElement("div"),\n          e=this.options;\n        return e.html instanceof Element ? (me(t), t.appendChild(e.html)):t.innerHTML = !1!==e.html ? e.html:"", e.bgPos&&(e=m(e.bgPos), t.style.backgroundPosition=-e.x + "px " + -e.y + "px"), this._setIconStyles(t, "icon"), t;\n      },\n      createShadow: function (){\n        return null;\n      }\n    }));\n  di.Default=_i;\n  var Ni=o.extend({\n    options: {\n      tileSize: 256,\n      opacity: 1,\n      updateWhenIdle: b.mobile,\n      updateWhenZooming: !0,\n      updateInterval: 200,\n      zIndex: 1,\n      bounds: null,\n      minZoom: 0,\n      maxZoom: void 0,\n      maxNativeZoom: void 0,\n      minNativeZoom: void 0,\n      noWrap: !1,\n      pane: "tilePane",\n      className: "",\n      keepBuffer: 2\n    },\n    initialize: function (t){\n      c(this, t);\n    },\n    onAdd: function (){\n      this._initContainer(), this._levels={}, this._tiles={}, this._resetView();\n    },\n    beforeAdd: function (t){\n      t._addZoomLimit(this);\n    },\n    onRemove: function (t){\n      this._removeAllTiles(), T(this._container), t._removeZoomLimit(this), this._container=null, this._tileZoom=void 0;\n    },\n    bringToFront: function (){\n      return this._map&&(fe(this._container), this._setAutoZIndex(Math.max)), this;\n    },\n    bringToBack: function (){\n      return this._map&&(ge(this._container), this._setAutoZIndex(Math.min)), this;\n    },\n    getContainer: function (){\n      return this._container;\n    },\n    setOpacity: function (t){\n      return this.options.opacity=t, this._updateOpacity(), this;\n    },\n    setZIndex: function (t){\n      return this.options.zIndex=t, this._updateZIndex(), this;\n    },\n    isLoading: function (){\n      return this._loading;\n    },\n    redraw: function (){\n      var t;\n      return this._map&&(this._removeAllTiles(), (t=this._clampZoom(this._map.getZoom()))!==this._tileZoom&&(this._tileZoom=t, this._updateLevels()), this._update()), this;\n    },\n    getEvents: function (){\n      var t={\n        viewprereset: this._invalidateAll,\n        viewreset: this._resetView,\n        zoom: this._resetView,\n        moveend: this._onMoveEnd\n      };\n      return this.options.updateWhenIdle||(this._onMove||(this._onMove=j(this._onMoveEnd, this.options.updateInterval, this)), t.move=this._onMove), this._zoomAnimated&&(t.zoomanim=this._animateZoom), t;\n    },\n    createTile: function (){\n      return document.createElement("div");\n    },\n    getTileSize: function (){\n      var t=this.options.tileSize;\n      return t instanceof p ? t:new p(t, t);\n    },\n    _updateZIndex: function (){\n      this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex);\n    },\n    _setAutoZIndex: function (t){\n      for (var e, i=this.getPane().children, n=-t(-1 / 0, 1 / 0), o=0, s=i.length; o < s; o++) e=i[o].style.zIndex, i[o]!==this._container&&e && (n=t(n, +e));\n      isFinite(n)&&(this.options.zIndex=n + t(-1, 1), this._updateZIndex());\n    },\n    _updateOpacity: function (){\n      if(this._map&&!b.ielt9){\n        C(this._container, this.options.opacity);\n        var t,\n          e=+new Date(),\n          i = !1,\n          n = !1;\n        for (t in this._tiles){\n          var o,\n            s=this._tiles[t];\n          s.current&&s.loaded&&(o=Math.min(1, (e - s.loaded) / 200), C(s.el, o), o < 1 ? i = !0:(s.active ? n = !0:this._onOpaqueTile(s), s.active = !0));\n        }\n        n&&!this._noPrune&&this._pruneTiles(), i&&(r(this._fadeFrame), this._fadeFrame=x(this._updateOpacity, this));\n      }\n    },\n    _onOpaqueTile: u,\n    _initContainer: function (){\n      this._container||(this._container=P("div", "leaflet-layer " + (this.options.className||"")), this._updateZIndex(), this.options.opacity < 1&&this._updateOpacity(), this.getPane().appendChild(this._container));\n    },\n    _updateLevels: function (){\n      var t=this._tileZoom,\n        e=this.options.maxZoom;\n      if(void 0!==t){\n        for (var i in this._levels) i=Number(i), this._levels[i].el.children.length||i===t ? (this._levels[i].el.style.zIndex=e - Math.abs(t - i), this._onUpdateLevel(i)):(T(this._levels[i].el), this._removeTilesAtZoom(i), this._onRemoveLevel(i), delete this._levels[i]);\n        var n=this._levels[t],\n          o=this._map;\n        return n||((n=this._levels[t]={}).el=P("div", "leaflet-tile-container leaflet-zoom-animated", this._container), n.el.style.zIndex=e, n.origin=o.project(o.unproject(o.getPixelOrigin()), t).round(), n.zoom=t, this._setZoomTransform(n, o.getCenter(), o.getZoom()), u(n.el.offsetWidth), this._onCreateLevel(n)), this._level=n;\n      }\n    },\n    _onUpdateLevel: u,\n    _onRemoveLevel: u,\n    _onCreateLevel: u,\n    _pruneTiles: function (){\n      if(this._map){\n        var t,\n          e,\n          i,\n          n=this._map.getZoom();\n        if(n > this.options.maxZoom||n < this.options.minZoom) this._removeAllTiles();else {\n          for (t in this._tiles) (i=this._tiles[t]).retain=i.current;\n          for (t in this._tiles) (i=this._tiles[t]).current&&!i.active&&(e=i.coords, this._retainParent(e.x, e.y, e.z, e.z - 5)||this._retainChildren(e.x, e.y, e.z, e.z + 2));\n          for (t in this._tiles) this._tiles[t].retain||this._removeTile(t);\n        }\n      }\n    },\n    _removeTilesAtZoom: function (t){\n      for (var e in this._tiles) this._tiles[e].coords.z===t&&this._removeTile(e);\n    },\n    _removeAllTiles: function (){\n      for (var t in this._tiles) this._removeTile(t);\n    },\n    _invalidateAll: function (){\n      for (var t in this._levels) T(this._levels[t].el), this._onRemoveLevel(Number(t)), delete this._levels[t];\n      this._removeAllTiles(), this._tileZoom=void 0;\n    },\n    _retainParent: function (t, e, i, n){\n      var t=Math.floor(t / 2),\n        e=Math.floor(e / 2),\n        i=i - 1,\n        o=new p(+t, +e),\n        o=(o.z=i, this._tileCoordsToKey(o)),\n        o=this._tiles[o];\n      return o&&o.active ? o.retain = !0:(o&&o.loaded&&(o.retain = !0), n < i&&this._retainParent(t, e, i, n));\n    },\n    _retainChildren: function (t, e, i, n){\n      for (var o=2 * t; o < 2 * t + 2; o++) for (var s=2 * e; s < 2 * e + 2; s++){\n        var r=new p(o, s),\n          r=(r.z=i + 1, this._tileCoordsToKey(r)),\n          r=this._tiles[r];\n        r&&r.active ? r.retain = !0:(r&&r.loaded&&(r.retain = !0), i + 1 < n&&this._retainChildren(o, s, i + 1, n));\n      }\n    },\n    _resetView: function (t){\n      t=t&&(t.pinch||t.flyTo);\n      this._setView(this._map.getCenter(), this._map.getZoom(), t, t);\n    },\n    _animateZoom: function (t){\n      this._setView(t.center, t.zoom, !0, t.noUpdate);\n    },\n    _clampZoom: function (t){\n      var e=this.options;\n      return void 0!==e.minNativeZoom&&t < e.minNativeZoom ? e.minNativeZoom:void 0!==e.maxNativeZoom&&e.maxNativeZoom < t ? e.maxNativeZoom:t;\n    },\n    _setView: function (t, e, i, n){\n      var o=Math.round(e),\n        o=void 0!==this.options.maxZoom&&o > this.options.maxZoom||void 0!==this.options.minZoom&&o < this.options.minZoom ? void 0:this._clampZoom(o),\n        s=this.options.updateWhenZooming&&o!==this._tileZoom;\n      n&&!s||(this._tileZoom=o, this._abortLoading&&this._abortLoading(), this._updateLevels(), this._resetGrid(), void 0!==o&&this._update(t), i||this._pruneTiles(), this._noPrune = !!i), this._setZoomTransforms(t, e);\n    },\n    _setZoomTransforms: function (t, e){\n      for (var i in this._levels) this._setZoomTransform(this._levels[i], t, e);\n    },\n    _setZoomTransform: function (t, e, i){\n      var n=this._map.getZoomScale(i, t.zoom),\n        e=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(e, i)).round();\n      b.any3d ? be(t.el, e, n):Z(t.el, e);\n    },\n    _resetGrid: function (){\n      var t=this._map,\n        e=t.options.crs,\n        i=this._tileSize=this.getTileSize(),\n        n=this._tileZoom,\n        o=this._map.getPixelWorldBounds(this._tileZoom);\n      o&&(this._globalTileRange=this._pxBoundsToTileRange(o)), this._wrapX=e.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0, e.wrapLng[0]], n).x / i.x), Math.ceil(t.project([0, e.wrapLng[1]], n).x / i.y)], this._wrapY=e.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([e.wrapLat[0], 0], n).y / i.x), Math.ceil(t.project([e.wrapLat[1], 0], n).y / i.y)];\n    },\n    _onMoveEnd: function (){\n      this._map&&!this._map._animatingZoom&&this._update();\n    },\n    _getTiledPixelBounds: function (t){\n      var e=this._map,\n        i=e._animatingZoom ? Math.max(e._animateToZoom, e.getZoom()):e.getZoom(),\n        i=e.getZoomScale(i, this._tileZoom),\n        t=e.project(t, this._tileZoom).floor(),\n        e=e.getSize().divideBy(2 * i);\n      return new f(t.subtract(e), t.add(e));\n    },\n    _update: function (t){\n      var e=this._map;\n      if(e){\n        var i=this._clampZoom(e.getZoom());\n        if(void 0===t&&(t=e.getCenter()), void 0!==this._tileZoom){\n          var n,\n            e=this._getTiledPixelBounds(t),\n            o=this._pxBoundsToTileRange(e),\n            s=o.getCenter(),\n            r=[],\n            e=this.options.keepBuffer,\n            a=new f(o.getBottomLeft().subtract([e, -e]), o.getTopRight().add([e, -e]));\n          if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y))) throw new Error("Attempted to load an infinite number of tiles");\n          for (n in this._tiles){\n            var h=this._tiles[n].coords;\n            h.z===this._tileZoom&&a.contains(new p(h.x, h.y))||(this._tiles[n].current = !1);\n          }\n          if(1 < Math.abs(i - this._tileZoom)) this._setView(t, i);else {\n            for (var l=o.min.y; l <=o.max.y; l++) for (var u=o.min.x; u <=o.max.x; u++){\n              var c,\n                d=new p(u, l);\n              d.z=this._tileZoom, this._isValidTile(d)&&((c=this._tiles[this._tileCoordsToKey(d)]) ? c.current = !0:r.push(d));\n            }\n            if(r.sort(function (t, e){\n              return t.distanceTo(s) - e.distanceTo(s);\n            }), 0!==r.length){\n              this._loading||(this._loading = !0, this.fire("loading"));\n              for (var _=document.createDocumentFragment(), u=0; u < r.length; u++) this._addTile(r[u], _);\n              this._level.el.appendChild(_);\n            }\n          }\n        }\n      }\n    },\n    _isValidTile: function (t){\n      var e=this._map.options.crs;\n      if(!e.infinite){\n        var i=this._globalTileRange;\n        if(!e.wrapLng&&(t.x < i.min.x||t.x > i.max.x)||!e.wrapLat&&(t.y < i.min.y||t.y > i.max.y)) return !1;\n      }\n      return !this.options.bounds||(e=this._tileCoordsToBounds(t), g(this.options.bounds).overlaps(e));\n    },\n    _keyToBounds: function (t){\n      return this._tileCoordsToBounds(this._keyToTileCoords(t));\n    },\n    _tileCoordsToNwSe: function (t){\n      var e=this._map,\n        i=this.getTileSize(),\n        n=t.scaleBy(i),\n        i=n.add(i);\n      return [e.unproject(n, t.z), e.unproject(i, t.z)];\n    },\n    _tileCoordsToBounds: function (t){\n      t=this._tileCoordsToNwSe(t), t=new s(t[0], t[1]);\n      return t=this.options.noWrap ? t:this._map.wrapLatLngBounds(t);\n    },\n    _tileCoordsToKey: function (t){\n      return t.x + ":" + t.y + ":" + t.z;\n    },\n    _keyToTileCoords: function (t){\n      var t=t.split(":"),\n        e=new p(+t[0], +t[1]);\n      return e.z=+t[2], e;\n    },\n    _removeTile: function (t){\n      var e=this._tiles[t];\n      e&&(T(e.el), delete this._tiles[t], this.fire("tileunload", {\n        tile: e.el,\n        coords: this._keyToTileCoords(t)\n      }));\n    },\n    _initTile: function (t){\n      M(t, "leaflet-tile");\n      var e=this.getTileSize();\n      t.style.width=e.x + "px", t.style.height=e.y + "px", t.onselectstart=u, t.onmousemove=u, b.ielt9&&this.options.opacity < 1&&C(t, this.options.opacity);\n    },\n    _addTile: function (t, e){\n      var i=this._getTilePos(t),\n        n=this._tileCoordsToKey(t),\n        o=this.createTile(this._wrapCoords(t), a(this._tileReady, this, t));\n      this._initTile(o), this.createTile.length < 2&&x(a(this._tileReady, this, t, null, o)), Z(o, i), this._tiles[n]={\n        el: o,\n        coords: t,\n        current: !0\n      }, e.appendChild(o), this.fire("tileloadstart", {\n        tile: o,\n        coords: t\n      });\n    },\n    _tileReady: function (t, e, i){\n      e&&this.fire("tileerror", {\n        error: e,\n        tile: i,\n        coords: t\n      });\n      var n=this._tileCoordsToKey(t);\n      (i=this._tiles[n])&&(i.loaded=+new Date(), this._map._fadeAnimated ? (C(i.el, 0), r(this._fadeFrame), this._fadeFrame=x(this._updateOpacity, this)):(i.active = !0, this._pruneTiles()), e||(M(i.el, "leaflet-tile-loaded"), this.fire("tileload", {\n        tile: i.el,\n        coords: t\n      })), this._noTilesToLoad()&&(this._loading = !1, this.fire("load"), b.ielt9||!this._map._fadeAnimated ? x(this._pruneTiles, this):setTimeout(a(this._pruneTiles, this), 250)));\n    },\n    _getTilePos: function (t){\n      return t.scaleBy(this.getTileSize()).subtract(this._level.origin);\n    },\n    _wrapCoords: function (t){\n      var e=new p(this._wrapX ? H(t.x, this._wrapX):t.x, this._wrapY ? H(t.y, this._wrapY):t.y);\n      return e.z=t.z, e;\n    },\n    _pxBoundsToTileRange: function (t){\n      var e=this.getTileSize();\n      return new f(t.min.unscaleBy(e).floor(), t.max.unscaleBy(e).ceil().subtract([1, 1]));\n    },\n    _noTilesToLoad: function (){\n      for (var t in this._tiles) if(!this._tiles[t].loaded) return !1;\n      return !0;\n    }\n  });\n  var Di=Ni.extend({\n    options: {\n      minZoom: 0,\n      maxZoom: 18,\n      subdomains: "abc",\n      errorTileUrl: "",\n      zoomOffset: 0,\n      tms: !1,\n      zoomReverse: !1,\n      detectRetina: !1,\n      crossOrigin: !1,\n      referrerPolicy: !1\n    },\n    initialize: function (t, e){\n      this._url=t, (e=c(this, e)).detectRetina&&b.retina&&0 < e.maxZoom ? (e.tileSize=Math.floor(e.tileSize / 2), e.zoomReverse ? (e.zoomOffset--, e.minZoom=Math.min(e.maxZoom, e.minZoom + 1)):(e.zoomOffset++, e.maxZoom=Math.max(e.minZoom, e.maxZoom - 1)), e.minZoom=Math.max(0, e.minZoom)):e.zoomReverse ? e.minZoom=Math.min(e.maxZoom, e.minZoom):e.maxZoom=Math.max(e.minZoom, e.maxZoom), "string"==typeof e.subdomains&&(e.subdomains=e.subdomains.split("")), this.on("tileunload", this._onTileRemove);\n    },\n    setUrl: function (t, e){\n      return this._url===t&&void 0===e&&(e = !0), this._url=t, e||this.redraw(), this;\n    },\n    createTile: function (t, e){\n      var i=document.createElement("img");\n      return S(i, "load", a(this._tileOnLoad, this, e, i)), S(i, "error", a(this._tileOnError, this, e, i)), !this.options.crossOrigin&&""!==this.options.crossOrigin||(i.crossOrigin = !0===this.options.crossOrigin ? "":this.options.crossOrigin), "string"==typeof this.options.referrerPolicy&&(i.referrerPolicy=this.options.referrerPolicy), i.alt="", i.src=this.getTileUrl(t), i;\n    },\n    getTileUrl: function (t){\n      var e={\n        r: b.retina ? "@2x":"",\n        s: this._getSubdomain(t),\n        x: t.x,\n        y: t.y,\n        z: this._getZoomForUrl()\n      };\n      return this._map&&!this._map.options.crs.infinite&&(t=this._globalTileRange.max.y - t.y, this.options.tms&&(e.y=t), e["-y"]=t), q(this._url, l(e, this.options));\n    },\n    _tileOnLoad: function (t, e){\n      b.ielt9 ? setTimeout(a(t, this, null, e), 0):t(null, e);\n    },\n    _tileOnError: function (t, e, i){\n      var n=this.options.errorTileUrl;\n      n&&e.getAttribute("src")!==n&&(e.src=n), t(i, e);\n    },\n    _onTileRemove: function (t){\n      t.tile.onload=null;\n    },\n    _getZoomForUrl: function (){\n      var t=this._tileZoom,\n        e=this.options.maxZoom;\n      return (t=this.options.zoomReverse ? e - t:t) + this.options.zoomOffset;\n    },\n    _getSubdomain: function (t){\n      t=Math.abs(t.x + t.y) % this.options.subdomains.length;\n      return this.options.subdomains[t];\n    },\n    _abortLoading: function (){\n      var t, e, i;\n      for (t in this._tiles) this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=u, i.onerror=u, i.complete||(i.src=K, e=this._tiles[t].coords, T(i), delete this._tiles[t], this.fire("tileabort", {\n        tile: i,\n        coords: e\n      })));\n    },\n    _removeTile: function (t){\n      var e=this._tiles[t];\n      if(e) return e.el.setAttribute("src", K), Ni.prototype._removeTile.call(this, t);\n    },\n    _tileReady: function (t, e, i){\n      if(this._map&&(!i||i.getAttribute("src")!==K)) return Ni.prototype._tileReady.call(this, t, e, i);\n    }\n  });\n  function ji(t, e){\n    return new Di(t, e);\n  }\n  var Hi=Di.extend({\n    defaultWmsParams: {\n      service: "WMS",\n      request: "GetMap",\n      layers: "",\n      styles: "",\n      format: "image/jpeg",\n      transparent: !1,\n      version: "1.1.1"\n    },\n    options: {\n      crs: null,\n      uppercase: !1\n    },\n    initialize: function (t, e){\n      this._url=t;\n      var i,\n        n=l({}, this.defaultWmsParams);\n      for (i in e) i in this.options||(n[i]=e[i]);\n      var t=(e=c(this, e)).detectRetina&&b.retina ? 2:1,\n        o=this.getTileSize();\n      n.width=o.x * t, n.height=o.y * t, this.wmsParams=n;\n    },\n    onAdd: function (t){\n      this._crs=this.options.crs||t.options.crs, this._wmsVersion=parseFloat(this.wmsParams.version);\n      var e=1.3 <=this._wmsVersion ? "crs":"srs";\n      this.wmsParams[e]=this._crs.code, Di.prototype.onAdd.call(this, t);\n    },\n    getTileUrl: function (t){\n      var e=this._tileCoordsToNwSe(t),\n        i=this._crs,\n        i=_(i.project(e[0]), i.project(e[1])),\n        e=i.min,\n        i=i.max,\n        e=(1.3 <=this._wmsVersion&&this._crs===li ? [e.y, e.x, i.y, i.x]:[e.x, e.y, i.x, i.y]).join(","),\n        i=Di.prototype.getTileUrl.call(this, t);\n      return i + U(this.wmsParams, i, this.options.uppercase) + (this.options.uppercase ? "&BBOX=":"&bbox=") + e;\n    },\n    setParams: function (t, e){\n      return l(this.wmsParams, t), e||this.redraw(), this;\n    }\n  });\n  Di.WMS=Hi, ji.wms=function (t, e){\n    return new Hi(t, e);\n  };\n  var Wi=o.extend({\n      options: {\n        padding: .1\n      },\n      initialize: function (t){\n        c(this, t), h(this), this._layers=this._layers||{};\n      },\n      onAdd: function (){\n        this._container||(this._initContainer(), M(this._container, "leaflet-zoom-animated")), this.getPane().appendChild(this._container), this._update(), this.on("update", this._updatePaths, this);\n      },\n      onRemove: function (){\n        this.off("update", this._updatePaths, this), this._destroyContainer();\n      },\n      getEvents: function (){\n        var t={\n          viewreset: this._reset,\n          zoom: this._onZoom,\n          moveend: this._update,\n          zoomend: this._onZoomEnd\n        };\n        return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom), t;\n      },\n      _onAnimZoom: function (t){\n        this._updateTransform(t.center, t.zoom);\n      },\n      _onZoom: function (){\n        this._updateTransform(this._map.getCenter(), this._map.getZoom());\n      },\n      _updateTransform: function (t, e){\n        var i=this._map.getZoomScale(e, this._zoom),\n          n=this._map.getSize().multiplyBy(.5 + this.options.padding),\n          o=this._map.project(this._center, e),\n          n=n.multiplyBy(-i).add(o).subtract(this._map._getNewPixelOrigin(t, e));\n        b.any3d ? be(this._container, n, i):Z(this._container, n);\n      },\n      _reset: function (){\n        for (var t in this._update(), this._updateTransform(this._center, this._zoom), this._layers) this._layers[t]._reset();\n      },\n      _onZoomEnd: function (){\n        for (var t in this._layers) this._layers[t]._project();\n      },\n      _updatePaths: function (){\n        for (var t in this._layers) this._layers[t]._update();\n      },\n      _update: function (){\n        var t=this.options.padding,\n          e=this._map.getSize(),\n          i=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();\n        this._bounds=new f(i, i.add(e.multiplyBy(1 + 2 * t)).round()), this._center=this._map.getCenter(), this._zoom=this._map.getZoom();\n      }\n    }),\n    Fi=Wi.extend({\n      options: {\n        tolerance: 0\n      },\n      getEvents: function (){\n        var t=Wi.prototype.getEvents.call(this);\n        return t.viewprereset=this._onViewPreReset, t;\n      },\n      _onViewPreReset: function (){\n        this._postponeUpdatePaths = !0;\n      },\n      onAdd: function (){\n        Wi.prototype.onAdd.call(this), this._draw();\n      },\n      _initContainer: function (){\n        var t=this._container=document.createElement("canvas");\n        S(t, "mousemove", this._onMouseMove, this), S(t, "click dblclick mousedown mouseup contextmenu", this._onClick, this), S(t, "mouseout", this._handleMouseOut, this), t._leaflet_disable_events = !0, this._ctx=t.getContext("2d");\n      },\n      _destroyContainer: function (){\n        r(this._redrawRequest), delete this._ctx, T(this._container), k(this._container), delete this._container;\n      },\n      _updatePaths: function (){\n        if(!this._postponeUpdatePaths){\n          for (var t in this._redrawBounds=null, this._layers) this._layers[t]._update();\n          this._redraw();\n        }\n      },\n      _update: function (){\n        var t, e, i, n;\n        this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this), t=this._bounds, e=this._container, i=t.getSize(), n=b.retina ? 2:1, Z(e, t.min), e.width=n * i.x, e.height=n * i.y, e.style.width=i.x + "px", e.style.height=i.y + "px", b.retina&&this._ctx.scale(2, 2), this._ctx.translate(-t.min.x, -t.min.y), this.fire("update"));\n      },\n      _reset: function (){\n        Wi.prototype._reset.call(this), this._postponeUpdatePaths&&(this._postponeUpdatePaths = !1, this._updatePaths());\n      },\n      _initPath: function (t){\n        this._updateDashArray(t);\n        t=(this._layers[h(t)]=t)._order={\n          layer: t,\n          prev: this._drawLast,\n          next: null\n        };\n        this._drawLast&&(this._drawLast.next=t), this._drawLast=t, this._drawFirst=this._drawFirst||this._drawLast;\n      },\n      _addPath: function (t){\n        this._requestRedraw(t);\n      },\n      _removePath: function (t){\n        var e=t._order,\n          i=e.next,\n          e=e.prev;\n        i ? i.prev=e:this._drawLast=e, e ? e.next=i:this._drawFirst=i, delete t._order, delete this._layers[h(t)], this._requestRedraw(t);\n      },\n      _updatePath: function (t){\n        this._extendRedrawBounds(t), t._project(), t._update(), this._requestRedraw(t);\n      },\n      _updateStyle: function (t){\n        this._updateDashArray(t), this._requestRedraw(t);\n      },\n      _updateDashArray: function (t){\n        if("string"==typeof t.options.dashArray){\n          for (var e, i=t.options.dashArray.split(/[, ]+/), n=[], o=0; o < i.length; o++){\n            if(e=Number(i[o]), isNaN(e)) return;\n            n.push(e);\n          }\n          t.options._dashArray=n;\n        } else t.options._dashArray=t.options.dashArray;\n      },\n      _requestRedraw: function (t){\n        this._map&&(this._extendRedrawBounds(t), this._redrawRequest=this._redrawRequest||x(this._redraw, this));\n      },\n      _extendRedrawBounds: function (t){\n        var e;\n        t._pxBounds&&(e=(t.options.weight||0) + 1, this._redrawBounds=this._redrawBounds||new f(), this._redrawBounds.extend(t._pxBounds.min.subtract([e, e])), this._redrawBounds.extend(t._pxBounds.max.add([e, e])));\n      },\n      _redraw: function (){\n        this._redrawRequest=null, this._redrawBounds&&(this._redrawBounds.min._floor(), this._redrawBounds.max._ceil()), this._clear(), this._draw(), this._redrawBounds=null;\n      },\n      _clear: function (){\n        var t,\n          e=this._redrawBounds;\n        e ? (t=e.getSize(), this._ctx.clearRect(e.min.x, e.min.y, t.x, t.y)):(this._ctx.save(), this._ctx.setTransform(1, 0, 0, 1, 0, 0), this._ctx.clearRect(0, 0, this._container.width, this._container.height), this._ctx.restore());\n      },\n      _draw: function (){\n        var t,\n          e,\n          i=this._redrawBounds;\n        this._ctx.save(), i&&(e=i.getSize(), this._ctx.beginPath(), this._ctx.rect(i.min.x, i.min.y, e.x, e.y), this._ctx.clip()), this._drawing = !0;\n        for (var n=this._drawFirst; n; n=n.next) t=n.layer, (!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();\n        this._drawing = !1, this._ctx.restore();\n      },\n      _updatePoly: function (t, e){\n        if(this._drawing){\n          var i,\n            n,\n            o,\n            s,\n            r=t._parts,\n            a=r.length,\n            h=this._ctx;\n          if(a){\n            for (h.beginPath(), i=0; i < a; i++){\n              for (n=0, o=r[i].length; n < o; n++) s=r[i][n], h[n ? "lineTo":"moveTo"](s.x, s.y);\n              e&&h.closePath();\n            }\n            this._fillStroke(h, t);\n          }\n        }\n      },\n      _updateCircle: function (t){\n        var e, i, n, o;\n        this._drawing&&!t._empty()&&(e=t._point, i=this._ctx, n=Math.max(Math.round(t._radius), 1), 1!=(o=(Math.max(Math.round(t._radiusY), 1)||n) / n)&&(i.save(), i.scale(1, o)), i.beginPath(), i.arc(e.x, e.y / o, n, 0, 2 * Math.PI, !1), 1!=o&&i.restore(), this._fillStroke(i, t));\n      },\n      _fillStroke: function (t, e){\n        var i=e.options;\n        i.fill&&(t.globalAlpha=i.fillOpacity, t.fillStyle=i.fillColor||i.color, t.fill(i.fillRule||"evenodd")), i.stroke&&0!==i.weight&&(t.setLineDash&&t.setLineDash(e.options&&e.options._dashArray||[]), t.globalAlpha=i.opacity, t.lineWidth=i.weight, t.strokeStyle=i.color, t.lineCap=i.lineCap, t.lineJoin=i.lineJoin, t.stroke());\n      },\n      _onClick: function (t){\n        for (var e, i, n=this._map.mouseEventToLayerPoint(t), o=this._drawFirst; o; o=o.next) (e=o.layer).options.interactive&&e._containsPoint(n)&&(("click"===t.type||"preclick"===t.type)&&this._map._draggableMoved(e)||(i=e));\n        this._fireEvent(!!i&&[i], t);\n      },\n      _onMouseMove: function (t){\n        var e;\n        !this._map||this._map.dragging.moving()||this._map._animatingZoom||(e=this._map.mouseEventToLayerPoint(t), this._handleMouseHover(t, e));\n      },\n      _handleMouseOut: function (t){\n        var e=this._hoveredLayer;\n        e&&(z(this._container, "leaflet-interactive"), this._fireEvent([e], t, "mouseout"), this._hoveredLayer=null, this._mouseHoverThrottled = !1);\n      },\n      _handleMouseHover: function (t, e){\n        if(!this._mouseHoverThrottled){\n          for (var i, n, o=this._drawFirst; o; o=o.next) (i=o.layer).options.interactive&&i._containsPoint(e)&&(n=i);\n          n!==this._hoveredLayer&&(this._handleMouseOut(t), n&&(M(this._container, "leaflet-interactive"), this._fireEvent([n], t, "mouseover"), this._hoveredLayer=n)), this._fireEvent(!!this._hoveredLayer&&[this._hoveredLayer], t), this._mouseHoverThrottled = !0, setTimeout(a(function (){\n            this._mouseHoverThrottled = !1;\n          }, this), 32);\n        }\n      },\n      _fireEvent: function (t, e, i){\n        this._map._fireDOMEvent(e, i||e.type, t);\n      },\n      _bringToFront: function (t){\n        var e,\n          i,\n          n=t._order;\n        n&&(e=n.next, i=n.prev, e&&((e.prev=i) ? i.next=e:e&&(this._drawFirst=e), n.prev=this._drawLast, (this._drawLast.next=n).next=null, this._drawLast=n, this._requestRedraw(t)));\n      },\n      _bringToBack: function (t){\n        var e,\n          i,\n          n=t._order;\n        n&&(e=n.next, (i=n.prev)&&((i.next=e) ? e.prev=i:i&&(this._drawLast=i), n.prev=null, n.next=this._drawFirst, this._drawFirst.prev=n, this._drawFirst=n, this._requestRedraw(t)));\n      }\n    });\n  function Ui(t){\n    return b.canvas ? new Fi(t):null;\n  }\n  var Vi=function (){\n      try {\n        return document.namespaces.add("lvml", "urn:schemas-microsoft-com:vml"), function (t){\n          return document.createElement("<lvml:" + t + \' class="lvml">\');\n        };\n      } catch (t){}\n      return function (t){\n        return document.createElement("<" + t + \' xmlns="urn:schemas-microsoft.com:vml" class="lvml">\');\n      };\n    }(),\n    zt={\n      _initContainer: function (){\n        this._container=P("div", "leaflet-vml-container");\n      },\n      _update: function (){\n        this._map._animatingZoom||(Wi.prototype._update.call(this), this.fire("update"));\n      },\n      _initPath: function (t){\n        var e=t._container=Vi("shape");\n        M(e, "leaflet-vml-shape " + (this.options.className||"")), e.coordsize="1 1", t._path=Vi("path"), e.appendChild(t._path), this._updateStyle(t), this._layers[h(t)]=t;\n      },\n      _addPath: function (t){\n        var e=t._container;\n        this._container.appendChild(e), t.options.interactive&&t.addInteractiveTarget(e);\n      },\n      _removePath: function (t){\n        var e=t._container;\n        T(e), t.removeInteractiveTarget(e), delete this._layers[h(t)];\n      },\n      _updateStyle: function (t){\n        var e=t._stroke,\n          i=t._fill,\n          n=t.options,\n          o=t._container;\n        o.stroked = !!n.stroke, o.filled = !!n.fill, n.stroke ? (e=e||(t._stroke=Vi("stroke")), o.appendChild(e), e.weight=n.weight + "px", e.color=n.color, e.opacity=n.opacity, n.dashArray ? e.dashStyle=d(n.dashArray) ? n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g, " "):e.dashStyle="", e.endcap=n.lineCap.replace("butt", "flat"), e.joinstyle=n.lineJoin):e&&(o.removeChild(e), t._stroke=null), n.fill ? (i=i||(t._fill=Vi("fill")), o.appendChild(i), i.color=n.fillColor||n.color, i.opacity=n.fillOpacity):i&&(o.removeChild(i), t._fill=null);\n      },\n      _updateCircle: function (t){\n        var e=t._point.round(),\n          i=Math.round(t._radius),\n          n=Math.round(t._radiusY||i);\n        this._setPath(t, t._empty() ? "M0 0":"AL " + e.x + "," + e.y + " " + i + "," + n + " 0,23592600");\n      },\n      _setPath: function (t, e){\n        t._path.v=e;\n      },\n      _bringToFront: function (t){\n        fe(t._container);\n      },\n      _bringToBack: function (t){\n        ge(t._container);\n      }\n    },\n    qi=b.vml ? Vi:ct,\n    Gi=Wi.extend({\n      _initContainer: function (){\n        this._container=qi("svg"), this._container.setAttribute("pointer-events", "none"), this._rootGroup=qi("g"), this._container.appendChild(this._rootGroup);\n      },\n      _destroyContainer: function (){\n        T(this._container), k(this._container), delete this._container, delete this._rootGroup, delete this._svgSize;\n      },\n      _update: function (){\n        var t, e, i;\n        this._map._animatingZoom&&this._bounds||(Wi.prototype._update.call(this), e=(t=this._bounds).getSize(), i=this._container, this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e, i.setAttribute("width", e.x), i.setAttribute("height", e.y)), Z(i, t.min), i.setAttribute("viewBox", [t.min.x, t.min.y, e.x, e.y].join(" ")), this.fire("update"));\n      },\n      _initPath: function (t){\n        var e=t._path=qi("path");\n        t.options.className&&M(e, t.options.className), t.options.interactive&&M(e, "leaflet-interactive"), this._updateStyle(t), this._layers[h(t)]=t;\n      },\n      _addPath: function (t){\n        this._rootGroup||this._initContainer(), this._rootGroup.appendChild(t._path), t.addInteractiveTarget(t._path);\n      },\n      _removePath: function (t){\n        T(t._path), t.removeInteractiveTarget(t._path), delete this._layers[h(t)];\n      },\n      _updatePath: function (t){\n        t._project(), t._update();\n      },\n      _updateStyle: function (t){\n        var e=t._path,\n          t=t.options;\n        e&&(t.stroke ? (e.setAttribute("stroke", t.color), e.setAttribute("stroke-opacity", t.opacity), e.setAttribute("stroke-width", t.weight), e.setAttribute("stroke-linecap", t.lineCap), e.setAttribute("stroke-linejoin", t.lineJoin), t.dashArray ? e.setAttribute("stroke-dasharray", t.dashArray):e.removeAttribute("stroke-dasharray"), t.dashOffset ? e.setAttribute("stroke-dashoffset", t.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke", "none"), t.fill ? (e.setAttribute("fill", t.fillColor||t.color), e.setAttribute("fill-opacity", t.fillOpacity), e.setAttribute("fill-rule", t.fillRule||"evenodd")):e.setAttribute("fill", "none"));\n      },\n      _updatePoly: function (t, e){\n        this._setPath(t, dt(t._parts, e));\n      },\n      _updateCircle: function (t){\n        var e=t._point,\n          i=Math.max(Math.round(t._radius), 1),\n          n="a" + i + "," + (Math.max(Math.round(t._radiusY), 1)||i) + " 0 1,0 ",\n          e=t._empty() ? "M0 0":"M" + (e.x - i) + "," + e.y + n + 2 * i + ",0 " + n + 2 * -i + ",0 ";\n        this._setPath(t, e);\n      },\n      _setPath: function (t, e){\n        t._path.setAttribute("d", e);\n      },\n      _bringToFront: function (t){\n        fe(t._path);\n      },\n      _bringToBack: function (t){\n        ge(t._path);\n      }\n    });\n  function Ki(t){\n    return b.svg||b.vml ? new Gi(t):null;\n  }\n  b.vml&&Gi.include(zt), A.include({\n    getRenderer: function (t){\n      t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());\n      return this.hasLayer(t)||this.addLayer(t), t;\n    },\n    _getPaneRenderer: function (t){\n      var e;\n      return "overlayPane"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({\n        pane: t\n      }), this._paneRenderers[t]=e), e);\n    },\n    _createRenderer: function (t){\n      return this.options.preferCanvas&&Ui(t)||Ki(t);\n    }\n  });\n  var Yi=xi.extend({\n    initialize: function (t, e){\n      xi.prototype.initialize.call(this, this._boundsToLatLngs(t), e);\n    },\n    setBounds: function (t){\n      return this.setLatLngs(this._boundsToLatLngs(t));\n    },\n    _boundsToLatLngs: function (t){\n      return [(t=g(t)).getSouthWest(), t.getNorthWest(), t.getNorthEast(), t.getSouthEast()];\n    }\n  });\n  Gi.create=qi, Gi.pointsToPath=dt, wi.geometryToLayer=bi, wi.coordsToLatLng=Li, wi.coordsToLatLngs=Ti, wi.latLngToCoords=Mi, wi.latLngsToCoords=zi, wi.getFeature=Ci, wi.asFeature=Zi, A.mergeOptions({\n    boxZoom: !0\n  });\n  var _t=n.extend({\n      initialize: function (t){\n        this._map=t, this._container=t._container, this._pane=t._panes.overlayPane, this._resetStateTimeout=0, t.on("unload", this._destroy, this);\n      },\n      addHooks: function (){\n        S(this._container, "mousedown", this._onMouseDown, this);\n      },\n      removeHooks: function (){\n        k(this._container, "mousedown", this._onMouseDown, this);\n      },\n      moved: function (){\n        return this._moved;\n      },\n      _destroy: function (){\n        T(this._pane), delete this._pane;\n      },\n      _resetState: function (){\n        this._resetStateTimeout=0, this._moved = !1;\n      },\n      _clearDeferredResetState: function (){\n        0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout), this._resetStateTimeout=0);\n      },\n      _onMouseDown: function (t){\n        if(!t.shiftKey||1!==t.which&&1!==t.button) return !1;\n        this._clearDeferredResetState(), this._resetState(), re(), Le(), this._startPoint=this._map.mouseEventToContainerPoint(t), S(document, {\n          contextmenu: Re,\n          mousemove: this._onMouseMove,\n          mouseup: this._onMouseUp,\n          keydown: this._onKeyDown\n        }, this);\n      },\n      _onMouseMove: function (t){\n        this._moved||(this._moved = !0, this._box=P("div", "leaflet-zoom-box", this._container), M(this._container, "leaflet-crosshair"), this._map.fire("boxzoomstart")), this._point=this._map.mouseEventToContainerPoint(t);\n        var t=new f(this._point, this._startPoint),\n          e=t.getSize();\n        Z(this._box, t.min), this._box.style.width=e.x + "px", this._box.style.height=e.y + "px";\n      },\n      _finish: function (){\n        this._moved&&(T(this._box), z(this._container, "leaflet-crosshair")), ae(), Te(), k(document, {\n          contextmenu: Re,\n          mousemove: this._onMouseMove,\n          mouseup: this._onMouseUp,\n          keydown: this._onKeyDown\n        }, this);\n      },\n      _onMouseUp: function (t){\n        1!==t.which&&1!==t.button||(this._finish(), this._moved&&(this._clearDeferredResetState(), this._resetStateTimeout=setTimeout(a(this._resetState, this), 0), t=new s(this._map.containerPointToLatLng(this._startPoint), this._map.containerPointToLatLng(this._point)), this._map.fitBounds(t).fire("boxzoomend", {\n          boxZoomBounds: t\n        })));\n      },\n      _onKeyDown: function (t){\n        27===t.keyCode&&(this._finish(), this._clearDeferredResetState(), this._resetState());\n      }\n    }),\n    Ct=(A.addInitHook("addHandler", "boxZoom", _t), A.mergeOptions({\n      doubleClickZoom: !0\n    }), n.extend({\n      addHooks: function (){\n        this._map.on("dblclick", this._onDoubleClick, this);\n      },\n      removeHooks: function (){\n        this._map.off("dblclick", this._onDoubleClick, this);\n      },\n      _onDoubleClick: function (t){\n        var e=this._map,\n          i=e.getZoom(),\n          n=e.options.zoomDelta,\n          i=t.originalEvent.shiftKey ? i - n:i + n;\n        "center"===e.options.doubleClickZoom ? e.setZoom(i):e.setZoomAround(t.containerPoint, i);\n      }\n    })),\n    Zt=(A.addInitHook("addHandler", "doubleClickZoom", Ct), A.mergeOptions({\n      dragging: !0,\n      inertia: !0,\n      inertiaDeceleration: 3400,\n      inertiaMaxSpeed: 1 / 0,\n      easeLinearity: .2,\n      worldCopyJump: !1,\n      maxBoundsViscosity: 0\n    }), n.extend({\n      addHooks: function (){\n        var t;\n        this._draggable||(t=this._map, this._draggable=new Xe(t._mapPane, t._container), this._draggable.on({\n          dragstart: this._onDragStart,\n          drag: this._onDrag,\n          dragend: this._onDragEnd\n        }, this), this._draggable.on("predrag", this._onPreDragLimit, this), t.options.worldCopyJump&&(this._draggable.on("predrag", this._onPreDragWrap, this), t.on("zoomend", this._onZoomEnd, this), t.whenReady(this._onZoomEnd, this))), M(this._map._container, "leaflet-grab leaflet-touch-drag"), this._draggable.enable(), this._positions=[], this._times=[];\n      },\n      removeHooks: function (){\n        z(this._map._container, "leaflet-grab"), z(this._map._container, "leaflet-touch-drag"), this._draggable.disable();\n      },\n      moved: function (){\n        return this._draggable&&this._draggable._moved;\n      },\n      moving: function (){\n        return this._draggable&&this._draggable._moving;\n      },\n      _onDragStart: function (){\n        var t,\n          e=this._map;\n        e._stop(), this._map.options.maxBounds&&this._map.options.maxBoundsViscosity ? (t=g(this._map.options.maxBounds), this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1), this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())), this._viscosity=Math.min(1, Math.max(0, this._map.options.maxBoundsViscosity))):this._offsetLimit=null, e.fire("movestart").fire("dragstart"), e.options.inertia&&(this._positions=[], this._times=[]);\n      },\n      _onDrag: function (t){\n        var e, i;\n        this._map.options.inertia&&(e=this._lastTime=+new Date(), i=this._lastPos=this._draggable._absPos||this._draggable._newPos, this._positions.push(i), this._times.push(e), this._prunePositions(e)), this._map.fire("move", t).fire("drag", t);\n      },\n      _prunePositions: function (t){\n        for (; 1 < this._positions.length&&50 < t - this._times[0];) this._positions.shift(), this._times.shift();\n      },\n      _onZoomEnd: function (){\n        var t=this._map.getSize().divideBy(2),\n          e=this._map.latLngToLayerPoint([0, 0]);\n        this._initialWorldOffset=e.subtract(t).x, this._worldWidth=this._map.getPixelWorldBounds().getSize().x;\n      },\n      _viscousLimit: function (t, e){\n        return t - (t - e) * this._viscosity;\n      },\n      _onPreDragLimit: function (){\n        var t, e;\n        this._viscosity&&this._offsetLimit&&(t=this._draggable._newPos.subtract(this._draggable._startPos), e=this._offsetLimit, t.x < e.min.x&&(t.x=this._viscousLimit(t.x, e.min.x)), t.y < e.min.y&&(t.y=this._viscousLimit(t.y, e.min.y)), t.x > e.max.x&&(t.x=this._viscousLimit(t.x, e.max.x)), t.y > e.max.y&&(t.y=this._viscousLimit(t.y, e.max.y)), this._draggable._newPos=this._draggable._startPos.add(t));\n      },\n      _onPreDragWrap: function (){\n        var t=this._worldWidth,\n          e=Math.round(t / 2),\n          i=this._initialWorldOffset,\n          n=this._draggable._newPos.x,\n          o=(n - e + i) % t + e - i,\n          n=(n + e + i) % t - e - i,\n          t=Math.abs(o + i) < Math.abs(n + i) ? o:n;\n        this._draggable._absPos=this._draggable._newPos.clone(), this._draggable._newPos.x=t;\n      },\n      _onDragEnd: function (t){\n        var e,\n          i,\n          n,\n          o,\n          s=this._map,\n          r=s.options,\n          a = !r.inertia||t.noInertia||this._times.length < 2;\n        s.fire("dragend", t), !a&&(this._prunePositions(+new Date()), t=this._lastPos.subtract(this._positions[0]), a=(this._lastTime - this._times[0]) / 1e3, e=r.easeLinearity, a=(t=t.multiplyBy(e / a)).distanceTo([0, 0]), i=Math.min(r.inertiaMaxSpeed, a), t=t.multiplyBy(i / a), n=i / (r.inertiaDeceleration * e), (o=t.multiplyBy(-n / 2).round()).x||o.y) ? (o=s._limitOffset(o, s.options.maxBounds), x(function (){\n          s.panBy(o, {\n            duration: n,\n            easeLinearity: e,\n            noMoveStart: !0,\n            animate: !0\n          });\n        })):s.fire("moveend");\n      }\n    })),\n    St=(A.addInitHook("addHandler", "dragging", Zt), A.mergeOptions({\n      keyboard: !0,\n      keyboardPanDelta: 80\n    }), n.extend({\n      keyCodes: {\n        left: [37],\n        right: [39],\n        down: [40],\n        up: [38],\n        zoomIn: [187, 107, 61, 171],\n        zoomOut: [189, 109, 54, 173]\n      },\n      initialize: function (t){\n        this._map=t, this._setPanDelta(t.options.keyboardPanDelta), this._setZoomDelta(t.options.zoomDelta);\n      },\n      addHooks: function (){\n        var t=this._map._container;\n        t.tabIndex <=0&&(t.tabIndex="0"), S(t, {\n          focus: this._onFocus,\n          blur: this._onBlur,\n          mousedown: this._onMouseDown\n        }, this), this._map.on({\n          focus: this._addHooks,\n          blur: this._removeHooks\n        }, this);\n      },\n      removeHooks: function (){\n        this._removeHooks(), k(this._map._container, {\n          focus: this._onFocus,\n          blur: this._onBlur,\n          mousedown: this._onMouseDown\n        }, this), this._map.off({\n          focus: this._addHooks,\n          blur: this._removeHooks\n        }, this);\n      },\n      _onMouseDown: function (){\n        var t, e, i;\n        this._focused||(i=document.body, t=document.documentElement, e=i.scrollTop||t.scrollTop, i=i.scrollLeft||t.scrollLeft, this._map._container.focus(), window.scrollTo(i, e));\n      },\n      _onFocus: function (){\n        this._focused = !0, this._map.fire("focus");\n      },\n      _onBlur: function (){\n        this._focused = !1, this._map.fire("blur");\n      },\n      _setPanDelta: function (t){\n        for (var e=this._panKeys={}, i=this.keyCodes, n=0, o=i.left.length; n < o; n++) e[i.left[n]]=[-1 * t, 0];\n        for (n=0, o=i.right.length; n < o; n++) e[i.right[n]]=[t, 0];\n        for (n=0, o=i.down.length; n < o; n++) e[i.down[n]]=[0, t];\n        for (n=0, o=i.up.length; n < o; n++) e[i.up[n]]=[0, -1 * t];\n      },\n      _setZoomDelta: function (t){\n        for (var e=this._zoomKeys={}, i=this.keyCodes, n=0, o=i.zoomIn.length; n < o; n++) e[i.zoomIn[n]]=t;\n        for (n=0, o=i.zoomOut.length; n < o; n++) e[i.zoomOut[n]]=-t;\n      },\n      _addHooks: function (){\n        S(document, "keydown", this._onKeyDown, this);\n      },\n      _removeHooks: function (){\n        k(document, "keydown", this._onKeyDown, this);\n      },\n      _onKeyDown: function (t){\n        if(!(t.altKey||t.ctrlKey||t.metaKey)){\n          var e,\n            i,\n            n=t.keyCode,\n            o=this._map;\n          if(n in this._panKeys) o._panAnim&&o._panAnim._inProgress||(i=this._panKeys[n], t.shiftKey&&(i=m(i).multiplyBy(3)), o.options.maxBounds&&(i=o._limitOffset(m(i), o.options.maxBounds)), o.options.worldCopyJump ? (e=o.wrapLatLng(o.unproject(o.project(o.getCenter()).add(i))), o.panTo(e)):o.panBy(i));else if(n in this._zoomKeys) o.setZoom(o.getZoom() + (t.shiftKey ? 3:1) * this._zoomKeys[n]);else {\n            if(27!==n||!o._popup||!o._popup.options.closeOnEscapeKey) return;\n            o.closePopup();\n          }\n          Re(t);\n        }\n      }\n    })),\n    Et=(A.addInitHook("addHandler", "keyboard", St), A.mergeOptions({\n      scrollWheelZoom: !0,\n      wheelDebounceTime: 40,\n      wheelPxPerZoomLevel: 60\n    }), n.extend({\n      addHooks: function (){\n        S(this._map._container, "wheel", this._onWheelScroll, this), this._delta=0;\n      },\n      removeHooks: function (){\n        k(this._map._container, "wheel", this._onWheelScroll, this);\n      },\n      _onWheelScroll: function (t){\n        var e=He(t),\n          i=this._map.options.wheelDebounceTime,\n          e=(this._delta +=e, this._lastMousePos=this._map.mouseEventToContainerPoint(t), this._startTime||(this._startTime=+new Date()), Math.max(i - (+new Date() - this._startTime), 0));\n        clearTimeout(this._timer), this._timer=setTimeout(a(this._performZoom, this), e), Re(t);\n      },\n      _performZoom: function (){\n        var t=this._map,\n          e=t.getZoom(),\n          i=this._map.options.zoomSnap||0,\n          n=(t._stop(), this._delta / (4 * this._map.options.wheelPxPerZoomLevel)),\n          n=4 * Math.log(2 / (1 + Math.exp(-Math.abs(n)))) / Math.LN2,\n          i=i ? Math.ceil(n / i) * i:n,\n          n=t._limitZoom(e + (0 < this._delta ? i:-i)) - e;\n        this._delta=0, this._startTime=null, n&&("center"===t.options.scrollWheelZoom ? t.setZoom(e + n):t.setZoomAround(this._lastMousePos, e + n));\n      }\n    })),\n    kt=(A.addInitHook("addHandler", "scrollWheelZoom", Et), A.mergeOptions({\n      tapHold: b.touchNative&&b.safari&&b.mobile,\n      tapTolerance: 15\n    }), n.extend({\n      addHooks: function (){\n        S(this._map._container, "touchstart", this._onDown, this);\n      },\n      removeHooks: function (){\n        k(this._map._container, "touchstart", this._onDown, this);\n      },\n      _onDown: function (t){\n        var e;\n        clearTimeout(this._holdTimeout), 1===t.touches.length&&(e=t.touches[0], this._startPos=this._newPos=new p(e.clientX, e.clientY), this._holdTimeout=setTimeout(a(function (){\n          this._cancel(), this._isTapValid()&&(S(document, "touchend", O), S(document, "touchend touchcancel", this._cancelClickPrevent), this._simulateEvent("contextmenu", e));\n        }, this), 600), S(document, "touchend touchcancel contextmenu", this._cancel, this), S(document, "touchmove", this._onMove, this));\n      },\n      _cancelClickPrevent: function t(){\n        k(document, "touchend", O), k(document, "touchend touchcancel", t);\n      },\n      _cancel: function (){\n        clearTimeout(this._holdTimeout), k(document, "touchend touchcancel contextmenu", this._cancel, this), k(document, "touchmove", this._onMove, this);\n      },\n      _onMove: function (t){\n        t=t.touches[0];\n        this._newPos=new p(t.clientX, t.clientY);\n      },\n      _isTapValid: function (){\n        return this._newPos.distanceTo(this._startPos) <=this._map.options.tapTolerance;\n      },\n      _simulateEvent: function (t, e){\n        t=new MouseEvent(t, {\n          bubbles: !0,\n          cancelable: !0,\n          view: window,\n          screenX: e.screenX,\n          screenY: e.screenY,\n          clientX: e.clientX,\n          clientY: e.clientY\n        });\n        t._simulated = !0, e.target.dispatchEvent(t);\n      }\n    })),\n    Ot=(A.addInitHook("addHandler", "tapHold", kt), A.mergeOptions({\n      touchZoom: b.touch,\n      bounceAtZoomLimits: !0\n    }), n.extend({\n      addHooks: function (){\n        M(this._map._container, "leaflet-touch-zoom"), S(this._map._container, "touchstart", this._onTouchStart, this);\n      },\n      removeHooks: function (){\n        z(this._map._container, "leaflet-touch-zoom"), k(this._map._container, "touchstart", this._onTouchStart, this);\n      },\n      _onTouchStart: function (t){\n        var e,\n          i,\n          n=this._map;\n        !t.touches||2!==t.touches.length||n._animatingZoom||this._zooming||(e=n.mouseEventToContainerPoint(t.touches[0]), i=n.mouseEventToContainerPoint(t.touches[1]), this._centerPoint=n.getSize()._divideBy(2), this._startLatLng=n.containerPointToLatLng(this._centerPoint), "center"!==n.options.touchZoom&&(this._pinchStartLatLng=n.containerPointToLatLng(e.add(i)._divideBy(2))), this._startDist=e.distanceTo(i), this._startZoom=n.getZoom(), this._moved = !1, this._zooming = !0, n._stop(), S(document, "touchmove", this._onTouchMove, this), S(document, "touchend touchcancel", this._onTouchEnd, this), O(t));\n      },\n      _onTouchMove: function (t){\n        if(t.touches&&2===t.touches.length&&this._zooming){\n          var e=this._map,\n            i=e.mouseEventToContainerPoint(t.touches[0]),\n            n=e.mouseEventToContainerPoint(t.touches[1]),\n            o=i.distanceTo(n) / this._startDist;\n          if(this._zoom=e.getScaleZoom(o, this._startZoom), !e.options.bounceAtZoomLimits&&(this._zoom < e.getMinZoom()&&o < 1||this._zoom > e.getMaxZoom()&&1 < o)&&(this._zoom=e._limitZoom(this._zoom)), "center"===e.options.touchZoom){\n            if(this._center=this._startLatLng, 1==o) return;\n          }else{\n            i=i._add(n)._divideBy(2)._subtract(this._centerPoint);\n            if(1==o&&0===i.x&&0===i.y) return;\n            this._center=e.unproject(e.project(this._pinchStartLatLng, this._zoom).subtract(i), this._zoom);\n          }\n          this._moved||(e._moveStart(!0, !1), this._moved = !0), r(this._animRequest);\n          n=a(e._move, e, this._center, this._zoom, {\n            pinch: !0,\n            round: !1\n          }, void 0);\n          this._animRequest=x(n, this, !0), O(t);\n        }\n      },\n      _onTouchEnd: function (){\n        this._moved&&this._zooming ? (this._zooming = !1, r(this._animRequest), k(document, "touchmove", this._onTouchMove, this), k(document, "touchend touchcancel", this._onTouchEnd, this), this._map.options.zoomAnimation ? this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), !0, this._map.options.zoomSnap):this._map._resetView(this._center, this._map._limitZoom(this._zoom))):this._zooming = !1;\n      }\n    })),\n    Xi=(A.addInitHook("addHandler", "touchZoom", Ot), A.BoxZoom=_t, A.DoubleClickZoom=Ct, A.Drag=Zt, A.Keyboard=St, A.ScrollWheelZoom=Et, A.TapHold=kt, A.TouchZoom=Ot, t.Bounds=f, t.Browser=b, t.CRS=ot, t.Canvas=Fi, t.Circle=vi, t.CircleMarker=gi, t.Class=et, t.Control=B, t.DivIcon=Ri, t.DivOverlay=Ai, t.DomEvent=mt, t.DomUtil=pt, t.Draggable=Xe, t.Evented=it, t.FeatureGroup=ci, t.GeoJSON=wi, t.GridLayer=Ni, t.Handler=n, t.Icon=di, t.ImageOverlay=Ei, t.LatLng=v, t.LatLngBounds=s, t.Layer=o, t.LayerGroup=ui, t.LineUtil=vt, t.Map=A, t.Marker=mi, t.Mixin=ft, t.Path=fi, t.Point=p, t.PolyUtil=gt, t.Polygon=xi, t.Polyline=yi, t.Popup=Bi, t.PosAnimation=Fe, t.Projection=wt, t.Rectangle=Yi, t.Renderer=Wi, t.SVG=Gi, t.SVGOverlay=Oi, t.TileLayer=Di, t.Tooltip=Ii, t.Transformation=at, t.Util=tt, t.VideoOverlay=ki, t.bind=a, t.bounds=_, t.canvas=Ui, t.circle=function (t, e, i){\n      return new vi(t, e, i);\n    }, t.circleMarker=function (t, e){\n      return new gi(t, e);\n    }, t.control=Ue, t.divIcon=function (t){\n      return new Ri(t);\n    }, t.extend=l, t.featureGroup=function (t, e){\n      return new ci(t, e);\n    }, t.geoJSON=Si, t.geoJson=Mt, t.gridLayer=function (t){\n      return new Ni(t);\n    }, t.icon=function (t){\n      return new di(t);\n    }, t.imageOverlay=function (t, e, i){\n      return new Ei(t, e, i);\n    }, t.latLng=w, t.latLngBounds=g, t.layerGroup=function (t, e){\n      return new ui(t, e);\n    }, t.map=function (t, e){\n      return new A(t, e);\n    }, t.marker=function (t, e){\n      return new mi(t, e);\n    }, t.point=m, t.polygon=function (t, e){\n      return new xi(t, e);\n    }, t.polyline=function (t, e){\n      return new yi(t, e);\n    }, t.popup=function (t, e){\n      return new Bi(t, e);\n    }, t.rectangle=function (t, e){\n      return new Yi(t, e);\n    }, t.setOptions=c, t.stamp=h, t.svg=Ki, t.svgOverlay=function (t, e, i){\n      return new Oi(t, e, i);\n    }, t.tileLayer=ji, t.tooltip=function (t, e){\n      return new Ii(t, e);\n    }, t.transformation=ht, t.version="1.9.4", t.videoOverlay=function (t, e, i){\n      return new ki(t, e, i);\n    }, window.L);\n  t.noConflict=function (){\n    return window.L=Xi, this;\n  }, window.L=t;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUM7SUFBQSxDQUFDLEVBQUNELENBQUMsQ0FBQzBNLGNBQWMsR0FBQ2lDLEVBQUUsRUFBQzNPLENBQUMsQ0FBQyt3QyxPQUFPLEdBQUMsT0FBTyxFQUFDL3dDLENBQUMsQ0FBQ3VnRCxZQUFZLEdBQUMsVUFBU3ZnRCxDQUFDLEVBQUNDLENBQUMsRUFBQ1MsQ0FBQyxFQUFDO01BQUMsT0FBTyxJQUFJdWtDLEVBQUUsQ0FBQ2psQyxDQUFDLEVBQUNDLENBQUMsRUFBQ1MsQ0FBQyxDQUFDO0lBQUEsQ0FBQyxFQUFDb0QsTUFBTSxDQUFDb0MsQ0FBQyxDQUFDO0VBQUNsRyxDQUFDLENBQUN3Z0QsVUFBVSxHQUFDLFlBQVU7SUFBQyxPQUFPMThDLE1BQU0sQ0FBQ29DLENBQUMsR0FBQzYxQyxFQUFFLEVBQUMsSUFBSTtFQUFBLENBQUMsRUFBQ2o0QyxNQUFNLENBQUNvQyxDQUFDLEdBQUNsRyxDQUFDO0FBQUEsQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL2pzL2xlYWZsZXQtMS40LjAuanM/ODM1MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAcHJlc2VydmVcbiAqIExlYWZsZXQgMS45LjQsIGEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwcy4gaHR0cHM6Ly9sZWFmbGV0anMuY29tXG4gKiAoYykgMjAxMC0yMDIzIFZsYWRpbWlyIEFnYWZvbmtpbiwgKGMpIDIwMTAtMjAxMSBDbG91ZE1hZGVcbiAqL1xuIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/ZShleHBvcnRzKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImV4cG9ydHNcIl0sZSk6ZSgodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmxlYWZsZXQ9e30pfSh0aGlzLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlLGksbj0xLG89YXJndW1lbnRzLmxlbmd0aDtuPG87bisrKWZvcihlIGluIGk9YXJndW1lbnRzW25dKXRbZV09aVtlXTtyZXR1cm4gdH12YXIgUj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0KXtyZXR1cm4gTi5wcm90b3R5cGU9dCxuZXcgTn07ZnVuY3Rpb24gTigpe31mdW5jdGlvbiBhKHQsZSl7dmFyIGksbj1BcnJheS5wcm90b3R5cGUuc2xpY2U7cmV0dXJuIHQuYmluZD90LmJpbmQuYXBwbHkodCxuLmNhbGwoYXJndW1lbnRzLDEpKTooaT1uLmNhbGwoYXJndW1lbnRzLDIpLGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxpLmxlbmd0aD9pLmNvbmNhdChuLmNhbGwoYXJndW1lbnRzKSk6YXJndW1lbnRzKX0pfXZhciBEPTA7ZnVuY3Rpb24gaCh0KXtyZXR1cm5cIl9sZWFmbGV0X2lkXCJpbiB0fHwodC5fbGVhZmxldF9pZD0rK0QpLHQuX2xlYWZsZXRfaWR9ZnVuY3Rpb24gaih0LGUsaSl7dmFyIG4sbyxzPWZ1bmN0aW9uKCl7bj0hMSxvJiYoci5hcHBseShpLG8pLG89ITEpfSxyPWZ1bmN0aW9uKCl7bj9vPWFyZ3VtZW50czoodC5hcHBseShpLGFyZ3VtZW50cyksc2V0VGltZW91dChzLGUpLG49ITApfTtyZXR1cm4gcn1mdW5jdGlvbiBIKHQsZSxpKXt2YXIgbj1lWzFdLGU9ZVswXSxvPW4tZTtyZXR1cm4gdD09PW4mJmk/dDooKHQtZSklbytvKSVvK2V9ZnVuY3Rpb24gdSgpe3JldHVybiExfWZ1bmN0aW9uIGkodCxlKXtyZXR1cm4hMT09PWU/dDooZT1NYXRoLnBvdygxMCx2b2lkIDA9PT1lPzY6ZSksTWF0aC5yb3VuZCh0KmUpL2UpfWZ1bmN0aW9uIFcodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9ZnVuY3Rpb24gRih0KXtyZXR1cm4gVyh0KS5zcGxpdCgvXFxzKy8pfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIGkgaW4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsXCJvcHRpb25zXCIpfHwodC5vcHRpb25zPXQub3B0aW9ucz9SKHQub3B0aW9ucyk6e30pLGUpdC5vcHRpb25zW2ldPWVbaV07cmV0dXJuIHQub3B0aW9uc31mdW5jdGlvbiBVKHQsZSxpKXt2YXIgbixvPVtdO2ZvcihuIGluIHQpby5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChpP24udG9VcHBlckNhc2UoKTpuKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQodFtuXSkpO3JldHVybihlJiYtMSE9PWUuaW5kZXhPZihcIj9cIik/XCImXCI6XCI/XCIpK28uam9pbihcIiZcIil9dmFyIFY9L1xceyAqKFtcXHdfIC1dKykgKlxcfS9nO2Z1bmN0aW9uIHEodCxpKXtyZXR1cm4gdC5yZXBsYWNlKFYsZnVuY3Rpb24odCxlKXtlPWlbZV07aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJObyB2YWx1ZSBwcm92aWRlZCBmb3IgdmFyaWFibGUgXCIrdCk7cmV0dXJuIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lKGkpOmV9KX12YXIgZD1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9O2Z1bmN0aW9uIEcodCxlKXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZih0W2ldPT09ZSlyZXR1cm4gaTtyZXR1cm4tMX12YXIgSz1cImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUQvQUN3QUFBQUFBUUFCQUFBQ0FEcz1cIjtmdW5jdGlvbiBZKHQpe3JldHVybiB3aW5kb3dbXCJ3ZWJraXRcIit0XXx8d2luZG93W1wibW96XCIrdF18fHdpbmRvd1tcIm1zXCIrdF19dmFyIFg9MDtmdW5jdGlvbiBKKHQpe3ZhciBlPStuZXcgRGF0ZSxpPU1hdGgubWF4KDAsMTYtKGUtWCkpO3JldHVybiBYPWUraSx3aW5kb3cuc2V0VGltZW91dCh0LGkpfXZhciAkPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fFkoXCJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIil8fEosUT13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fFkoXCJDYW5jZWxBbmltYXRpb25GcmFtZVwiKXx8WShcIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZVwiKXx8ZnVuY3Rpb24odCl7d2luZG93LmNsZWFyVGltZW91dCh0KX07ZnVuY3Rpb24geCh0LGUsaSl7aWYoIWl8fCQhPT1KKXJldHVybiAkLmNhbGwod2luZG93LGEodCxlKSk7dC5jYWxsKGUpfWZ1bmN0aW9uIHIodCl7dCYmUS5jYWxsKHdpbmRvdyx0KX12YXIgdHQ9e19fcHJvdG9fXzpudWxsLGV4dGVuZDpsLGNyZWF0ZTpSLGJpbmQ6YSxnZXQgbGFzdElkKCl7cmV0dXJuIER9LHN0YW1wOmgsdGhyb3R0bGU6aix3cmFwTnVtOkgsZmFsc2VGbjp1LGZvcm1hdE51bTppLHRyaW06VyxzcGxpdFdvcmRzOkYsc2V0T3B0aW9uczpjLGdldFBhcmFtU3RyaW5nOlUsdGVtcGxhdGU6cSxpc0FycmF5OmQsaW5kZXhPZjpHLGVtcHR5SW1hZ2VVcmw6SyxyZXF1ZXN0Rm46JCxjYW5jZWxGbjpRLHJlcXVlc3RBbmltRnJhbWU6eCxjYW5jZWxBbmltRnJhbWU6cn07ZnVuY3Rpb24gZXQoKXt9ZXQuZXh0ZW5kPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtjKHRoaXMpLHRoaXMuaW5pdGlhbGl6ZSYmdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmNhbGxJbml0SG9va3MoKX12YXIgaSxuPWUuX19zdXBlcl9fPXRoaXMucHJvdG90eXBlLG89UihuKTtmb3IoaSBpbihvLmNvbnN0cnVjdG9yPWUpLnByb3RvdHlwZT1vLHRoaXMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsaSkmJlwicHJvdG90eXBlXCIhPT1pJiZcIl9fc3VwZXJfX1wiIT09aSYmKGVbaV09dGhpc1tpXSk7aWYodC5zdGF0aWNzJiZsKGUsdC5zdGF0aWNzKSx0LmluY2x1ZGVzKXt2YXIgcz10LmluY2x1ZGVzO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBMJiZMJiZMLk1peGluKXtzPWQocyk/czpbc107Zm9yKHZhciByPTA7cjxzLmxlbmd0aDtyKyspc1tyXT09PUwuTWl4aW4uRXZlbnRzJiZjb25zb2xlLndhcm4oXCJEZXByZWNhdGVkIGluY2x1ZGUgb2YgTC5NaXhpbi5FdmVudHM6IHRoaXMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcywgcGxlYXNlIGluaGVyaXQgZnJvbSBMLkV2ZW50ZWQgaW5zdGVhZC5cIiwobmV3IEVycm9yKS5zdGFjayl9bC5hcHBseShudWxsLFtvXS5jb25jYXQodC5pbmNsdWRlcykpfXJldHVybiBsKG8sdCksZGVsZXRlIG8uc3RhdGljcyxkZWxldGUgby5pbmNsdWRlcyxvLm9wdGlvbnMmJihvLm9wdGlvbnM9bi5vcHRpb25zP1Iobi5vcHRpb25zKTp7fSxsKG8ub3B0aW9ucyx0Lm9wdGlvbnMpKSxvLl9pbml0SG9va3M9W10sby5jYWxsSW5pdEhvb2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2luaXRIb29rc0NhbGxlZCl7bi5jYWxsSW5pdEhvb2tzJiZuLmNhbGxJbml0SG9va3MuY2FsbCh0aGlzKSx0aGlzLl9pbml0SG9va3NDYWxsZWQ9ITA7Zm9yKHZhciB0PTAsZT1vLl9pbml0SG9va3MubGVuZ3RoO3Q8ZTt0Kyspby5faW5pdEhvb2tzW3RdLmNhbGwodGhpcyl9fSxlfSxldC5pbmNsdWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJvdG90eXBlLm9wdGlvbnM7cmV0dXJuIGwodGhpcy5wcm90b3R5cGUsdCksdC5vcHRpb25zJiYodGhpcy5wcm90b3R5cGUub3B0aW9ucz1lLHRoaXMubWVyZ2VPcHRpb25zKHQub3B0aW9ucykpLHRoaXN9LGV0Lm1lcmdlT3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0aGlzLnByb3RvdHlwZS5vcHRpb25zLHQpLHRoaXN9LGV0LmFkZEluaXRIb29rPWZ1bmN0aW9uKHQpe3ZhciBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3RoaXNbdF0uYXBwbHkodGhpcyxlKX07cmV0dXJuIHRoaXMucHJvdG90eXBlLl9pbml0SG9va3M9dGhpcy5wcm90b3R5cGUuX2luaXRIb29rc3x8W10sdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcy5wdXNoKGkpLHRoaXN9O3ZhciBlPXtvbjpmdW5jdGlvbih0LGUsaSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpZm9yKHZhciBuIGluIHQpdGhpcy5fb24obix0W25dLGUpO2Vsc2UgZm9yKHZhciBvPTAscz0odD1GKHQpKS5sZW5ndGg7bzxzO28rKyl0aGlzLl9vbih0W29dLGUsaSk7cmV0dXJuIHRoaXN9LG9mZjpmdW5jdGlvbih0LGUsaSl7aWYoYXJndW1lbnRzLmxlbmd0aClpZihcIm9iamVjdFwiPT10eXBlb2YgdClmb3IodmFyIG4gaW4gdCl0aGlzLl9vZmYobix0W25dLGUpO2Vsc2V7dD1GKHQpO2Zvcih2YXIgbz0xPT09YXJndW1lbnRzLmxlbmd0aCxzPTAscj10Lmxlbmd0aDtzPHI7cysrKW8/dGhpcy5fb2ZmKHRbc10pOnRoaXMuX29mZih0W3NdLGUsaSl9ZWxzZSBkZWxldGUgdGhpcy5fZXZlbnRzO3JldHVybiB0aGlzfSxfb246ZnVuY3Rpb24odCxlLGksbil7XCJmdW5jdGlvblwiIT10eXBlb2YgZT9jb25zb2xlLndhcm4oXCJ3cm9uZyBsaXN0ZW5lciB0eXBlOiBcIit0eXBlb2YgZSk6ITE9PT10aGlzLl9saXN0ZW5zKHQsZSxpKSYmKGU9e2ZuOmUsY3R4Omk9aT09PXRoaXM/dm9pZCAwOml9LG4mJihlLm9uY2U9ITApLHRoaXMuX2V2ZW50cz10aGlzLl9ldmVudHN8fHt9LHRoaXMuX2V2ZW50c1t0XT10aGlzLl9ldmVudHNbdF18fFtdLHRoaXMuX2V2ZW50c1t0XS5wdXNoKGUpKX0sX29mZjpmdW5jdGlvbih0LGUsaSl7dmFyIG4sbyxzO2lmKHRoaXMuX2V2ZW50cyYmKG49dGhpcy5fZXZlbnRzW3RdKSlpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYodGhpcy5fZmlyaW5nQ291bnQpZm9yKG89MCxzPW4ubGVuZ3RoO288cztvKyspbltvXS5mbj11O2RlbGV0ZSB0aGlzLl9ldmVudHNbdF19ZWxzZVwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/Y29uc29sZS53YXJuKFwid3JvbmcgbGlzdGVuZXIgdHlwZTogXCIrdHlwZW9mIGUpOiExIT09KGU9dGhpcy5fbGlzdGVucyh0LGUsaSkpJiYoaT1uW2VdLHRoaXMuX2ZpcmluZ0NvdW50JiYoaS5mbj11LHRoaXMuX2V2ZW50c1t0XT1uPW4uc2xpY2UoKSksbi5zcGxpY2UoZSwxKSl9LGZpcmU6ZnVuY3Rpb24odCxlLGkpe2lmKHRoaXMubGlzdGVucyh0LGkpKXt2YXIgbj1sKHt9LGUse3R5cGU6dCx0YXJnZXQ6dGhpcyxzb3VyY2VUYXJnZXQ6ZSYmZS5zb3VyY2VUYXJnZXR8fHRoaXN9KTtpZih0aGlzLl9ldmVudHMpe3ZhciBvPXRoaXMuX2V2ZW50c1t0XTtpZihvKXt0aGlzLl9maXJpbmdDb3VudD10aGlzLl9maXJpbmdDb3VudCsxfHwxO2Zvcih2YXIgcz0wLHI9by5sZW5ndGg7czxyO3MrKyl7dmFyIGE9b1tzXSxoPWEuZm47YS5vbmNlJiZ0aGlzLm9mZih0LGgsYS5jdHgpLGguY2FsbChhLmN0eHx8dGhpcyxuKX10aGlzLl9maXJpbmdDb3VudC0tfX1pJiZ0aGlzLl9wcm9wYWdhdGVFdmVudChuKX1yZXR1cm4gdGhpc30sbGlzdGVuczpmdW5jdGlvbih0LGUsaSxuKXtcInN0cmluZ1wiIT10eXBlb2YgdCYmY29uc29sZS53YXJuKCdcInN0cmluZ1wiIHR5cGUgYXJndW1lbnQgZXhwZWN0ZWQnKTt2YXIgbz1lLHM9KFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJihuPSEhZSxpPW89dm9pZCAwKSx0aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50c1t0XSk7aWYocyYmcy5sZW5ndGgmJiExIT09dGhpcy5fbGlzdGVucyh0LG8saSkpcmV0dXJuITA7aWYobilmb3IodmFyIHIgaW4gdGhpcy5fZXZlbnRQYXJlbnRzKWlmKHRoaXMuX2V2ZW50UGFyZW50c1tyXS5saXN0ZW5zKHQsZSxpLG4pKXJldHVybiEwO3JldHVybiExfSxfbGlzdGVuczpmdW5jdGlvbih0LGUsaSl7aWYodGhpcy5fZXZlbnRzKXt2YXIgbj10aGlzLl9ldmVudHNbdF18fFtdO2lmKCFlKXJldHVybiEhbi5sZW5ndGg7aT09PXRoaXMmJihpPXZvaWQgMCk7Zm9yKHZhciBvPTAscz1uLmxlbmd0aDtvPHM7bysrKWlmKG5bb10uZm49PT1lJiZuW29dLmN0eD09PWkpcmV0dXJuIG99cmV0dXJuITF9LG9uY2U6ZnVuY3Rpb24odCxlLGkpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KWZvcih2YXIgbiBpbiB0KXRoaXMuX29uKG4sdFtuXSxlLCEwKTtlbHNlIGZvcih2YXIgbz0wLHM9KHQ9Rih0KSkubGVuZ3RoO288cztvKyspdGhpcy5fb24odFtvXSxlLGksITApO3JldHVybiB0aGlzfSxhZGRFdmVudFBhcmVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRQYXJlbnRzPXRoaXMuX2V2ZW50UGFyZW50c3x8e30sdGhpcy5fZXZlbnRQYXJlbnRzW2godCldPXQsdGhpc30scmVtb3ZlRXZlbnRQYXJlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2V2ZW50UGFyZW50cyYmZGVsZXRlIHRoaXMuX2V2ZW50UGFyZW50c1toKHQpXSx0aGlzfSxfcHJvcGFnYXRlRXZlbnQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2V2ZW50UGFyZW50cyl0aGlzLl9ldmVudFBhcmVudHNbZV0uZmlyZSh0LnR5cGUsbCh7bGF5ZXI6dC50YXJnZXQscHJvcGFnYXRlZEZyb206dC50YXJnZXR9LHQpLCEwKX19LGl0PShlLmFkZEV2ZW50TGlzdGVuZXI9ZS5vbixlLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZS5jbGVhckFsbEV2ZW50TGlzdGVuZXJzPWUub2ZmLGUuYWRkT25lVGltZUV2ZW50TGlzdGVuZXI9ZS5vbmNlLGUuZmlyZUV2ZW50PWUuZmlyZSxlLmhhc0V2ZW50TGlzdGVuZXJzPWUubGlzdGVucyxldC5leHRlbmQoZSkpO2Z1bmN0aW9uIHAodCxlLGkpe3RoaXMueD1pP01hdGgucm91bmQodCk6dCx0aGlzLnk9aT9NYXRoLnJvdW5kKGUpOmV9dmFyIG50PU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHQpe3JldHVybiAwPHQ/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9O2Z1bmN0aW9uIG0odCxlLGkpe3JldHVybiB0IGluc3RhbmNlb2YgcD90OmQodCk/bmV3IHAodFswXSx0WzFdKTpudWxsPT10P3Q6XCJvYmplY3RcIj09dHlwZW9mIHQmJlwieFwiaW4gdCYmXCJ5XCJpbiB0P25ldyBwKHQueCx0LnkpOm5ldyBwKHQsZSxpKX1mdW5jdGlvbiBmKHQsZSl7aWYodClmb3IodmFyIGk9ZT9bdCxlXTp0LG49MCxvPWkubGVuZ3RoO248bztuKyspdGhpcy5leHRlbmQoaVtuXSl9ZnVuY3Rpb24gXyh0LGUpe3JldHVybiF0fHx0IGluc3RhbmNlb2YgZj90Om5ldyBmKHQsZSl9ZnVuY3Rpb24gcyh0LGUpe2lmKHQpZm9yKHZhciBpPWU/W3QsZV06dCxuPTAsbz1pLmxlbmd0aDtuPG87bisrKXRoaXMuZXh0ZW5kKGlbbl0pfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHM/dDpuZXcgcyh0LGUpfWZ1bmN0aW9uIHYodCxlLGkpe2lmKGlzTmFOKHQpfHxpc05hTihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIExhdExuZyBvYmplY3Q6IChcIit0K1wiLCBcIitlK1wiKVwiKTt0aGlzLmxhdD0rdCx0aGlzLmxuZz0rZSx2b2lkIDAhPT1pJiYodGhpcy5hbHQ9K2kpfWZ1bmN0aW9uIHcodCxlLGkpe3JldHVybiB0IGluc3RhbmNlb2Ygdj90OmQodCkmJlwib2JqZWN0XCIhPXR5cGVvZiB0WzBdPzM9PT10Lmxlbmd0aD9uZXcgdih0WzBdLHRbMV0sdFsyXSk6Mj09PXQubGVuZ3RoP25ldyB2KHRbMF0sdFsxXSk6bnVsbDpudWxsPT10P3Q6XCJvYmplY3RcIj09dHlwZW9mIHQmJlwibGF0XCJpbiB0P25ldyB2KHQubGF0LFwibG5nXCJpbiB0P3QubG5nOnQubG9uLHQuYWx0KTp2b2lkIDA9PT1lP251bGw6bmV3IHYodCxlLGkpfXAucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBuZXcgcCh0aGlzLngsdGhpcy55KX0sYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2FkZChtKHQpKX0sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sc3VidHJhY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fc3VidHJhY3QobSh0KSl9LF9zdWJ0cmFjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sZGl2aWRlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZGl2aWRlQnkodCl9LF9kaXZpZGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxtdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRpcGx5QnkodCl9LF9tdWx0aXBseUJ5OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9LHNjYWxlQnk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwKHRoaXMueCp0LngsdGhpcy55KnQueSl9LHVuc2NhbGVCeTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAodGhpcy54L3QueCx0aGlzLnkvdC55KX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9LGZsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fZmxvb3IoKX0sX2Zsb29yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfSxjZWlsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpfSxfY2VpbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9LHRydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKX0sX3RydW5jOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD1udCh0aGlzLngpLHRoaXMueT1udCh0aGlzLnkpLHRoaXN9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7dmFyIGU9KHQ9bSh0KSkueC10aGlzLngsdD10LnktdGhpcy55O3JldHVybiBNYXRoLnNxcnQoZSplK3QqdCl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4odD1tKHQpKS54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3JldHVybiB0PW0odCksTWF0aC5hYnModC54KTw9TWF0aC5hYnModGhpcy54KSYmTWF0aC5hYnModC55KTw9TWF0aC5hYnModGhpcy55KX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIlBvaW50KFwiK2kodGhpcy54KStcIiwgXCIraSh0aGlzLnkpK1wiKVwifX0sZi5wcm90b3R5cGU9e2V4dGVuZDpmdW5jdGlvbih0KXt2YXIgZSxpO2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBwfHxcIm51bWJlclwiPT10eXBlb2YgdFswXXx8XCJ4XCJpbiB0KWU9aT1tKHQpO2Vsc2UgaWYoZT0odD1fKHQpKS5taW4saT10Lm1heCwhZXx8IWkpcmV0dXJuIHRoaXM7dGhpcy5taW58fHRoaXMubWF4Pyh0aGlzLm1pbi54PU1hdGgubWluKGUueCx0aGlzLm1pbi54KSx0aGlzLm1heC54PU1hdGgubWF4KGkueCx0aGlzLm1heC54KSx0aGlzLm1pbi55PU1hdGgubWluKGUueSx0aGlzLm1pbi55KSx0aGlzLm1heC55PU1hdGgubWF4KGkueSx0aGlzLm1heC55KSk6KHRoaXMubWluPWUuY2xvbmUoKSx0aGlzLm1heD1pLmNsb25lKCkpfXJldHVybiB0aGlzfSxnZXRDZW50ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG0oKHRoaXMubWluLngrdGhpcy5tYXgueCkvMiwodGhpcy5taW4ueSt0aGlzLm1heC55KS8yLHQpfSxnZXRCb3R0b21MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5taW4ueCx0aGlzLm1heC55KX0sZ2V0VG9wUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLm1heC54LHRoaXMubWluLnkpfSxnZXRUb3BMZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlufSxnZXRCb3R0b21SaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sZ2V0U2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbil9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3ZhciBlLGk7cmV0dXJuKHQ9KFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2YgcD9tOl8pKHQpKWluc3RhbmNlb2YgZj8oZT10Lm1pbixpPXQubWF4KTplPWk9dCxlLng+PXRoaXMubWluLngmJmkueDw9dGhpcy5tYXgueCYmZS55Pj10aGlzLm1pbi55JiZpLnk8PXRoaXMubWF4Lnl9LGludGVyc2VjdHM6ZnVuY3Rpb24odCl7dD1fKHQpO3ZhciBlPXRoaXMubWluLGk9dGhpcy5tYXgsbj10Lm1pbix0PXQubWF4LG89dC54Pj1lLngmJm4ueDw9aS54LHQ9dC55Pj1lLnkmJm4ueTw9aS55O3JldHVybiBvJiZ0fSxvdmVybGFwczpmdW5jdGlvbih0KXt0PV8odCk7dmFyIGU9dGhpcy5taW4saT10aGlzLm1heCxuPXQubWluLHQ9dC5tYXgsbz10Lng+ZS54JiZuLng8aS54LHQ9dC55PmUueSYmbi55PGkueTtyZXR1cm4gbyYmdH0saXNWYWxpZDpmdW5jdGlvbigpe3JldHVybiEoIXRoaXMubWlufHwhdGhpcy5tYXgpfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5taW4saT10aGlzLm1heCxuPU1hdGguYWJzKGUueC1pLngpKnQsdD1NYXRoLmFicyhlLnktaS55KSp0O3JldHVybiBfKG0oZS54LW4sZS55LXQpLG0oaS54K24saS55K3QpKX0sZXF1YWxzOmZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKHQ9Xyh0KSx0aGlzLm1pbi5lcXVhbHModC5nZXRUb3BMZWZ0KCkpJiZ0aGlzLm1heC5lcXVhbHModC5nZXRCb3R0b21SaWdodCgpKSl9fSxzLnByb3RvdHlwZT17ZXh0ZW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj10aGlzLl9zb3V0aFdlc3Qsbz10aGlzLl9ub3J0aEVhc3Q7aWYodCBpbnN0YW5jZW9mIHYpaT1lPXQ7ZWxzZXtpZighKHQgaW5zdGFuY2VvZiBzKSlyZXR1cm4gdD90aGlzLmV4dGVuZCh3KHQpfHxnKHQpKTp0aGlzO2lmKGU9dC5fc291dGhXZXN0LGk9dC5fbm9ydGhFYXN0LCFlfHwhaSlyZXR1cm4gdGhpc31yZXR1cm4gbnx8bz8obi5sYXQ9TWF0aC5taW4oZS5sYXQsbi5sYXQpLG4ubG5nPU1hdGgubWluKGUubG5nLG4ubG5nKSxvLmxhdD1NYXRoLm1heChpLmxhdCxvLmxhdCksby5sbmc9TWF0aC5tYXgoaS5sbmcsby5sbmcpKToodGhpcy5fc291dGhXZXN0PW5ldyB2KGUubGF0LGUubG5nKSx0aGlzLl9ub3J0aEVhc3Q9bmV3IHYoaS5sYXQsaS5sbmcpKSx0aGlzfSxwYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc291dGhXZXN0LGk9dGhpcy5fbm9ydGhFYXN0LG49TWF0aC5hYnMoZS5sYXQtaS5sYXQpKnQsdD1NYXRoLmFicyhlLmxuZy1pLmxuZykqdDtyZXR1cm4gbmV3IHMobmV3IHYoZS5sYXQtbixlLmxuZy10KSxuZXcgdihpLmxhdCtuLGkubG5nK3QpKX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KCh0aGlzLl9zb3V0aFdlc3QubGF0K3RoaXMuX25vcnRoRWFzdC5sYXQpLzIsKHRoaXMuX3NvdXRoV2VzdC5sbmcrdGhpcy5fbm9ydGhFYXN0LmxuZykvMil9LGdldFNvdXRoV2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3R9LGdldE5vcnRoRWFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub3J0aEVhc3R9LGdldE5vcnRoV2VzdDpmdW5jdGlvbigpe3JldHVybiBuZXcgdih0aGlzLmdldE5vcnRoKCksdGhpcy5nZXRXZXN0KCkpfSxnZXRTb3V0aEVhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHYodGhpcy5nZXRTb3V0aCgpLHRoaXMuZ2V0RWFzdCgpKX0sZ2V0V2VzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubG5nfSxnZXRTb3V0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0fSxnZXRFYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sbmd9LGdldE5vcnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXR9LGNvbnRhaW5zOmZ1bmN0aW9uKHQpe3Q9KFwibnVtYmVyXCI9PXR5cGVvZiB0WzBdfHx0IGluc3RhbmNlb2Ygdnx8XCJsYXRcImluIHQ/dzpnKSh0KTt2YXIgZSxpLG49dGhpcy5fc291dGhXZXN0LG89dGhpcy5fbm9ydGhFYXN0O3JldHVybiB0IGluc3RhbmNlb2Ygcz8oZT10LmdldFNvdXRoV2VzdCgpLGk9dC5nZXROb3J0aEVhc3QoKSk6ZT1pPXQsZS5sYXQ+PW4ubGF0JiZpLmxhdDw9by5sYXQmJmUubG5nPj1uLmxuZyYmaS5sbmc8PW8ubG5nfSxpbnRlcnNlY3RzOmZ1bmN0aW9uKHQpe3Q9Zyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHQ9dC5nZXROb3J0aEVhc3QoKSxvPXQubGF0Pj1lLmxhdCYmbi5sYXQ8PWkubGF0LHQ9dC5sbmc+PWUubG5nJiZuLmxuZzw9aS5sbmc7cmV0dXJuIG8mJnR9LG92ZXJsYXBzOmZ1bmN0aW9uKHQpe3Q9Zyh0KTt2YXIgZT10aGlzLl9zb3V0aFdlc3QsaT10aGlzLl9ub3J0aEVhc3Qsbj10LmdldFNvdXRoV2VzdCgpLHQ9dC5nZXROb3J0aEVhc3QoKSxvPXQubGF0PmUubGF0JiZuLmxhdDxpLmxhdCx0PXQubG5nPmUubG5nJiZuLmxuZzxpLmxuZztyZXR1cm4gbyYmdH0sdG9CQm94U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuZ2V0V2VzdCgpLHRoaXMuZ2V0U291dGgoKSx0aGlzLmdldEVhc3QoKSx0aGlzLmdldE5vcnRoKCldLmpvaW4oXCIsXCIpfSxlcXVhbHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQmJih0PWcodCksdGhpcy5fc291dGhXZXN0LmVxdWFscyh0LmdldFNvdXRoV2VzdCgpLGUpJiZ0aGlzLl9ub3J0aEVhc3QuZXF1YWxzKHQuZ2V0Tm9ydGhFYXN0KCksZSkpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuISghdGhpcy5fc291dGhXZXN0fHwhdGhpcy5fbm9ydGhFYXN0KX19O3ZhciBvdD17bGF0TG5nVG9Qb2ludDpmdW5jdGlvbih0LGUpe3Q9dGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCksZT10aGlzLnNjYWxlKGUpO3JldHVybiB0aGlzLnRyYW5zZm9ybWF0aW9uLl90cmFuc2Zvcm0odCxlKX0scG9pbnRUb0xhdExuZzpmdW5jdGlvbih0LGUpe2U9dGhpcy5zY2FsZShlKSx0PXRoaXMudHJhbnNmb3JtYXRpb24udW50cmFuc2Zvcm0odCxlKTtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0scHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnByb2plY3QodCl9LHVucHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh0KX0sc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDI1NipNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0LzI1NikvTWF0aC5MTjJ9LGdldFByb2plY3RlZEJvdW5kczpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gdGhpcy5pbmZpbml0ZT9udWxsOihlPXRoaXMucHJvamVjdGlvbi5ib3VuZHMsdD10aGlzLnNjYWxlKHQpLG5ldyBmKHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGUubWluLHQpLHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKGUubWF4LHQpKSl9LGluZmluaXRlOiEodi5wcm90b3R5cGU9e2VxdWFsczpmdW5jdGlvbih0LGUpe3JldHVybiEhdCYmKHQ9dyh0KSxNYXRoLm1heChNYXRoLmFicyh0aGlzLmxhdC10LmxhdCksTWF0aC5hYnModGhpcy5sbmctdC5sbmcpKTw9KHZvaWQgMD09PWU/MWUtOTplKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVyblwiTGF0TG5nKFwiK2kodGhpcy5sYXQsdCkrXCIsIFwiK2kodGhpcy5sbmcsdCkrXCIpXCJ9LGRpc3RhbmNlVG86ZnVuY3Rpb24odCl7cmV0dXJuIHN0LmRpc3RhbmNlKHRoaXMsdyh0KSl9LHdyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gc3Qud3JhcExhdExuZyh0aGlzKX0sdG9Cb3VuZHM6ZnVuY3Rpb24odCl7dmFyIHQ9MTgwKnQvNDAwNzUwMTcsZT10L01hdGguY29zKE1hdGguUEkvMTgwKnRoaXMubGF0KTtyZXR1cm4gZyhbdGhpcy5sYXQtdCx0aGlzLmxuZy1lXSxbdGhpcy5sYXQrdCx0aGlzLmxuZytlXSl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB2KHRoaXMubGF0LHRoaXMubG5nLHRoaXMuYWx0KX19KSx3cmFwTGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMud3JhcExuZz9IKHQubG5nLHRoaXMud3JhcExuZywhMCk6dC5sbmc7cmV0dXJuIG5ldyB2KHRoaXMud3JhcExhdD9IKHQubGF0LHRoaXMud3JhcExhdCwhMCk6dC5sYXQsZSx0LmFsdCl9LHdyYXBMYXRMbmdCb3VuZHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRDZW50ZXIoKSxpPXRoaXMud3JhcExhdExuZyhlKSxuPWUubGF0LWkubGF0LGU9ZS5sbmctaS5sbmc7cmV0dXJuIDA9PW4mJjA9PWU/dDooaT10LmdldFNvdXRoV2VzdCgpLHQ9dC5nZXROb3J0aEVhc3QoKSxuZXcgcyhuZXcgdihpLmxhdC1uLGkubG5nLWUpLG5ldyB2KHQubGF0LW4sdC5sbmctZSkpKX19LHN0PWwoe30sb3Qse3dyYXBMbmc6Wy0xODAsMTgwXSxSOjYzNzFlMyxkaXN0YW5jZTpmdW5jdGlvbih0LGUpe3ZhciBpPU1hdGguUEkvMTgwLG49dC5sYXQqaSxvPWUubGF0Kmkscz1NYXRoLnNpbigoZS5sYXQtdC5sYXQpKmkvMiksZT1NYXRoLnNpbigoZS5sbmctdC5sbmcpKmkvMiksdD1zKnMrTWF0aC5jb3MobikqTWF0aC5jb3MobykqZSplLGk9MipNYXRoLmF0YW4yKE1hdGguc3FydCh0KSxNYXRoLnNxcnQoMS10KSk7cmV0dXJuIHRoaXMuUippfX0pLHJ0PTYzNzgxMzcscnQ9e1I6cnQsTUFYX0xBVElUVURFOjg1LjA1MTEyODc3OTgscHJvamVjdDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLlBJLzE4MCxpPXRoaXMuTUFYX0xBVElUVURFLGk9TWF0aC5tYXgoTWF0aC5taW4oaSx0LmxhdCksLWkpLGk9TWF0aC5zaW4oaSplKTtyZXR1cm4gbmV3IHAodGhpcy5SKnQubG5nKmUsdGhpcy5SKk1hdGgubG9nKCgxK2kpLygxLWkpKS8yKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPTE4MC9NYXRoLlBJO3JldHVybiBuZXcgdigoMipNYXRoLmF0YW4oTWF0aC5leHAodC55L3RoaXMuUikpLU1hdGguUEkvMikqZSx0LngqZS90aGlzLlIpfSxib3VuZHM6bmV3IGYoWy0ocnQ9cnQqTWF0aC5QSSksLXJ0XSxbcnQscnRdKX07ZnVuY3Rpb24gYXQodCxlLGksbil7ZCh0KT8odGhpcy5fYT10WzBdLHRoaXMuX2I9dFsxXSx0aGlzLl9jPXRbMl0sdGhpcy5fZD10WzNdKToodGhpcy5fYT10LHRoaXMuX2I9ZSx0aGlzLl9jPWksdGhpcy5fZD1uKX1mdW5jdGlvbiBodCh0LGUsaSxuKXtyZXR1cm4gbmV3IGF0KHQsZSxpLG4pfWF0LnByb3RvdHlwZT17dHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybSh0LmNsb25lKCksZSl9LF90cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54PShlPWV8fDEpKih0aGlzLl9hKnQueCt0aGlzLl9iKSx0Lnk9ZSoodGhpcy5fYyp0LnkrdGhpcy5fZCksdH0sdW50cmFuc2Zvcm06ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHAoKHQueC8oZT1lfHwxKS10aGlzLl9iKS90aGlzLl9hLCh0LnkvZS10aGlzLl9kKS90aGlzLl9jKX19O3ZhciBsdD1sKHt9LHN0LHtjb2RlOlwiRVBTRzozODU3XCIscHJvamVjdGlvbjpydCx0cmFuc2Zvcm1hdGlvbjpodChsdD0uNS8oTWF0aC5QSSpydC5SKSwuNSwtbHQsLjUpfSksdXQ9bCh7fSxsdCx7Y29kZTpcIkVQU0c6OTAwOTEzXCJ9KTtmdW5jdGlvbiBjdCh0KXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix0KX1mdW5jdGlvbiBkdCh0LGUpe2Zvcih2YXIgaSxuLG8scyxyPVwiXCIsYT0wLGg9dC5sZW5ndGg7YTxoO2ErKyl7Zm9yKGk9MCxuPShvPXRbYV0pLmxlbmd0aDtpPG47aSsrKXIrPShpP1wiTFwiOlwiTVwiKSsocz1vW2ldKS54K1wiIFwiK3MueTtyKz1lP2Iuc3ZnP1wielwiOlwieFwiOlwiXCJ9cmV0dXJuIHJ8fFwiTTAgMFwifXZhciBfdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUscHQ9XCJBY3RpdmVYT2JqZWN0XCJpbiB3aW5kb3csbXQ9cHQmJiFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLG49XCJtc0xhdW5jaFVyaVwiaW4gbmF2aWdhdG9yJiYhKFwiZG9jdW1lbnRNb2RlXCJpbiBkb2N1bWVudCksZnQ9eShcIndlYmtpdFwiKSxndD15KFwiYW5kcm9pZFwiKSx2dD15KFwiYW5kcm9pZCAyXCIpfHx5KFwiYW5kcm9pZCAzXCIpLHl0PXBhcnNlSW50KC9XZWJLaXRcXC8oWzAtOV0rKXwkLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpWzFdLDEwKSx5dD1ndCYmeShcIkdvb2dsZVwiKSYmeXQ8NTM3JiYhKFwiQXVkaW9Ob2RlXCJpbiB3aW5kb3cpLHh0PSEhd2luZG93Lm9wZXJhLHd0PSFuJiZ5KFwiY2hyb21lXCIpLGJ0PXkoXCJnZWNrb1wiKSYmIWZ0JiYheHQmJiFwdCxQdD0hd3QmJnkoXCJzYWZhcmlcIiksTHQ9eShcInBoYW50b21cIiksbz1cIk9UcmFuc2l0aW9uXCJpbiBfdCxUdD0wPT09bmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJXaW5cIiksTXQ9cHQmJlwidHJhbnNpdGlvblwiaW4gX3QsenQ9XCJXZWJLaXRDU1NNYXRyaXhcImluIHdpbmRvdyYmXCJtMTFcImluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4JiYhdnQsX3Q9XCJNb3pQZXJzcGVjdGl2ZVwiaW4gX3QsQ3Q9IXdpbmRvdy5MX0RJU0FCTEVfM0QmJihNdHx8enR8fF90KSYmIW8mJiFMdCxadD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygb3JpZW50YXRpb258fHkoXCJtb2JpbGVcIiksU3Q9WnQmJmZ0LEV0PVp0JiZ6dCxrdD0hd2luZG93LlBvaW50ZXJFdmVudCYmd2luZG93Lk1TUG9pbnRlckV2ZW50LE90PSEoIXdpbmRvdy5Qb2ludGVyRXZlbnQmJiFrdCksQXQ9XCJvbnRvdWNoc3RhcnRcImluIHdpbmRvd3x8ISF3aW5kb3cuVG91Y2hFdmVudCxCdD0hd2luZG93LkxfTk9fVE9VQ0gmJihBdHx8T3QpLEl0PVp0JiZ4dCxSdD1adCYmYnQsTnQ9MTwod2luZG93LmRldmljZVBpeGVsUmF0aW98fHdpbmRvdy5zY3JlZW4uZGV2aWNlWERQSS93aW5kb3cuc2NyZWVuLmxvZ2ljYWxYRFBJKSxEdD1mdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJwYXNzaXZlXCIse2dldDpmdW5jdGlvbigpe3Q9ITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydFwiLHUsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydFwiLHUsZSl9Y2F0Y2godCl7fXJldHVybiB0fSgpLGp0PSEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0LEh0PSEoIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROU3x8IWN0KFwic3ZnXCIpLmNyZWF0ZVNWR1JlY3QpLFd0PSEhSHQmJigoV3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuaW5uZXJIVE1MPVwiPHN2Zy8+XCIsXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT09KFd0LmZpcnN0Q2hpbGQmJld0LmZpcnN0Q2hpbGQubmFtZXNwYWNlVVJJKSk7ZnVuY3Rpb24geSh0KXtyZXR1cm4gMDw9bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YodCl9dmFyIGI9e2llOnB0LGllbHQ5Om10LGVkZ2U6bix3ZWJraXQ6ZnQsYW5kcm9pZDpndCxhbmRyb2lkMjM6dnQsYW5kcm9pZFN0b2NrOnl0LG9wZXJhOnh0LGNocm9tZTp3dCxnZWNrbzpidCxzYWZhcmk6UHQscGhhbnRvbTpMdCxvcGVyYTEyOm8sd2luOlR0LGllM2Q6TXQsd2Via2l0M2Q6enQsZ2Vja28zZDpfdCxhbnkzZDpDdCxtb2JpbGU6WnQsbW9iaWxlV2Via2l0OlN0LG1vYmlsZVdlYmtpdDNkOkV0LG1zUG9pbnRlcjprdCxwb2ludGVyOk90LHRvdWNoOkJ0LHRvdWNoTmF0aXZlOkF0LG1vYmlsZU9wZXJhOkl0LG1vYmlsZUdlY2tvOlJ0LHJldGluYTpOdCxwYXNzaXZlRXZlbnRzOkR0LGNhbnZhczpqdCxzdmc6SHQsdm1sOiFIdCYmZnVuY3Rpb24oKXt0cnl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxlPSh0LmlubmVySFRNTD0nPHY6c2hhcGUgYWRqPVwiMVwiLz4nLHQuZmlyc3RDaGlsZCk7cmV0dXJuIGUuc3R5bGUuYmVoYXZpb3I9XCJ1cmwoI2RlZmF1bHQjVk1MKVwiLGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlLmFkan1jYXRjaCh0KXtyZXR1cm4hMX19KCksaW5saW5lU3ZnOld0LG1hYzowPT09bmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoXCJNYWNcIiksbGludXg6MD09PW5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKFwiTGludXhcIil9LEZ0PWIubXNQb2ludGVyP1wiTVNQb2ludGVyRG93blwiOlwicG9pbnRlcmRvd25cIixVdD1iLm1zUG9pbnRlcj9cIk1TUG9pbnRlck1vdmVcIjpcInBvaW50ZXJtb3ZlXCIsVnQ9Yi5tc1BvaW50ZXI/XCJNU1BvaW50ZXJVcFwiOlwicG9pbnRlcnVwXCIscXQ9Yi5tc1BvaW50ZXI/XCJNU1BvaW50ZXJDYW5jZWxcIjpcInBvaW50ZXJjYW5jZWxcIixHdD17dG91Y2hzdGFydDpGdCx0b3VjaG1vdmU6VXQsdG91Y2hlbmQ6VnQsdG91Y2hjYW5jZWw6cXR9LEt0PXt0b3VjaHN0YXJ0OmZ1bmN0aW9uKHQsZSl7ZS5NU1BPSU5URVJfVFlQRV9UT1VDSCYmZS5wb2ludGVyVHlwZT09PWUuTVNQT0lOVEVSX1RZUEVfVE9VQ0gmJk8oZSk7ZWUodCxlKX0sdG91Y2htb3ZlOmVlLHRvdWNoZW5kOmVlLHRvdWNoY2FuY2VsOmVlfSxZdD17fSxYdD0hMTtmdW5jdGlvbiBKdCh0LGUsaSl7cmV0dXJuXCJ0b3VjaHN0YXJ0XCIhPT1lfHxYdHx8KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoRnQsJHQsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVXQsUXQsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoVnQsdGUsITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIocXQsdGUsITApLFh0PSEwKSxLdFtlXT8oaT1LdFtlXS5iaW5kKHRoaXMsaSksdC5hZGRFdmVudExpc3RlbmVyKEd0W2VdLGksITEpLGkpOihjb25zb2xlLndhcm4oXCJ3cm9uZyBldmVudCBzcGVjaWZpZWQ6XCIsZSksdSl9ZnVuY3Rpb24gJHQodCl7WXRbdC5wb2ludGVySWRdPXR9ZnVuY3Rpb24gUXQodCl7WXRbdC5wb2ludGVySWRdJiYoWXRbdC5wb2ludGVySWRdPXQpfWZ1bmN0aW9uIHRlKHQpe2RlbGV0ZSBZdFt0LnBvaW50ZXJJZF19ZnVuY3Rpb24gZWUodCxlKXtpZihlLnBvaW50ZXJUeXBlIT09KGUuTVNQT0lOVEVSX1RZUEVfTU9VU0V8fFwibW91c2VcIikpe2Zvcih2YXIgaSBpbiBlLnRvdWNoZXM9W10sWXQpZS50b3VjaGVzLnB1c2goWXRbaV0pO2UuY2hhbmdlZFRvdWNoZXM9W2VdLHQoZSl9fXZhciBpZT0yMDA7ZnVuY3Rpb24gbmUodCxpKXt0LmFkZEV2ZW50TGlzdGVuZXIoXCJkYmxjbGlja1wiLGkpO3ZhciBuLG89MDtmdW5jdGlvbiBlKHQpe3ZhciBlOzEhPT10LmRldGFpbD9uPXQuZGV0YWlsOlwibW91c2VcIj09PXQucG9pbnRlclR5cGV8fHQuc291cmNlQ2FwYWJpbGl0aWVzJiYhdC5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50c3x8KChlPU5lKHQpKS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCYmdC5hdHRyaWJ1dGVzLmZvcn0pJiYhZS5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50fSl8fCgoZT1EYXRlLm5vdygpKS1vPD1pZT8yPT09KytuJiZpKGZ1bmN0aW9uKHQpe3ZhciBlLGksbj17fTtmb3IoaSBpbiB0KWU9dFtpXSxuW2ldPWUmJmUuYmluZD9lLmJpbmQodCk6ZTtyZXR1cm4odD1uKS50eXBlPVwiZGJsY2xpY2tcIixuLmRldGFpbD0yLG4uaXNUcnVzdGVkPSExLG4uX3NpbXVsYXRlZD0hMCxufSh0KSk6bj0xLG89ZSkpfXJldHVybiB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGUpLHtkYmxjbGljazppLHNpbURibGNsaWNrOmV9fXZhciBvZSxzZSxyZSxhZSxoZSxsZSx1ZT13ZShbXCJ0cmFuc2Zvcm1cIixcIndlYmtpdFRyYW5zZm9ybVwiLFwiT1RyYW5zZm9ybVwiLFwiTW96VHJhbnNmb3JtXCIsXCJtc1RyYW5zZm9ybVwiXSksY2U9d2UoW1wid2Via2l0VHJhbnNpdGlvblwiLFwidHJhbnNpdGlvblwiLFwiT1RyYW5zaXRpb25cIixcIk1velRyYW5zaXRpb25cIixcIm1zVHJhbnNpdGlvblwiXSksZGU9XCJ3ZWJraXRUcmFuc2l0aW9uXCI9PT1jZXx8XCJPVHJhbnNpdGlvblwiPT09Y2U/Y2UrXCJFbmRcIjpcInRyYW5zaXRpb25lbmRcIjtmdW5jdGlvbiBfZSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTp0fWZ1bmN0aW9uIHBlKHQsZSl7dmFyIGk9dC5zdHlsZVtlXXx8dC5jdXJyZW50U3R5bGUmJnQuY3VycmVudFN0eWxlW2VdO3JldHVyblwiYXV0b1wiPT09KGk9aSYmXCJhdXRvXCIhPT1pfHwhZG9jdW1lbnQuZGVmYXVsdFZpZXc/aToodD1kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkpP3RbZV06bnVsbCk/bnVsbDppfWZ1bmN0aW9uIFAodCxlLGkpe3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtyZXR1cm4gdC5jbGFzc05hbWU9ZXx8XCJcIixpJiZpLmFwcGVuZENoaWxkKHQpLHR9ZnVuY3Rpb24gVCh0KXt2YXIgZT10LnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBtZSh0KXtmb3IoO3QuZmlyc3RDaGlsZDspdC5yZW1vdmVDaGlsZCh0LmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGZlKHQpe3ZhciBlPXQucGFyZW50Tm9kZTtlJiZlLmxhc3RDaGlsZCE9PXQmJmUuYXBwZW5kQ2hpbGQodCl9ZnVuY3Rpb24gZ2UodCl7dmFyIGU9dC5wYXJlbnROb2RlO2UmJmUuZmlyc3RDaGlsZCE9PXQmJmUuaW5zZXJ0QmVmb3JlKHQsZS5maXJzdENoaWxkKX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVybiB2b2lkIDAhPT10LmNsYXNzTGlzdD90LmNsYXNzTGlzdC5jb250YWlucyhlKTowPCh0PXhlKHQpKS5sZW5ndGgmJm5ldyBSZWdFeHAoXCIoXnxcXFxccylcIitlK1wiKFxcXFxzfCQpXCIpLnRlc3QodCl9ZnVuY3Rpb24gTSh0LGUpe3ZhciBpO2lmKHZvaWQgMCE9PXQuY2xhc3NMaXN0KWZvcih2YXIgbj1GKGUpLG89MCxzPW4ubGVuZ3RoO288cztvKyspdC5jbGFzc0xpc3QuYWRkKG5bb10pO2Vsc2UgdmUodCxlKXx8eWUodCwoKGk9eGUodCkpP2krXCIgXCI6XCJcIikrZSl9ZnVuY3Rpb24geih0LGUpe3ZvaWQgMCE9PXQuY2xhc3NMaXN0P3QuY2xhc3NMaXN0LnJlbW92ZShlKTp5ZSh0LFcoKFwiIFwiK3hlKHQpK1wiIFwiKS5yZXBsYWNlKFwiIFwiK2UrXCIgXCIsXCIgXCIpKSl9ZnVuY3Rpb24geWUodCxlKXt2b2lkIDA9PT10LmNsYXNzTmFtZS5iYXNlVmFsP3QuY2xhc3NOYW1lPWU6dC5jbGFzc05hbWUuYmFzZVZhbD1lfWZ1bmN0aW9uIHhlKHQpe3JldHVybiB2b2lkIDA9PT0odD10LmNvcnJlc3BvbmRpbmdFbGVtZW50P3QuY29ycmVzcG9uZGluZ0VsZW1lbnQ6dCkuY2xhc3NOYW1lLmJhc2VWYWw/dC5jbGFzc05hbWU6dC5jbGFzc05hbWUuYmFzZVZhbH1mdW5jdGlvbiBDKHQsZSl7aWYoXCJvcGFjaXR5XCJpbiB0LnN0eWxlKXQuc3R5bGUub3BhY2l0eT1lO2Vsc2UgaWYoXCJmaWx0ZXJcImluIHQuc3R5bGUpe3ZhciBpPSExLG49XCJEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYVwiO3RyeXtpPXQuZmlsdGVycy5pdGVtKG4pfWNhdGNoKHQpe2lmKDE9PT1lKXJldHVybn1lPU1hdGgucm91bmQoMTAwKmUpLGk/KGkuRW5hYmxlZD0xMDAhPT1lLGkuT3BhY2l0eT1lKTp0LnN0eWxlLmZpbHRlcis9XCIgcHJvZ2lkOlwiK24rXCIob3BhY2l0eT1cIitlK1wiKVwifX1mdW5jdGlvbiB3ZSh0KXtmb3IodmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLGk9MDtpPHQubGVuZ3RoO2krKylpZih0W2ldaW4gZSlyZXR1cm4gdFtpXTtyZXR1cm4hMX1mdW5jdGlvbiBiZSh0LGUsaSl7ZT1lfHxuZXcgcCgwLDApO3Quc3R5bGVbdWVdPShiLmllM2Q/XCJ0cmFuc2xhdGUoXCIrZS54K1wicHgsXCIrZS55K1wicHgpXCI6XCJ0cmFuc2xhdGUzZChcIitlLngrXCJweCxcIitlLnkrXCJweCwwKVwiKSsoaT9cIiBzY2FsZShcIitpK1wiKVwiOlwiXCIpfWZ1bmN0aW9uIFoodCxlKXt0Ll9sZWFmbGV0X3Bvcz1lLGIuYW55M2Q/YmUodCxlKToodC5zdHlsZS5sZWZ0PWUueCtcInB4XCIsdC5zdHlsZS50b3A9ZS55K1wicHhcIil9ZnVuY3Rpb24gUGUodCl7cmV0dXJuIHQuX2xlYWZsZXRfcG9zfHxuZXcgcCgwLDApfWZ1bmN0aW9uIExlKCl7Uyh3aW5kb3csXCJkcmFnc3RhcnRcIixPKX1mdW5jdGlvbiBUZSgpe2sod2luZG93LFwiZHJhZ3N0YXJ0XCIsTyl9ZnVuY3Rpb24gTWUodCl7Zm9yKDstMT09PXQudGFiSW5kZXg7KXQ9dC5wYXJlbnROb2RlO3Quc3R5bGUmJih6ZSgpLGxlPShoZT10KS5zdHlsZS5vdXRsaW5lU3R5bGUsdC5zdHlsZS5vdXRsaW5lU3R5bGU9XCJub25lXCIsUyh3aW5kb3csXCJrZXlkb3duXCIsemUpKX1mdW5jdGlvbiB6ZSgpe2hlJiYoaGUuc3R5bGUub3V0bGluZVN0eWxlPWxlLGxlPWhlPXZvaWQgMCxrKHdpbmRvdyxcImtleWRvd25cIix6ZSkpfWZ1bmN0aW9uIENlKHQpe2Zvcig7ISgodD10LnBhcmVudE5vZGUpLm9mZnNldFdpZHRoJiZ0Lm9mZnNldEhlaWdodHx8dD09PWRvY3VtZW50LmJvZHkpOyk7cmV0dXJuIHR9ZnVuY3Rpb24gWmUodCl7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57eDplLndpZHRoL3Qub2Zmc2V0V2lkdGh8fDEseTplLmhlaWdodC90Lm9mZnNldEhlaWdodHx8MSxib3VuZGluZ0NsaWVudFJlY3Q6ZX19YWU9XCJvbnNlbGVjdHN0YXJ0XCJpbiBkb2N1bWVudD8ocmU9ZnVuY3Rpb24oKXtTKHdpbmRvdyxcInNlbGVjdHN0YXJ0XCIsTyl9LGZ1bmN0aW9uKCl7ayh3aW5kb3csXCJzZWxlY3RzdGFydFwiLE8pfSk6KHNlPXdlKFtcInVzZXJTZWxlY3RcIixcIldlYmtpdFVzZXJTZWxlY3RcIixcIk9Vc2VyU2VsZWN0XCIsXCJNb3pVc2VyU2VsZWN0XCIsXCJtc1VzZXJTZWxlY3RcIl0pLHJlPWZ1bmN0aW9uKCl7dmFyIHQ7c2UmJih0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxvZT10W3NlXSx0W3NlXT1cIm5vbmVcIil9LGZ1bmN0aW9uKCl7c2UmJihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGVbc2VdPW9lLG9lPXZvaWQgMCl9KTtwdD17X19wcm90b19fOm51bGwsVFJBTlNGT1JNOnVlLFRSQU5TSVRJT046Y2UsVFJBTlNJVElPTl9FTkQ6ZGUsZ2V0Ol9lLGdldFN0eWxlOnBlLGNyZWF0ZTpQLHJlbW92ZTpULGVtcHR5Om1lLHRvRnJvbnQ6ZmUsdG9CYWNrOmdlLGhhc0NsYXNzOnZlLGFkZENsYXNzOk0scmVtb3ZlQ2xhc3M6eixzZXRDbGFzczp5ZSxnZXRDbGFzczp4ZSxzZXRPcGFjaXR5OkMsdGVzdFByb3A6d2Usc2V0VHJhbnNmb3JtOmJlLHNldFBvc2l0aW9uOlosZ2V0UG9zaXRpb246UGUsZ2V0IGRpc2FibGVUZXh0U2VsZWN0aW9uKCl7cmV0dXJuIHJlfSxnZXQgZW5hYmxlVGV4dFNlbGVjdGlvbigpe3JldHVybiBhZX0sZGlzYWJsZUltYWdlRHJhZzpMZSxlbmFibGVJbWFnZURyYWc6VGUscHJldmVudE91dGxpbmU6TWUscmVzdG9yZU91dGxpbmU6emUsZ2V0U2l6ZWRQYXJlbnROb2RlOkNlLGdldFNjYWxlOlplfTtmdW5jdGlvbiBTKHQsZSxpLG4pe2lmKGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKWZvcih2YXIgbyBpbiBlKWtlKHQsbyxlW29dLGkpO2Vsc2UgZm9yKHZhciBzPTAscj0oZT1GKGUpKS5sZW5ndGg7czxyO3MrKylrZSh0LGVbc10saSxuKTtyZXR1cm4gdGhpc312YXIgRT1cIl9sZWFmbGV0X2V2ZW50c1wiO2Z1bmN0aW9uIGsodCxlLGksbil7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpU2UodCksZGVsZXRlIHRbRV07ZWxzZSBpZihlJiZcIm9iamVjdFwiPT10eXBlb2YgZSlmb3IodmFyIG8gaW4gZSlPZSh0LG8sZVtvXSxpKTtlbHNlIGlmKGU9RihlKSwyPT09YXJndW1lbnRzLmxlbmd0aClTZSh0LGZ1bmN0aW9uKHQpe3JldHVybi0xIT09RyhlLHQpfSk7ZWxzZSBmb3IodmFyIHM9MCxyPWUubGVuZ3RoO3M8cjtzKyspT2UodCxlW3NdLGksbik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gU2UodCxlKXtmb3IodmFyIGkgaW4gdFtFXSl7dmFyIG49aS5zcGxpdCgvXFxkLylbMF07ZSYmIWUobil8fE9lKHQsbixudWxsLG51bGwsaSl9fXZhciBFZT17bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwiLHdoZWVsOiEoXCJvbndoZWVsXCJpbiB3aW5kb3cpJiZcIm1vdXNld2hlZWxcIn07ZnVuY3Rpb24ga2UoZSx0LGksbil7dmFyIG8scyxyPXQraChpKSsobj9cIl9cIitoKG4pOlwiXCIpO2VbRV0mJmVbRV1bcl18fChzPW89ZnVuY3Rpb24odCl7cmV0dXJuIGkuY2FsbChufHxlLHR8fHdpbmRvdy5ldmVudCl9LCFiLnRvdWNoTmF0aXZlJiZiLnBvaW50ZXImJjA9PT10LmluZGV4T2YoXCJ0b3VjaFwiKT9vPUp0KGUsdCxvKTpiLnRvdWNoJiZcImRibGNsaWNrXCI9PT10P289bmUoZSxvKTpcImFkZEV2ZW50TGlzdGVuZXJcImluIGU/XCJ0b3VjaHN0YXJ0XCI9PT10fHxcInRvdWNobW92ZVwiPT09dHx8XCJ3aGVlbFwiPT09dHx8XCJtb3VzZXdoZWVsXCI9PT10P2UuYWRkRXZlbnRMaXN0ZW5lcihFZVt0XXx8dCxvLCEhYi5wYXNzaXZlRXZlbnRzJiZ7cGFzc2l2ZTohMX0pOlwibW91c2VlbnRlclwiPT09dHx8XCJtb3VzZWxlYXZlXCI9PT10P2UuYWRkRXZlbnRMaXN0ZW5lcihFZVt0XSxvPWZ1bmN0aW9uKHQpe3Q9dHx8d2luZG93LmV2ZW50LFdlKGUsdCkmJnModCl9LCExKTplLmFkZEV2ZW50TGlzdGVuZXIodCxzLCExKTplLmF0dGFjaEV2ZW50KFwib25cIit0LG8pLGVbRV09ZVtFXXx8e30sZVtFXVtyXT1vKX1mdW5jdGlvbiBPZSh0LGUsaSxuLG8pe289b3x8ZStoKGkpKyhuP1wiX1wiK2gobik6XCJcIik7dmFyIHMscixpPXRbRV0mJnRbRV1bb107aSYmKCFiLnRvdWNoTmF0aXZlJiZiLnBvaW50ZXImJjA9PT1lLmluZGV4T2YoXCJ0b3VjaFwiKT8obj10LHI9aSxHdFtzPWVdP24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihHdFtzXSxyLCExKTpjb25zb2xlLndhcm4oXCJ3cm9uZyBldmVudCBzcGVjaWZpZWQ6XCIscykpOmIudG91Y2gmJlwiZGJsY2xpY2tcIj09PWU/KG49aSwocj10KS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIixuLmRibGNsaWNrKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLG4uc2ltRGJsY2xpY2spKTpcInJlbW92ZUV2ZW50TGlzdGVuZXJcImluIHQ/dC5yZW1vdmVFdmVudExpc3RlbmVyKEVlW2VdfHxlLGksITEpOnQuZGV0YWNoRXZlbnQoXCJvblwiK2UsaSksdFtFXVtvXT1udWxsKX1mdW5jdGlvbiBBZSh0KXtyZXR1cm4gdC5zdG9wUHJvcGFnYXRpb24/dC5zdG9wUHJvcGFnYXRpb24oKTp0Lm9yaWdpbmFsRXZlbnQ/dC5vcmlnaW5hbEV2ZW50Ll9zdG9wcGVkPSEwOnQuY2FuY2VsQnViYmxlPSEwLHRoaXN9ZnVuY3Rpb24gQmUodCl7cmV0dXJuIGtlKHQsXCJ3aGVlbFwiLEFlKSx0aGlzfWZ1bmN0aW9uIEllKHQpe3JldHVybiBTKHQsXCJtb3VzZWRvd24gdG91Y2hzdGFydCBkYmxjbGljayBjb250ZXh0bWVudVwiLEFlKSx0Ll9sZWFmbGV0X2Rpc2FibGVfY2xpY2s9ITAsdGhpc31mdW5jdGlvbiBPKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0P3QucHJldmVudERlZmF1bHQoKTp0LnJldHVyblZhbHVlPSExLHRoaXN9ZnVuY3Rpb24gUmUodCl7cmV0dXJuIE8odCksQWUodCksdGhpc31mdW5jdGlvbiBOZSh0KXtpZih0LmNvbXBvc2VkUGF0aClyZXR1cm4gdC5jb21wb3NlZFBhdGgoKTtmb3IodmFyIGU9W10saT10LnRhcmdldDtpOyllLnB1c2goaSksaT1pLnBhcmVudE5vZGU7cmV0dXJuIGV9ZnVuY3Rpb24gRGUodCxlKXt2YXIgaSxuO3JldHVybiBlPyhuPShpPVplKGUpKS5ib3VuZGluZ0NsaWVudFJlY3QsbmV3IHAoKHQuY2xpZW50WC1uLmxlZnQpL2kueC1lLmNsaWVudExlZnQsKHQuY2xpZW50WS1uLnRvcCkvaS55LWUuY2xpZW50VG9wKSk6bmV3IHAodC5jbGllbnRYLHQuY2xpZW50WSl9dmFyIGplPWIubGludXgmJmIuY2hyb21lP3dpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOmIubWFjPzMqd2luZG93LmRldmljZVBpeGVsUmF0aW86MDx3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz8yKndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOjE7ZnVuY3Rpb24gSGUodCl7cmV0dXJuIGIuZWRnZT90LndoZWVsRGVsdGFZLzI6dC5kZWx0YVkmJjA9PT10LmRlbHRhTW9kZT8tdC5kZWx0YVkvamU6dC5kZWx0YVkmJjE9PT10LmRlbHRhTW9kZT8yMCotdC5kZWx0YVk6dC5kZWx0YVkmJjI9PT10LmRlbHRhTW9kZT82MCotdC5kZWx0YVk6dC5kZWx0YVh8fHQuZGVsdGFaPzA6dC53aGVlbERlbHRhPyh0LndoZWVsRGVsdGFZfHx0LndoZWVsRGVsdGEpLzI6dC5kZXRhaWwmJk1hdGguYWJzKHQuZGV0YWlsKTwzMjc2NT8yMCotdC5kZXRhaWw6dC5kZXRhaWw/dC5kZXRhaWwvLTMyNzY1KjYwOjB9ZnVuY3Rpb24gV2UodCxlKXt2YXIgaT1lLnJlbGF0ZWRUYXJnZXQ7aWYoIWkpcmV0dXJuITA7dHJ5e2Zvcig7aSYmaSE9PXQ7KWk9aS5wYXJlbnROb2RlfWNhdGNoKHQpe3JldHVybiExfXJldHVybiBpIT09dH12YXIgbXQ9e19fcHJvdG9fXzpudWxsLG9uOlMsb2ZmOmssc3RvcFByb3BhZ2F0aW9uOkFlLGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbjpCZSxkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjpJZSxwcmV2ZW50RGVmYXVsdDpPLHN0b3A6UmUsZ2V0UHJvcGFnYXRpb25QYXRoOk5lLGdldE1vdXNlUG9zaXRpb246RGUsZ2V0V2hlZWxEZWx0YTpIZSxpc0V4dGVybmFsVGFyZ2V0OldlLGFkZExpc3RlbmVyOlMscmVtb3ZlTGlzdGVuZXI6a30sRmU9aXQuZXh0ZW5kKHtydW46ZnVuY3Rpb24odCxlLGksbil7dGhpcy5zdG9wKCksdGhpcy5fZWw9dCx0aGlzLl9pblByb2dyZXNzPSEwLHRoaXMuX2R1cmF0aW9uPWl8fC4yNSx0aGlzLl9lYXNlT3V0UG93ZXI9MS9NYXRoLm1heChufHwuNSwuMiksdGhpcy5fc3RhcnRQb3M9UGUodCksdGhpcy5fb2Zmc2V0PWUuc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpLHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUsdGhpcy5maXJlKFwic3RhcnRcIiksdGhpcy5fYW5pbWF0ZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5faW5Qcm9ncmVzcyYmKHRoaXMuX3N0ZXAoITApLHRoaXMuX2NvbXBsZXRlKCkpfSxfYW5pbWF0ZTpmdW5jdGlvbigpe3RoaXMuX2FuaW1JZD14KHRoaXMuX2FuaW1hdGUsdGhpcyksdGhpcy5fc3RlcCgpfSxfc3RlcDpmdW5jdGlvbih0KXt2YXIgZT0rbmV3IERhdGUtdGhpcy5fc3RhcnRUaW1lLGk9MWUzKnRoaXMuX2R1cmF0aW9uO2U8aT90aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KGUvaSksdCk6KHRoaXMuX3J1bkZyYW1lKDEpLHRoaXMuX2NvbXBsZXRlKCkpfSxfcnVuRnJhbWU6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3N0YXJ0UG9zLmFkZCh0aGlzLl9vZmZzZXQubXVsdGlwbHlCeSh0KSk7ZSYmdC5fcm91bmQoKSxaKHRoaXMuX2VsLHQpLHRoaXMuZmlyZShcInN0ZXBcIil9LF9jb21wbGV0ZTpmdW5jdGlvbigpe3IodGhpcy5fYW5pbUlkKSx0aGlzLl9pblByb2dyZXNzPSExLHRoaXMuZmlyZShcImVuZFwiKX0sX2Vhc2VPdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5wb3coMS10LHRoaXMuX2Vhc2VPdXRQb3dlcil9fSksQT1pdC5leHRlbmQoe29wdGlvbnM6e2NyczpsdCxjZW50ZXI6dm9pZCAwLHpvb206dm9pZCAwLG1pblpvb206dm9pZCAwLG1heFpvb206dm9pZCAwLGxheWVyczpbXSxtYXhCb3VuZHM6dm9pZCAwLHJlbmRlcmVyOnZvaWQgMCx6b29tQW5pbWF0aW9uOiEwLHpvb21BbmltYXRpb25UaHJlc2hvbGQ6NCxmYWRlQW5pbWF0aW9uOiEwLG1hcmtlclpvb21BbmltYXRpb246ITAsdHJhbnNmb3JtM0RMaW1pdDo4Mzg4NjA4LHpvb21TbmFwOjEsem9vbURlbHRhOjEsdHJhY2tSZXNpemU6ITB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtlPWModGhpcyxlKSx0aGlzLl9oYW5kbGVycz1bXSx0aGlzLl9sYXllcnM9e30sdGhpcy5fem9vbUJvdW5kTGF5ZXJzPXt9LHRoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2luaXRDb250YWluZXIodCksdGhpcy5faW5pdExheW91dCgpLHRoaXMuX29uUmVzaXplPWEodGhpcy5fb25SZXNpemUsdGhpcyksdGhpcy5faW5pdEV2ZW50cygpLGUubWF4Qm91bmRzJiZ0aGlzLnNldE1heEJvdW5kcyhlLm1heEJvdW5kcyksdm9pZCAwIT09ZS56b29tJiYodGhpcy5fem9vbT10aGlzLl9saW1pdFpvb20oZS56b29tKSksZS5jZW50ZXImJnZvaWQgMCE9PWUuem9vbSYmdGhpcy5zZXRWaWV3KHcoZS5jZW50ZXIpLGUuem9vbSx7cmVzZXQ6ITB9KSx0aGlzLmNhbGxJbml0SG9va3MoKSx0aGlzLl96b29tQW5pbWF0ZWQ9Y2UmJmIuYW55M2QmJiFiLm1vYmlsZU9wZXJhJiZ0aGlzLm9wdGlvbnMuem9vbUFuaW1hdGlvbix0aGlzLl96b29tQW5pbWF0ZWQmJih0aGlzLl9jcmVhdGVBbmltUHJveHkoKSxTKHRoaXMuX3Byb3h5LGRlLHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCx0aGlzKSksdGhpcy5fYWRkTGF5ZXJzKHRoaXMub3B0aW9ucy5sYXllcnMpfSxzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpKXtpZigoZT12b2lkIDA9PT1lP3RoaXMuX3pvb206dGhpcy5fbGltaXRab29tKGUpLHQ9dGhpcy5fbGltaXRDZW50ZXIodyh0KSxlLHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpLGk9aXx8e30sdGhpcy5fc3RvcCgpLHRoaXMuX2xvYWRlZCYmIWkucmVzZXQmJiEwIT09aSkmJih2b2lkIDAhPT1pLmFuaW1hdGUmJihpLnpvb209bCh7YW5pbWF0ZTppLmFuaW1hdGV9LGkuem9vbSksaS5wYW49bCh7YW5pbWF0ZTppLmFuaW1hdGUsZHVyYXRpb246aS5kdXJhdGlvbn0saS5wYW4pKSx0aGlzLl96b29tIT09ZT90aGlzLl90cnlBbmltYXRlZFpvb20mJnRoaXMuX3RyeUFuaW1hdGVkWm9vbSh0LGUsaS56b29tKTp0aGlzLl90cnlBbmltYXRlZFBhbih0LGkucGFuKSkpcmV0dXJuIGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpLHRoaXM7cmV0dXJuIHRoaXMuX3Jlc2V0Vmlldyh0LGUsaS5wYW4mJmkucGFuLm5vTW92ZVN0YXJ0KSx0aGlzfSxzZXRab29tOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xvYWRlZD90aGlzLnNldFZpZXcodGhpcy5nZXRDZW50ZXIoKSx0LHt6b29tOmV9KToodGhpcy5fem9vbT10LHRoaXMpfSx6b29tSW46ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHwoYi5hbnkzZD90aGlzLm9wdGlvbnMuem9vbURlbHRhOjEpLHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tK3QsZSl9LHpvb21PdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHwoYi5hbnkzZD90aGlzLm9wdGlvbnMuem9vbURlbHRhOjEpLHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tLXQsZSl9LHNldFpvb21Bcm91bmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXRoaXMuZ2V0Wm9vbVNjYWxlKGUpLG89dGhpcy5nZXRTaXplKCkuZGl2aWRlQnkoMiksdD0odCBpbnN0YW5jZW9mIHA/dDp0aGlzLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQodCkpLnN1YnRyYWN0KG8pLm11bHRpcGx5QnkoMS0xL24pLG49dGhpcy5jb250YWluZXJQb2ludFRvTGF0TG5nKG8uYWRkKHQpKTtyZXR1cm4gdGhpcy5zZXRWaWV3KG4sZSx7em9vbTppfSl9LF9nZXRCb3VuZHNDZW50ZXJab29tOmZ1bmN0aW9uKHQsZSl7ZT1lfHx7fSx0PXQuZ2V0Qm91bmRzP3QuZ2V0Qm91bmRzKCk6Zyh0KTt2YXIgaT1tKGUucGFkZGluZ1RvcExlZnR8fGUucGFkZGluZ3x8WzAsMF0pLG49bShlLnBhZGRpbmdCb3R0b21SaWdodHx8ZS5wYWRkaW5nfHxbMCwwXSksbz10aGlzLmdldEJvdW5kc1pvb20odCwhMSxpLmFkZChuKSk7cmV0dXJuKG89XCJudW1iZXJcIj09dHlwZW9mIGUubWF4Wm9vbT9NYXRoLm1pbihlLm1heFpvb20sbyk6byk9PT0xLzA/e2NlbnRlcjp0LmdldENlbnRlcigpLHpvb206b306KGU9bi5zdWJ0cmFjdChpKS5kaXZpZGVCeSgyKSxuPXRoaXMucHJvamVjdCh0LmdldFNvdXRoV2VzdCgpLG8pLGk9dGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksbykse2NlbnRlcjp0aGlzLnVucHJvamVjdChuLmFkZChpKS5kaXZpZGVCeSgyKS5hZGQoZSksbyksem9vbTpvfSl9LGZpdEJvdW5kczpmdW5jdGlvbih0LGUpe2lmKCh0PWcodCkpLmlzVmFsaWQoKSlyZXR1cm4gdD10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsZSksdGhpcy5zZXRWaWV3KHQuY2VudGVyLHQuem9vbSxlKTt0aHJvdyBuZXcgRXJyb3IoXCJCb3VuZHMgYXJlIG5vdCB2YWxpZC5cIil9LGZpdFdvcmxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwtMTgwXSxbOTAsMTgwXV0sdCl9LHBhblRvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2V0Vmlldyh0LHRoaXMuX3pvb20se3BhbjplfSl9LHBhbkJ5OmZ1bmN0aW9uKHQsZSl7dmFyIGk7cmV0dXJuIGU9ZXx8e30sKHQ9bSh0KS5yb3VuZCgpKS54fHx0Lnk/KCEwPT09ZS5hbmltYXRlfHx0aGlzLmdldFNpemUoKS5jb250YWlucyh0KT8odGhpcy5fcGFuQW5pbXx8KHRoaXMuX3BhbkFuaW09bmV3IEZlLHRoaXMuX3BhbkFuaW0ub24oe3N0ZXA6dGhpcy5fb25QYW5UcmFuc2l0aW9uU3RlcCxlbmQ6dGhpcy5fb25QYW5UcmFuc2l0aW9uRW5kfSx0aGlzKSksZS5ub01vdmVTdGFydHx8dGhpcy5maXJlKFwibW92ZXN0YXJ0XCIpLCExIT09ZS5hbmltYXRlPyhNKHRoaXMuX21hcFBhbmUsXCJsZWFmbGV0LXBhbi1hbmltXCIpLGk9dGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KHQpLnJvdW5kKCksdGhpcy5fcGFuQW5pbS5ydW4odGhpcy5fbWFwUGFuZSxpLGUuZHVyYXRpb258fC4yNSxlLmVhc2VMaW5lYXJpdHkpKToodGhpcy5fcmF3UGFuQnkodCksdGhpcy5maXJlKFwibW92ZVwiKS5maXJlKFwibW92ZWVuZFwiKSkpOnRoaXMuX3Jlc2V0Vmlldyh0aGlzLnVucHJvamVjdCh0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkuYWRkKHQpKSx0aGlzLmdldFpvb20oKSksdGhpcyk6dGhpcy5maXJlKFwibW92ZWVuZFwiKX0sZmx5VG86ZnVuY3Rpb24obixvLHQpe2lmKCExPT09KHQ9dHx8e30pLmFuaW1hdGV8fCFiLmFueTNkKXJldHVybiB0aGlzLnNldFZpZXcobixvLHQpO3RoaXMuX3N0b3AoKTt2YXIgcz10aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSkscj10aGlzLnByb2plY3QobiksZT10aGlzLmdldFNpemUoKSxhPXRoaXMuX3pvb20saD0obj13KG4pLG89dm9pZCAwPT09bz9hOm8sTWF0aC5tYXgoZS54LGUueSkpLGk9aCp0aGlzLmdldFpvb21TY2FsZShhLG8pLGw9ci5kaXN0YW5jZVRvKHMpfHwxLHU9MS40MixjPXUqdTtmdW5jdGlvbiBkKHQpe3Q9KGkqaS1oKmgrKHQ/LTE6MSkqYypjKmwqbCkvKDIqKHQ/aTpoKSpjKmwpLHQ9TWF0aC5zcXJ0KHQqdCsxKS10O3JldHVybiB0PDFlLTk/LTE4Ok1hdGgubG9nKHQpfWZ1bmN0aW9uIF8odCl7cmV0dXJuKE1hdGguZXhwKHQpLU1hdGguZXhwKC10KSkvMn1mdW5jdGlvbiBwKHQpe3JldHVybihNYXRoLmV4cCh0KStNYXRoLmV4cCgtdCkpLzJ9dmFyIG09ZCgwKTtmdW5jdGlvbiBmKHQpe3JldHVybiBoKihwKG0pKihfKHQ9bSt1KnQpL3AodCkpLV8obSkpL2N9dmFyIGc9RGF0ZS5ub3coKSx2PShkKDEpLW0pL3UseT10LmR1cmF0aW9uPzFlMyp0LmR1cmF0aW9uOjFlMyp2Ki44O3JldHVybiB0aGlzLl9tb3ZlU3RhcnQoITAsdC5ub01vdmVTdGFydCksZnVuY3Rpb24gdCgpe3ZhciBlPShEYXRlLm5vdygpLWcpL3ksaT0oMS1NYXRoLnBvdygxLWUsMS41KSkqdjtlPD0xPyh0aGlzLl9mbHlUb0ZyYW1lPXgodCx0aGlzKSx0aGlzLl9tb3ZlKHRoaXMudW5wcm9qZWN0KHMuYWRkKHIuc3VidHJhY3QocykubXVsdGlwbHlCeShmKGkpL2wpKSxhKSx0aGlzLmdldFNjYWxlWm9vbShoLyhlPWksaCoocChtKS9wKG0rdSplKSkpLGEpLHtmbHlUbzohMH0pKTp0aGlzLl9tb3ZlKG4sbykuX21vdmVFbmQoITApfS5jYWxsKHRoaXMpLHRoaXN9LGZseVRvQm91bmRzOmZ1bmN0aW9uKHQsZSl7dD10aGlzLl9nZXRCb3VuZHNDZW50ZXJab29tKHQsZSk7cmV0dXJuIHRoaXMuZmx5VG8odC5jZW50ZXIsdC56b29tLGUpfSxzZXRNYXhCb3VuZHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9Zyh0KSx0aGlzLmxpc3RlbnMoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSYmdGhpcy5vZmYoXCJtb3ZlZW5kXCIsdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKSx0LmlzVmFsaWQoKT8odGhpcy5vcHRpb25zLm1heEJvdW5kcz10LHRoaXMuX2xvYWRlZCYmdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCksdGhpcy5vbihcIm1vdmVlbmRcIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpKToodGhpcy5vcHRpb25zLm1heEJvdW5kcz1udWxsLHRoaXMpfSxzZXRNaW5ab29tOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucy5taW5ab29tO3JldHVybiB0aGlzLm9wdGlvbnMubWluWm9vbT10LHRoaXMuX2xvYWRlZCYmZSE9PXQmJih0aGlzLmZpcmUoXCJ6b29tbGV2ZWxzY2hhbmdlXCIpLHRoaXMuZ2V0Wm9vbSgpPHRoaXMub3B0aW9ucy5taW5ab29tKT90aGlzLnNldFpvb20odCk6dGhpc30sc2V0TWF4Wm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMubWF4Wm9vbTtyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb209dCx0aGlzLl9sb2FkZWQmJmUhPT10JiYodGhpcy5maXJlKFwiem9vbWxldmVsc2NoYW5nZVwiKSx0aGlzLmdldFpvb20oKT50aGlzLm9wdGlvbnMubWF4Wm9vbSk/dGhpcy5zZXRab29tKHQpOnRoaXN9LHBhbkluc2lkZUJvdW5kczpmdW5jdGlvbih0LGUpe3RoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMDt2YXIgaT10aGlzLmdldENlbnRlcigpLHQ9dGhpcy5fbGltaXRDZW50ZXIoaSx0aGlzLl96b29tLGcodCkpO3JldHVybiBpLmVxdWFscyh0KXx8dGhpcy5wYW5Ubyh0LGUpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMSx0aGlzfSxwYW5JbnNpZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT1tKChlPWV8fHt9KS5wYWRkaW5nVG9wTGVmdHx8ZS5wYWRkaW5nfHxbMCwwXSksbj1tKGUucGFkZGluZ0JvdHRvbVJpZ2h0fHxlLnBhZGRpbmd8fFswLDBdKSxvPXRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKSx0PXRoaXMucHJvamVjdCh0KSxzPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxpPV8oW3MubWluLmFkZChpKSxzLm1heC5zdWJ0cmFjdChuKV0pLHM9aS5nZXRTaXplKCk7cmV0dXJuIGkuY29udGFpbnModCl8fCh0aGlzLl9lbmZvcmNpbmdCb3VuZHM9ITAsbj10LnN1YnRyYWN0KGkuZ2V0Q2VudGVyKCkpLGk9aS5leHRlbmQodCkuZ2V0U2l6ZSgpLnN1YnRyYWN0KHMpLG8ueCs9bi54PDA/LWkueDppLngsby55Kz1uLnk8MD8taS55OmkueSx0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KG8pLGUpLHRoaXMuX2VuZm9yY2luZ0JvdW5kcz0hMSksdGhpc30saW52YWxpZGF0ZVNpemU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4gdGhpczt0PWwoe2FuaW1hdGU6ITEscGFuOiEwfSwhMD09PXQ/e2FuaW1hdGU6ITB9OnQpO3ZhciBlPXRoaXMuZ2V0U2l6ZSgpLGk9KHRoaXMuX3NpemVDaGFuZ2VkPSEwLHRoaXMuX2xhc3RDZW50ZXI9bnVsbCx0aGlzLmdldFNpemUoKSksbj1lLmRpdmlkZUJ5KDIpLnJvdW5kKCksbz1pLmRpdmlkZUJ5KDIpLnJvdW5kKCksbj1uLnN1YnRyYWN0KG8pO3JldHVybiBuLnh8fG4ueT8odC5hbmltYXRlJiZ0LnBhbj90aGlzLnBhbkJ5KG4pOih0LnBhbiYmdGhpcy5fcmF3UGFuQnkobiksdGhpcy5maXJlKFwibW92ZVwiKSx0LmRlYm91bmNlTW92ZWVuZD8oY2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lciksdGhpcy5fc2l6ZVRpbWVyPXNldFRpbWVvdXQoYSh0aGlzLmZpcmUsdGhpcyxcIm1vdmVlbmRcIiksMjAwKSk6dGhpcy5maXJlKFwibW92ZWVuZFwiKSksdGhpcy5maXJlKFwicmVzaXplXCIse29sZFNpemU6ZSxuZXdTaXplOml9KSk6dGhpc30sc3RvcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNldFpvb20odGhpcy5fbGltaXRab29tKHRoaXMuX3pvb20pKSx0aGlzLm9wdGlvbnMuem9vbVNuYXB8fHRoaXMuZmlyZShcInZpZXdyZXNldFwiKSx0aGlzLl9zdG9wKCl9LGxvY2F0ZTpmdW5jdGlvbih0KXt2YXIgZSxpO3JldHVybiB0PXRoaXMuX2xvY2F0ZU9wdGlvbnM9bCh7dGltZW91dDoxZTQsd2F0Y2g6ITF9LHQpLFwiZ2VvbG9jYXRpb25cImluIG5hdmlnYXRvcj8oZT1hKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UsdGhpcyksaT1hKHRoaXMuX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3IsdGhpcyksdC53YXRjaD90aGlzLl9sb2NhdGlvbldhdGNoSWQ9bmF2aWdhdG9yLmdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oZSxpLHQpOm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oZSxpLHQpKTp0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yKHtjb2RlOjAsbWVzc2FnZTpcIkdlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuXCJ9KSx0aGlzfSxzdG9wTG9jYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG5hdmlnYXRvci5nZW9sb2NhdGlvbiYmbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gmJm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCksdGhpcy5fbG9jYXRlT3B0aW9ucyYmKHRoaXMuX2xvY2F0ZU9wdGlvbnMuc2V0Vmlldz0hMSksdGhpc30sX2hhbmRsZUdlb2xvY2F0aW9uRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkJiYoZT10LmNvZGUsdD10Lm1lc3NhZ2V8fCgxPT09ZT9cInBlcm1pc3Npb24gZGVuaWVkXCI6Mj09PWU/XCJwb3NpdGlvbiB1bmF2YWlsYWJsZVwiOlwidGltZW91dFwiKSx0aGlzLl9sb2NhdGVPcHRpb25zLnNldFZpZXcmJiF0aGlzLl9sb2FkZWQmJnRoaXMuZml0V29ybGQoKSx0aGlzLmZpcmUoXCJsb2NhdGlvbmVycm9yXCIse2NvZGU6ZSxtZXNzYWdlOlwiR2VvbG9jYXRpb24gZXJyb3I6IFwiK3QrXCIuXCJ9KSl9LF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZCl7dmFyIGUsaSxuPW5ldyB2KHQuY29vcmRzLmxhdGl0dWRlLHQuY29vcmRzLmxvbmdpdHVkZSksbz1uLnRvQm91bmRzKDIqdC5jb29yZHMuYWNjdXJhY3kpLHM9dGhpcy5fbG9jYXRlT3B0aW9ucyxyPShzLnNldFZpZXcmJihlPXRoaXMuZ2V0Qm91bmRzWm9vbShvKSx0aGlzLnNldFZpZXcobixzLm1heFpvb20/TWF0aC5taW4oZSxzLm1heFpvb20pOmUpKSx7bGF0bG5nOm4sYm91bmRzOm8sdGltZXN0YW1wOnQudGltZXN0YW1wfSk7Zm9yKGkgaW4gdC5jb29yZHMpXCJudW1iZXJcIj09dHlwZW9mIHQuY29vcmRzW2ldJiYocltpXT10LmNvb3Jkc1tpXSk7dGhpcy5maXJlKFwibG9jYXRpb25mb3VuZFwiLHIpfX0sYWRkSGFuZGxlcjpmdW5jdGlvbih0LGUpe3JldHVybiBlJiYoZT10aGlzW3RdPW5ldyBlKHRoaXMpLHRoaXMuX2hhbmRsZXJzLnB1c2goZSksdGhpcy5vcHRpb25zW3RdJiZlLmVuYWJsZSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZih0aGlzLl9pbml0RXZlbnRzKCEwKSx0aGlzLm9wdGlvbnMubWF4Qm91bmRzJiZ0aGlzLm9mZihcIm1vdmVlbmRcIix0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpLHRoaXMuX2NvbnRhaW5lcklkIT09dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgaXMgYmVpbmcgcmV1c2VkIGJ5IGFub3RoZXIgaW5zdGFuY2VcIik7dHJ5e2RlbGV0ZSB0aGlzLl9jb250YWluZXIuX2xlYWZsZXRfaWQsZGVsZXRlIHRoaXMuX2NvbnRhaW5lcklkfWNhdGNoKHQpe3RoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZD12b2lkIDAsdGhpcy5fY29udGFpbmVySWQ9dm9pZCAwfWZvcih2YXIgdCBpbiB2b2lkIDAhPT10aGlzLl9sb2NhdGlvbldhdGNoSWQmJnRoaXMuc3RvcExvY2F0ZSgpLHRoaXMuX3N0b3AoKSxUKHRoaXMuX21hcFBhbmUpLHRoaXMuX2NsZWFyQ29udHJvbFBvcyYmdGhpcy5fY2xlYXJDb250cm9sUG9zKCksdGhpcy5fcmVzaXplUmVxdWVzdCYmKHIodGhpcy5fcmVzaXplUmVxdWVzdCksdGhpcy5fcmVzaXplUmVxdWVzdD1udWxsKSx0aGlzLl9jbGVhckhhbmRsZXJzKCksdGhpcy5fbG9hZGVkJiZ0aGlzLmZpcmUoXCJ1bmxvYWRcIiksdGhpcy5fbGF5ZXJzKXRoaXMuX2xheWVyc1t0XS5yZW1vdmUoKTtmb3IodCBpbiB0aGlzLl9wYW5lcylUKHRoaXMuX3BhbmVzW3RdKTtyZXR1cm4gdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX3BhbmVzPVtdLGRlbGV0ZSB0aGlzLl9tYXBQYW5lLGRlbGV0ZSB0aGlzLl9yZW5kZXJlcix0aGlzfSxjcmVhdGVQYW5lOmZ1bmN0aW9uKHQsZSl7ZT1QKFwiZGl2XCIsXCJsZWFmbGV0LXBhbmVcIisodD9cIiBsZWFmbGV0LVwiK3QucmVwbGFjZShcIlBhbmVcIixcIlwiKStcIi1wYW5lXCI6XCJcIiksZXx8dGhpcy5fbWFwUGFuZSk7cmV0dXJuIHQmJih0aGlzLl9wYW5lc1t0XT1lKSxlfSxnZXRDZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tJZkxvYWRlZCgpLHRoaXMuX2xhc3RDZW50ZXImJiF0aGlzLl9tb3ZlZCgpP3RoaXMuX2xhc3RDZW50ZXIuY2xvbmUoKTp0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpfSxnZXRab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKTtyZXR1cm4gbmV3IHModGhpcy51bnByb2plY3QodC5nZXRCb3R0b21MZWZ0KCkpLHRoaXMudW5wcm9qZWN0KHQuZ2V0VG9wUmlnaHQoKSkpfSxnZXRNaW5ab29tOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9ucy5taW5ab29tP3RoaXMuX2xheWVyc01pblpvb218fDA6dGhpcy5vcHRpb25zLm1pblpvb219LGdldE1heFpvb206ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zLm1heFpvb20/dm9pZCAwPT09dGhpcy5fbGF5ZXJzTWF4Wm9vbT8xLzA6dGhpcy5fbGF5ZXJzTWF4Wm9vbTp0aGlzLm9wdGlvbnMubWF4Wm9vbX0sZ2V0Qm91bmRzWm9vbTpmdW5jdGlvbih0LGUsaSl7dD1nKHQpLGk9bShpfHxbMCwwXSk7dmFyIG49dGhpcy5nZXRab29tKCl8fDAsbz10aGlzLmdldE1pblpvb20oKSxzPXRoaXMuZ2V0TWF4Wm9vbSgpLHI9dC5nZXROb3J0aFdlc3QoKSx0PXQuZ2V0U291dGhFYXN0KCksaT10aGlzLmdldFNpemUoKS5zdWJ0cmFjdChpKSx0PV8odGhpcy5wcm9qZWN0KHQsbiksdGhpcy5wcm9qZWN0KHIsbikpLmdldFNpemUoKSxyPWIuYW55M2Q/dGhpcy5vcHRpb25zLnpvb21TbmFwOjEsYT1pLngvdC54LGk9aS55L3QueSx0PWU/TWF0aC5tYXgoYSxpKTpNYXRoLm1pbihhLGkpLG49dGhpcy5nZXRTY2FsZVpvb20odCxuKTtyZXR1cm4gciYmKG49TWF0aC5yb3VuZChuLyhyLzEwMCkpKihyLzEwMCksbj1lP01hdGguY2VpbChuL3IpKnI6TWF0aC5mbG9vcihuL3IpKnIpLE1hdGgubWF4KG8sTWF0aC5taW4ocyxuKSl9LGdldFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZSYmIXRoaXMuX3NpemVDaGFuZ2VkfHwodGhpcy5fc2l6ZT1uZXcgcCh0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGh8fDAsdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodHx8MCksdGhpcy5fc2l6ZUNoYW5nZWQ9ITEpLHRoaXMuX3NpemUuY2xvbmUoKX0sZ2V0UGl4ZWxCb3VuZHM6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX2dldFRvcExlZnRQb2ludCh0LGUpO3JldHVybiBuZXcgZih0LHQuYWRkKHRoaXMuZ2V0U2l6ZSgpKSl9LGdldFBpeGVsT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrSWZMb2FkZWQoKSx0aGlzLl9waXhlbE9yaWdpbn0sZ2V0UGl4ZWxXb3JsZEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5nZXRQcm9qZWN0ZWRCb3VuZHModm9pZCAwPT09dD90aGlzLmdldFpvb20oKTp0KX0sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90aGlzLl9wYW5lc1t0XTp0fSxnZXRQYW5lczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYW5lc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sZ2V0Wm9vbVNjYWxlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5vcHRpb25zLmNycztyZXR1cm4gZT12b2lkIDA9PT1lP3RoaXMuX3pvb206ZSxpLnNjYWxlKHQpL2kuc2NhbGUoZSl9LGdldFNjYWxlWm9vbTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMub3B0aW9ucy5jcnMsdD0oZT12b2lkIDA9PT1lP3RoaXMuX3pvb206ZSxpLnpvb20odCppLnNjYWxlKGUpKSk7cmV0dXJuIGlzTmFOKHQpPzEvMDp0fSxwcm9qZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9dm9pZCAwPT09ZT90aGlzLl96b29tOmUsdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KHcodCksZSl9LHVucHJvamVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlPXZvaWQgMD09PWU/dGhpcy5fem9vbTplLHRoaXMub3B0aW9ucy5jcnMucG9pbnRUb0xhdExuZyhtKHQpLGUpfSxsYXllclBvaW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7dD1tKHQpLmFkZCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO3JldHVybiB0aGlzLnVucHJvamVjdCh0KX0sbGF0TG5nVG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByb2plY3Qodyh0KSkuX3JvdW5kKCkuX3N1YnRyYWN0KHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSl9LHdyYXBMYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZyh3KHQpKX0sd3JhcExhdExuZ0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmNycy53cmFwTGF0TG5nQm91bmRzKGcodCkpfSxkaXN0YW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9wdGlvbnMuY3JzLmRpc3RhbmNlKHcodCksdyhlKSl9LGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBtKHQpLnN1YnRyYWN0KHRoaXMuX2dldE1hcFBhbmVQb3MoKSl9LGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiBtKHQpLmFkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpfSxjb250YWluZXJQb2ludFRvTGF0TG5nOmZ1bmN0aW9uKHQpe3Q9dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChtKHQpKTtyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodCl9LGxhdExuZ1RvQ29udGFpbmVyUG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQodGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodyh0KSkpfSxtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludDpmdW5jdGlvbih0KXtyZXR1cm4gRGUodCx0aGlzLl9jb250YWluZXIpfSxtb3VzZUV2ZW50VG9MYXllclBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHRoaXMubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCkpfSxtb3VzZUV2ZW50VG9MYXRMbmc6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKHRoaXMubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSl9LF9pbml0Q29udGFpbmVyOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fY29udGFpbmVyPV9lKHQpO2lmKCF0KXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgbm90IGZvdW5kLlwiKTtpZih0Ll9sZWFmbGV0X2lkKXRocm93IG5ldyBFcnJvcihcIk1hcCBjb250YWluZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC5cIik7Uyh0LFwic2Nyb2xsXCIsdGhpcy5fb25TY3JvbGwsdGhpcyksdGhpcy5fY29udGFpbmVySWQ9aCh0KX0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXIsZT0odGhpcy5fZmFkZUFuaW1hdGVkPXRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uJiZiLmFueTNkLE0odCxcImxlYWZsZXQtY29udGFpbmVyXCIrKGIudG91Y2g/XCIgbGVhZmxldC10b3VjaFwiOlwiXCIpKyhiLnJldGluYT9cIiBsZWFmbGV0LXJldGluYVwiOlwiXCIpKyhiLmllbHQ5P1wiIGxlYWZsZXQtb2xkaWVcIjpcIlwiKSsoYi5zYWZhcmk/XCIgbGVhZmxldC1zYWZhcmlcIjpcIlwiKSsodGhpcy5fZmFkZUFuaW1hdGVkP1wiIGxlYWZsZXQtZmFkZS1hbmltXCI6XCJcIikpLHBlKHQsXCJwb3NpdGlvblwiKSk7XCJhYnNvbHV0ZVwiIT09ZSYmXCJyZWxhdGl2ZVwiIT09ZSYmXCJmaXhlZFwiIT09ZSYmXCJzdGlja3lcIiE9PWUmJih0LnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIiksdGhpcy5faW5pdFBhbmVzKCksdGhpcy5faW5pdENvbnRyb2xQb3MmJnRoaXMuX2luaXRDb250cm9sUG9zKCl9LF9pbml0UGFuZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wYW5lcz17fTt0aGlzLl9wYW5lUmVuZGVyZXJzPXt9LHRoaXMuX21hcFBhbmU9dGhpcy5jcmVhdGVQYW5lKFwibWFwUGFuZVwiLHRoaXMuX2NvbnRhaW5lciksWih0aGlzLl9tYXBQYW5lLG5ldyBwKDAsMCkpLHRoaXMuY3JlYXRlUGFuZShcInRpbGVQYW5lXCIpLHRoaXMuY3JlYXRlUGFuZShcIm92ZXJsYXlQYW5lXCIpLHRoaXMuY3JlYXRlUGFuZShcInNoYWRvd1BhbmVcIiksdGhpcy5jcmVhdGVQYW5lKFwibWFya2VyUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJ0b29sdGlwUGFuZVwiKSx0aGlzLmNyZWF0ZVBhbmUoXCJwb3B1cFBhbmVcIiksdGhpcy5vcHRpb25zLm1hcmtlclpvb21BbmltYXRpb258fChNKHQubWFya2VyUGFuZSxcImxlYWZsZXQtem9vbS1oaWRlXCIpLE0odC5zaGFkb3dQYW5lLFwibGVhZmxldC16b29tLWhpZGVcIikpfSxfcmVzZXRWaWV3OmZ1bmN0aW9uKHQsZSxpKXtaKHRoaXMuX21hcFBhbmUsbmV3IHAoMCwwKSk7dmFyIG49IXRoaXMuX2xvYWRlZCxvPSh0aGlzLl9sb2FkZWQ9ITAsZT10aGlzLl9saW1pdFpvb20oZSksdGhpcy5maXJlKFwidmlld3ByZXJlc2V0XCIpLHRoaXMuX3pvb20hPT1lKTt0aGlzLl9tb3ZlU3RhcnQobyxpKS5fbW92ZSh0LGUpLl9tb3ZlRW5kKG8pLHRoaXMuZmlyZShcInZpZXdyZXNldFwiKSxuJiZ0aGlzLmZpcmUoXCJsb2FkXCIpfSxfbW92ZVN0YXJ0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnRoaXMuZmlyZShcInpvb21zdGFydFwiKSxlfHx0aGlzLmZpcmUoXCJtb3Zlc3RhcnRcIiksdGhpc30sX21vdmU6ZnVuY3Rpb24odCxlLGksbil7dm9pZCAwPT09ZSYmKGU9dGhpcy5fem9vbSk7dmFyIG89dGhpcy5fem9vbSE9PWU7cmV0dXJuIHRoaXMuX3pvb209ZSx0aGlzLl9sYXN0Q2VudGVyPXQsdGhpcy5fcGl4ZWxPcmlnaW49dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4odCksbj9pJiZpLnBpbmNoJiZ0aGlzLmZpcmUoXCJ6b29tXCIsaSk6KChvfHxpJiZpLnBpbmNoKSYmdGhpcy5maXJlKFwiem9vbVwiLGkpLHRoaXMuZmlyZShcIm1vdmVcIixpKSksdGhpc30sX21vdmVFbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnRoaXMuZmlyZShcInpvb21lbmRcIiksdGhpcy5maXJlKFwibW92ZWVuZFwiKX0sX3N0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLl9mbHlUb0ZyYW1lKSx0aGlzLl9wYW5BbmltJiZ0aGlzLl9wYW5BbmltLnN0b3AoKSx0aGlzfSxfcmF3UGFuQnk6ZnVuY3Rpb24odCl7Wih0aGlzLl9tYXBQYW5lLHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdCh0KSl9LF9nZXRab29tU3BhbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldE1heFpvb20oKS10aGlzLmdldE1pblpvb20oKX0sX3Bhbkluc2lkZU1heEJvdW5kczpmdW5jdGlvbigpe3RoaXMuX2VuZm9yY2luZ0JvdW5kc3x8dGhpcy5wYW5JbnNpZGVCb3VuZHModGhpcy5vcHRpb25zLm1heEJvdW5kcyl9LF9jaGVja0lmTG9hZGVkOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZCl0aHJvdyBuZXcgRXJyb3IoXCJTZXQgbWFwIGNlbnRlciBhbmQgem9vbSBmaXJzdC5cIil9LF9pbml0RXZlbnRzOmZ1bmN0aW9uKHQpe3RoaXMuX3RhcmdldHM9e307dmFyIGU9dD9rOlM7ZSgodGhpcy5fdGFyZ2V0c1toKHRoaXMuX2NvbnRhaW5lcildPXRoaXMpLl9jb250YWluZXIsXCJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2Vtb3ZlIGNvbnRleHRtZW51IGtleXByZXNzIGtleWRvd24ga2V5dXBcIix0aGlzLl9oYW5kbGVET01FdmVudCx0aGlzKSx0aGlzLm9wdGlvbnMudHJhY2tSZXNpemUmJmUod2luZG93LFwicmVzaXplXCIsdGhpcy5fb25SZXNpemUsdGhpcyksYi5hbnkzZCYmdGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJih0P3RoaXMub2ZmOnRoaXMub24pLmNhbGwodGhpcyxcIm1vdmVlbmRcIix0aGlzLl9vbk1vdmVFbmQpfSxfb25SZXNpemU6ZnVuY3Rpb24oKXtyKHRoaXMuX3Jlc2l6ZVJlcXVlc3QpLHRoaXMuX3Jlc2l6ZVJlcXVlc3Q9eChmdW5jdGlvbigpe3RoaXMuaW52YWxpZGF0ZVNpemUoe2RlYm91bmNlTW92ZWVuZDohMH0pfSx0aGlzKX0sX29uU2Nyb2xsOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyLnNjcm9sbFRvcD0wLHRoaXMuX2NvbnRhaW5lci5zY3JvbGxMZWZ0PTB9LF9vbk1vdmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRNYXBQYW5lUG9zKCk7TWF0aC5tYXgoTWF0aC5hYnModC54KSxNYXRoLmFicyh0LnkpKT49dGhpcy5vcHRpb25zLnRyYW5zZm9ybTNETGltaXQmJnRoaXMuX3Jlc2V0Vmlldyh0aGlzLmdldENlbnRlcigpLHRoaXMuZ2V0Wm9vbSgpKX0sX2ZpbmRFdmVudFRhcmdldHM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGksbj1bXSxvPVwibW91c2VvdXRcIj09PWV8fFwibW91c2VvdmVyXCI9PT1lLHM9dC50YXJnZXR8fHQuc3JjRWxlbWVudCxyPSExO3M7KXtpZigoaT10aGlzLl90YXJnZXRzW2gocyldKSYmKFwiY2xpY2tcIj09PWV8fFwicHJlY2xpY2tcIj09PWUpJiZ0aGlzLl9kcmFnZ2FibGVNb3ZlZChpKSl7cj0hMDticmVha31pZihpJiZpLmxpc3RlbnMoZSwhMCkpe2lmKG8mJiFXZShzLHQpKWJyZWFrO2lmKG4ucHVzaChpKSxvKWJyZWFrfWlmKHM9PT10aGlzLl9jb250YWluZXIpYnJlYWs7cz1zLnBhcmVudE5vZGV9cmV0dXJuIG49bi5sZW5ndGh8fHJ8fG98fCF0aGlzLmxpc3RlbnMoZSwhMCk/bjpbdGhpc119LF9pc0NsaWNrRGlzYWJsZWQ6ZnVuY3Rpb24odCl7Zm9yKDt0JiZ0IT09dGhpcy5fY29udGFpbmVyOyl7aWYodC5fbGVhZmxldF9kaXNhYmxlX2NsaWNrKXJldHVybiEwO3Q9dC5wYXJlbnROb2RlfX0sX2hhbmRsZURPTUV2ZW50OmZ1bmN0aW9uKHQpe3ZhciBlLGk9dC50YXJnZXR8fHQuc3JjRWxlbWVudDshdGhpcy5fbG9hZGVkfHxpLl9sZWFmbGV0X2Rpc2FibGVfZXZlbnRzfHxcImNsaWNrXCI9PT10LnR5cGUmJnRoaXMuX2lzQ2xpY2tEaXNhYmxlZChpKXx8KFwibW91c2Vkb3duXCI9PT0oZT10LnR5cGUpJiZNZShpKSx0aGlzLl9maXJlRE9NRXZlbnQodCxlKSl9LF9tb3VzZUV2ZW50czpbXCJjbGlja1wiLFwiZGJsY2xpY2tcIixcIm1vdXNlb3ZlclwiLFwibW91c2VvdXRcIixcImNvbnRleHRtZW51XCJdLF9maXJlRE9NRXZlbnQ6ZnVuY3Rpb24odCxlLGkpe1wiY2xpY2tcIj09PXQudHlwZSYmKChhPWwoe30sdCkpLnR5cGU9XCJwcmVjbGlja1wiLHRoaXMuX2ZpcmVET01FdmVudChhLGEudHlwZSxpKSk7dmFyIG49dGhpcy5fZmluZEV2ZW50VGFyZ2V0cyh0LGUpO2lmKGkpe2Zvcih2YXIgbz1bXSxzPTA7czxpLmxlbmd0aDtzKyspaVtzXS5saXN0ZW5zKGUsITApJiZvLnB1c2goaVtzXSk7bj1vLmNvbmNhdChuKX1pZihuLmxlbmd0aCl7XCJjb250ZXh0bWVudVwiPT09ZSYmTyh0KTt2YXIgcixhPW5bMF0saD17b3JpZ2luYWxFdmVudDp0fTtmb3IoXCJrZXlwcmVzc1wiIT09dC50eXBlJiZcImtleWRvd25cIiE9PXQudHlwZSYmXCJrZXl1cFwiIT09dC50eXBlJiYocj1hLmdldExhdExuZyYmKCFhLl9yYWRpdXN8fGEuX3JhZGl1czw9MTApLGguY29udGFpbmVyUG9pbnQ9cj90aGlzLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQoYS5nZXRMYXRMbmcoKSk6dGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCh0KSxoLmxheWVyUG9pbnQ9dGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChoLmNvbnRhaW5lclBvaW50KSxoLmxhdGxuZz1yP2EuZ2V0TGF0TG5nKCk6dGhpcy5sYXllclBvaW50VG9MYXRMbmcoaC5sYXllclBvaW50KSkscz0wO3M8bi5sZW5ndGg7cysrKWlmKG5bc10uZmlyZShlLGgsITApLGgub3JpZ2luYWxFdmVudC5fc3RvcHBlZHx8ITE9PT1uW3NdLm9wdGlvbnMuYnViYmxpbmdNb3VzZUV2ZW50cyYmLTEhPT1HKHRoaXMuX21vdXNlRXZlbnRzLGUpKXJldHVybn19LF9kcmFnZ2FibGVNb3ZlZDpmdW5jdGlvbih0KXtyZXR1cm4odD10LmRyYWdnaW5nJiZ0LmRyYWdnaW5nLmVuYWJsZWQoKT90OnRoaXMpLmRyYWdnaW5nJiZ0LmRyYWdnaW5nLm1vdmVkKCl8fHRoaXMuYm94Wm9vbSYmdGhpcy5ib3hab29tLm1vdmVkKCl9LF9jbGVhckhhbmRsZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT10aGlzLl9oYW5kbGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLl9oYW5kbGVyc1t0XS5kaXNhYmxlKCl9LHdoZW5SZWFkeTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9sb2FkZWQ/dC5jYWxsKGV8fHRoaXMse3RhcmdldDp0aGlzfSk6dGhpcy5vbihcImxvYWRcIix0LGUpLHRoaXN9LF9nZXRNYXBQYW5lUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMuX21hcFBhbmUpfHxuZXcgcCgwLDApfSxfbW92ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRNYXBQYW5lUG9zKCk7cmV0dXJuIHQmJiF0LmVxdWFscyhbMCwwXSl9LF9nZXRUb3BMZWZ0UG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4odCYmdm9pZCAwIT09ZT90aGlzLl9nZXROZXdQaXhlbE9yaWdpbih0LGUpOnRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSkuc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKX0sX2dldE5ld1BpeGVsT3JpZ2luOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO3JldHVybiB0aGlzLnByb2plY3QodCxlKS5fc3VidHJhY3QoaSkuX2FkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpLl9yb3VuZCgpfSxfbGF0TG5nVG9OZXdMYXllclBvaW50OmZ1bmN0aW9uKHQsZSxpKXtpPXRoaXMuX2dldE5ld1BpeGVsT3JpZ2luKGksZSk7cmV0dXJuIHRoaXMucHJvamVjdCh0LGUpLl9zdWJ0cmFjdChpKX0sX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHM6ZnVuY3Rpb24odCxlLGkpe2k9dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oaSxlKTtyZXR1cm4gXyhbdGhpcy5wcm9qZWN0KHQuZ2V0U291dGhXZXN0KCksZSkuX3N1YnRyYWN0KGkpLHRoaXMucHJvamVjdCh0LmdldE5vcnRoV2VzdCgpLGUpLl9zdWJ0cmFjdChpKSx0aGlzLnByb2plY3QodC5nZXRTb3V0aEVhc3QoKSxlKS5fc3VidHJhY3QoaSksdGhpcy5wcm9qZWN0KHQuZ2V0Tm9ydGhFYXN0KCksZSkuX3N1YnRyYWN0KGkpXSl9LF9nZXRDZW50ZXJMYXllclBvaW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKX0sX2dldENlbnRlck9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQodCkuc3VidHJhY3QodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKX0sX2xpbWl0Q2VudGVyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvO3JldHVybiFpfHwobj10aGlzLnByb2plY3QodCxlKSxvPXRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLG89bmV3IGYobi5zdWJ0cmFjdChvKSxuLmFkZChvKSksbz10aGlzLl9nZXRCb3VuZHNPZmZzZXQobyxpLGUpLE1hdGguYWJzKG8ueCk8PTEmJk1hdGguYWJzKG8ueSk8PTEpP3Q6dGhpcy51bnByb2plY3Qobi5hZGQobyksZSl9LF9saW1pdE9mZnNldDpmdW5jdGlvbih0LGUpe3ZhciBpO3JldHVybiBlPyhpPW5ldyBmKChpPXRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSkubWluLmFkZCh0KSxpLm1heC5hZGQodCkpLHQuYWRkKHRoaXMuX2dldEJvdW5kc09mZnNldChpLGUpKSk6dH0sX2dldEJvdW5kc09mZnNldDpmdW5jdGlvbih0LGUsaSl7ZT1fKHRoaXMucHJvamVjdChlLmdldE5vcnRoRWFzdCgpLGkpLHRoaXMucHJvamVjdChlLmdldFNvdXRoV2VzdCgpLGkpKSxpPWUubWluLnN1YnRyYWN0KHQubWluKSxlPWUubWF4LnN1YnRyYWN0KHQubWF4KTtyZXR1cm4gbmV3IHAodGhpcy5fcmVib3VuZChpLngsLWUueCksdGhpcy5fcmVib3VuZChpLnksLWUueSkpfSxfcmVib3VuZDpmdW5jdGlvbih0LGUpe3JldHVybiAwPHQrZT9NYXRoLnJvdW5kKHQtZSkvMjpNYXRoLm1heCgwLE1hdGguY2VpbCh0KSktTWF0aC5tYXgoMCxNYXRoLmZsb29yKGUpKX0sX2xpbWl0Wm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldE1pblpvb20oKSxpPXRoaXMuZ2V0TWF4Wm9vbSgpLG49Yi5hbnkzZD90aGlzLm9wdGlvbnMuem9vbVNuYXA6MTtyZXR1cm4gbiYmKHQ9TWF0aC5yb3VuZCh0L24pKm4pLE1hdGgubWF4KGUsTWF0aC5taW4oaSx0KSl9LF9vblBhblRyYW5zaXRpb25TdGVwOmZ1bmN0aW9uKCl7dGhpcy5maXJlKFwibW92ZVwiKX0sX29uUGFuVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3oodGhpcy5fbWFwUGFuZSxcImxlYWZsZXQtcGFuLWFuaW1cIiksdGhpcy5maXJlKFwibW92ZWVuZFwiKX0sX3RyeUFuaW1hdGVkUGFuOmZ1bmN0aW9uKHQsZSl7dD10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX3RydW5jKCk7cmV0dXJuISghMCE9PShlJiZlLmFuaW1hdGUpJiYhdGhpcy5nZXRTaXplKCkuY29udGFpbnModCkpJiYodGhpcy5wYW5CeSh0LGUpLCEwKX0sX2NyZWF0ZUFuaW1Qcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Byb3h5PVAoXCJkaXZcIixcImxlYWZsZXQtcHJveHkgbGVhZmxldC16b29tLWFuaW1hdGVkXCIpO3RoaXMuX3BhbmVzLm1hcFBhbmUuYXBwZW5kQ2hpbGQodCksdGhpcy5vbihcInpvb21hbmltXCIsZnVuY3Rpb24odCl7dmFyIGU9dWUsaT10aGlzLl9wcm94eS5zdHlsZVtlXTtiZSh0aGlzLl9wcm94eSx0aGlzLnByb2plY3QodC5jZW50ZXIsdC56b29tKSx0aGlzLmdldFpvb21TY2FsZSh0Lnpvb20sMSkpLGk9PT10aGlzLl9wcm94eS5zdHlsZVtlXSYmdGhpcy5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSx0aGlzKSx0aGlzLm9uKFwibG9hZCBtb3ZlZW5kXCIsdGhpcy5fYW5pbU1vdmVFbmQsdGhpcyksdGhpcy5fb24oXCJ1bmxvYWRcIix0aGlzLl9kZXN0cm95QW5pbVByb3h5LHRoaXMpfSxfZGVzdHJveUFuaW1Qcm94eTpmdW5jdGlvbigpe1QodGhpcy5fcHJveHkpLHRoaXMub2ZmKFwibG9hZCBtb3ZlZW5kXCIsdGhpcy5fYW5pbU1vdmVFbmQsdGhpcyksZGVsZXRlIHRoaXMuX3Byb3h5fSxfYW5pbU1vdmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldENlbnRlcigpLGU9dGhpcy5nZXRab29tKCk7YmUodGhpcy5fcHJveHksdGhpcy5wcm9qZWN0KHQsZSksdGhpcy5nZXRab29tU2NhbGUoZSwxKSl9LF9jYXRjaFRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24odCl7dGhpcy5fYW5pbWF0aW5nWm9vbSYmMDw9dC5wcm9wZXJ0eU5hbWUuaW5kZXhPZihcInRyYW5zZm9ybVwiKSYmdGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpfSxfbm90aGluZ1RvQW5pbWF0ZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLl9jb250YWluZXIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImxlYWZsZXQtem9vbS1hbmltYXRlZFwiKS5sZW5ndGh9LF90cnlBbmltYXRlZFpvb206ZnVuY3Rpb24odCxlLGkpe2lmKCF0aGlzLl9hbmltYXRpbmdab29tKXtpZihpPWl8fHt9LCF0aGlzLl96b29tQW5pbWF0ZWR8fCExPT09aS5hbmltYXRlfHx0aGlzLl9ub3RoaW5nVG9BbmltYXRlKCl8fE1hdGguYWJzKGUtdGhpcy5fem9vbSk+dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb25UaHJlc2hvbGQpcmV0dXJuITE7dmFyIG49dGhpcy5nZXRab29tU2NhbGUoZSksbj10aGlzLl9nZXRDZW50ZXJPZmZzZXQodCkuX2RpdmlkZUJ5KDEtMS9uKTtpZighMCE9PWkuYW5pbWF0ZSYmIXRoaXMuZ2V0U2l6ZSgpLmNvbnRhaW5zKG4pKXJldHVybiExO3goZnVuY3Rpb24oKXt0aGlzLl9tb3ZlU3RhcnQoITAsaS5ub01vdmVTdGFydHx8ITEpLl9hbmltYXRlWm9vbSh0LGUsITApfSx0aGlzKX1yZXR1cm4hMH0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQsZSxpLG4pe3RoaXMuX21hcFBhbmUmJihpJiYodGhpcy5fYW5pbWF0aW5nWm9vbT0hMCx0aGlzLl9hbmltYXRlVG9DZW50ZXI9dCx0aGlzLl9hbmltYXRlVG9ab29tPWUsTSh0aGlzLl9tYXBQYW5lLFwibGVhZmxldC16b29tLWFuaW1cIikpLHRoaXMuZmlyZShcInpvb21hbmltXCIse2NlbnRlcjp0LHpvb206ZSxub1VwZGF0ZTpufSksdGhpcy5fdGVtcEZpcmVab29tRXZlbnR8fCh0aGlzLl90ZW1wRmlyZVpvb21FdmVudD10aGlzLl96b29tIT09dGhpcy5fYW5pbWF0ZVRvWm9vbSksdGhpcy5fbW92ZSh0aGlzLl9hbmltYXRlVG9DZW50ZXIsdGhpcy5fYW5pbWF0ZVRvWm9vbSx2b2lkIDAsITApLHNldFRpbWVvdXQoYSh0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kLHRoaXMpLDI1MCkpfSxfb25ab29tVHJhbnNpdGlvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2FuaW1hdGluZ1pvb20mJih0aGlzLl9tYXBQYW5lJiZ6KHRoaXMuX21hcFBhbmUsXCJsZWFmbGV0LXpvb20tYW5pbVwiKSx0aGlzLl9hbmltYXRpbmdab29tPSExLHRoaXMuX21vdmUodGhpcy5fYW5pbWF0ZVRvQ2VudGVyLHRoaXMuX2FuaW1hdGVUb1pvb20sdm9pZCAwLCEwKSx0aGlzLl90ZW1wRmlyZVpvb21FdmVudCYmdGhpcy5maXJlKFwiem9vbVwiKSxkZWxldGUgdGhpcy5fdGVtcEZpcmVab29tRXZlbnQsdGhpcy5maXJlKFwibW92ZVwiKSx0aGlzLl9tb3ZlRW5kKCEwKSl9fSk7ZnVuY3Rpb24gVWUodCl7cmV0dXJuIG5ldyBCKHQpfXZhciBCPWV0LmV4dGVuZCh7b3B0aW9uczp7cG9zaXRpb246XCJ0b3ByaWdodFwifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sZ2V0UG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBvc2l0aW9ufSxzZXRQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXA7cmV0dXJuIGUmJmUucmVtb3ZlQ29udHJvbCh0aGlzKSx0aGlzLm9wdGlvbnMucG9zaXRpb249dCxlJiZlLmFkZENvbnRyb2wodGhpcyksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7dGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dDt2YXIgZT10aGlzLl9jb250YWluZXI9dGhpcy5vbkFkZCh0KSxpPXRoaXMuZ2V0UG9zaXRpb24oKSx0PXQuX2NvbnRyb2xDb3JuZXJzW2ldO3JldHVybiBNKGUsXCJsZWFmbGV0LWNvbnRyb2xcIiksLTEhPT1pLmluZGV4T2YoXCJib3R0b21cIik/dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpOnQuYXBwZW5kQ2hpbGQoZSksdGhpcy5fbWFwLm9uKFwidW5sb2FkXCIsdGhpcy5yZW1vdmUsdGhpcyksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmKFQodGhpcy5fY29udGFpbmVyKSx0aGlzLm9uUmVtb3ZlJiZ0aGlzLm9uUmVtb3ZlKHRoaXMuX21hcCksdGhpcy5fbWFwLm9mZihcInVubG9hZFwiLHRoaXMucmVtb3ZlLHRoaXMpLHRoaXMuX21hcD1udWxsKSx0aGlzfSxfcmVmb2N1c09uTWFwOmZ1bmN0aW9uKHQpe3RoaXMuX21hcCYmdCYmMDx0LnNjcmVlblgmJjA8dC5zY3JlZW5ZJiZ0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCkuZm9jdXMoKX19KSxWZT0oQS5pbmNsdWRlKHthZGRDb250cm9sOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZFRvKHRoaXMpLHRoaXN9LHJlbW92ZUNvbnRyb2w6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVtb3ZlKCksdGhpc30sX2luaXRDb250cm9sUG9zOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5fY29udHJvbENvcm5lcnM9e30sbj1cImxlYWZsZXQtXCIsbz10aGlzLl9jb250cm9sQ29udGFpbmVyPVAoXCJkaXZcIixuK1wiY29udHJvbC1jb250YWluZXJcIix0aGlzLl9jb250YWluZXIpO2Z1bmN0aW9uIHQodCxlKXtpW3QrZV09UChcImRpdlwiLG4rdCtcIiBcIituK2Usbyl9dChcInRvcFwiLFwibGVmdFwiKSx0KFwidG9wXCIsXCJyaWdodFwiKSx0KFwiYm90dG9tXCIsXCJsZWZ0XCIpLHQoXCJib3R0b21cIixcInJpZ2h0XCIpfSxfY2xlYXJDb250cm9sUG9zOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2NvbnRyb2xDb3JuZXJzKVQodGhpcy5fY29udHJvbENvcm5lcnNbdF0pO1QodGhpcy5fY29udHJvbENvbnRhaW5lciksZGVsZXRlIHRoaXMuX2NvbnRyb2xDb3JuZXJzLGRlbGV0ZSB0aGlzLl9jb250cm9sQ29udGFpbmVyfX0pLEIuZXh0ZW5kKHtvcHRpb25zOntjb2xsYXBzZWQ6ITAscG9zaXRpb246XCJ0b3ByaWdodFwiLGF1dG9aSW5kZXg6ITAsaGlkZVNpbmdsZUJhc2U6ITEsc29ydExheWVyczohMSxzb3J0RnVuY3Rpb246ZnVuY3Rpb24odCxlLGksbil7cmV0dXJuIGk8bj8tMTpuPGk/MTowfX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBuIGluIGModGhpcyxpKSx0aGlzLl9sYXllckNvbnRyb2xJbnB1dHM9W10sdGhpcy5fbGF5ZXJzPVtdLHRoaXMuX2xhc3RaSW5kZXg9MCx0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3ByZXZlbnRDbGljaz0hMSx0KXRoaXMuX2FkZExheWVyKHRbbl0sbik7Zm9yKG4gaW4gZSl0aGlzLl9hZGRMYXllcihlW25dLG4sITApfSxvbkFkZDpmdW5jdGlvbih0KXt0aGlzLl9pbml0TGF5b3V0KCksdGhpcy5fdXBkYXRlKCksKHRoaXMuX21hcD10KS5vbihcInpvb21lbmRcIix0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLHRoaXMpO2Zvcih2YXIgZT0wO2U8dGhpcy5fbGF5ZXJzLmxlbmd0aDtlKyspdGhpcy5fbGF5ZXJzW2VdLmxheWVyLm9uKFwiYWRkIHJlbW92ZVwiLHRoaXMuX29uTGF5ZXJDaGFuZ2UsdGhpcyk7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sYWRkVG86ZnVuY3Rpb24odCl7cmV0dXJuIEIucHJvdG90eXBlLmFkZFRvLmNhbGwodGhpcyx0KSx0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoXCJ6b29tZW5kXCIsdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycyx0aGlzKTtmb3IodmFyIHQ9MDt0PHRoaXMuX2xheWVycy5sZW5ndGg7dCsrKXRoaXMuX2xheWVyc1t0XS5sYXllci5vZmYoXCJhZGQgcmVtb3ZlXCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKX0sYWRkQmFzZUxheWVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2FkZExheWVyKHQsZSksdGhpcy5fbWFwP3RoaXMuX3VwZGF0ZSgpOnRoaXN9LGFkZE92ZXJsYXk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fYWRkTGF5ZXIodCxlLCEwKSx0aGlzLl9tYXA/dGhpcy5fdXBkYXRlKCk6dGhpc30scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7dC5vZmYoXCJhZGQgcmVtb3ZlXCIsdGhpcy5fb25MYXllckNoYW5nZSx0aGlzKTt0PXRoaXMuX2dldExheWVyKGgodCkpO3JldHVybiB0JiZ0aGlzLl9sYXllcnMuc3BsaWNlKHRoaXMuX2xheWVycy5pbmRleE9mKHQpLDEpLHRoaXMuX21hcD90aGlzLl91cGRhdGUoKTp0aGlzfSxleHBhbmQ6ZnVuY3Rpb24oKXtNKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWRcIiksdGhpcy5fc2VjdGlvbi5zdHlsZS5oZWlnaHQ9bnVsbDt2YXIgdD10aGlzLl9tYXAuZ2V0U2l6ZSgpLnktKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRUb3ArNTApO3JldHVybiB0PHRoaXMuX3NlY3Rpb24uY2xpZW50SGVpZ2h0PyhNKHRoaXMuX3NlY3Rpb24sXCJsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhclwiKSx0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodD10K1wicHhcIik6eih0aGlzLl9zZWN0aW9uLFwibGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXJcIiksdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycygpLHRoaXN9LGNvbGxhcHNlOmZ1bmN0aW9uKCl7cmV0dXJuIHoodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZFwiKSx0aGlzfSxfaW5pdExheW91dDpmdW5jdGlvbigpe3ZhciB0PVwibGVhZmxldC1jb250cm9sLWxheWVyc1wiLGU9dGhpcy5fY29udGFpbmVyPVAoXCJkaXZcIix0KSxpPXRoaXMub3B0aW9ucy5jb2xsYXBzZWQsbj0oZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhhc3BvcHVwXCIsITApLEllKGUpLEJlKGUpLHRoaXMuX3NlY3Rpb249UChcInNlY3Rpb25cIix0K1wiLWxpc3RcIikpLG89KGkmJih0aGlzLl9tYXAub24oXCJjbGlja1wiLHRoaXMuY29sbGFwc2UsdGhpcyksUyhlLHttb3VzZWVudGVyOnRoaXMuX2V4cGFuZFNhZmVseSxtb3VzZWxlYXZlOnRoaXMuY29sbGFwc2V9LHRoaXMpKSx0aGlzLl9sYXllcnNMaW5rPVAoXCJhXCIsdCtcIi10b2dnbGVcIixlKSk7by5ocmVmPVwiI1wiLG8udGl0bGU9XCJMYXllcnNcIixvLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImJ1dHRvblwiKSxTKG8se2tleWRvd246ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnRoaXMuX2V4cGFuZFNhZmVseSgpfSxjbGljazpmdW5jdGlvbih0KXtPKHQpLHRoaXMuX2V4cGFuZFNhZmVseSgpfX0sdGhpcyksaXx8dGhpcy5leHBhbmQoKSx0aGlzLl9iYXNlTGF5ZXJzTGlzdD1QKFwiZGl2XCIsdCtcIi1iYXNlXCIsbiksdGhpcy5fc2VwYXJhdG9yPVAoXCJkaXZcIix0K1wiLXNlcGFyYXRvclwiLG4pLHRoaXMuX292ZXJsYXlzTGlzdD1QKFwiZGl2XCIsdCtcIi1vdmVybGF5c1wiLG4pLGUuYXBwZW5kQ2hpbGQobil9LF9nZXRMYXllcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuX2xheWVycy5sZW5ndGg7ZSsrKWlmKHRoaXMuX2xheWVyc1tlXSYmaCh0aGlzLl9sYXllcnNbZV0ubGF5ZXIpPT09dClyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdfSxfYWRkTGF5ZXI6ZnVuY3Rpb24odCxlLGkpe3RoaXMuX21hcCYmdC5vbihcImFkZCByZW1vdmVcIix0aGlzLl9vbkxheWVyQ2hhbmdlLHRoaXMpLHRoaXMuX2xheWVycy5wdXNoKHtsYXllcjp0LG5hbWU6ZSxvdmVybGF5Oml9KSx0aGlzLm9wdGlvbnMuc29ydExheWVycyYmdGhpcy5fbGF5ZXJzLnNvcnQoYShmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9wdGlvbnMuc29ydEZ1bmN0aW9uKHQubGF5ZXIsZS5sYXllcix0Lm5hbWUsZS5uYW1lKX0sdGhpcykpLHRoaXMub3B0aW9ucy5hdXRvWkluZGV4JiZ0LnNldFpJbmRleCYmKHRoaXMuX2xhc3RaSW5kZXgrKyx0LnNldFpJbmRleCh0aGlzLl9sYXN0WkluZGV4KSksdGhpcy5fZXhwYW5kSWZOb3RDb2xsYXBzZWQoKX0sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX2NvbnRhaW5lcil7bWUodGhpcy5fYmFzZUxheWVyc0xpc3QpLG1lKHRoaXMuX292ZXJsYXlzTGlzdCksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzPVtdO2Zvcih2YXIgdCxlLGksbj0wLG89MDtvPHRoaXMuX2xheWVycy5sZW5ndGg7bysrKWk9dGhpcy5fbGF5ZXJzW29dLHRoaXMuX2FkZEl0ZW0oaSksZT1lfHxpLm92ZXJsYXksdD10fHwhaS5vdmVybGF5LG4rPWkub3ZlcmxheT8wOjE7dGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlJiYodGhpcy5fYmFzZUxheWVyc0xpc3Quc3R5bGUuZGlzcGxheT0odD10JiYxPG4pP1wiXCI6XCJub25lXCIpLHRoaXMuX3NlcGFyYXRvci5zdHlsZS5kaXNwbGF5PWUmJnQ/XCJcIjpcIm5vbmVcIn1yZXR1cm4gdGhpc30sX29uTGF5ZXJDaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5faGFuZGxpbmdDbGlja3x8dGhpcy5fdXBkYXRlKCk7dmFyIGU9dGhpcy5fZ2V0TGF5ZXIoaCh0LnRhcmdldCkpLHQ9ZS5vdmVybGF5P1wiYWRkXCI9PT10LnR5cGU/XCJvdmVybGF5YWRkXCI6XCJvdmVybGF5cmVtb3ZlXCI6XCJhZGRcIj09PXQudHlwZT9cImJhc2VsYXllcmNoYW5nZVwiOm51bGw7dCYmdGhpcy5fbWFwLmZpcmUodCxlKX0sX2NyZWF0ZVJhZGlvRWxlbWVudDpmdW5jdGlvbih0LGUpe3Q9JzxpbnB1dCB0eXBlPVwicmFkaW9cIiBjbGFzcz1cImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3JcIiBuYW1lPVwiJyt0KydcIicrKGU/JyBjaGVja2VkPVwiY2hlY2tlZFwiJzpcIlwiKStcIi8+XCIsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBlLmlubmVySFRNTD10LGUuZmlyc3RDaGlsZH0sX2FkZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGUsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiksbj10aGlzLl9tYXAuaGFzTGF5ZXIodC5sYXllciksbj0odC5vdmVybGF5PygoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIikpLnR5cGU9XCJjaGVja2JveFwiLGUuY2xhc3NOYW1lPVwibGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvclwiLGUuZGVmYXVsdENoZWNrZWQ9bik6ZT10aGlzLl9jcmVhdGVSYWRpb0VsZW1lbnQoXCJsZWFmbGV0LWJhc2UtbGF5ZXJzX1wiK2godGhpcyksbiksdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLnB1c2goZSksZS5sYXllcklkPWgodC5sYXllciksUyhlLFwiY2xpY2tcIix0aGlzLl9vbklucHV0Q2xpY2ssdGhpcyksZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIikpLG89KG4uaW5uZXJIVE1MPVwiIFwiK3QubmFtZSxkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSk7cmV0dXJuIGkuYXBwZW5kQ2hpbGQobyksby5hcHBlbmRDaGlsZChlKSxvLmFwcGVuZENoaWxkKG4pLCh0Lm92ZXJsYXk/dGhpcy5fb3ZlcmxheXNMaXN0OnRoaXMuX2Jhc2VMYXllcnNMaXN0KS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCksaX0sX29uSW5wdXRDbGljazpmdW5jdGlvbigpe2lmKCF0aGlzLl9wcmV2ZW50Q2xpY2spe3ZhciB0LGUsaT10aGlzLl9sYXllckNvbnRyb2xJbnB1dHMsbj1bXSxvPVtdO3RoaXMuX2hhbmRsaW5nQ2xpY2s9ITA7Zm9yKHZhciBzPWkubGVuZ3RoLTE7MDw9cztzLS0pdD1pW3NdLGU9dGhpcy5fZ2V0TGF5ZXIodC5sYXllcklkKS5sYXllcix0LmNoZWNrZWQ/bi5wdXNoKGUpOnQuY2hlY2tlZHx8by5wdXNoKGUpO2ZvcihzPTA7czxvLmxlbmd0aDtzKyspdGhpcy5fbWFwLmhhc0xheWVyKG9bc10pJiZ0aGlzLl9tYXAucmVtb3ZlTGF5ZXIob1tzXSk7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl0aGlzLl9tYXAuaGFzTGF5ZXIobltzXSl8fHRoaXMuX21hcC5hZGRMYXllcihuW3NdKTt0aGlzLl9oYW5kbGluZ0NsaWNrPSExLHRoaXMuX3JlZm9jdXNPbk1hcCgpfX0sX2NoZWNrRGlzYWJsZWRMYXllcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxpPXRoaXMuX2xheWVyQ29udHJvbElucHV0cyxuPXRoaXMuX21hcC5nZXRab29tKCksbz1pLmxlbmd0aC0xOzA8PW87by0tKXQ9aVtvXSxlPXRoaXMuX2dldExheWVyKHQubGF5ZXJJZCkubGF5ZXIsdC5kaXNhYmxlZD12b2lkIDAhPT1lLm9wdGlvbnMubWluWm9vbSYmbjxlLm9wdGlvbnMubWluWm9vbXx8dm9pZCAwIT09ZS5vcHRpb25zLm1heFpvb20mJm4+ZS5vcHRpb25zLm1heFpvb219LF9leHBhbmRJZk5vdENvbGxhcHNlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJiF0aGlzLm9wdGlvbnMuY29sbGFwc2VkJiZ0aGlzLmV4cGFuZCgpLHRoaXN9LF9leHBhbmRTYWZlbHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZWN0aW9uLGU9KHRoaXMuX3ByZXZlbnRDbGljaz0hMCxTKHQsXCJjbGlja1wiLE8pLHRoaXMuZXhwYW5kKCksdGhpcyk7c2V0VGltZW91dChmdW5jdGlvbigpe2sodCxcImNsaWNrXCIsTyksZS5fcHJldmVudENsaWNrPSExfSl9fSkpLHFlPUIuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjpcInRvcGxlZnRcIix6b29tSW5UZXh0Oic8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4rPC9zcGFuPicsem9vbUluVGl0bGU6XCJab29tIGluXCIsem9vbU91dFRleHQ6JzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiYjeDIyMTI7PC9zcGFuPicsem9vbU91dFRpdGxlOlwiWm9vbSBvdXRcIn0sb25BZGQ6ZnVuY3Rpb24odCl7dmFyIGU9XCJsZWFmbGV0LWNvbnRyb2wtem9vbVwiLGk9UChcImRpdlwiLGUrXCIgbGVhZmxldC1iYXJcIiksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX3pvb21JbkJ1dHRvbj10aGlzLl9jcmVhdGVCdXR0b24obi56b29tSW5UZXh0LG4uem9vbUluVGl0bGUsZStcIi1pblwiLGksdGhpcy5fem9vbUluKSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbihuLnpvb21PdXRUZXh0LG4uem9vbU91dFRpdGxlLGUrXCItb3V0XCIsaSx0aGlzLl96b29tT3V0KSx0aGlzLl91cGRhdGVEaXNhYmxlZCgpLHQub24oXCJ6b29tZW5kIHpvb21sZXZlbHNjaGFuZ2VcIix0aGlzLl91cGRhdGVEaXNhYmxlZCx0aGlzKSxpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0Lm9mZihcInpvb21lbmQgem9vbWxldmVsc2NoYW5nZVwiLHRoaXMuX3VwZGF0ZURpc2FibGVkLHRoaXMpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkPSEwLHRoaXMuX3VwZGF0ZURpc2FibGVkKCksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuX3VwZGF0ZURpc2FibGVkKCksdGhpc30sX3pvb21JbjpmdW5jdGlvbih0KXshdGhpcy5fZGlzYWJsZWQmJnRoaXMuX21hcC5fem9vbTx0aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpJiZ0aGlzLl9tYXAuem9vbUluKHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSoodC5zaGlmdEtleT8zOjEpKX0sX3pvb21PdXQ6ZnVuY3Rpb24odCl7IXRoaXMuX2Rpc2FibGVkJiZ0aGlzLl9tYXAuX3pvb20+dGhpcy5fbWFwLmdldE1pblpvb20oKSYmdGhpcy5fbWFwLnpvb21PdXQodGhpcy5fbWFwLm9wdGlvbnMuem9vbURlbHRhKih0LnNoaWZ0S2V5PzM6MSkpfSxfY3JlYXRlQnV0dG9uOmZ1bmN0aW9uKHQsZSxpLG4sbyl7aT1QKFwiYVwiLGksbik7cmV0dXJuIGkuaW5uZXJIVE1MPXQsaS5ocmVmPVwiI1wiLGkudGl0bGU9ZSxpLnNldEF0dHJpYnV0ZShcInJvbGVcIixcImJ1dHRvblwiKSxpLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIixlKSxJZShpKSxTKGksXCJjbGlja1wiLFJlKSxTKGksXCJjbGlja1wiLG8sdGhpcyksUyhpLFwiY2xpY2tcIix0aGlzLl9yZWZvY3VzT25NYXAsdGhpcyksaX0sX3VwZGF0ZURpc2FibGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9XCJsZWFmbGV0LWRpc2FibGVkXCI7eih0aGlzLl96b29tSW5CdXR0b24sZSkseih0aGlzLl96b29tT3V0QnV0dG9uLGUpLHRoaXMuX3pvb21JbkJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJhcmlhLWRpc2FibGVkXCIsXCJmYWxzZVwiKSx0aGlzLl96b29tT3V0QnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtZGlzYWJsZWRcIixcImZhbHNlXCIpLCF0aGlzLl9kaXNhYmxlZCYmdC5fem9vbSE9PXQuZ2V0TWluWm9vbSgpfHwoTSh0aGlzLl96b29tT3V0QnV0dG9uLGUpLHRoaXMuX3pvb21PdXRCdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLFwidHJ1ZVwiKSksIXRoaXMuX2Rpc2FibGVkJiZ0Ll96b29tIT09dC5nZXRNYXhab29tKCl8fChNKHRoaXMuX3pvb21JbkJ1dHRvbixlKSx0aGlzLl96b29tSW5CdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1kaXNhYmxlZFwiLFwidHJ1ZVwiKSl9fSksR2U9KEEubWVyZ2VPcHRpb25zKHt6b29tQ29udHJvbDohMH0pLEEuYWRkSW5pdEhvb2soZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuem9vbUNvbnRyb2wmJih0aGlzLnpvb21Db250cm9sPW5ldyBxZSx0aGlzLmFkZENvbnRyb2wodGhpcy56b29tQ29udHJvbCkpfSksQi5leHRlbmQoe29wdGlvbnM6e3Bvc2l0aW9uOlwiYm90dG9tbGVmdFwiLG1heFdpZHRoOjEwMCxtZXRyaWM6ITAsaW1wZXJpYWw6ITB9LG9uQWRkOmZ1bmN0aW9uKHQpe3ZhciBlPVwibGVhZmxldC1jb250cm9sLXNjYWxlXCIsaT1QKFwiZGl2XCIsZSksbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2FkZFNjYWxlcyhuLGUrXCItbGluZVwiLGkpLHQub24obi51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyksdC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLHRoaXMpLGl9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZT9cIm1vdmVlbmRcIjpcIm1vdmVcIix0aGlzLl91cGRhdGUsdGhpcyl9LF9hZGRTY2FsZXM6ZnVuY3Rpb24odCxlLGkpe3QubWV0cmljJiYodGhpcy5fbVNjYWxlPVAoXCJkaXZcIixlLGkpKSx0LmltcGVyaWFsJiYodGhpcy5faVNjYWxlPVAoXCJkaXZcIixlLGkpKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxlPXQuZ2V0U2l6ZSgpLnkvMix0PXQuZGlzdGFuY2UodC5jb250YWluZXJQb2ludFRvTGF0TG5nKFswLGVdKSx0LmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCxlXSkpO3RoaXMuX3VwZGF0ZVNjYWxlcyh0KX0sX3VwZGF0ZVNjYWxlczpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMubWV0cmljJiZ0JiZ0aGlzLl91cGRhdGVNZXRyaWModCksdGhpcy5vcHRpb25zLmltcGVyaWFsJiZ0JiZ0aGlzLl91cGRhdGVJbXBlcmlhbCh0KX0sX3VwZGF0ZU1ldHJpYzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRSb3VuZE51bSh0KTt0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9tU2NhbGUsZTwxZTM/ZStcIiBtXCI6ZS8xZTMrXCIga21cIixlL3QpfSxfdXBkYXRlSW1wZXJpYWw6ZnVuY3Rpb24odCl7dmFyIGUsaSx0PTMuMjgwODM5OSp0OzUyODA8dD8oaT10aGlzLl9nZXRSb3VuZE51bShlPXQvNTI4MCksdGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLGkrXCIgbWlcIixpL2UpKTooaT10aGlzLl9nZXRSb3VuZE51bSh0KSx0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9pU2NhbGUsaStcIiBmdFwiLGkvdCkpfSxfdXBkYXRlU2NhbGU6ZnVuY3Rpb24odCxlLGkpe3Quc3R5bGUud2lkdGg9TWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGgqaSkrXCJweFwiLHQuaW5uZXJIVE1MPWV9LF9nZXRSb3VuZE51bTpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygxMCwoTWF0aC5mbG9vcih0KStcIlwiKS5sZW5ndGgtMSksdD10L2U7cmV0dXJuIGUqKHQ9MTA8PXQ/MTA6NTw9dD81OjM8PXQ/MzoyPD10PzI6MSl9fSkpLEtlPUIuZXh0ZW5kKHtvcHRpb25zOntwb3NpdGlvbjpcImJvdHRvbXJpZ2h0XCIscHJlZml4Oic8YSBocmVmPVwiaHR0cHM6Ly9sZWFmbGV0anMuY29tXCIgdGl0bGU9XCJBIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwc1wiPicrKGIuaW5saW5lU3ZnPyc8c3ZnIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTIgOFwiIGNsYXNzPVwibGVhZmxldC1hdHRyaWJ1dGlvbi1mbGFnXCI+PHBhdGggZmlsbD1cIiM0QzdCRTFcIiBkPVwiTTAgMGgxMnY0SDB6XCIvPjxwYXRoIGZpbGw9XCIjRkZENTAwXCIgZD1cIk0wIDRoMTJ2M0gwelwiLz48cGF0aCBmaWxsPVwiI0UwQkMwMFwiIGQ9XCJNMCA3aDEydjFIMHpcIi8+PC9zdmc+ICc6XCJcIikrXCJMZWFmbGV0PC9hPlwifSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KSx0aGlzLl9hdHRyaWJ1dGlvbnM9e319LG9uQWRkOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbih0LmF0dHJpYnV0aW9uQ29udHJvbD10aGlzKS5fY29udGFpbmVyPVAoXCJkaXZcIixcImxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvblwiKSxJZSh0aGlzLl9jb250YWluZXIpLHQuX2xheWVycyl0Ll9sYXllcnNbZV0uZ2V0QXR0cmlidXRpb24mJnRoaXMuYWRkQXR0cmlidXRpb24odC5fbGF5ZXJzW2VdLmdldEF0dHJpYnV0aW9uKCkpO3JldHVybiB0aGlzLl91cGRhdGUoKSx0Lm9uKFwibGF5ZXJhZGRcIix0aGlzLl9hZGRBdHRyaWJ1dGlvbix0aGlzKSx0aGlzLl9jb250YWluZXJ9LG9uUmVtb3ZlOmZ1bmN0aW9uKHQpe3Qub2ZmKFwibGF5ZXJhZGRcIix0aGlzLl9hZGRBdHRyaWJ1dGlvbix0aGlzKX0sX2FkZEF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3QubGF5ZXIuZ2V0QXR0cmlidXRpb24mJih0aGlzLmFkZEF0dHJpYnV0aW9uKHQubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSksdC5sYXllci5vbmNlKFwicmVtb3ZlXCIsZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0aW9uKHQubGF5ZXIuZ2V0QXR0cmlidXRpb24oKSl9LHRoaXMpKX0sc2V0UHJlZml4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucHJlZml4PXQsdGhpcy5fdXBkYXRlKCksdGhpc30sYWRkQXR0cmlidXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJih0aGlzLl9hdHRyaWJ1dGlvbnNbdF18fCh0aGlzLl9hdHRyaWJ1dGlvbnNbdF09MCksdGhpcy5fYXR0cmlidXRpb25zW3RdKyssdGhpcy5fdXBkYXRlKCkpLHRoaXN9LHJlbW92ZUF0dHJpYnV0aW9uOmZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0aGlzLl9hdHRyaWJ1dGlvbnNbdF0mJih0aGlzLl9hdHRyaWJ1dGlvbnNbdF0tLSx0aGlzLl91cGRhdGUoKSksdGhpc30sX3VwZGF0ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21hcCl7dmFyIHQsZT1bXTtmb3IodCBpbiB0aGlzLl9hdHRyaWJ1dGlvbnMpdGhpcy5fYXR0cmlidXRpb25zW3RdJiZlLnB1c2godCk7dmFyIGk9W107dGhpcy5vcHRpb25zLnByZWZpeCYmaS5wdXNoKHRoaXMub3B0aW9ucy5wcmVmaXgpLGUubGVuZ3RoJiZpLnB1c2goZS5qb2luKFwiLCBcIikpLHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUw9aS5qb2luKCcgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+fDwvc3Bhbj4gJyl9fX0pLG49KEEubWVyZ2VPcHRpb25zKHthdHRyaWJ1dGlvbkNvbnRyb2w6ITB9KSxBLmFkZEluaXRIb29rKGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbCYmKG5ldyBLZSkuYWRkVG8odGhpcyl9KSxCLkxheWVycz1WZSxCLlpvb209cWUsQi5TY2FsZT1HZSxCLkF0dHJpYnV0aW9uPUtlLFVlLmxheWVycz1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyBWZSh0LGUsaSl9LFVlLnpvb209ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxZSh0KX0sVWUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHZSh0KX0sVWUuYXR0cmlidXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLZSh0KX0sZXQuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10fSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZHx8KHRoaXMuX2VuYWJsZWQ9ITAsdGhpcy5hZGRIb29rcygpKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWQmJih0aGlzLl9lbmFibGVkPSExLHRoaXMucmVtb3ZlSG9va3MoKSksdGhpc30sZW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH19KSksZnQ9KG4uYWRkVG89ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hZGRIYW5kbGVyKGUsdGhpcyksdGhpc30se0V2ZW50czplfSksWWU9Yi50b3VjaD9cInRvdWNoc3RhcnQgbW91c2Vkb3duXCI6XCJtb3VzZWRvd25cIixYZT1pdC5leHRlbmQoe29wdGlvbnM6e2NsaWNrVG9sZXJhbmNlOjN9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlLGksbil7Yyh0aGlzLG4pLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9kcmFnU3RhcnRUYXJnZXQ9ZXx8dCx0aGlzLl9wcmV2ZW50T3V0bGluZT1pfSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkfHwoUyh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsWWUsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITApfSxkaXNhYmxlOmZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZCYmKFhlLl9kcmFnZ2luZz09PXRoaXMmJnRoaXMuZmluaXNoRHJhZyghMCksayh0aGlzLl9kcmFnU3RhcnRUYXJnZXQsWWUsdGhpcy5fb25Eb3duLHRoaXMpLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fbW92ZWQ9ITEpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe3ZhciBlLGk7dGhpcy5fZW5hYmxlZCYmKHRoaXMuX21vdmVkPSExLHZlKHRoaXMuX2VsZW1lbnQsXCJsZWFmbGV0LXpvb20tYW5pbVwiKXx8KHQudG91Y2hlcyYmMSE9PXQudG91Y2hlcy5sZW5ndGg/WGUuX2RyYWdnaW5nPT09dGhpcyYmdGhpcy5maW5pc2hEcmFnKCk6WGUuX2RyYWdnaW5nfHx0LnNoaWZ0S2V5fHwxIT09dC53aGljaCYmMSE9PXQuYnV0dG9uJiYhdC50b3VjaGVzfHwoKFhlLl9kcmFnZ2luZz10aGlzKS5fcHJldmVudE91dGxpbmUmJk1lKHRoaXMuX2VsZW1lbnQpLExlKCkscmUoKSx0aGlzLl9tb3Zpbmd8fCh0aGlzLmZpcmUoXCJkb3duXCIpLGk9dC50b3VjaGVzP3QudG91Y2hlc1swXTp0LGU9Q2UodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRQb2ludD1uZXcgcChpLmNsaWVudFgsaS5jbGllbnRZKSx0aGlzLl9zdGFydFBvcz1QZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9wYXJlbnRTY2FsZT1aZShlKSxpPVwibW91c2Vkb3duXCI9PT10LnR5cGUsUyhkb2N1bWVudCxpP1wibW91c2Vtb3ZlXCI6XCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUsdGhpcyksUyhkb2N1bWVudCxpP1wibW91c2V1cFwiOlwidG91Y2hlbmQgdG91Y2hjYW5jZWxcIix0aGlzLl9vblVwLHRoaXMpKSkpKX0sX29uTW92ZTpmdW5jdGlvbih0KXt2YXIgZTt0aGlzLl9lbmFibGVkJiYodC50b3VjaGVzJiYxPHQudG91Y2hlcy5sZW5ndGg/dGhpcy5fbW92ZWQ9ITA6IShlPW5ldyBwKChlPXQudG91Y2hlcyYmMT09PXQudG91Y2hlcy5sZW5ndGg/dC50b3VjaGVzWzBdOnQpLmNsaWVudFgsZS5jbGllbnRZKS5fc3VidHJhY3QodGhpcy5fc3RhcnRQb2ludCkpLngmJiFlLnl8fE1hdGguYWJzKGUueCkrTWF0aC5hYnMoZS55KTx0aGlzLm9wdGlvbnMuY2xpY2tUb2xlcmFuY2V8fChlLngvPXRoaXMuX3BhcmVudFNjYWxlLngsZS55Lz10aGlzLl9wYXJlbnRTY2FsZS55LE8odCksdGhpcy5fbW92ZWR8fCh0aGlzLmZpcmUoXCJkcmFnc3RhcnRcIiksdGhpcy5fbW92ZWQ9ITAsTShkb2N1bWVudC5ib2R5LFwibGVhZmxldC1kcmFnZ2luZ1wiKSx0aGlzLl9sYXN0VGFyZ2V0PXQudGFyZ2V0fHx0LnNyY0VsZW1lbnQsd2luZG93LlNWR0VsZW1lbnRJbnN0YW5jZSYmdGhpcy5fbGFzdFRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50SW5zdGFuY2UmJih0aGlzLl9sYXN0VGFyZ2V0PXRoaXMuX2xhc3RUYXJnZXQuY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQpLE0odGhpcy5fbGFzdFRhcmdldCxcImxlYWZsZXQtZHJhZy10YXJnZXRcIikpLHRoaXMuX25ld1Bvcz10aGlzLl9zdGFydFBvcy5hZGQoZSksdGhpcy5fbW92aW5nPSEwLHRoaXMuX2xhc3RFdmVudD10LHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCkpKX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9e29yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdEV2ZW50fTt0aGlzLmZpcmUoXCJwcmVkcmFnXCIsdCksWih0aGlzLl9lbGVtZW50LHRoaXMuX25ld1BvcyksdGhpcy5maXJlKFwiZHJhZ1wiLHQpfSxfb25VcDpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQmJnRoaXMuZmluaXNoRHJhZygpfSxmaW5pc2hEcmFnOmZ1bmN0aW9uKHQpe3ooZG9jdW1lbnQuYm9keSxcImxlYWZsZXQtZHJhZ2dpbmdcIiksdGhpcy5fbGFzdFRhcmdldCYmKHoodGhpcy5fbGFzdFRhcmdldCxcImxlYWZsZXQtZHJhZy10YXJnZXRcIiksdGhpcy5fbGFzdFRhcmdldD1udWxsKSxrKGRvY3VtZW50LFwibW91c2Vtb3ZlIHRvdWNobW92ZVwiLHRoaXMuX29uTW92ZSx0aGlzKSxrKGRvY3VtZW50LFwibW91c2V1cCB0b3VjaGVuZCB0b3VjaGNhbmNlbFwiLHRoaXMuX29uVXAsdGhpcyksVGUoKSxhZSgpO3ZhciBlPXRoaXMuX21vdmVkJiZ0aGlzLl9tb3Zpbmc7dGhpcy5fbW92aW5nPSExLFhlLl9kcmFnZ2luZz0hMSxlJiZ0aGlzLmZpcmUoXCJkcmFnZW5kXCIse25vSW5lcnRpYTp0LGRpc3RhbmNlOnRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKX0pfX0pO2Z1bmN0aW9uIEplKHQsZSxpKXtmb3IodmFyIG4sbyxzLHIsYSxoLGwsdT1bMSw0LDIsOF0sYz0wLGQ9dC5sZW5ndGg7YzxkO2MrKyl0W2NdLl9jb2RlPXNpKHRbY10sZSk7Zm9yKHM9MDtzPDQ7cysrKXtmb3IoaD11W3NdLG49W10sYz0wLG89KGQ9dC5sZW5ndGgpLTE7YzxkO289YysrKXI9dFtjXSxhPXRbb10sci5fY29kZSZoP2EuX2NvZGUmaHx8KChsPW9pKGEscixoLGUsaSkpLl9jb2RlPXNpKGwsZSksbi5wdXNoKGwpKTooYS5fY29kZSZoJiYoKGw9b2koYSxyLGgsZSxpKSkuX2NvZGU9c2kobCxlKSxuLnB1c2gobCkpLG4ucHVzaChyKSk7dD1ufXJldHVybiB0fWZ1bmN0aW9uICRlKHQsZSl7dmFyIGksbixvLHMscixhLGg7aWYoIXR8fDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJsYXRsbmdzIG5vdCBwYXNzZWRcIik7SSh0KXx8KGNvbnNvbGUud2FybihcImxhdGxuZ3MgYXJlIG5vdCBmbGF0ISBPbmx5IHRoZSBmaXJzdCByaW5nIHdpbGwgYmUgdXNlZFwiKSx0PXRbMF0pO2Zvcih2YXIgbD13KFswLDBdKSx1PWcodCksYz0odS5nZXROb3J0aFdlc3QoKS5kaXN0YW5jZVRvKHUuZ2V0U291dGhXZXN0KCkpKnUuZ2V0Tm9ydGhFYXN0KCkuZGlzdGFuY2VUbyh1LmdldE5vcnRoV2VzdCgpKTwxNzAwJiYobD1RZSh0KSksdC5sZW5ndGgpLGQ9W10sXz0wO188YztfKyspe3ZhciBwPXcodFtfXSk7ZC5wdXNoKGUucHJvamVjdCh3KFtwLmxhdC1sLmxhdCxwLmxuZy1sLmxuZ10pKSl9Zm9yKF89cj1hPWg9MCxpPWMtMTtfPGM7aT1fKyspbj1kW19dLG89ZFtpXSxzPW4ueSpvLngtby55Km4ueCxhKz0obi54K28ueCkqcyxoKz0obi55K28ueSkqcyxyKz0zKnM7dT0wPT09cj9kWzBdOlthL3IsaC9yXSx1PWUudW5wcm9qZWN0KG0odSkpO3JldHVybiB3KFt1LmxhdCtsLmxhdCx1LmxuZytsLmxuZ10pfWZ1bmN0aW9uIFFlKHQpe2Zvcih2YXIgZT0wLGk9MCxuPTAsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz13KHRbb10pO2UrPXMubGF0LGkrPXMubG5nLG4rK31yZXR1cm4gdyhbZS9uLGkvbl0pfXZhciB0aSxndD17X19wcm90b19fOm51bGwsY2xpcFBvbHlnb246SmUscG9seWdvbkNlbnRlcjokZSxjZW50cm9pZDpRZX07ZnVuY3Rpb24gZWkodCxlKXtpZihlJiZ0Lmxlbmd0aCl7dmFyIGk9dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bdFswXV0sbj0xLG89MCxzPXQubGVuZ3RoO248cztuKyspKGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS54LXQueCxlPWUueS10Lnk7cmV0dXJuIGkqaStlKmV9KSh0W25dLHRbb10pPmUmJihpLnB1c2godFtuXSksbz1uKTtvPHMtMSYmaS5wdXNoKHRbcy0xXSk7cmV0dXJuIGl9KHQsZT1lKmUpLG49aS5sZW5ndGgsbz1uZXcodHlwZW9mIFVpbnQ4QXJyYXkhPXZvaWQgMCtcIlwiP1VpbnQ4QXJyYXk6QXJyYXkpKG4pO29bMF09b1tuLTFdPTEsZnVuY3Rpb24gdChlLGksbixvLHMpe3ZhciByLGEsaCxsPTA7Zm9yKGE9bysxO2E8PXMtMTthKyspaD1yaShlW2FdLGVbb10sZVtzXSwhMCksbDxoJiYocj1hLGw9aCk7bjxsJiYoaVtyXT0xLHQoZSxpLG4sbyxyKSx0KGUsaSxuLHIscykpfShpLG8sZSwwLG4tMSk7dmFyIHMscj1bXTtmb3Iocz0wO3M8bjtzKyspb1tzXSYmci5wdXNoKGlbc10pO3JldHVybiByfXJldHVybiB0LnNsaWNlKCl9ZnVuY3Rpb24gaWkodCxlLGkpe3JldHVybiBNYXRoLnNxcnQocmkodCxlLGksITApKX1mdW5jdGlvbiBuaSh0LGUsaSxuLG8pe3ZhciBzLHIsYSxoPW4/dGk6c2kodCxpKSxsPXNpKGUsaSk7Zm9yKHRpPWw7Oyl7aWYoIShofGwpKXJldHVyblt0LGVdO2lmKGgmbClyZXR1cm4hMTthPXNpKHI9b2kodCxlLHM9aHx8bCxpLG8pLGkpLHM9PT1oPyh0PXIsaD1hKTooZT1yLGw9YSl9fWZ1bmN0aW9uIG9pKHQsZSxpLG4sbyl7dmFyIHMscixhPWUueC10LngsZT1lLnktdC55LGg9bi5taW4sbj1uLm1heDtyZXR1cm4gOCZpPyhzPXQueCthKihuLnktdC55KS9lLHI9bi55KTo0Jmk/KHM9dC54K2EqKGgueS10LnkpL2Uscj1oLnkpOjImaT8ocz1uLngscj10LnkrZSoobi54LXQueCkvYSk6MSZpJiYocz1oLngscj10LnkrZSooaC54LXQueCkvYSksbmV3IHAocyxyLG8pfWZ1bmN0aW9uIHNpKHQsZSl7dmFyIGk9MDtyZXR1cm4gdC54PGUubWluLng/aXw9MTp0Lng+ZS5tYXgueCYmKGl8PTIpLHQueTxlLm1pbi55P2l8PTQ6dC55PmUubWF4LnkmJihpfD04KSxpfWZ1bmN0aW9uIHJpKHQsZSxpLG4pe3ZhciBvPWUueCxlPWUueSxzPWkueC1vLHI9aS55LWUsYT1zKnMrcipyO3JldHVybiAwPGEmJigxPChhPSgodC54LW8pKnMrKHQueS1lKSpyKS9hKT8obz1pLngsZT1pLnkpOjA8YSYmKG8rPXMqYSxlKz1yKmEpKSxzPXQueC1vLHI9dC55LWUsbj9zKnMrcipyOm5ldyBwKG8sZSl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4hZCh0WzBdKXx8XCJvYmplY3RcIiE9dHlwZW9mIHRbMF1bMF0mJnZvaWQgMCE9PXRbMF1bMF19ZnVuY3Rpb24gYWkodCl7cmV0dXJuIGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuXCIpLEkodCl9ZnVuY3Rpb24gaGkodCxlKXt2YXIgaSxuLG8scyxyLGE7aWYoIXR8fDA9PT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJsYXRsbmdzIG5vdCBwYXNzZWRcIik7SSh0KXx8KGNvbnNvbGUud2FybihcImxhdGxuZ3MgYXJlIG5vdCBmbGF0ISBPbmx5IHRoZSBmaXJzdCByaW5nIHdpbGwgYmUgdXNlZFwiKSx0PXRbMF0pO2Zvcih2YXIgaD13KFswLDBdKSxsPWcodCksdT0obC5nZXROb3J0aFdlc3QoKS5kaXN0YW5jZVRvKGwuZ2V0U291dGhXZXN0KCkpKmwuZ2V0Tm9ydGhFYXN0KCkuZGlzdGFuY2VUbyhsLmdldE5vcnRoV2VzdCgpKTwxNzAwJiYoaD1RZSh0KSksdC5sZW5ndGgpLGM9W10sZD0wO2Q8dTtkKyspe3ZhciBfPXcodFtkXSk7Yy5wdXNoKGUucHJvamVjdCh3KFtfLmxhdC1oLmxhdCxfLmxuZy1oLmxuZ10pKSl9Zm9yKGk9ZD0wO2Q8dS0xO2QrKylpKz1jW2RdLmRpc3RhbmNlVG8oY1tkKzFdKS8yO2lmKDA9PT1pKWE9Y1swXTtlbHNlIGZvcihuPWQ9MDtkPHUtMTtkKyspaWYobz1jW2RdLHM9Y1tkKzFdLGk8KG4rPXI9by5kaXN0YW5jZVRvKHMpKSl7YT1bcy54LShyPShuLWkpL3IpKihzLngtby54KSxzLnktcioocy55LW8ueSldO2JyZWFrfWw9ZS51bnByb2plY3QobShhKSk7cmV0dXJuIHcoW2wubGF0K2gubGF0LGwubG5nK2gubG5nXSl9dmFyIHZ0PXtfX3Byb3RvX186bnVsbCxzaW1wbGlmeTplaSxwb2ludFRvU2VnbWVudERpc3RhbmNlOmlpLGNsb3Nlc3RQb2ludE9uU2VnbWVudDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHJpKHQsZSxpKX0sY2xpcFNlZ21lbnQ6bmksX2dldEVkZ2VJbnRlcnNlY3Rpb246b2ksX2dldEJpdENvZGU6c2ksX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50OnJpLGlzRmxhdDpJLF9mbGF0OmFpLHBvbHlsaW5lQ2VudGVyOmhpfSx5dD17cHJvamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHAodC5sbmcsdC5sYXQpfSx1bnByb2plY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB2KHQueSx0LngpfSxib3VuZHM6bmV3IGYoWy0xODAsLTkwXSxbMTgwLDkwXSl9LHh0PXtSOjYzNzgxMzcsUl9NSU5PUjo2MzU2NzUyLjMxNDI0NTE3OSxib3VuZHM6bmV3IGYoWy0yMDAzNzUwOC4zNDI3OSwtMTU0OTY1NzAuNzM5NzJdLFsyMDAzNzUwOC4zNDI3OSwxODc2NDY1Ni4yMzEzOF0pLHByb2plY3Q6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5QSS8xODAsaT10aGlzLlIsbj10LmxhdCplLG89dGhpcy5SX01JTk9SL2ksbz1NYXRoLnNxcnQoMS1vKm8pLHM9bypNYXRoLnNpbihuKSxzPU1hdGgudGFuKE1hdGguUEkvNC1uLzIpL01hdGgucG93KCgxLXMpLygxK3MpLG8vMiksbj0taSpNYXRoLmxvZyhNYXRoLm1heChzLDFlLTEwKSk7cmV0dXJuIG5ldyBwKHQubG5nKmUqaSxuKX0sdW5wcm9qZWN0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPTE4MC9NYXRoLlBJLG49dGhpcy5SLG89dGhpcy5SX01JTk9SL24scz1NYXRoLnNxcnQoMS1vKm8pLHI9TWF0aC5leHAoLXQueS9uKSxhPU1hdGguUEkvMi0yKk1hdGguYXRhbihyKSxoPTAsbD0uMTtoPDE1JiYxZS03PE1hdGguYWJzKGwpO2grKyllPXMqTWF0aC5zaW4oYSksZT1NYXRoLnBvdygoMS1lKS8oMStlKSxzLzIpLGErPWw9TWF0aC5QSS8yLTIqTWF0aC5hdGFuKHIqZSktYTtyZXR1cm4gbmV3IHYoYSppLHQueCppL24pfX0sd3Q9e19fcHJvdG9fXzpudWxsLExvbkxhdDp5dCxNZXJjYXRvcjp4dCxTcGhlcmljYWxNZXJjYXRvcjpydH0sUHQ9bCh7fSxzdCx7Y29kZTpcIkVQU0c6MzM5NVwiLHByb2plY3Rpb246eHQsdHJhbnNmb3JtYXRpb246aHQoYnQ9LjUvKE1hdGguUEkqeHQuUiksLjUsLWJ0LC41KX0pLGxpPWwoe30sc3Qse2NvZGU6XCJFUFNHOjQzMjZcIixwcm9qZWN0aW9uOnl0LHRyYW5zZm9ybWF0aW9uOmh0KDEvMTgwLDEsLTEvMTgwLC41KX0pLEx0PWwoe30sb3Qse3Byb2plY3Rpb246eXQsdHJhbnNmb3JtYXRpb246aHQoMSwwLC0xLDApLHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdygyLHQpfSx6b29tOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMn0sZGlzdGFuY2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLmxuZy10LmxuZyxlPWUubGF0LXQubGF0O3JldHVybiBNYXRoLnNxcnQoaSppK2UqZSl9LGluZmluaXRlOiEwfSksbz0ob3QuRWFydGg9c3Qsb3QuRVBTRzMzOTU9UHQsb3QuRVBTRzM4NTc9bHQsb3QuRVBTRzkwMDkxMz11dCxvdC5FUFNHNDMyNj1saSxvdC5TaW1wbGU9THQsaXQuZXh0ZW5kKHtvcHRpb25zOntwYW5lOlwib3ZlcmxheVBhbmVcIixhdHRyaWJ1dGlvbjpudWxsLGJ1YmJsaW5nTW91c2VFdmVudHM6ITB9LGFkZFRvOmZ1bmN0aW9uKHQpe3JldHVybiB0LmFkZExheWVyKHRoaXMpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbW92ZUZyb20odGhpcy5fbWFwfHx0aGlzLl9tYXBUb0FkZCl9LHJlbW92ZUZyb206ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQucmVtb3ZlTGF5ZXIodGhpcyksdGhpc30sZ2V0UGFuZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwLmdldFBhbmUodD90aGlzLm9wdGlvbnNbdF18fHQ6dGhpcy5vcHRpb25zLnBhbmUpfSxhZGRJbnRlcmFjdGl2ZVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwLl90YXJnZXRzW2godCldPXRoaXN9LHJlbW92ZUludGVyYWN0aXZlVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdGhpcy5fbWFwLl90YXJnZXRzW2godCldLHRoaXN9LGdldEF0dHJpYnV0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbn0sX2xheWVyQWRkOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dC50YXJnZXQ7aS5oYXNMYXllcih0aGlzKSYmKHRoaXMuX21hcD1pLHRoaXMuX3pvb21BbmltYXRlZD1pLl96b29tQW5pbWF0ZWQsdGhpcy5nZXRFdmVudHMmJihlPXRoaXMuZ2V0RXZlbnRzKCksaS5vbihlLHRoaXMpLHRoaXMub25jZShcInJlbW92ZVwiLGZ1bmN0aW9uKCl7aS5vZmYoZSx0aGlzKX0sdGhpcykpLHRoaXMub25BZGQoaSksdGhpcy5maXJlKFwiYWRkXCIpLGkuZmlyZShcImxheWVyYWRkXCIse2xheWVyOnRoaXN9KSl9fSkpLHVpPShBLmluY2x1ZGUoe2FkZExheWVyOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQuX2xheWVyQWRkKXJldHVybiBlPWgodCksdGhpcy5fbGF5ZXJzW2VdfHwoKHRoaXMuX2xheWVyc1tlXT10KS5fbWFwVG9BZGQ9dGhpcyx0LmJlZm9yZUFkZCYmdC5iZWZvcmVBZGQodGhpcyksdGhpcy53aGVuUmVhZHkodC5fbGF5ZXJBZGQsdCkpLHRoaXM7dGhyb3cgbmV3IEVycm9yKFwiVGhlIHByb3ZpZGVkIG9iamVjdCBpcyBub3QgYSBMYXllci5cIil9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIHRoaXMuX2xheWVyc1tlXSYmKHRoaXMuX2xvYWRlZCYmdC5vblJlbW92ZSh0aGlzKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLHRoaXMuX2xvYWRlZCYmKHRoaXMuZmlyZShcImxheWVycmVtb3ZlXCIse2xheWVyOnR9KSx0LmZpcmUoXCJyZW1vdmVcIikpLHQuX21hcD10Ll9tYXBUb0FkZD1udWxsKSx0aGlzfSxoYXNMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gaCh0KWluIHRoaXMuX2xheWVyc30sZWFjaExheWVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIHRoaXMuX2xheWVycyl0LmNhbGwoZSx0aGlzLl9sYXllcnNbaV0pO3JldHVybiB0aGlzfSxfYWRkTGF5ZXJzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLGk9KHQ9dD9kKHQpP3Q6W3RdOltdKS5sZW5ndGg7ZTxpO2UrKyl0aGlzLmFkZExheWVyKHRbZV0pfSxfYWRkWm9vbUxpbWl0OmZ1bmN0aW9uKHQpe2lzTmFOKHQub3B0aW9ucy5tYXhab29tKSYmaXNOYU4odC5vcHRpb25zLm1pblpvb20pfHwodGhpcy5fem9vbUJvdW5kTGF5ZXJzW2godCldPXQsdGhpcy5fdXBkYXRlWm9vbUxldmVscygpKX0sX3JlbW92ZVpvb21MaW1pdDpmdW5jdGlvbih0KXt0PWgodCk7dGhpcy5fem9vbUJvdW5kTGF5ZXJzW3RdJiYoZGVsZXRlIHRoaXMuX3pvb21Cb3VuZExheWVyc1t0XSx0aGlzLl91cGRhdGVab29tTGV2ZWxzKCkpfSxfdXBkYXRlWm9vbUxldmVsczpmdW5jdGlvbigpe3ZhciB0LGU9MS8wLGk9LTEvMCxuPXRoaXMuX2dldFpvb21TcGFuKCk7Zm9yKHQgaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKXZhciBvPXRoaXMuX3pvb21Cb3VuZExheWVyc1t0XS5vcHRpb25zLGU9dm9pZCAwPT09by5taW5ab29tP2U6TWF0aC5taW4oZSxvLm1pblpvb20pLGk9dm9pZCAwPT09by5tYXhab29tP2k6TWF0aC5tYXgoaSxvLm1heFpvb20pO3RoaXMuX2xheWVyc01heFpvb209aT09PS0xLzA/dm9pZCAwOmksdGhpcy5fbGF5ZXJzTWluWm9vbT1lPT09MS8wP3ZvaWQgMDplLG4hPT10aGlzLl9nZXRab29tU3BhbigpJiZ0aGlzLmZpcmUoXCJ6b29tbGV2ZWxzY2hhbmdlXCIpLHZvaWQgMD09PXRoaXMub3B0aW9ucy5tYXhab29tJiZ0aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLmdldFpvb20oKT50aGlzLl9sYXllcnNNYXhab29tJiZ0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWF4Wm9vbSksdm9pZCAwPT09dGhpcy5vcHRpb25zLm1pblpvb20mJnRoaXMuX2xheWVyc01pblpvb20mJnRoaXMuZ2V0Wm9vbSgpPHRoaXMuX2xheWVyc01pblpvb20mJnRoaXMuc2V0Wm9vbSh0aGlzLl9sYXllcnNNaW5ab29tKX19KSxvLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3ZhciBpLG47aWYoYyh0aGlzLGUpLHRoaXMuX2xheWVycz17fSx0KWZvcihpPTAsbj10Lmxlbmd0aDtpPG47aSsrKXRoaXMuYWRkTGF5ZXIodFtpXSl9LGFkZExheWVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbGF5ZXJzW2VdPXQsdGhpcy5fbWFwJiZ0aGlzLl9tYXAuYWRkTGF5ZXIodCksdGhpc30scmVtb3ZlTGF5ZXI6ZnVuY3Rpb24odCl7dD10IGluIHRoaXMuX2xheWVycz90OnRoaXMuZ2V0TGF5ZXJJZCh0KTtyZXR1cm4gdGhpcy5fbWFwJiZ0aGlzLl9sYXllcnNbdF0mJnRoaXMuX21hcC5yZW1vdmVMYXllcih0aGlzLl9sYXllcnNbdF0pLGRlbGV0ZSB0aGlzLl9sYXllcnNbdF0sdGhpc30saGFzTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuKFwibnVtYmVyXCI9PXR5cGVvZiB0P3Q6dGhpcy5nZXRMYXllcklkKHQpKWluIHRoaXMuX2xheWVyc30sY2xlYXJMYXllcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZW1vdmVMYXllcix0aGlzKX0saW52b2tlOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKGUgaW4gdGhpcy5fbGF5ZXJzKShpPXRoaXMuX2xheWVyc1tlXSlbdF0mJmlbdF0uYXBwbHkoaSxuKTtyZXR1cm4gdGhpc30sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5hZGRMYXllcix0KX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dGhpcy5lYWNoTGF5ZXIodC5yZW1vdmVMYXllcix0KX0sZWFjaExheWVyOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpIGluIHRoaXMuX2xheWVycyl0LmNhbGwoZSx0aGlzLl9sYXllcnNbaV0pO3JldHVybiB0aGlzfSxnZXRMYXllcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxnZXRMYXllcnM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodC5wdXNoLHQpLHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZva2UoXCJzZXRaSW5kZXhcIix0KX0sZ2V0TGF5ZXJJZDpofSkpLGNpPXVpLmV4dGVuZCh7YWRkTGF5ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzTGF5ZXIodCk/dGhpczoodC5hZGRFdmVudFBhcmVudCh0aGlzKSx1aS5wcm90b3R5cGUuYWRkTGF5ZXIuY2FsbCh0aGlzLHQpLHRoaXMuZmlyZShcImxheWVyYWRkXCIse2xheWVyOnR9KSl9LHJlbW92ZUxheWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhc0xheWVyKHQpPygodD10IGluIHRoaXMuX2xheWVycz90aGlzLl9sYXllcnNbdF06dCkucmVtb3ZlRXZlbnRQYXJlbnQodGhpcyksdWkucHJvdG90eXBlLnJlbW92ZUxheWVyLmNhbGwodGhpcyx0KSx0aGlzLmZpcmUoXCJsYXllcnJlbW92ZVwiLHtsYXllcjp0fSkpOnRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmludm9rZShcInNldFN0eWxlXCIsdCl9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludm9rZShcImJyaW5nVG9Gcm9udFwiKX0sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnZva2UoXCJicmluZ1RvQmFja1wiKX0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7dmFyIHQsZT1uZXcgcztmb3IodCBpbiB0aGlzLl9sYXllcnMpe3ZhciBpPXRoaXMuX2xheWVyc1t0XTtlLmV4dGVuZChpLmdldEJvdW5kcz9pLmdldEJvdW5kcygpOmkuZ2V0TGF0TG5nKCkpfXJldHVybiBlfX0pLGRpPWV0LmV4dGVuZCh7b3B0aW9uczp7cG9wdXBBbmNob3I6WzAsMF0sdG9vbHRpcEFuY2hvcjpbMCwwXSxjcm9zc09yaWdpbjohMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtjKHRoaXMsdCl9LGNyZWF0ZUljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oXCJpY29uXCIsdCl9LGNyZWF0ZVNoYWRvdzpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbihcInNoYWRvd1wiLHQpfSxfY3JlYXRlSWNvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldEljb25VcmwodCk7aWYoaSlyZXR1cm4gaT10aGlzLl9jcmVhdGVJbWcoaSxlJiZcIklNR1wiPT09ZS50YWdOYW1lP2U6bnVsbCksdGhpcy5fc2V0SWNvblN0eWxlcyhpLHQpLCF0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4mJlwiXCIhPT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW58fChpLmNyb3NzT3JpZ2luPSEwPT09dGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luP1wiXCI6dGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luKSxpO2lmKFwiaWNvblwiPT09dCl0aHJvdyBuZXcgRXJyb3IoXCJpY29uVXJsIG5vdCBzZXQgaW4gSWNvbiBvcHRpb25zIChzZWUgdGhlIGRvY3MpLlwiKTtyZXR1cm4gbnVsbH0sX3NldEljb25TdHlsZXM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLm9wdGlvbnMsbj1pW2UrXCJTaXplXCJdLG49bShuPVwibnVtYmVyXCI9PXR5cGVvZiBuP1tuLG5dOm4pLG89bShcInNoYWRvd1wiPT09ZSYmaS5zaGFkb3dBbmNob3J8fGkuaWNvbkFuY2hvcnx8biYmbi5kaXZpZGVCeSgyLCEwKSk7dC5jbGFzc05hbWU9XCJsZWFmbGV0LW1hcmtlci1cIitlK1wiIFwiKyhpLmNsYXNzTmFtZXx8XCJcIiksbyYmKHQuc3R5bGUubWFyZ2luTGVmdD0tby54K1wicHhcIix0LnN0eWxlLm1hcmdpblRvcD0tby55K1wicHhcIiksbiYmKHQuc3R5bGUud2lkdGg9bi54K1wicHhcIix0LnN0eWxlLmhlaWdodD1uLnkrXCJweFwiKX0sX2NyZWF0ZUltZzpmdW5jdGlvbih0LGUpe3JldHVybihlPWV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIikpLnNyYz10LGV9LF9nZXRJY29uVXJsOmZ1bmN0aW9uKHQpe3JldHVybiBiLnJldGluYSYmdGhpcy5vcHRpb25zW3QrXCJSZXRpbmFVcmxcIl18fHRoaXMub3B0aW9uc1t0K1wiVXJsXCJdfX0pO3ZhciBfaT1kaS5leHRlbmQoe29wdGlvbnM6e2ljb25Vcmw6XCJtYXJrZXItaWNvbi5wbmdcIixpY29uUmV0aW5hVXJsOlwibWFya2VyLWljb24tMngucG5nXCIsc2hhZG93VXJsOlwibWFya2VyLXNoYWRvdy5wbmdcIixpY29uU2l6ZTpbMjUsNDFdLGljb25BbmNob3I6WzEyLDQxXSxwb3B1cEFuY2hvcjpbMSwtMzRdLHRvb2x0aXBBbmNob3I6WzE2LC0yOF0sc2hhZG93U2l6ZTpbNDEsNDFdfSxfZ2V0SWNvblVybDpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgX2kuaW1hZ2VQYXRoJiYoX2kuaW1hZ2VQYXRoPXRoaXMuX2RldGVjdEljb25QYXRoKCkpLCh0aGlzLm9wdGlvbnMuaW1hZ2VQYXRofHxfaS5pbWFnZVBhdGgpK2RpLnByb3RvdHlwZS5fZ2V0SWNvblVybC5jYWxsKHRoaXMsdCl9LF9zdHJpcFVybDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxpKXtyZXR1cm4oZT1lLmV4ZWModCkpJiZlW2ldfXJldHVybih0PWUodCwvXnVybFxcKChbJ1wiXSk/KC4rKVxcMVxcKSQvLDIpKSYmZSh0LC9eKC4qKW1hcmtlci1pY29uXFwucG5nJC8sMSl9LF9kZXRlY3RJY29uUGF0aDpmdW5jdGlvbigpe3ZhciB0PVAoXCJkaXZcIixcImxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGhcIixkb2N1bWVudC5ib2R5KSxlPXBlKHQsXCJiYWNrZ3JvdW5kLWltYWdlXCIpfHxwZSh0LFwiYmFja2dyb3VuZEltYWdlXCIpO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLChlPXRoaXMuX3N0cmlwVXJsKGUpKT9lOih0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbaHJlZiQ9XCJsZWFmbGV0LmNzc1wiXScpKT90LmhyZWYuc3Vic3RyaW5nKDAsdC5ocmVmLmxlbmd0aC1cImxlYWZsZXQuY3NzXCIubGVuZ3RoLTEpOlwiXCJ9fSkscGk9bi5leHRlbmQoe2luaXRpYWxpemU6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyPXR9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFya2VyLl9pY29uO3RoaXMuX2RyYWdnYWJsZXx8KHRoaXMuX2RyYWdnYWJsZT1uZXcgWGUodCx0LCEwKSksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmVuYWJsZSgpLE0odCxcImxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZVwiKX0scmVtb3ZlSG9va3M6ZnVuY3Rpb24oKXt0aGlzLl9kcmFnZ2FibGUub2ZmKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQscHJlZHJhZzp0aGlzLl9vblByZURyYWcsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLmRpc2FibGUoKSx0aGlzLl9tYXJrZXIuX2ljb24mJnoodGhpcy5fbWFya2VyLl9pY29uLFwibGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlXCIpfSxtb3ZlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGUmJnRoaXMuX2RyYWdnYWJsZS5fbW92ZWR9LF9hZGp1c3RQYW46ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFya2VyLGk9ZS5fbWFwLG49dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhblNwZWVkLG89dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcscz1QZShlLl9pY29uKSxyPWkuZ2V0UGl4ZWxCb3VuZHMoKSxhPWkuZ2V0UGl4ZWxPcmlnaW4oKSxhPV8oci5taW4uX3N1YnRyYWN0KGEpLmFkZChvKSxyLm1heC5fc3VidHJhY3QoYSkuc3VidHJhY3QobykpO2EuY29udGFpbnMocyl8fChvPW0oKE1hdGgubWF4KGEubWF4Lngscy54KS1hLm1heC54KS8oci5tYXgueC1hLm1heC54KS0oTWF0aC5taW4oYS5taW4ueCxzLngpLWEubWluLngpLyhyLm1pbi54LWEubWluLngpLChNYXRoLm1heChhLm1heC55LHMueSktYS5tYXgueSkvKHIubWF4LnktYS5tYXgueSktKE1hdGgubWluKGEubWluLnkscy55KS1hLm1pbi55KS8oci5taW4ueS1hLm1pbi55KSkubXVsdGlwbHlCeShuKSxpLnBhbkJ5KG8se2FuaW1hdGU6ITF9KSx0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5fYWRkKG8pLHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZChvKSxaKGUuX2ljb24sdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MpLHRoaXMuX29uRHJhZyh0KSx0aGlzLl9wYW5SZXF1ZXN0PXgodGhpcy5fYWRqdXN0UGFuLmJpbmQodGhpcyx0KSkpfSxfb25EcmFnU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9vbGRMYXRMbmc9dGhpcy5fbWFya2VyLmdldExhdExuZygpLHRoaXMuX21hcmtlci5jbG9zZVBvcHVwJiZ0aGlzLl9tYXJrZXIuY2xvc2VQb3B1cCgpLHRoaXMuX21hcmtlci5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIil9LF9vblByZURyYWc6ZnVuY3Rpb24odCl7dGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhbiYmKHIodGhpcy5fcGFuUmVxdWVzdCksdGhpcy5fcGFuUmVxdWVzdD14KHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsdCkpKX0sX29uRHJhZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXJrZXIsaT1lLl9zaGFkb3csbj1QZShlLl9pY29uKSxvPWUuX21hcC5sYXllclBvaW50VG9MYXRMbmcobik7aSYmWihpLG4pLGUuX2xhdGxuZz1vLHQubGF0bG5nPW8sdC5vbGRMYXRMbmc9dGhpcy5fb2xkTGF0TG5nLGUuZmlyZShcIm1vdmVcIix0KS5maXJlKFwiZHJhZ1wiLHQpfSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3IodGhpcy5fcGFuUmVxdWVzdCksZGVsZXRlIHRoaXMuX29sZExhdExuZyx0aGlzLl9tYXJrZXIuZmlyZShcIm1vdmVlbmRcIikuZmlyZShcImRyYWdlbmRcIix0KX19KSxtaT1vLmV4dGVuZCh7b3B0aW9uczp7aWNvbjpuZXcgX2ksaW50ZXJhY3RpdmU6ITAsa2V5Ym9hcmQ6ITAsdGl0bGU6XCJcIixhbHQ6XCJNYXJrZXJcIix6SW5kZXhPZmZzZXQ6MCxvcGFjaXR5OjEscmlzZU9uSG92ZXI6ITEscmlzZU9mZnNldDoyNTAscGFuZTpcIm1hcmtlclBhbmVcIixzaGFkb3dQYW5lOlwic2hhZG93UGFuZVwiLGJ1YmJsaW5nTW91c2VFdmVudHM6ITEsYXV0b1Bhbk9uRm9jdXM6ITAsZHJhZ2dhYmxlOiExLGF1dG9QYW46ITEsYXV0b1BhblBhZGRpbmc6WzUwLDUwXSxhdXRvUGFuU3BlZWQ6MTB9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtjKHRoaXMsZSksdGhpcy5fbGF0bG5nPXcodCl9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10aGlzLl96b29tQW5pbWF0ZWQmJnQub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uLHRoaXMuX3pvb21BbmltYXRlZCYmdC5vbihcInpvb21hbmltXCIsdGhpcy5fYW5pbWF0ZVpvb20sdGhpcyksdGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiZ0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKSYmKHRoaXMub3B0aW9ucy5kcmFnZ2FibGU9ITAsdGhpcy5kcmFnZ2luZy5yZW1vdmVIb29rcygpKSxkZWxldGUgdGhpcy5kcmFnZ2luZyx0aGlzLl96b29tQW5pbWF0ZWQmJnQub2ZmKFwiem9vbWFuaW1cIix0aGlzLl9hbmltYXRlWm9vbSx0aGlzKSx0aGlzLl9yZW1vdmVJY29uKCksdGhpcy5fcmVtb3ZlU2hhZG93KCl9LGdldEV2ZW50czpmdW5jdGlvbigpe3JldHVybnt6b29tOnRoaXMudXBkYXRlLHZpZXdyZXNldDp0aGlzLnVwZGF0ZX19LGdldExhdExuZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmd9LHNldExhdExuZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sYXRsbmc7cmV0dXJuIHRoaXMuX2xhdGxuZz13KHQpLHRoaXMudXBkYXRlKCksdGhpcy5maXJlKFwibW92ZVwiLHtvbGRMYXRMbmc6ZSxsYXRsbmc6dGhpcy5fbGF0bG5nfSl9LHNldFpJbmRleE9mZnNldDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldD10LHRoaXMudXBkYXRlKCl9LGdldEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb259LHNldEljb246ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5pY29uPXQsdGhpcy5fbWFwJiYodGhpcy5faW5pdEljb24oKSx0aGlzLnVwZGF0ZSgpKSx0aGlzLl9wb3B1cCYmdGhpcy5iaW5kUG9wdXAodGhpcy5fcG9wdXAsdGhpcy5fcG9wdXAub3B0aW9ucyksdGhpc30sZ2V0RWxlbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pY29ufSx1cGRhdGU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5faWNvbiYmdGhpcy5fbWFwJiYodD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZykucm91bmQoKSx0aGlzLl9zZXRQb3ModCkpLHRoaXN9LF9pbml0SWNvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxlPVwibGVhZmxldC16b29tLVwiKyh0aGlzLl96b29tQW5pbWF0ZWQ/XCJhbmltYXRlZFwiOlwiaGlkZVwiKSxpPXQuaWNvbi5jcmVhdGVJY29uKHRoaXMuX2ljb24pLG49ITEsaT0oaSE9PXRoaXMuX2ljb24mJih0aGlzLl9pY29uJiZ0aGlzLl9yZW1vdmVJY29uKCksbj0hMCx0LnRpdGxlJiYoaS50aXRsZT10LnRpdGxlKSxcIklNR1wiPT09aS50YWdOYW1lJiYoaS5hbHQ9dC5hbHR8fFwiXCIpKSxNKGksZSksdC5rZXlib2FyZCYmKGkudGFiSW5kZXg9XCIwXCIsaS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJidXR0b25cIikpLHRoaXMuX2ljb249aSx0LnJpc2VPbkhvdmVyJiZ0aGlzLm9uKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSksdGhpcy5vcHRpb25zLmF1dG9QYW5PbkZvY3VzJiZTKGksXCJmb2N1c1wiLHRoaXMuX3Bhbk9uRm9jdXMsdGhpcyksdC5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpKSxvPSExO2khPT10aGlzLl9zaGFkb3cmJih0aGlzLl9yZW1vdmVTaGFkb3coKSxvPSEwKSxpJiYoTShpLGUpLGkuYWx0PVwiXCIpLHRoaXMuX3NoYWRvdz1pLHQub3BhY2l0eTwxJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksbiYmdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faWNvbiksdGhpcy5faW5pdEludGVyYWN0aW9uKCksaSYmbyYmdGhpcy5nZXRQYW5lKHQuc2hhZG93UGFuZSkuYXBwZW5kQ2hpbGQodGhpcy5fc2hhZG93KX0sX3JlbW92ZUljb246ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMucmlzZU9uSG92ZXImJnRoaXMub2ZmKHttb3VzZW92ZXI6dGhpcy5fYnJpbmdUb0Zyb250LG1vdXNlb3V0OnRoaXMuX3Jlc2V0WkluZGV4fSksdGhpcy5vcHRpb25zLmF1dG9QYW5PbkZvY3VzJiZrKHRoaXMuX2ljb24sXCJmb2N1c1wiLHRoaXMuX3Bhbk9uRm9jdXMsdGhpcyksVCh0aGlzLl9pY29uKSx0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLHRoaXMuX2ljb249bnVsbH0sX3JlbW92ZVNoYWRvdzpmdW5jdGlvbigpe3RoaXMuX3NoYWRvdyYmVCh0aGlzLl9zaGFkb3cpLHRoaXMuX3NoYWRvdz1udWxsfSxfc2V0UG9zOmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24mJloodGhpcy5faWNvbix0KSx0aGlzLl9zaGFkb3cmJloodGhpcy5fc2hhZG93LHQpLHRoaXMuX3pJbmRleD10LnkrdGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCx0aGlzLl9yZXNldFpJbmRleCgpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKHQpe3RoaXMuX2ljb24mJih0aGlzLl9pY29uLnN0eWxlLnpJbmRleD10aGlzLl96SW5kZXgrdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt0PXRoaXMuX21hcC5fbGF0TG5nVG9OZXdMYXllclBvaW50KHRoaXMuX2xhdGxuZyx0Lnpvb20sdC5jZW50ZXIpLnJvdW5kKCk7dGhpcy5fc2V0UG9zKHQpfSxfaW5pdEludGVyYWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5vcHRpb25zLmludGVyYWN0aXZlJiYoTSh0aGlzLl9pY29uLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ljb24pLHBpJiYodD10aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLHRoaXMuZHJhZ2dpbmcmJih0PXRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpLHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpKSx0aGlzLmRyYWdnaW5nPW5ldyBwaSh0aGlzKSx0JiZ0aGlzLmRyYWdnaW5nLmVuYWJsZSgpKSl9LHNldE9wYWNpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sX3VwZGF0ZU9wYWNpdHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMub3BhY2l0eTt0aGlzLl9pY29uJiZDKHRoaXMuX2ljb24sdCksdGhpcy5fc2hhZG93JiZDKHRoaXMuX3NoYWRvdyx0KX0sX2JyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCl9LF9yZXNldFpJbmRleDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVpJbmRleCgwKX0sX3Bhbk9uRm9jdXM6ZnVuY3Rpb24oKXt2YXIgdCxlLGk9dGhpcy5fbWFwO2kmJih0PShlPXRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMpLmljb25TaXplP20oZS5pY29uU2l6ZSk6bSgwLDApLGU9ZS5pY29uQW5jaG9yP20oZS5pY29uQW5jaG9yKTptKDAsMCksaS5wYW5JbnNpZGUodGhpcy5fbGF0bG5nLHtwYWRkaW5nVG9wTGVmdDplLHBhZGRpbmdCb3R0b21SaWdodDp0LnN1YnRyYWN0KGUpfSkpfSxfZ2V0UG9wdXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcn0sX2dldFRvb2x0aXBBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy50b29sdGlwQW5jaG9yfX0pO3ZhciBmaT1vLmV4dGVuZCh7b3B0aW9uczp7c3Ryb2tlOiEwLGNvbG9yOlwiIzMzODhmZlwiLHdlaWdodDozLG9wYWNpdHk6MSxsaW5lQ2FwOlwicm91bmRcIixsaW5lSm9pbjpcInJvdW5kXCIsZGFzaEFycmF5Om51bGwsZGFzaE9mZnNldDpudWxsLGZpbGw6ITEsZmlsbENvbG9yOm51bGwsZmlsbE9wYWNpdHk6LjIsZmlsbFJ1bGU6XCJldmVub2RkXCIsaW50ZXJhY3RpdmU6ITAsYnViYmxpbmdNb3VzZUV2ZW50czohMH0sYmVmb3JlQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3JlbmRlcmVyPXQuZ2V0UmVuZGVyZXIodGhpcyl9LG9uQWRkOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX2luaXRQYXRoKHRoaXMpLHRoaXMuX3Jlc2V0KCksdGhpcy5fcmVuZGVyZXIuX2FkZFBhdGgodGhpcyl9LG9uUmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3JlbW92ZVBhdGgodGhpcyl9LHJlZHJhdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJnRoaXMuX3JlbmRlcmVyLl91cGRhdGVQYXRoKHRoaXMpLHRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHRoaXMsdCksdGhpcy5fcmVuZGVyZXImJih0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyksdGhpcy5vcHRpb25zLnN0cm9rZSYmdCYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsXCJ3ZWlnaHRcIikmJnRoaXMuX3VwZGF0ZUJvdW5kcygpKSx0aGlzfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXImJnRoaXMuX3JlbmRlcmVyLl9icmluZ1RvRnJvbnQodGhpcyksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXImJnRoaXMuX3JlbmRlcmVyLl9icmluZ1RvQmFjayh0aGlzKSx0aGlzfSxnZXRFbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhdGh9LF9yZXNldDpmdW5jdGlvbigpe3RoaXMuX3Byb2plY3QoKSx0aGlzLl91cGRhdGUoKX0sX2NsaWNrVG9sZXJhbmNlOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMub3B0aW9ucy5zdHJva2U/dGhpcy5vcHRpb25zLndlaWdodC8yOjApKyh0aGlzLl9yZW5kZXJlci5vcHRpb25zLnRvbGVyYW5jZXx8MCl9fSksZ2k9ZmkuZXh0ZW5kKHtvcHRpb25zOntmaWxsOiEwLHJhZGl1czoxMH0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe2ModGhpcyxlKSx0aGlzLl9sYXRsbmc9dyh0KSx0aGlzLl9yYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xhdGxuZztyZXR1cm4gdGhpcy5fbGF0bG5nPXcodCksdGhpcy5yZWRyYXcoKSx0aGlzLmZpcmUoXCJtb3ZlXCIse29sZExhdExuZzplLGxhdGxuZzp0aGlzLl9sYXRsbmd9KX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucmFkaXVzPXRoaXMuX3JhZGl1cz10LHRoaXMucmVkcmF3KCl9LGdldFJhZGl1czpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYWRpdXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQucmFkaXVzfHx0aGlzLl9yYWRpdXM7cmV0dXJuIGZpLnByb3RvdHlwZS5zZXRTdHlsZS5jYWxsKHRoaXMsdCksdGhpcy5zZXRSYWRpdXMoZSksdGhpc30sX3Byb2plY3Q6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD10aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyksdGhpcy5fdXBkYXRlQm91bmRzKCl9LF91cGRhdGVCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yYWRpdXMsZT10aGlzLl9yYWRpdXNZfHx0LGk9dGhpcy5fY2xpY2tUb2xlcmFuY2UoKSx0PVt0K2ksZStpXTt0aGlzLl9weEJvdW5kcz1uZXcgZih0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSx0aGlzLl9wb2ludC5hZGQodCkpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiZ0aGlzLl91cGRhdGVQYXRoKCl9LF91cGRhdGVQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZUNpcmNsZSh0aGlzKX0sX2VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGl1cyYmIXRoaXMuX3JlbmRlcmVyLl9ib3VuZHMuaW50ZXJzZWN0cyh0aGlzLl9weEJvdW5kcyl9LF9jb250YWluc1BvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5fcG9pbnQpPD10aGlzLl9yYWRpdXMrdGhpcy5fY2xpY2tUb2xlcmFuY2UoKX19KTt2YXIgdmk9Z2kuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSxpKXtpZihjKHRoaXMsZT1cIm51bWJlclwiPT10eXBlb2YgZT9sKHt9LGkse3JhZGl1czplfSk6ZSksdGhpcy5fbGF0bG5nPXcodCksaXNOYU4odGhpcy5vcHRpb25zLnJhZGl1cykpdGhyb3cgbmV3IEVycm9yKFwiQ2lyY2xlIHJhZGl1cyBjYW5ub3QgYmUgTmFOXCIpO3RoaXMuX21SYWRpdXM9dGhpcy5vcHRpb25zLnJhZGl1c30sc2V0UmFkaXVzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tUmFkaXVzPXQsdGhpcy5yZWRyYXcoKX0sZ2V0UmFkaXVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21SYWRpdXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLl9yYWRpdXMsdGhpcy5fcmFkaXVzWXx8dGhpcy5fcmFkaXVzXTtyZXR1cm4gbmV3IHModGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdCh0KSksdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5hZGQodCkpKX0sc2V0U3R5bGU6ZmkucHJvdG90eXBlLnNldFN0eWxlLF9wcm9qZWN0OmZ1bmN0aW9uKCl7dmFyIHQsZSxpLG4sbyxzPXRoaXMuX2xhdGxuZy5sbmcscj10aGlzLl9sYXRsbmcubGF0LGE9dGhpcy5fbWFwLGg9YS5vcHRpb25zLmNycztoLmRpc3RhbmNlPT09c3QuZGlzdGFuY2U/KG49TWF0aC5QSS8xODAsbz10aGlzLl9tUmFkaXVzL3N0LlIvbix0PWEucHJvamVjdChbcitvLHNdKSxlPWEucHJvamVjdChbci1vLHNdKSxlPXQuYWRkKGUpLmRpdmlkZUJ5KDIpLGk9YS51bnByb2plY3QoZSkubGF0LG49TWF0aC5hY29zKChNYXRoLmNvcyhvKm4pLU1hdGguc2luKHIqbikqTWF0aC5zaW4oaSpuKSkvKE1hdGguY29zKHIqbikqTWF0aC5jb3MoaSpuKSkpL24sIWlzTmFOKG4pJiYwIT09bnx8KG49by9NYXRoLmNvcyhNYXRoLlBJLzE4MCpyKSksdGhpcy5fcG9pbnQ9ZS5zdWJ0cmFjdChhLmdldFBpeGVsT3JpZ2luKCkpLHRoaXMuX3JhZGl1cz1pc05hTihuKT8wOmUueC1hLnByb2plY3QoW2kscy1uXSkueCx0aGlzLl9yYWRpdXNZPWUueS10LnkpOihvPWgudW5wcm9qZWN0KGgucHJvamVjdCh0aGlzLl9sYXRsbmcpLnN1YnRyYWN0KFt0aGlzLl9tUmFkaXVzLDBdKSksdGhpcy5fcG9pbnQ9YS5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKSx0aGlzLl9yYWRpdXM9dGhpcy5fcG9pbnQueC1hLmxhdExuZ1RvTGF5ZXJQb2ludChvKS54KSx0aGlzLl91cGRhdGVCb3VuZHMoKX19KTt2YXIgeWk9ZmkuZXh0ZW5kKHtvcHRpb25zOntzbW9vdGhGYWN0b3I6MSxub0NsaXA6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXtjKHRoaXMsZSksdGhpcy5fc2V0TGF0TG5ncyh0KX0sZ2V0TGF0TG5nczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYXRsbmdzfSxzZXRMYXRMbmdzOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9zZXRMYXRMbmdzKHQpLHRoaXMucmVkcmF3KCl9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5fbGF0bG5ncy5sZW5ndGh9LGNsb3Nlc3RMYXllclBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLzAsaT1udWxsLG49cmksbz0wLHM9dGhpcy5fcGFydHMubGVuZ3RoO288cztvKyspZm9yKHZhciByPXRoaXMuX3BhcnRzW29dLGE9MSxoPXIubGVuZ3RoO2E8aDthKyspe3ZhciBsLHUsYz1uKHQsbD1yW2EtMV0sdT1yW2FdLCEwKTtjPGUmJihlPWMsaT1uKHQsbCx1KSl9cmV0dXJuIGkmJihpLmRpc3RhbmNlPU1hdGguc3FydChlKSksaX0sZ2V0Q2VudGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwKXJldHVybiBoaSh0aGlzLl9kZWZhdWx0U2hhcGUoKSx0aGlzLl9tYXAub3B0aW9ucy5jcnMpO3Rocm93IG5ldyBFcnJvcihcIk11c3QgYWRkIGxheWVyIHRvIG1hcCBiZWZvcmUgdXNpbmcgZ2V0Q2VudGVyKClcIil9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZHN9LGFkZExhdExuZzpmdW5jdGlvbih0LGUpe3JldHVybiBlPWV8fHRoaXMuX2RlZmF1bHRTaGFwZSgpLHQ9dyh0KSxlLnB1c2godCksdGhpcy5fYm91bmRzLmV4dGVuZCh0KSx0aGlzLnJlZHJhdygpfSxfc2V0TGF0TG5nczpmdW5jdGlvbih0KXt0aGlzLl9ib3VuZHM9bmV3IHMsdGhpcy5fbGF0bG5ncz10aGlzLl9jb252ZXJ0TGF0TG5ncyh0KX0sX2RlZmF1bHRTaGFwZTpmdW5jdGlvbigpe3JldHVybiBJKHRoaXMuX2xhdGxuZ3MpP3RoaXMuX2xhdGxuZ3M6dGhpcy5fbGF0bG5nc1swXX0sX2NvbnZlcnRMYXRMbmdzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxpPUkodCksbj0wLG89dC5sZW5ndGg7bjxvO24rKylpPyhlW25dPXcodFtuXSksdGhpcy5fYm91bmRzLmV4dGVuZChlW25dKSk6ZVtuXT10aGlzLl9jb252ZXJ0TGF0TG5ncyh0W25dKTtyZXR1cm4gZX0sX3Byb2plY3Q6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZjt0aGlzLl9yaW5ncz1bXSx0aGlzLl9wcm9qZWN0TGF0bG5ncyh0aGlzLl9sYXRsbmdzLHRoaXMuX3JpbmdzLHQpLHRoaXMuX2JvdW5kcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpJiYodGhpcy5fcmF3UHhCb3VuZHM9dCx0aGlzLl91cGRhdGVCb3VuZHMoKSl9LF91cGRhdGVCb3VuZHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jbGlja1RvbGVyYW5jZSgpLHQ9bmV3IHAodCx0KTt0aGlzLl9yYXdQeEJvdW5kcyYmKHRoaXMuX3B4Qm91bmRzPW5ldyBmKFt0aGlzLl9yYXdQeEJvdW5kcy5taW4uc3VidHJhY3QodCksdGhpcy5fcmF3UHhCb3VuZHMubWF4LmFkZCh0KV0pKX0sX3Byb2plY3RMYXRsbmdzOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvLHM9dFswXWluc3RhbmNlb2YgdixyPXQubGVuZ3RoO2lmKHMpe2ZvcihvPVtdLG49MDtuPHI7bisrKW9bbl09dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0W25dKSxpLmV4dGVuZChvW25dKTtlLnB1c2gobyl9ZWxzZSBmb3Iobj0wO248cjtuKyspdGhpcy5fcHJvamVjdExhdGxuZ3ModFtuXSxlLGkpfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlbmRlcmVyLl9ib3VuZHM7aWYodGhpcy5fcGFydHM9W10sdGhpcy5fcHhCb3VuZHMmJnRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHModCkpaWYodGhpcy5vcHRpb25zLm5vQ2xpcCl0aGlzLl9wYXJ0cz10aGlzLl9yaW5ncztlbHNlIGZvcih2YXIgZSxpLG4sbyxzPXRoaXMuX3BhcnRzLHI9MCxhPTAsaD10aGlzLl9yaW5ncy5sZW5ndGg7cjxoO3IrKylmb3IoZT0wLGk9KG89dGhpcy5fcmluZ3Nbcl0pLmxlbmd0aDtlPGktMTtlKyspKG49bmkob1tlXSxvW2UrMV0sdCxlLCEwKSkmJihzW2FdPXNbYV18fFtdLHNbYV0ucHVzaChuWzBdKSxuWzFdPT09b1tlKzFdJiZlIT09aS0yfHwoc1thXS5wdXNoKG5bMV0pLGErKykpfSxfc2ltcGxpZnlQb2ludHM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fcGFydHMsZT10aGlzLm9wdGlvbnMuc21vb3RoRmFjdG9yLGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspdFtpXT1laSh0W2ldLGUpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5fbWFwJiYodGhpcy5fY2xpcFBvaW50cygpLHRoaXMuX3NpbXBsaWZ5UG9pbnRzKCksdGhpcy5fdXBkYXRlUGF0aCgpKX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9yZW5kZXJlci5fdXBkYXRlUG9seSh0aGlzKX0sX2NvbnRhaW5zUG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLG8scyxyLGEsaD10aGlzLl9jbGlja1RvbGVyYW5jZSgpO2lmKHRoaXMuX3B4Qm91bmRzJiZ0aGlzLl9weEJvdW5kcy5jb250YWlucyh0KSlmb3IoaT0wLHM9dGhpcy5fcGFydHMubGVuZ3RoO2k8cztpKyspZm9yKG49MCxvPShyPShhPXRoaXMuX3BhcnRzW2ldKS5sZW5ndGgpLTE7bjxyO289bisrKWlmKChlfHwwIT09bikmJmlpKHQsYVtvXSxhW25dKTw9aClyZXR1cm4hMDtyZXR1cm4hMX19KTt5aS5fZmxhdD1haTt2YXIgeGk9eWkuZXh0ZW5kKHtvcHRpb25zOntmaWxsOiEwfSxpc0VtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuX2xhdGxuZ3MubGVuZ3RofHwhdGhpcy5fbGF0bG5nc1swXS5sZW5ndGh9LGdldENlbnRlcjpmdW5jdGlvbigpe2lmKHRoaXMuX21hcClyZXR1cm4gJGUodGhpcy5fZGVmYXVsdFNoYXBlKCksdGhpcy5fbWFwLm9wdGlvbnMuY3JzKTt0aHJvdyBuZXcgRXJyb3IoXCJNdXN0IGFkZCBsYXllciB0byBtYXAgYmVmb3JlIHVzaW5nIGdldENlbnRlcigpXCIpfSxfY29udmVydExhdExuZ3M6ZnVuY3Rpb24odCl7dmFyIHQ9eWkucHJvdG90eXBlLl9jb252ZXJ0TGF0TG5ncy5jYWxsKHRoaXMsdCksZT10Lmxlbmd0aDtyZXR1cm4gMjw9ZSYmdFswXWluc3RhbmNlb2YgdiYmdFswXS5lcXVhbHModFtlLTFdKSYmdC5wb3AoKSx0fSxfc2V0TGF0TG5nczpmdW5jdGlvbih0KXt5aS5wcm90b3R5cGUuX3NldExhdExuZ3MuY2FsbCh0aGlzLHQpLEkodGhpcy5fbGF0bG5ncykmJih0aGlzLl9sYXRsbmdzPVt0aGlzLl9sYXRsbmdzXSl9LF9kZWZhdWx0U2hhcGU6ZnVuY3Rpb24oKXtyZXR1cm4oSSh0aGlzLl9sYXRsbmdzWzBdKT90aGlzLl9sYXRsbmdzOnRoaXMuX2xhdGxuZ3NbMF0pWzBdfSxfY2xpcFBvaW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlbmRlcmVyLl9ib3VuZHMsZT10aGlzLm9wdGlvbnMud2VpZ2h0LGU9bmV3IHAoZSxlKSx0PW5ldyBmKHQubWluLnN1YnRyYWN0KGUpLHQubWF4LmFkZChlKSk7aWYodGhpcy5fcGFydHM9W10sdGhpcy5fcHhCb3VuZHMmJnRoaXMuX3B4Qm91bmRzLmludGVyc2VjdHModCkpaWYodGhpcy5vcHRpb25zLm5vQ2xpcCl0aGlzLl9wYXJ0cz10aGlzLl9yaW5ncztlbHNlIGZvcih2YXIgaSxuPTAsbz10aGlzLl9yaW5ncy5sZW5ndGg7bjxvO24rKykoaT1KZSh0aGlzLl9yaW5nc1tuXSx0LCEwKSkubGVuZ3RoJiZ0aGlzLl9wYXJ0cy5wdXNoKGkpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3JlbmRlcmVyLl91cGRhdGVQb2x5KHRoaXMsITApfSxfY29udGFpbnNQb2ludDpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbyxzLHIsYSxoLGw9ITE7aWYoIXRoaXMuX3B4Qm91bmRzfHwhdGhpcy5fcHhCb3VuZHMuY29udGFpbnModCkpcmV0dXJuITE7Zm9yKG89MCxhPXRoaXMuX3BhcnRzLmxlbmd0aDtvPGE7bysrKWZvcihzPTAscj0oaD0oZT10aGlzLl9wYXJ0c1tvXSkubGVuZ3RoKS0xO3M8aDtyPXMrKylpPWVbc10sbj1lW3JdLGkueT50LnkhPW4ueT50LnkmJnQueDwobi54LWkueCkqKHQueS1pLnkpLyhuLnktaS55KStpLngmJihsPSFsKTtyZXR1cm4gbHx8eWkucHJvdG90eXBlLl9jb250YWluc1BvaW50LmNhbGwodGhpcyx0LCEwKX19KTt2YXIgd2k9Y2kuZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQsZSl7Yyh0aGlzLGUpLHRoaXMuX2xheWVycz17fSx0JiZ0aGlzLmFkZERhdGEodCl9LGFkZERhdGE6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLG89ZCh0KT90OnQuZmVhdHVyZXM7aWYobyl7Zm9yKGU9MCxpPW8ubGVuZ3RoO2U8aTtlKyspKChuPW9bZV0pLmdlb21ldHJpZXN8fG4uZ2VvbWV0cnl8fG4uZmVhdHVyZXN8fG4uY29vcmRpbmF0ZXMpJiZ0aGlzLmFkZERhdGEobik7cmV0dXJuIHRoaXN9dmFyIHMscj10aGlzLm9wdGlvbnM7cmV0dXJuKCFyLmZpbHRlcnx8ci5maWx0ZXIodCkpJiYocz1iaSh0LHIpKT8ocy5mZWF0dXJlPVppKHQpLHMuZGVmYXVsdE9wdGlvbnM9cy5vcHRpb25zLHRoaXMucmVzZXRTdHlsZShzKSxyLm9uRWFjaEZlYXR1cmUmJnIub25FYWNoRmVhdHVyZSh0LHMpLHRoaXMuYWRkTGF5ZXIocykpOnRoaXN9LHJlc2V0U3R5bGU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5lYWNoTGF5ZXIodGhpcy5yZXNldFN0eWxlLHRoaXMpOih0Lm9wdGlvbnM9bCh7fSx0LmRlZmF1bHRPcHRpb25zKSx0aGlzLl9zZXRMYXllclN0eWxlKHQsdGhpcy5vcHRpb25zLnN0eWxlKSx0aGlzKX0sc2V0U3R5bGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe3RoaXMuX3NldExheWVyU3R5bGUodCxlKX0sdGhpcyl9LF9zZXRMYXllclN0eWxlOmZ1bmN0aW9uKHQsZSl7dC5zZXRTdHlsZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUodC5mZWF0dXJlKSksdC5zZXRTdHlsZShlKSl9fSk7ZnVuY3Rpb24gYmkodCxlKXt2YXIgaSxuLG8scyxyPVwiRmVhdHVyZVwiPT09dC50eXBlP3QuZ2VvbWV0cnk6dCxhPXI/ci5jb29yZGluYXRlczpudWxsLGg9W10sbD1lJiZlLnBvaW50VG9MYXllcix1PWUmJmUuY29vcmRzVG9MYXRMbmd8fExpO2lmKCFhJiYhcilyZXR1cm4gbnVsbDtzd2l0Y2goci50eXBlKXtjYXNlXCJQb2ludFwiOnJldHVybiBQaShsLHQsaT11KGEpLGUpO2Nhc2VcIk11bHRpUG9pbnRcIjpmb3Iobz0wLHM9YS5sZW5ndGg7bzxzO28rKylpPXUoYVtvXSksaC5wdXNoKFBpKGwsdCxpLGUpKTtyZXR1cm4gbmV3IGNpKGgpO2Nhc2VcIkxpbmVTdHJpbmdcIjpjYXNlXCJNdWx0aUxpbmVTdHJpbmdcIjpyZXR1cm4gbj1UaShhLFwiTGluZVN0cmluZ1wiPT09ci50eXBlPzA6MSx1KSxuZXcgeWkobixlKTtjYXNlXCJQb2x5Z29uXCI6Y2FzZVwiTXVsdGlQb2x5Z29uXCI6cmV0dXJuIG49VGkoYSxcIlBvbHlnb25cIj09PXIudHlwZT8xOjIsdSksbmV3IHhpKG4sZSk7Y2FzZVwiR2VvbWV0cnlDb2xsZWN0aW9uXCI6Zm9yKG89MCxzPXIuZ2VvbWV0cmllcy5sZW5ndGg7bzxzO28rKyl7dmFyIGM9Ymkoe2dlb21ldHJ5OnIuZ2VvbWV0cmllc1tvXSx0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6dC5wcm9wZXJ0aWVzfSxlKTtjJiZoLnB1c2goYyl9cmV0dXJuIG5ldyBjaShoKTtjYXNlXCJGZWF0dXJlQ29sbGVjdGlvblwiOmZvcihvPTAscz1yLmZlYXR1cmVzLmxlbmd0aDtvPHM7bysrKXt2YXIgZD1iaShyLmZlYXR1cmVzW29dLGUpO2QmJmgucHVzaChkKX1yZXR1cm4gbmV3IGNpKGgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBHZW9KU09OIG9iamVjdC5cIil9fWZ1bmN0aW9uIFBpKHQsZSxpLG4pe3JldHVybiB0P3QoZSxpKTpuZXcgbWkoaSxuJiZuLm1hcmtlcnNJbmhlcml0T3B0aW9ucyYmbil9ZnVuY3Rpb24gTGkodCl7cmV0dXJuIG5ldyB2KHRbMV0sdFswXSx0WzJdKX1mdW5jdGlvbiBUaSh0LGUsaSl7Zm9yKHZhciBuLG89W10scz0wLHI9dC5sZW5ndGg7czxyO3MrKyluPWU/VGkodFtzXSxlLTEsaSk6KGl8fExpKSh0W3NdKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gTWkodCxlKXtyZXR1cm4gdm9pZCAwIT09KHQ9dyh0KSkuYWx0P1tpKHQubG5nLGUpLGkodC5sYXQsZSksaSh0LmFsdCxlKV06W2kodC5sbmcsZSksaSh0LmxhdCxlKV19ZnVuY3Rpb24gemkodCxlLGksbil7Zm9yKHZhciBvPVtdLHM9MCxyPXQubGVuZ3RoO3M8cjtzKyspby5wdXNoKGU/emkodFtzXSxJKHRbc10pPzA6ZS0xLGksbik6TWkodFtzXSxuKSk7cmV0dXJuIWUmJmkmJjA8by5sZW5ndGgmJm8ucHVzaChvWzBdLnNsaWNlKCkpLG99ZnVuY3Rpb24gQ2kodCxlKXtyZXR1cm4gdC5mZWF0dXJlP2woe30sdC5mZWF0dXJlLHtnZW9tZXRyeTplfSk6WmkoZSl9ZnVuY3Rpb24gWmkodCl7cmV0dXJuXCJGZWF0dXJlXCI9PT10LnR5cGV8fFwiRmVhdHVyZUNvbGxlY3Rpb25cIj09PXQudHlwZT90Ont0eXBlOlwiRmVhdHVyZVwiLHByb3BlcnRpZXM6e30sZ2VvbWV0cnk6dH19VHQ9e3RvR2VvSlNPTjpmdW5jdGlvbih0KXtyZXR1cm4gQ2kodGhpcyx7dHlwZTpcIlBvaW50XCIsY29vcmRpbmF0ZXM6TWkodGhpcy5nZXRMYXRMbmcoKSx0KX0pfX07ZnVuY3Rpb24gU2kodCxlKXtyZXR1cm4gbmV3IHdpKHQsZSl9bWkuaW5jbHVkZShUdCksdmkuaW5jbHVkZShUdCksZ2kuaW5jbHVkZShUdCkseWkuaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBlPSFJKHRoaXMuX2xhdGxuZ3MpO3JldHVybiBDaSh0aGlzLHt0eXBlOihlP1wiTXVsdGlcIjpcIlwiKStcIkxpbmVTdHJpbmdcIixjb29yZGluYXRlczp6aSh0aGlzLl9sYXRsbmdzLGU/MTowLCExLHQpfSl9fSkseGkuaW5jbHVkZSh7dG9HZW9KU09OOmZ1bmN0aW9uKHQpe3ZhciBlPSFJKHRoaXMuX2xhdGxuZ3MpLGk9ZSYmIUkodGhpcy5fbGF0bG5nc1swXSksdD16aSh0aGlzLl9sYXRsbmdzLGk/MjplPzE6MCwhMCx0KTtyZXR1cm4gQ2kodGhpcyx7dHlwZTooaT9cIk11bHRpXCI6XCJcIikrXCJQb2x5Z29uXCIsY29vcmRpbmF0ZXM6dD1lP3Q6W3RdfSl9fSksdWkuaW5jbHVkZSh7dG9NdWx0aVBvaW50OmZ1bmN0aW9uKGUpe3ZhciBpPVtdO3JldHVybiB0aGlzLmVhY2hMYXllcihmdW5jdGlvbih0KXtpLnB1c2godC50b0dlb0pTT04oZSkuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpfSksQ2kodGhpcyx7dHlwZTpcIk11bHRpUG9pbnRcIixjb29yZGluYXRlczppfSl9LHRvR2VvSlNPTjpmdW5jdGlvbihlKXt2YXIgaSxuLHQ9dGhpcy5mZWF0dXJlJiZ0aGlzLmZlYXR1cmUuZ2VvbWV0cnkmJnRoaXMuZmVhdHVyZS5nZW9tZXRyeS50eXBlO3JldHVyblwiTXVsdGlQb2ludFwiPT09dD90aGlzLnRvTXVsdGlQb2ludChlKTooaT1cIkdlb21ldHJ5Q29sbGVjdGlvblwiPT09dCxuPVtdLHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uKHQpe3QudG9HZW9KU09OJiYodD10LnRvR2VvSlNPTihlKSxpP24ucHVzaCh0Lmdlb21ldHJ5KTpcIkZlYXR1cmVDb2xsZWN0aW9uXCI9PT0odD1aaSh0KSkudHlwZT9uLnB1c2guYXBwbHkobix0LmZlYXR1cmVzKTpuLnB1c2godCkpfSksaT9DaSh0aGlzLHtnZW9tZXRyaWVzOm4sdHlwZTpcIkdlb21ldHJ5Q29sbGVjdGlvblwifSk6e3R5cGU6XCJGZWF0dXJlQ29sbGVjdGlvblwiLGZlYXR1cmVzOm59KX19KTt2YXIgTXQ9U2ksRWk9by5leHRlbmQoe29wdGlvbnM6e29wYWNpdHk6MSxhbHQ6XCJcIixpbnRlcmFjdGl2ZTohMSxjcm9zc09yaWdpbjohMSxlcnJvck92ZXJsYXlVcmw6XCJcIix6SW5kZXg6MSxjbGFzc05hbWU6XCJcIn0saW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUsaSl7dGhpcy5fdXJsPXQsdGhpcy5fYm91bmRzPWcoZSksYyh0aGlzLGkpfSxvbkFkZDpmdW5jdGlvbigpe3RoaXMuX2ltYWdlfHwodGhpcy5faW5pdEltYWdlKCksdGhpcy5vcHRpb25zLm9wYWNpdHk8MSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihNKHRoaXMuX2ltYWdlLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKSksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpLHRoaXMuX3Jlc2V0KCl9LG9uUmVtb3ZlOmZ1bmN0aW9uKCl7VCh0aGlzLl9pbWFnZSksdGhpcy5vcHRpb25zLmludGVyYWN0aXZlJiZ0aGlzLnJlbW92ZUludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKX0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl9pbWFnZSYmdGhpcy5fdXBkYXRlT3BhY2l0eSgpLHRoaXN9LHNldFN0eWxlOmZ1bmN0aW9uKHQpe3JldHVybiB0Lm9wYWNpdHkmJnRoaXMuc2V0T3BhY2l0eSh0Lm9wYWNpdHkpLHRoaXN9LGJyaW5nVG9Gcm9udDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJmZlKHRoaXMuX2ltYWdlKSx0aGlzfSxicmluZ1RvQmFjazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJmdlKHRoaXMuX2ltYWdlKSx0aGlzfSxzZXRVcmw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VybD10LHRoaXMuX2ltYWdlJiYodGhpcy5faW1hZ2Uuc3JjPXQpLHRoaXN9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYm91bmRzPWcodCksdGhpcy5fbWFwJiZ0aGlzLl9yZXNldCgpLHRoaXN9LGdldEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXt6b29tOnRoaXMuX3Jlc2V0LHZpZXdyZXNldDp0aGlzLl9yZXNldH07cmV0dXJuIHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LHNldFpJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLnpJbmRleD10LHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXN9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZHN9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW1hZ2V9LF9pbml0SW1hZ2U6ZnVuY3Rpb24oKXt2YXIgdD1cIklNR1wiPT09dGhpcy5fdXJsLnRhZ05hbWUsZT10aGlzLl9pbWFnZT10P3RoaXMuX3VybDpQKFwiaW1nXCIpO00oZSxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZNKGUsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmTShlLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGUub25zZWxlY3RzdGFydD11LGUub25tb3VzZW1vdmU9dSxlLm9ubG9hZD1hKHRoaXMuZmlyZSx0aGlzLFwibG9hZFwiKSxlLm9uZXJyb3I9YSh0aGlzLl9vdmVybGF5T25FcnJvcix0aGlzLFwiZXJyb3JcIiksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGUuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLHRoaXMub3B0aW9ucy56SW5kZXgmJnRoaXMuX3VwZGF0ZVpJbmRleCgpLHQ/dGhpcy5fdXJsPWUuc3JjOihlLnNyYz10aGlzLl91cmwsZS5hbHQ9dGhpcy5vcHRpb25zLmFsdCl9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHQuem9vbSksdD10aGlzLl9tYXAuX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHModGhpcy5fYm91bmRzLHQuem9vbSx0LmNlbnRlcikubWluO2JlKHRoaXMuX2ltYWdlLHQsZSl9LF9yZXNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ltYWdlLGU9bmV3IGYodGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9ib3VuZHMuZ2V0Tm9ydGhXZXN0KCkpLHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldFNvdXRoRWFzdCgpKSksaT1lLmdldFNpemUoKTtaKHQsZS5taW4pLHQuc3R5bGUud2lkdGg9aS54K1wicHhcIix0LnN0eWxlLmhlaWdodD1pLnkrXCJweFwifSxfdXBkYXRlT3BhY2l0eTpmdW5jdGlvbigpe0ModGhpcy5faW1hZ2UsdGhpcy5vcHRpb25zLm9wYWNpdHkpfSxfdXBkYXRlWkluZGV4OmZ1bmN0aW9uKCl7dGhpcy5faW1hZ2UmJnZvaWQgMCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJm51bGwhPT10aGlzLm9wdGlvbnMuekluZGV4JiYodGhpcy5faW1hZ2Uuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfb3ZlcmxheU9uRXJyb3I6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoXCJlcnJvclwiKTt2YXIgdD10aGlzLm9wdGlvbnMuZXJyb3JPdmVybGF5VXJsO3QmJnRoaXMuX3VybCE9PXQmJih0aGlzLl91cmw9dCx0aGlzLl9pbWFnZS5zcmM9dCl9LGdldENlbnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9ib3VuZHMuZ2V0Q2VudGVyKCl9fSksa2k9RWkuZXh0ZW5kKHtvcHRpb25zOnthdXRvcGxheTohMCxsb29wOiEwLGtlZXBBc3BlY3RSYXRpbzohMCxtdXRlZDohMSxwbGF5c0lubGluZTohMH0sX2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciB0PVwiVklERU9cIj09PXRoaXMuX3VybC50YWdOYW1lLGU9dGhpcy5faW1hZ2U9dD90aGlzLl91cmw6UChcInZpZGVvXCIpO2lmKE0oZSxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZNKGUsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmTShlLHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLGUub25zZWxlY3RzdGFydD11LGUub25tb3VzZW1vdmU9dSxlLm9ubG9hZGVkZGF0YT1hKHRoaXMuZmlyZSx0aGlzLFwibG9hZFwiKSx0KXtmb3IodmFyIGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNvdXJjZVwiKSxuPVtdLG89MDtvPGkubGVuZ3RoO28rKyluLnB1c2goaVtvXS5zcmMpO3RoaXMuX3VybD0wPGkubGVuZ3RoP246W2Uuc3JjXX1lbHNle2QodGhpcy5fdXJsKXx8KHRoaXMuX3VybD1bdGhpcy5fdXJsXSksIXRoaXMub3B0aW9ucy5rZWVwQXNwZWN0UmF0aW8mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0eWxlLFwib2JqZWN0Rml0XCIpJiYoZS5zdHlsZS5vYmplY3RGaXQ9XCJmaWxsXCIpLGUuYXV0b3BsYXk9ISF0aGlzLm9wdGlvbnMuYXV0b3BsYXksZS5sb29wPSEhdGhpcy5vcHRpb25zLmxvb3AsZS5tdXRlZD0hIXRoaXMub3B0aW9ucy5tdXRlZCxlLnBsYXlzSW5saW5lPSEhdGhpcy5vcHRpb25zLnBsYXlzSW5saW5lO2Zvcih2YXIgcz0wO3M8dGhpcy5fdXJsLmxlbmd0aDtzKyspe3ZhciByPVAoXCJzb3VyY2VcIik7ci5zcmM9dGhpcy5fdXJsW3NdLGUuYXBwZW5kQ2hpbGQocil9fX19KTt2YXIgT2k9RWkuZXh0ZW5kKHtfaW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW1hZ2U9dGhpcy5fdXJsO00odCxcImxlYWZsZXQtaW1hZ2UtbGF5ZXJcIiksdGhpcy5fem9vbUFuaW1hdGVkJiZNKHQsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIiksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmTSh0LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHQub25zZWxlY3RzdGFydD11LHQub25tb3VzZW1vdmU9dX19KTt2YXIgQWk9by5leHRlbmQoe29wdGlvbnM6e2ludGVyYWN0aXZlOiExLG9mZnNldDpbMCwwXSxjbGFzc05hbWU6XCJcIixwYW5lOnZvaWQgMCxjb250ZW50OlwiXCJ9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0JiYodCBpbnN0YW5jZW9mIHZ8fGQodCkpPyh0aGlzLl9sYXRsbmc9dyh0KSxjKHRoaXMsZSkpOihjKHRoaXMsdCksdGhpcy5fc291cmNlPWUpLHRoaXMub3B0aW9ucy5jb250ZW50JiYodGhpcy5fY29udGVudD10aGlzLm9wdGlvbnMuY29udGVudCl9LG9wZW5PbjpmdW5jdGlvbih0KXtyZXR1cm4odD1hcmd1bWVudHMubGVuZ3RoP3Q6dGhpcy5fc291cmNlLl9tYXApLmhhc0xheWVyKHRoaXMpfHx0LmFkZExheWVyKHRoaXMpLHRoaXN9LGNsb3NlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmdGhpcy5fbWFwLnJlbW92ZUxheWVyKHRoaXMpLHRoaXN9LHRvZ2dsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbWFwP3RoaXMuY2xvc2UoKTooYXJndW1lbnRzLmxlbmd0aD90aGlzLl9zb3VyY2U9dDp0PXRoaXMuX3NvdXJjZSx0aGlzLl9wcmVwYXJlT3BlbigpLHRoaXMub3Blbk9uKHQuX21hcCkpLHRoaXN9LG9uQWRkOmZ1bmN0aW9uKHQpe3RoaXMuX3pvb21BbmltYXRlZD10Ll96b29tQW5pbWF0ZWQsdGhpcy5fY29udGFpbmVyfHx0aGlzLl9pbml0TGF5b3V0KCksdC5fZmFkZUFuaW1hdGVkJiZDKHRoaXMuX2NvbnRhaW5lciwwKSxjbGVhclRpbWVvdXQodGhpcy5fcmVtb3ZlVGltZW91dCksdGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKSx0aGlzLnVwZGF0ZSgpLHQuX2ZhZGVBbmltYXRlZCYmQyh0aGlzLl9jb250YWluZXIsMSksdGhpcy5icmluZ1RvRnJvbnQoKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJihNKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5hZGRJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9jb250YWluZXIpKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7dC5fZmFkZUFuaW1hdGVkPyhDKHRoaXMuX2NvbnRhaW5lciwwKSx0aGlzLl9yZW1vdmVUaW1lb3V0PXNldFRpbWVvdXQoYShULHZvaWQgMCx0aGlzLl9jb250YWluZXIpLDIwMCkpOlQodGhpcy5fY29udGFpbmVyKSx0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUmJih6KHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9jb250YWluZXIpKX0sZ2V0TGF0TG5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhdGxuZ30sc2V0TGF0TG5nOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYXRsbmc9dyh0KSx0aGlzLl9tYXAmJih0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX2FkanVzdFBhbigpKSx0aGlzfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9LHNldENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NvbnRlbnQ9dCx0aGlzLnVwZGF0ZSgpLHRoaXN9LGdldEVsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJih0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiLHRoaXMuX3VwZGF0ZUNvbnRlbnQoKSx0aGlzLl91cGRhdGVMYXlvdXQoKSx0aGlzLl91cGRhdGVQb3NpdGlvbigpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PVwiXCIsdGhpcy5fYWRqdXN0UGFuKCkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17em9vbTp0aGlzLl91cGRhdGVQb3NpdGlvbix2aWV3cmVzZXQ6dGhpcy5fdXBkYXRlUG9zaXRpb259O3JldHVybiB0aGlzLl96b29tQW5pbWF0ZWQmJih0Lnpvb21hbmltPXRoaXMuX2FuaW1hdGVab29tKSx0fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiZmZSh0aGlzLl9jb250YWluZXIpLHRoaXN9LGJyaW5nVG9CYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcCYmZ2UodGhpcy5fY29udGFpbmVyKSx0aGlzfSxfcHJlcGFyZU9wZW46ZnVuY3Rpb24odCl7aWYoIShpPXRoaXMuX3NvdXJjZSkuX21hcClyZXR1cm4hMTtpZihpIGluc3RhbmNlb2YgY2kpe3ZhciBlLGk9bnVsbCxuPXRoaXMuX3NvdXJjZS5fbGF5ZXJzO2ZvcihlIGluIG4paWYobltlXS5fbWFwKXtpPW5bZV07YnJlYWt9aWYoIWkpcmV0dXJuITE7dGhpcy5fc291cmNlPWl9aWYoIXQpaWYoaS5nZXRDZW50ZXIpdD1pLmdldENlbnRlcigpO2Vsc2UgaWYoaS5nZXRMYXRMbmcpdD1pLmdldExhdExuZygpO2Vsc2V7aWYoIWkuZ2V0Qm91bmRzKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBnZXQgc291cmNlIGxheWVyIExhdExuZy5cIik7dD1pLmdldEJvdW5kcygpLmdldENlbnRlcigpfXJldHVybiB0aGlzLnNldExhdExuZyh0KSx0aGlzLl9tYXAmJnRoaXMudXBkYXRlKCksITB9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fY29udGVudCl7dmFyIHQ9dGhpcy5fY29udGVudE5vZGUsZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLl9jb250ZW50P3RoaXMuX2NvbnRlbnQodGhpcy5fc291cmNlfHx0aGlzKTp0aGlzLl9jb250ZW50O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXQuaW5uZXJIVE1MPWU7ZWxzZXtmb3IoO3QuaGFzQ2hpbGROb2RlcygpOyl0LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCk7dC5hcHBlbmRDaGlsZChlKX10aGlzLmZpcmUoXCJjb250ZW50dXBkYXRlXCIpfX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQsZSxpO3RoaXMuX21hcCYmKGU9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLHQ9bSh0aGlzLm9wdGlvbnMub2Zmc2V0KSxpPXRoaXMuX2dldEFuY2hvcigpLHRoaXMuX3pvb21BbmltYXRlZD9aKHRoaXMuX2NvbnRhaW5lcixlLmFkZChpKSk6dD10LmFkZChlKS5hZGQoaSksZT10aGlzLl9jb250YWluZXJCb3R0b209LXQueSxpPXRoaXMuX2NvbnRhaW5lckxlZnQ9LU1hdGgucm91bmQodGhpcy5fY29udGFpbmVyV2lkdGgvMikrdC54LHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b209ZStcInB4XCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmxlZnQ9aStcInB4XCIpfSxfZ2V0QW5jaG9yOmZ1bmN0aW9uKCl7cmV0dXJuWzAsMF19fSksQmk9KEEuaW5jbHVkZSh7X2luaXRPdmVybGF5OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBvPWU7cmV0dXJuIG8gaW5zdGFuY2VvZiB0fHwobz1uZXcgdChuKS5zZXRDb250ZW50KGUpKSxpJiZvLnNldExhdExuZyhpKSxvfX0pLG8uaW5jbHVkZSh7X2luaXRPdmVybGF5OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBvPWk7cmV0dXJuIG8gaW5zdGFuY2VvZiB0PyhjKG8sbiksby5fc291cmNlPXRoaXMpOihvPWUmJiFuP2U6bmV3IHQobix0aGlzKSkuc2V0Q29udGVudChpKSxvfX0pLEFpLmV4dGVuZCh7b3B0aW9uczp7cGFuZTpcInBvcHVwUGFuZVwiLG9mZnNldDpbMCw3XSxtYXhXaWR0aDozMDAsbWluV2lkdGg6NTAsbWF4SGVpZ2h0Om51bGwsYXV0b1BhbjohMCxhdXRvUGFuUGFkZGluZ1RvcExlZnQ6bnVsbCxhdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0Om51bGwsYXV0b1BhblBhZGRpbmc6WzUsNV0sa2VlcEluVmlldzohMSxjbG9zZUJ1dHRvbjohMCxhdXRvQ2xvc2U6ITAsY2xvc2VPbkVzY2FwZUtleTohMCxjbGFzc05hbWU6XCJcIn0sb3Blbk9uOmZ1bmN0aW9uKHQpe3JldHVybiEodD1hcmd1bWVudHMubGVuZ3RoP3Q6dGhpcy5fc291cmNlLl9tYXApLmhhc0xheWVyKHRoaXMpJiZ0Ll9wb3B1cCYmdC5fcG9wdXAub3B0aW9ucy5hdXRvQ2xvc2UmJnQucmVtb3ZlTGF5ZXIodC5fcG9wdXApLHQuX3BvcHVwPXRoaXMsQWkucHJvdG90eXBlLm9wZW5Pbi5jYWxsKHRoaXMsdCl9LG9uQWRkOmZ1bmN0aW9uKHQpe0FpLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMsdCksdC5maXJlKFwicG9wdXBvcGVuXCIse3BvcHVwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJih0aGlzLl9zb3VyY2UuZmlyZShcInBvcHVwb3BlblwiLHtwb3B1cDp0aGlzfSwhMCksdGhpcy5fc291cmNlIGluc3RhbmNlb2YgZml8fHRoaXMuX3NvdXJjZS5vbihcInByZWNsaWNrXCIsQWUpKX0sb25SZW1vdmU6ZnVuY3Rpb24odCl7QWkucHJvdG90eXBlLm9uUmVtb3ZlLmNhbGwodGhpcyx0KSx0LmZpcmUoXCJwb3B1cGNsb3NlXCIse3BvcHVwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJih0aGlzLl9zb3VyY2UuZmlyZShcInBvcHVwY2xvc2VcIix7cG9wdXA6dGhpc30sITApLHRoaXMuX3NvdXJjZSBpbnN0YW5jZW9mIGZpfHx0aGlzLl9zb3VyY2Uub2ZmKFwicHJlY2xpY2tcIixBZSkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1BaS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuKHZvaWQgMCE9PXRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2s/dGhpcy5vcHRpb25zLmNsb3NlT25DbGljazp0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykmJih0LnByZWNsaWNrPXRoaXMuY2xvc2UpLHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3JiYodC5tb3ZlZW5kPXRoaXMuX2FkanVzdFBhbiksdH0sX2luaXRMYXlvdXQ6ZnVuY3Rpb24oKXt2YXIgdD1cImxlYWZsZXQtcG9wdXBcIixlPXRoaXMuX2NvbnRhaW5lcj1QKFwiZGl2XCIsdCtcIiBcIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikrXCIgbGVhZmxldC16b29tLWFuaW1hdGVkXCIpLGk9dGhpcy5fd3JhcHBlcj1QKFwiZGl2XCIsdCtcIi1jb250ZW50LXdyYXBwZXJcIixlKTt0aGlzLl9jb250ZW50Tm9kZT1QKFwiZGl2XCIsdCtcIi1jb250ZW50XCIsaSksSWUoZSksQmUodGhpcy5fY29udGVudE5vZGUpLFMoZSxcImNvbnRleHRtZW51XCIsQWUpLHRoaXMuX3RpcENvbnRhaW5lcj1QKFwiZGl2XCIsdCtcIi10aXAtY29udGFpbmVyXCIsZSksdGhpcy5fdGlwPVAoXCJkaXZcIix0K1wiLXRpcFwiLHRoaXMuX3RpcENvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYoKGk9dGhpcy5fY2xvc2VCdXR0b249UChcImFcIix0K1wiLWNsb3NlLWJ1dHRvblwiLGUpKS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJidXR0b25cIiksaS5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsXCJDbG9zZSBwb3B1cFwiKSxpLmhyZWY9XCIjY2xvc2VcIixpLmlubmVySFRNTD0nPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JiMyMTU7PC9zcGFuPicsUyhpLFwiY2xpY2tcIixmdW5jdGlvbih0KXtPKHQpLHRoaXMuY2xvc2UoKX0sdGhpcykpfSxfdXBkYXRlTGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY29udGVudE5vZGUsZT10LnN0eWxlLGk9KGUud2lkdGg9XCJcIixlLndoaXRlU3BhY2U9XCJub3dyYXBcIix0Lm9mZnNldFdpZHRoKSxpPU1hdGgubWluKGksdGhpcy5vcHRpb25zLm1heFdpZHRoKSxpPShpPU1hdGgubWF4KGksdGhpcy5vcHRpb25zLm1pbldpZHRoKSxlLndpZHRoPWkrMStcInB4XCIsZS53aGl0ZVNwYWNlPVwiXCIsZS5oZWlnaHQ9XCJcIix0Lm9mZnNldEhlaWdodCksbj10aGlzLm9wdGlvbnMubWF4SGVpZ2h0LG89XCJsZWFmbGV0LXBvcHVwLXNjcm9sbGVkXCI7KG4mJm48aT8oZS5oZWlnaHQ9bitcInB4XCIsTSk6eikodCxvKSx0aGlzLl9jb250YWluZXJXaWR0aD10aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGh9LF9hbmltYXRlWm9vbTpmdW5jdGlvbih0KXt2YXIgdD10aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsdC56b29tLHQuY2VudGVyKSxlPXRoaXMuX2dldEFuY2hvcigpO1oodGhpcy5fY29udGFpbmVyLHQuYWRkKGUpKX0sX2FkanVzdFBhbjpmdW5jdGlvbigpe3ZhciB0LGUsaSxuLG8scyxyLGE7dGhpcy5vcHRpb25zLmF1dG9QYW4mJih0aGlzLl9tYXAuX3BhbkFuaW0mJnRoaXMuX21hcC5fcGFuQW5pbS5zdG9wKCksdGhpcy5fYXV0b3Bhbm5pbmc/dGhpcy5fYXV0b3Bhbm5pbmc9ITE6KHQ9dGhpcy5fbWFwLGU9cGFyc2VJbnQocGUodGhpcy5fY29udGFpbmVyLFwibWFyZ2luQm90dG9tXCIpLDEwKXx8MCxlPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQrZSxhPXRoaXMuX2NvbnRhaW5lcldpZHRoLChpPW5ldyBwKHRoaXMuX2NvbnRhaW5lckxlZnQsLWUtdGhpcy5fY29udGFpbmVyQm90dG9tKSkuX2FkZChQZSh0aGlzLl9jb250YWluZXIpKSxpPXQubGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQoaSksbz1tKHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZyksbj1tKHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ1RvcExlZnR8fG8pLG89bSh0aGlzLm9wdGlvbnMuYXV0b1BhblBhZGRpbmdCb3R0b21SaWdodHx8bykscz10LmdldFNpemUoKSxyPTAsaS54K2Erby54PnMueCYmKHI9aS54K2Etcy54K28ueCksaS54LXItbi54PChhPTApJiYocj1pLngtbi54KSxpLnkrZStvLnk+cy55JiYoYT1pLnkrZS1zLnkrby55KSxpLnktYS1uLnk8MCYmKGE9aS55LW4ueSksKHJ8fGEpJiYodGhpcy5vcHRpb25zLmtlZXBJblZpZXcmJih0aGlzLl9hdXRvcGFubmluZz0hMCksdC5maXJlKFwiYXV0b3BhbnN0YXJ0XCIpLnBhbkJ5KFtyLGFdKSkpKX0sX2dldEFuY2hvcjpmdW5jdGlvbigpe3JldHVybiBtKHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLl9nZXRQb3B1cEFuY2hvcj90aGlzLl9zb3VyY2UuX2dldFBvcHVwQW5jaG9yKCk6WzAsMF0pfX0pKSxJaT0oQS5tZXJnZU9wdGlvbnMoe2Nsb3NlUG9wdXBPbkNsaWNrOiEwfSksQS5pbmNsdWRlKHtvcGVuUG9wdXA6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLl9pbml0T3ZlcmxheShCaSx0LGUsaSkub3Blbk9uKHRoaXMpLHRoaXN9LGNsb3NlUG9wdXA6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9YXJndW1lbnRzLmxlbmd0aD90OnRoaXMuX3BvcHVwKSYmdC5jbG9zZSgpLHRoaXN9fSksby5pbmNsdWRlKHtiaW5kUG9wdXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcG9wdXA9dGhpcy5faW5pdE92ZXJsYXkoQmksdGhpcy5fcG9wdXAsdCxlKSx0aGlzLl9wb3B1cEhhbmRsZXJzQWRkZWR8fCh0aGlzLm9uKHtjbGljazp0aGlzLl9vcGVuUG9wdXAsa2V5cHJlc3M6dGhpcy5fb25LZXlQcmVzcyxyZW1vdmU6dGhpcy5jbG9zZVBvcHVwLG1vdmU6dGhpcy5fbW92ZVBvcHVwfSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSEwKSx0aGlzfSx1bmJpbmRQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmKHRoaXMub2ZmKHtjbGljazp0aGlzLl9vcGVuUG9wdXAsa2V5cHJlc3M6dGhpcy5fb25LZXlQcmVzcyxyZW1vdmU6dGhpcy5jbG9zZVBvcHVwLG1vdmU6dGhpcy5fbW92ZVBvcHVwfSksdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkPSExLHRoaXMuX3BvcHVwPW51bGwpLHRoaXN9LG9wZW5Qb3B1cDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJih0aGlzIGluc3RhbmNlb2YgY2l8fCh0aGlzLl9wb3B1cC5fc291cmNlPXRoaXMpLHRoaXMuX3BvcHVwLl9wcmVwYXJlT3Blbih0fHx0aGlzLl9sYXRsbmcpJiZ0aGlzLl9wb3B1cC5vcGVuT24odGhpcy5fbWFwKSksdGhpc30sY2xvc2VQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuY2xvc2UoKSx0aGlzfSx0b2dnbGVQb3B1cDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAudG9nZ2xlKHRoaXMpLHRoaXN9LGlzUG9wdXBPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuaXNPcGVuKCl9LHNldFBvcHVwQ29udGVudDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcG9wdXAmJnRoaXMuX3BvcHVwLnNldENvbnRlbnQodCksdGhpc30sZ2V0UG9wdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcG9wdXB9LF9vcGVuUG9wdXA6ZnVuY3Rpb24odCl7dmFyIGU7dGhpcy5fcG9wdXAmJnRoaXMuX21hcCYmKFJlKHQpLGU9dC5sYXllcnx8dC50YXJnZXQsdGhpcy5fcG9wdXAuX3NvdXJjZSE9PWV8fGUgaW5zdGFuY2VvZiBmaT8odGhpcy5fcG9wdXAuX3NvdXJjZT1lLHRoaXMub3BlblBvcHVwKHQubGF0bG5nKSk6dGhpcy5fbWFwLmhhc0xheWVyKHRoaXMuX3BvcHVwKT90aGlzLmNsb3NlUG9wdXAoKTp0aGlzLm9wZW5Qb3B1cCh0LmxhdGxuZykpfSxfbW92ZVBvcHVwOmZ1bmN0aW9uKHQpe3RoaXMuX3BvcHVwLnNldExhdExuZyh0LmxhdGxuZyl9LF9vbktleVByZXNzOmZ1bmN0aW9uKHQpezEzPT09dC5vcmlnaW5hbEV2ZW50LmtleUNvZGUmJnRoaXMuX29wZW5Qb3B1cCh0KX19KSxBaS5leHRlbmQoe29wdGlvbnM6e3BhbmU6XCJ0b29sdGlwUGFuZVwiLG9mZnNldDpbMCwwXSxkaXJlY3Rpb246XCJhdXRvXCIscGVybWFuZW50OiExLHN0aWNreTohMSxvcGFjaXR5Oi45fSxvbkFkZDpmdW5jdGlvbih0KXtBaS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLHQpLHRoaXMuc2V0T3BhY2l0eSh0aGlzLm9wdGlvbnMub3BhY2l0eSksdC5maXJlKFwidG9vbHRpcG9wZW5cIix7dG9vbHRpcDp0aGlzfSksdGhpcy5fc291cmNlJiYodGhpcy5hZGRFdmVudFBhcmVudCh0aGlzLl9zb3VyY2UpLHRoaXMuX3NvdXJjZS5maXJlKFwidG9vbHRpcG9wZW5cIix7dG9vbHRpcDp0aGlzfSwhMCkpfSxvblJlbW92ZTpmdW5jdGlvbih0KXtBaS5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLHQpLHQuZmlyZShcInRvb2x0aXBjbG9zZVwiLHt0b29sdGlwOnRoaXN9KSx0aGlzLl9zb3VyY2UmJih0aGlzLnJlbW92ZUV2ZW50UGFyZW50KHRoaXMuX3NvdXJjZSksdGhpcy5fc291cmNlLmZpcmUoXCJ0b29sdGlwY2xvc2VcIix7dG9vbHRpcDp0aGlzfSwhMCkpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD1BaS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMub3B0aW9ucy5wZXJtYW5lbnR8fCh0LnByZWNsaWNrPXRoaXMuY2xvc2UpLHR9LF9pbml0TGF5b3V0OmZ1bmN0aW9uKCl7dmFyIHQ9XCJsZWFmbGV0LXRvb2x0aXAgXCIrKHRoaXMub3B0aW9ucy5jbGFzc05hbWV8fFwiXCIpK1wiIGxlYWZsZXQtem9vbS1cIisodGhpcy5fem9vbUFuaW1hdGVkP1wiYW5pbWF0ZWRcIjpcImhpZGVcIik7dGhpcy5fY29udGVudE5vZGU9dGhpcy5fY29udGFpbmVyPVAoXCJkaXZcIix0KSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwidG9vbHRpcFwiKSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIixcImxlYWZsZXQtdG9vbHRpcC1cIitoKHRoaXMpKX0sX3VwZGF0ZUxheW91dDpmdW5jdGlvbigpe30sX2FkanVzdFBhbjpmdW5jdGlvbigpe30sX3NldFBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlLGk9dGhpcy5fbWFwLG49dGhpcy5fY29udGFpbmVyLG89aS5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGkuZ2V0Q2VudGVyKCkpLGk9aS5sYXllclBvaW50VG9Db250YWluZXJQb2ludCh0KSxzPXRoaXMub3B0aW9ucy5kaXJlY3Rpb24scj1uLm9mZnNldFdpZHRoLGE9bi5vZmZzZXRIZWlnaHQsaD1tKHRoaXMub3B0aW9ucy5vZmZzZXQpLGw9dGhpcy5fZ2V0QW5jaG9yKCksaT1cInRvcFwiPT09cz8oZT1yLzIsYSk6XCJib3R0b21cIj09PXM/KGU9ci8yLDApOihlPVwiY2VudGVyXCI9PT1zP3IvMjpcInJpZ2h0XCI9PT1zPzA6XCJsZWZ0XCI9PT1zP3I6aS54PG8ueD8ocz1cInJpZ2h0XCIsMCk6KHM9XCJsZWZ0XCIscisyKihoLngrbC54KSksYS8yKTt0PXQuc3VidHJhY3QobShlLGksITApKS5hZGQoaCkuYWRkKGwpLHoobixcImxlYWZsZXQtdG9vbHRpcC1yaWdodFwiKSx6KG4sXCJsZWFmbGV0LXRvb2x0aXAtbGVmdFwiKSx6KG4sXCJsZWFmbGV0LXRvb2x0aXAtdG9wXCIpLHoobixcImxlYWZsZXQtdG9vbHRpcC1ib3R0b21cIiksTShuLFwibGVhZmxldC10b29sdGlwLVwiK3MpLFoobix0KX0sX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO3RoaXMuX3NldFBvc2l0aW9uKHQpfSxzZXRPcGFjaXR5OmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5vcGFjaXR5PXQsdGhpcy5fY29udGFpbmVyJiZDKHRoaXMuX2NvbnRhaW5lcix0KX0sX2FuaW1hdGVab29tOmZ1bmN0aW9uKHQpe3Q9dGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLHQuem9vbSx0LmNlbnRlcik7dGhpcy5fc2V0UG9zaXRpb24odCl9LF9nZXRBbmNob3I6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLl9zb3VyY2UmJnRoaXMuX3NvdXJjZS5fZ2V0VG9vbHRpcEFuY2hvciYmIXRoaXMub3B0aW9ucy5zdGlja3k/dGhpcy5fc291cmNlLl9nZXRUb29sdGlwQW5jaG9yKCk6WzAsMF0pfX0pKSxSaT0oQS5pbmNsdWRlKHtvcGVuVG9vbHRpcDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuX2luaXRPdmVybGF5KElpLHQsZSxpKS5vcGVuT24odGhpcyksdGhpc30sY2xvc2VUb29sdGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNsb3NlKCksdGhpc319KSxvLmluY2x1ZGUoe2JpbmRUb29sdGlwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJnRoaXMuaXNUb29sdGlwT3BlbigpJiZ0aGlzLnVuYmluZFRvb2x0aXAoKSx0aGlzLl90b29sdGlwPXRoaXMuX2luaXRPdmVybGF5KElpLHRoaXMuX3Rvb2x0aXAsdCxlKSx0aGlzLl9pbml0VG9vbHRpcEludGVyYWN0aW9ucygpLHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQmJnRoaXMuX21hcCYmdGhpcy5fbWFwLmhhc0xheWVyKHRoaXMpJiZ0aGlzLm9wZW5Ub29sdGlwKCksdGhpc30sdW5iaW5kVG9vbHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90b29sdGlwJiYodGhpcy5faW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMoITApLHRoaXMuY2xvc2VUb29sdGlwKCksdGhpcy5fdG9vbHRpcD1udWxsKSx0aGlzfSxfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGUsaTshdCYmdGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWR8fChlPXQ/XCJvZmZcIjpcIm9uXCIsaT17cmVtb3ZlOnRoaXMuY2xvc2VUb29sdGlwLG1vdmU6dGhpcy5fbW92ZVRvb2x0aXB9LHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5wZXJtYW5lbnQ/aS5hZGQ9dGhpcy5fb3BlblRvb2x0aXA6KGkubW91c2VvdmVyPXRoaXMuX29wZW5Ub29sdGlwLGkubW91c2VvdXQ9dGhpcy5jbG9zZVRvb2x0aXAsaS5jbGljaz10aGlzLl9vcGVuVG9vbHRpcCx0aGlzLl9tYXA/dGhpcy5fYWRkRm9jdXNMaXN0ZW5lcnMoKTppLmFkZD10aGlzLl9hZGRGb2N1c0xpc3RlbmVycyksdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSYmKGkubW91c2Vtb3ZlPXRoaXMuX21vdmVUb29sdGlwKSx0aGlzW2VdKGkpLHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkPSF0KX0sb3BlblRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJih0aGlzIGluc3RhbmNlb2YgY2l8fCh0aGlzLl90b29sdGlwLl9zb3VyY2U9dGhpcyksdGhpcy5fdG9vbHRpcC5fcHJlcGFyZU9wZW4odCkmJih0aGlzLl90b29sdGlwLm9wZW5Pbih0aGlzLl9tYXApLHRoaXMuZ2V0RWxlbWVudD90aGlzLl9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyKHRoaXMpOnRoaXMuZWFjaExheWVyJiZ0aGlzLmVhY2hMYXllcih0aGlzLl9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyLHRoaXMpKSksdGhpc30sY2xvc2VUb29sdGlwOmZ1bmN0aW9uKCl7aWYodGhpcy5fdG9vbHRpcClyZXR1cm4gdGhpcy5fdG9vbHRpcC5jbG9zZSgpfSx0b2dnbGVUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJnRoaXMuX3Rvb2x0aXAudG9nZ2xlKHRoaXMpLHRoaXN9LGlzVG9vbHRpcE9wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdG9vbHRpcC5pc09wZW4oKX0sc2V0VG9vbHRpcENvbnRlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXAmJnRoaXMuX3Rvb2x0aXAuc2V0Q29udGVudCh0KSx0aGlzfSxnZXRUb29sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXB9LF9hZGRGb2N1c0xpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuZ2V0RWxlbWVudD90aGlzLl9hZGRGb2N1c0xpc3RlbmVyc09uTGF5ZXIodGhpcyk6dGhpcy5lYWNoTGF5ZXImJnRoaXMuZWFjaExheWVyKHRoaXMuX2FkZEZvY3VzTGlzdGVuZXJzT25MYXllcix0aGlzKX0sX2FkZEZvY3VzTGlzdGVuZXJzT25MYXllcjpmdW5jdGlvbih0KXt2YXIgZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldEVsZW1lbnQmJnQuZ2V0RWxlbWVudCgpO2UmJihTKGUsXCJmb2N1c1wiLGZ1bmN0aW9uKCl7dGhpcy5fdG9vbHRpcC5fc291cmNlPXQsdGhpcy5vcGVuVG9vbHRpcCgpfSx0aGlzKSxTKGUsXCJibHVyXCIsdGhpcy5jbG9zZVRvb2x0aXAsdGhpcykpfSxfc2V0QXJpYURlc2NyaWJlZEJ5T25MYXllcjpmdW5jdGlvbih0KXt0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0RWxlbWVudCYmdC5nZXRFbGVtZW50KCk7dCYmdC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsdGhpcy5fdG9vbHRpcC5fY29udGFpbmVyLmlkKX0sX29wZW5Ub29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBlO3RoaXMuX3Rvb2x0aXAmJnRoaXMuX21hcCYmKHRoaXMuX21hcC5kcmFnZ2luZyYmdGhpcy5fbWFwLmRyYWdnaW5nLm1vdmluZygpJiYhdGhpcy5fb3Blbk9uY2VGbGFnPyh0aGlzLl9vcGVuT25jZUZsYWc9ITAsKGU9dGhpcykuX21hcC5vbmNlKFwibW92ZWVuZFwiLGZ1bmN0aW9uKCl7ZS5fb3Blbk9uY2VGbGFnPSExLGUuX29wZW5Ub29sdGlwKHQpfSkpOih0aGlzLl90b29sdGlwLl9zb3VyY2U9dC5sYXllcnx8dC50YXJnZXQsdGhpcy5vcGVuVG9vbHRpcCh0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5P3QubGF0bG5nOnZvaWQgMCkpKX0sX21vdmVUb29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBlPXQubGF0bG5nO3RoaXMuX3Rvb2x0aXAub3B0aW9ucy5zdGlja3kmJnQub3JpZ2luYWxFdmVudCYmKHQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQub3JpZ2luYWxFdmVudCksdD10aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodCksZT10aGlzLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKHQpKSx0aGlzLl90b29sdGlwLnNldExhdExuZyhlKX19KSxkaS5leHRlbmQoe29wdGlvbnM6e2ljb25TaXplOlsxMiwxMl0saHRtbDohMSxiZ1BvczpudWxsLGNsYXNzTmFtZTpcImxlYWZsZXQtZGl2LWljb25cIn0sY3JlYXRlSWNvbjpmdW5jdGlvbih0KXt2YXIgdD10JiZcIkRJVlwiPT09dC50YWdOYW1lP3Q6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxlPXRoaXMub3B0aW9ucztyZXR1cm4gZS5odG1sIGluc3RhbmNlb2YgRWxlbWVudD8obWUodCksdC5hcHBlbmRDaGlsZChlLmh0bWwpKTp0LmlubmVySFRNTD0hMSE9PWUuaHRtbD9lLmh0bWw6XCJcIixlLmJnUG9zJiYoZT1tKGUuYmdQb3MpLHQuc3R5bGUuYmFja2dyb3VuZFBvc2l0aW9uPS1lLngrXCJweCBcIistZS55K1wicHhcIiksdGhpcy5fc2V0SWNvblN0eWxlcyh0LFwiaWNvblwiKSx0fSxjcmVhdGVTaGFkb3c6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19KSk7ZGkuRGVmYXVsdD1faTt2YXIgTmk9by5leHRlbmQoe29wdGlvbnM6e3RpbGVTaXplOjI1NixvcGFjaXR5OjEsdXBkYXRlV2hlbklkbGU6Yi5tb2JpbGUsdXBkYXRlV2hlblpvb21pbmc6ITAsdXBkYXRlSW50ZXJ2YWw6MjAwLHpJbmRleDoxLGJvdW5kczpudWxsLG1pblpvb206MCxtYXhab29tOnZvaWQgMCxtYXhOYXRpdmVab29tOnZvaWQgMCxtaW5OYXRpdmVab29tOnZvaWQgMCxub1dyYXA6ITEscGFuZTpcInRpbGVQYW5lXCIsY2xhc3NOYW1lOlwiXCIsa2VlcEJ1ZmZlcjoyfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe2ModGhpcyx0KX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9pbml0Q29udGFpbmVyKCksdGhpcy5fbGV2ZWxzPXt9LHRoaXMuX3RpbGVzPXt9LHRoaXMuX3Jlc2V0VmlldygpfSxiZWZvcmVBZGQ6ZnVuY3Rpb24odCl7dC5fYWRkWm9vbUxpbWl0KHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbih0KXt0aGlzLl9yZW1vdmVBbGxUaWxlcygpLFQodGhpcy5fY29udGFpbmVyKSx0Ll9yZW1vdmVab29tTGltaXQodGhpcyksdGhpcy5fY29udGFpbmVyPW51bGwsdGhpcy5fdGlsZVpvb209dm9pZCAwfSxicmluZ1RvRnJvbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYoZmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zZXRBdXRvWkluZGV4KE1hdGgubWF4KSksdGhpc30sYnJpbmdUb0JhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwJiYoZ2UodGhpcy5fY29udGFpbmVyKSx0aGlzLl9zZXRBdXRvWkluZGV4KE1hdGgubWluKSksdGhpc30sZ2V0Q29udGFpbmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn0sc2V0T3BhY2l0eTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLm9wYWNpdHk9dCx0aGlzLl91cGRhdGVPcGFjaXR5KCksdGhpc30sc2V0WkluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuekluZGV4PXQsdGhpcy5fdXBkYXRlWkluZGV4KCksdGhpc30saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9LHJlZHJhdzpmdW5jdGlvbigpe3ZhciB0O3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9yZW1vdmVBbGxUaWxlcygpLCh0PXRoaXMuX2NsYW1wWm9vbSh0aGlzLl9tYXAuZ2V0Wm9vbSgpKSkhPT10aGlzLl90aWxlWm9vbSYmKHRoaXMuX3RpbGVab29tPXQsdGhpcy5fdXBkYXRlTGV2ZWxzKCkpLHRoaXMuX3VwZGF0ZSgpKSx0aGlzfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3ByZXJlc2V0OnRoaXMuX2ludmFsaWRhdGVBbGwsdmlld3Jlc2V0OnRoaXMuX3Jlc2V0Vmlldyx6b29tOnRoaXMuX3Jlc2V0Vmlldyxtb3ZlZW5kOnRoaXMuX29uTW92ZUVuZH07cmV0dXJuIHRoaXMub3B0aW9ucy51cGRhdGVXaGVuSWRsZXx8KHRoaXMuX29uTW92ZXx8KHRoaXMuX29uTW92ZT1qKHRoaXMuX29uTW92ZUVuZCx0aGlzLm9wdGlvbnMudXBkYXRlSW50ZXJ2YWwsdGhpcykpLHQubW92ZT10aGlzLl9vbk1vdmUpLHRoaXMuX3pvb21BbmltYXRlZCYmKHQuem9vbWFuaW09dGhpcy5fYW5pbWF0ZVpvb20pLHR9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKX0sZ2V0VGlsZVNpemU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudGlsZVNpemU7cmV0dXJuIHQgaW5zdGFuY2VvZiBwP3Q6bmV3IHAodCx0KX0sX3VwZGF0ZVpJbmRleDpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lciYmdm9pZCAwIT09dGhpcy5vcHRpb25zLnpJbmRleCYmbnVsbCE9PXRoaXMub3B0aW9ucy56SW5kZXgmJih0aGlzLl9jb250YWluZXIuc3R5bGUuekluZGV4PXRoaXMub3B0aW9ucy56SW5kZXgpfSxfc2V0QXV0b1pJbmRleDpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT10aGlzLmdldFBhbmUoKS5jaGlsZHJlbixuPS10KC0xLzAsMS8wKSxvPTAscz1pLmxlbmd0aDtvPHM7bysrKWU9aVtvXS5zdHlsZS56SW5kZXgsaVtvXSE9PXRoaXMuX2NvbnRhaW5lciYmZSYmKG49dChuLCtlKSk7aXNGaW5pdGUobikmJih0aGlzLm9wdGlvbnMuekluZGV4PW4rdCgtMSwxKSx0aGlzLl91cGRhdGVaSW5kZXgoKSl9LF91cGRhdGVPcGFjaXR5OmZ1bmN0aW9uKCl7aWYodGhpcy5fbWFwJiYhYi5pZWx0OSl7Qyh0aGlzLl9jb250YWluZXIsdGhpcy5vcHRpb25zLm9wYWNpdHkpO3ZhciB0LGU9K25ldyBEYXRlLGk9ITEsbj0hMTtmb3IodCBpbiB0aGlzLl90aWxlcyl7dmFyIG8scz10aGlzLl90aWxlc1t0XTtzLmN1cnJlbnQmJnMubG9hZGVkJiYobz1NYXRoLm1pbigxLChlLXMubG9hZGVkKS8yMDApLEMocy5lbCxvKSxvPDE/aT0hMDoocy5hY3RpdmU/bj0hMDp0aGlzLl9vbk9wYXF1ZVRpbGUocykscy5hY3RpdmU9ITApKX1uJiYhdGhpcy5fbm9QcnVuZSYmdGhpcy5fcHJ1bmVUaWxlcygpLGkmJihyKHRoaXMuX2ZhZGVGcmFtZSksdGhpcy5fZmFkZUZyYW1lPXgodGhpcy5fdXBkYXRlT3BhY2l0eSx0aGlzKSl9fSxfb25PcGFxdWVUaWxlOnUsX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9jb250YWluZXI9UChcImRpdlwiLFwibGVhZmxldC1sYXllciBcIisodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikpLHRoaXMuX3VwZGF0ZVpJbmRleCgpLHRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJnRoaXMuX3VwZGF0ZU9wYWNpdHkoKSx0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9jb250YWluZXIpKX0sX3VwZGF0ZUxldmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RpbGVab29tLGU9dGhpcy5vcHRpb25zLm1heFpvb207aWYodm9pZCAwIT09dCl7Zm9yKHZhciBpIGluIHRoaXMuX2xldmVscylpPU51bWJlcihpKSx0aGlzLl9sZXZlbHNbaV0uZWwuY2hpbGRyZW4ubGVuZ3RofHxpPT09dD8odGhpcy5fbGV2ZWxzW2ldLmVsLnN0eWxlLnpJbmRleD1lLU1hdGguYWJzKHQtaSksdGhpcy5fb25VcGRhdGVMZXZlbChpKSk6KFQodGhpcy5fbGV2ZWxzW2ldLmVsKSx0aGlzLl9yZW1vdmVUaWxlc0F0Wm9vbShpKSx0aGlzLl9vblJlbW92ZUxldmVsKGkpLGRlbGV0ZSB0aGlzLl9sZXZlbHNbaV0pO3ZhciBuPXRoaXMuX2xldmVsc1t0XSxvPXRoaXMuX21hcDtyZXR1cm4gbnx8KChuPXRoaXMuX2xldmVsc1t0XT17fSkuZWw9UChcImRpdlwiLFwibGVhZmxldC10aWxlLWNvbnRhaW5lciBsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIix0aGlzLl9jb250YWluZXIpLG4uZWwuc3R5bGUuekluZGV4PWUsbi5vcmlnaW49by5wcm9qZWN0KG8udW5wcm9qZWN0KG8uZ2V0UGl4ZWxPcmlnaW4oKSksdCkucm91bmQoKSxuLnpvb209dCx0aGlzLl9zZXRab29tVHJhbnNmb3JtKG4sby5nZXRDZW50ZXIoKSxvLmdldFpvb20oKSksdShuLmVsLm9mZnNldFdpZHRoKSx0aGlzLl9vbkNyZWF0ZUxldmVsKG4pKSx0aGlzLl9sZXZlbD1ufX0sX29uVXBkYXRlTGV2ZWw6dSxfb25SZW1vdmVMZXZlbDp1LF9vbkNyZWF0ZUxldmVsOnUsX3BydW5lVGlsZXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9tYXApe3ZhciB0LGUsaSxuPXRoaXMuX21hcC5nZXRab29tKCk7aWYobj50aGlzLm9wdGlvbnMubWF4Wm9vbXx8bjx0aGlzLm9wdGlvbnMubWluWm9vbSl0aGlzLl9yZW1vdmVBbGxUaWxlcygpO2Vsc2V7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpKGk9dGhpcy5fdGlsZXNbdF0pLnJldGFpbj1pLmN1cnJlbnQ7Zm9yKHQgaW4gdGhpcy5fdGlsZXMpKGk9dGhpcy5fdGlsZXNbdF0pLmN1cnJlbnQmJiFpLmFjdGl2ZSYmKGU9aS5jb29yZHMsdGhpcy5fcmV0YWluUGFyZW50KGUueCxlLnksZS56LGUuei01KXx8dGhpcy5fcmV0YWluQ2hpbGRyZW4oZS54LGUueSxlLnosZS56KzIpKTtmb3IodCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5yZXRhaW58fHRoaXMuX3JlbW92ZVRpbGUodCl9fX0sX3JlbW92ZVRpbGVzQXRab29tOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1tlXS5jb29yZHMuej09PXQmJnRoaXMuX3JlbW92ZVRpbGUoZSl9LF9yZW1vdmVBbGxUaWxlczpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl0aGlzLl9yZW1vdmVUaWxlKHQpfSxfaW52YWxpZGF0ZUFsbDpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLl9sZXZlbHMpVCh0aGlzLl9sZXZlbHNbdF0uZWwpLHRoaXMuX29uUmVtb3ZlTGV2ZWwoTnVtYmVyKHQpKSxkZWxldGUgdGhpcy5fbGV2ZWxzW3RdO3RoaXMuX3JlbW92ZUFsbFRpbGVzKCksdGhpcy5fdGlsZVpvb209dm9pZCAwfSxfcmV0YWluUGFyZW50OmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciB0PU1hdGguZmxvb3IodC8yKSxlPU1hdGguZmxvb3IoZS8yKSxpPWktMSxvPW5ldyBwKCt0LCtlKSxvPShvLno9aSx0aGlzLl90aWxlQ29vcmRzVG9LZXkobykpLG89dGhpcy5fdGlsZXNbb107cmV0dXJuIG8mJm8uYWN0aXZlP28ucmV0YWluPSEwOihvJiZvLmxvYWRlZCYmKG8ucmV0YWluPSEwKSxuPGkmJnRoaXMuX3JldGFpblBhcmVudCh0LGUsaSxuKSl9LF9yZXRhaW5DaGlsZHJlbjpmdW5jdGlvbih0LGUsaSxuKXtmb3IodmFyIG89Mip0O288Mip0KzI7bysrKWZvcih2YXIgcz0yKmU7czwyKmUrMjtzKyspe3ZhciByPW5ldyBwKG8scykscj0oci56PWkrMSx0aGlzLl90aWxlQ29vcmRzVG9LZXkocikpLHI9dGhpcy5fdGlsZXNbcl07ciYmci5hY3RpdmU/ci5yZXRhaW49ITA6KHImJnIubG9hZGVkJiYoci5yZXRhaW49ITApLGkrMTxuJiZ0aGlzLl9yZXRhaW5DaGlsZHJlbihvLHMsaSsxLG4pKX19LF9yZXNldFZpZXc6ZnVuY3Rpb24odCl7dD10JiYodC5waW5jaHx8dC5mbHlUbyk7dGhpcy5fc2V0Vmlldyh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fbWFwLmdldFpvb20oKSx0LHQpfSxfYW5pbWF0ZVpvb206ZnVuY3Rpb24odCl7dGhpcy5fc2V0Vmlldyh0LmNlbnRlcix0Lnpvb20sITAsdC5ub1VwZGF0ZSl9LF9jbGFtcFpvb206ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiB2b2lkIDAhPT1lLm1pbk5hdGl2ZVpvb20mJnQ8ZS5taW5OYXRpdmVab29tP2UubWluTmF0aXZlWm9vbTp2b2lkIDAhPT1lLm1heE5hdGl2ZVpvb20mJmUubWF4TmF0aXZlWm9vbTx0P2UubWF4TmF0aXZlWm9vbTp0fSxfc2V0VmlldzpmdW5jdGlvbih0LGUsaSxuKXt2YXIgbz1NYXRoLnJvdW5kKGUpLG89dm9pZCAwIT09dGhpcy5vcHRpb25zLm1heFpvb20mJm8+dGhpcy5vcHRpb25zLm1heFpvb218fHZvaWQgMCE9PXRoaXMub3B0aW9ucy5taW5ab29tJiZvPHRoaXMub3B0aW9ucy5taW5ab29tP3ZvaWQgMDp0aGlzLl9jbGFtcFpvb20obykscz10aGlzLm9wdGlvbnMudXBkYXRlV2hlblpvb21pbmcmJm8hPT10aGlzLl90aWxlWm9vbTtuJiYhc3x8KHRoaXMuX3RpbGVab29tPW8sdGhpcy5fYWJvcnRMb2FkaW5nJiZ0aGlzLl9hYm9ydExvYWRpbmcoKSx0aGlzLl91cGRhdGVMZXZlbHMoKSx0aGlzLl9yZXNldEdyaWQoKSx2b2lkIDAhPT1vJiZ0aGlzLl91cGRhdGUodCksaXx8dGhpcy5fcHJ1bmVUaWxlcygpLHRoaXMuX25vUHJ1bmU9ISFpKSx0aGlzLl9zZXRab29tVHJhbnNmb3Jtcyh0LGUpfSxfc2V0Wm9vbVRyYW5zZm9ybXM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkgaW4gdGhpcy5fbGV2ZWxzKXRoaXMuX3NldFpvb21UcmFuc2Zvcm0odGhpcy5fbGV2ZWxzW2ldLHQsZSl9LF9zZXRab29tVHJhbnNmb3JtOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGksdC56b29tKSxlPXQub3JpZ2luLm11bHRpcGx5Qnkobikuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbihlLGkpKS5yb3VuZCgpO2IuYW55M2Q/YmUodC5lbCxlLG4pOloodC5lbCxlKX0sX3Jlc2V0R3JpZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX21hcCxlPXQub3B0aW9ucy5jcnMsaT10aGlzLl90aWxlU2l6ZT10aGlzLmdldFRpbGVTaXplKCksbj10aGlzLl90aWxlWm9vbSxvPXRoaXMuX21hcC5nZXRQaXhlbFdvcmxkQm91bmRzKHRoaXMuX3RpbGVab29tKTtvJiYodGhpcy5fZ2xvYmFsVGlsZVJhbmdlPXRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2UobykpLHRoaXMuX3dyYXBYPWUud3JhcExuZyYmIXRoaXMub3B0aW9ucy5ub1dyYXAmJltNYXRoLmZsb29yKHQucHJvamVjdChbMCxlLndyYXBMbmdbMF1dLG4pLngvaS54KSxNYXRoLmNlaWwodC5wcm9qZWN0KFswLGUud3JhcExuZ1sxXV0sbikueC9pLnkpXSx0aGlzLl93cmFwWT1lLndyYXBMYXQmJiF0aGlzLm9wdGlvbnMubm9XcmFwJiZbTWF0aC5mbG9vcih0LnByb2plY3QoW2Uud3JhcExhdFswXSwwXSxuKS55L2kueCksTWF0aC5jZWlsKHQucHJvamVjdChbZS53cmFwTGF0WzFdLDBdLG4pLnkvaS55KV19LF9vbk1vdmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9tYXAmJiF0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20mJnRoaXMuX3VwZGF0ZSgpfSxfZ2V0VGlsZWRQaXhlbEJvdW5kczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9tYXAsaT1lLl9hbmltYXRpbmdab29tP01hdGgubWF4KGUuX2FuaW1hdGVUb1pvb20sZS5nZXRab29tKCkpOmUuZ2V0Wm9vbSgpLGk9ZS5nZXRab29tU2NhbGUoaSx0aGlzLl90aWxlWm9vbSksdD1lLnByb2plY3QodCx0aGlzLl90aWxlWm9vbSkuZmxvb3IoKSxlPWUuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIqaSk7cmV0dXJuIG5ldyBmKHQuc3VidHJhY3QoZSksdC5hZGQoZSkpfSxfdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcDtpZihlKXt2YXIgaT10aGlzLl9jbGFtcFpvb20oZS5nZXRab29tKCkpO2lmKHZvaWQgMD09PXQmJih0PWUuZ2V0Q2VudGVyKCkpLHZvaWQgMCE9PXRoaXMuX3RpbGVab29tKXt2YXIgbixlPXRoaXMuX2dldFRpbGVkUGl4ZWxCb3VuZHModCksbz10aGlzLl9weEJvdW5kc1RvVGlsZVJhbmdlKGUpLHM9by5nZXRDZW50ZXIoKSxyPVtdLGU9dGhpcy5vcHRpb25zLmtlZXBCdWZmZXIsYT1uZXcgZihvLmdldEJvdHRvbUxlZnQoKS5zdWJ0cmFjdChbZSwtZV0pLG8uZ2V0VG9wUmlnaHQoKS5hZGQoW2UsLWVdKSk7aWYoIShpc0Zpbml0ZShvLm1pbi54KSYmaXNGaW5pdGUoby5taW4ueSkmJmlzRmluaXRlKG8ubWF4LngpJiZpc0Zpbml0ZShvLm1heC55KSkpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGVkIHRvIGxvYWQgYW4gaW5maW5pdGUgbnVtYmVyIG9mIHRpbGVzXCIpO2ZvcihuIGluIHRoaXMuX3RpbGVzKXt2YXIgaD10aGlzLl90aWxlc1tuXS5jb29yZHM7aC56PT09dGhpcy5fdGlsZVpvb20mJmEuY29udGFpbnMobmV3IHAoaC54LGgueSkpfHwodGhpcy5fdGlsZXNbbl0uY3VycmVudD0hMSl9aWYoMTxNYXRoLmFicyhpLXRoaXMuX3RpbGVab29tKSl0aGlzLl9zZXRWaWV3KHQsaSk7ZWxzZXtmb3IodmFyIGw9by5taW4ueTtsPD1vLm1heC55O2wrKylmb3IodmFyIHU9by5taW4ueDt1PD1vLm1heC54O3UrKyl7dmFyIGMsZD1uZXcgcCh1LGwpO2Quej10aGlzLl90aWxlWm9vbSx0aGlzLl9pc1ZhbGlkVGlsZShkKSYmKChjPXRoaXMuX3RpbGVzW3RoaXMuX3RpbGVDb29yZHNUb0tleShkKV0pP2MuY3VycmVudD0hMDpyLnB1c2goZCkpfWlmKHIuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlVG8ocyktZS5kaXN0YW5jZVRvKHMpfSksMCE9PXIubGVuZ3RoKXt0aGlzLl9sb2FkaW5nfHwodGhpcy5fbG9hZGluZz0hMCx0aGlzLmZpcmUoXCJsb2FkaW5nXCIpKTtmb3IodmFyIF89ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHU9MDt1PHIubGVuZ3RoO3UrKyl0aGlzLl9hZGRUaWxlKHJbdV0sXyk7dGhpcy5fbGV2ZWwuZWwuYXBwZW5kQ2hpbGQoXyl9fX19fSxfaXNWYWxpZFRpbGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLm9wdGlvbnMuY3JzO2lmKCFlLmluZmluaXRlKXt2YXIgaT10aGlzLl9nbG9iYWxUaWxlUmFuZ2U7aWYoIWUud3JhcExuZyYmKHQueDxpLm1pbi54fHx0Lng+aS5tYXgueCl8fCFlLndyYXBMYXQmJih0Lnk8aS5taW4ueXx8dC55PmkubWF4LnkpKXJldHVybiExfXJldHVybiF0aGlzLm9wdGlvbnMuYm91bmRzfHwoZT10aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModCksZyh0aGlzLm9wdGlvbnMuYm91bmRzKS5vdmVybGFwcyhlKSl9LF9rZXlUb0JvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdGlsZUNvb3Jkc1RvQm91bmRzKHRoaXMuX2tleVRvVGlsZUNvb3Jkcyh0KSl9LF90aWxlQ29vcmRzVG9Od1NlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPXRoaXMuZ2V0VGlsZVNpemUoKSxuPXQuc2NhbGVCeShpKSxpPW4uYWRkKGkpO3JldHVybltlLnVucHJvamVjdChuLHQueiksZS51bnByb2plY3QoaSx0LnopXX0sX3RpbGVDb29yZHNUb0JvdW5kczpmdW5jdGlvbih0KXt0PXRoaXMuX3RpbGVDb29yZHNUb053U2UodCksdD1uZXcgcyh0WzBdLHRbMV0pO3JldHVybiB0PXRoaXMub3B0aW9ucy5ub1dyYXA/dDp0aGlzLl9tYXAud3JhcExhdExuZ0JvdW5kcyh0KX0sX3RpbGVDb29yZHNUb0tleTpmdW5jdGlvbih0KXtyZXR1cm4gdC54K1wiOlwiK3QueStcIjpcIit0Lnp9LF9rZXlUb1RpbGVDb29yZHM6ZnVuY3Rpb24odCl7dmFyIHQ9dC5zcGxpdChcIjpcIiksZT1uZXcgcCgrdFswXSwrdFsxXSk7cmV0dXJuIGUuej0rdFsyXSxlfSxfcmVtb3ZlVGlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtlJiYoVChlLmVsKSxkZWxldGUgdGhpcy5fdGlsZXNbdF0sdGhpcy5maXJlKFwidGlsZXVubG9hZFwiLHt0aWxlOmUuZWwsY29vcmRzOnRoaXMuX2tleVRvVGlsZUNvb3Jkcyh0KX0pKX0sX2luaXRUaWxlOmZ1bmN0aW9uKHQpe00odCxcImxlYWZsZXQtdGlsZVwiKTt2YXIgZT10aGlzLmdldFRpbGVTaXplKCk7dC5zdHlsZS53aWR0aD1lLngrXCJweFwiLHQuc3R5bGUuaGVpZ2h0PWUueStcInB4XCIsdC5vbnNlbGVjdHN0YXJ0PXUsdC5vbm1vdXNlbW92ZT11LGIuaWVsdDkmJnRoaXMub3B0aW9ucy5vcGFjaXR5PDEmJkModCx0aGlzLm9wdGlvbnMub3BhY2l0eSl9LF9hZGRUaWxlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0VGlsZVBvcyh0KSxuPXRoaXMuX3RpbGVDb29yZHNUb0tleSh0KSxvPXRoaXMuY3JlYXRlVGlsZSh0aGlzLl93cmFwQ29vcmRzKHQpLGEodGhpcy5fdGlsZVJlYWR5LHRoaXMsdCkpO3RoaXMuX2luaXRUaWxlKG8pLHRoaXMuY3JlYXRlVGlsZS5sZW5ndGg8MiYmeChhKHRoaXMuX3RpbGVSZWFkeSx0aGlzLHQsbnVsbCxvKSksWihvLGkpLHRoaXMuX3RpbGVzW25dPXtlbDpvLGNvb3Jkczp0LGN1cnJlbnQ6ITB9LGUuYXBwZW5kQ2hpbGQobyksdGhpcy5maXJlKFwidGlsZWxvYWRzdGFydFwiLHt0aWxlOm8sY29vcmRzOnR9KX0sX3RpbGVSZWFkeTpmdW5jdGlvbih0LGUsaSl7ZSYmdGhpcy5maXJlKFwidGlsZWVycm9yXCIse2Vycm9yOmUsdGlsZTppLGNvb3Jkczp0fSk7dmFyIG49dGhpcy5fdGlsZUNvb3Jkc1RvS2V5KHQpOyhpPXRoaXMuX3RpbGVzW25dKSYmKGkubG9hZGVkPStuZXcgRGF0ZSx0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD8oQyhpLmVsLDApLHIodGhpcy5fZmFkZUZyYW1lKSx0aGlzLl9mYWRlRnJhbWU9eCh0aGlzLl91cGRhdGVPcGFjaXR5LHRoaXMpKTooaS5hY3RpdmU9ITAsdGhpcy5fcHJ1bmVUaWxlcygpKSxlfHwoTShpLmVsLFwibGVhZmxldC10aWxlLWxvYWRlZFwiKSx0aGlzLmZpcmUoXCJ0aWxlbG9hZFwiLHt0aWxlOmkuZWwsY29vcmRzOnR9KSksdGhpcy5fbm9UaWxlc1RvTG9hZCgpJiYodGhpcy5fbG9hZGluZz0hMSx0aGlzLmZpcmUoXCJsb2FkXCIpLGIuaWVsdDl8fCF0aGlzLl9tYXAuX2ZhZGVBbmltYXRlZD94KHRoaXMuX3BydW5lVGlsZXMsdGhpcyk6c2V0VGltZW91dChhKHRoaXMuX3BydW5lVGlsZXMsdGhpcyksMjUwKSkpfSxfZ2V0VGlsZVBvczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zY2FsZUJ5KHRoaXMuZ2V0VGlsZVNpemUoKSkuc3VidHJhY3QodGhpcy5fbGV2ZWwub3JpZ2luKX0sX3dyYXBDb29yZHM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHAodGhpcy5fd3JhcFg/SCh0LngsdGhpcy5fd3JhcFgpOnQueCx0aGlzLl93cmFwWT9IKHQueSx0aGlzLl93cmFwWSk6dC55KTtyZXR1cm4gZS56PXQueixlfSxfcHhCb3VuZHNUb1RpbGVSYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmdldFRpbGVTaXplKCk7cmV0dXJuIG5ldyBmKHQubWluLnVuc2NhbGVCeShlKS5mbG9vcigpLHQubWF4LnVuc2NhbGVCeShlKS5jZWlsKCkuc3VidHJhY3QoWzEsMV0pKX0sX25vVGlsZXNUb0xvYWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdGlsZXMpaWYoIXRoaXMuX3RpbGVzW3RdLmxvYWRlZClyZXR1cm4hMTtyZXR1cm4hMH19KTt2YXIgRGk9TmkuZXh0ZW5kKHtvcHRpb25zOnttaW5ab29tOjAsbWF4Wm9vbToxOCxzdWJkb21haW5zOlwiYWJjXCIsZXJyb3JUaWxlVXJsOlwiXCIsem9vbU9mZnNldDowLHRtczohMSx6b29tUmV2ZXJzZTohMSxkZXRlY3RSZXRpbmE6ITEsY3Jvc3NPcmlnaW46ITEscmVmZXJyZXJQb2xpY3k6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dCwoZT1jKHRoaXMsZSkpLmRldGVjdFJldGluYSYmYi5yZXRpbmEmJjA8ZS5tYXhab29tPyhlLnRpbGVTaXplPU1hdGguZmxvb3IoZS50aWxlU2l6ZS8yKSxlLnpvb21SZXZlcnNlPyhlLnpvb21PZmZzZXQtLSxlLm1pblpvb209TWF0aC5taW4oZS5tYXhab29tLGUubWluWm9vbSsxKSk6KGUuem9vbU9mZnNldCsrLGUubWF4Wm9vbT1NYXRoLm1heChlLm1pblpvb20sZS5tYXhab29tLTEpKSxlLm1pblpvb209TWF0aC5tYXgoMCxlLm1pblpvb20pKTplLnpvb21SZXZlcnNlP2UubWluWm9vbT1NYXRoLm1pbihlLm1heFpvb20sZS5taW5ab29tKTplLm1heFpvb209TWF0aC5tYXgoZS5taW5ab29tLGUubWF4Wm9vbSksXCJzdHJpbmdcIj09dHlwZW9mIGUuc3ViZG9tYWlucyYmKGUuc3ViZG9tYWlucz1lLnN1YmRvbWFpbnMuc3BsaXQoXCJcIikpLHRoaXMub24oXCJ0aWxldW5sb2FkXCIsdGhpcy5fb25UaWxlUmVtb3ZlKX0sc2V0VXJsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3VybD09PXQmJnZvaWQgMD09PWUmJihlPSEwKSx0aGlzLl91cmw9dCxlfHx0aGlzLnJlZHJhdygpLHRoaXN9LGNyZWF0ZVRpbGU6ZnVuY3Rpb24odCxlKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO3JldHVybiBTKGksXCJsb2FkXCIsYSh0aGlzLl90aWxlT25Mb2FkLHRoaXMsZSxpKSksUyhpLFwiZXJyb3JcIixhKHRoaXMuX3RpbGVPbkVycm9yLHRoaXMsZSxpKSksIXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiYmXCJcIiE9PXRoaXMub3B0aW9ucy5jcm9zc09yaWdpbnx8KGkuY3Jvc3NPcmlnaW49ITA9PT10aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4/XCJcIjp0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4pLFwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucmVmZXJyZXJQb2xpY3kmJihpLnJlZmVycmVyUG9saWN5PXRoaXMub3B0aW9ucy5yZWZlcnJlclBvbGljeSksaS5hbHQ9XCJcIixpLnNyYz10aGlzLmdldFRpbGVVcmwodCksaX0sZ2V0VGlsZVVybDpmdW5jdGlvbih0KXt2YXIgZT17cjpiLnJldGluYT9cIkAyeFwiOlwiXCIsczp0aGlzLl9nZXRTdWJkb21haW4odCkseDp0LngseTp0Lnksejp0aGlzLl9nZXRab29tRm9yVXJsKCl9O3JldHVybiB0aGlzLl9tYXAmJiF0aGlzLl9tYXAub3B0aW9ucy5jcnMuaW5maW5pdGUmJih0PXRoaXMuX2dsb2JhbFRpbGVSYW5nZS5tYXgueS10LnksdGhpcy5vcHRpb25zLnRtcyYmKGUueT10KSxlW1wiLXlcIl09dCkscSh0aGlzLl91cmwsbChlLHRoaXMub3B0aW9ucykpfSxfdGlsZU9uTG9hZDpmdW5jdGlvbih0LGUpe2IuaWVsdDk/c2V0VGltZW91dChhKHQsdGhpcyxudWxsLGUpLDApOnQobnVsbCxlKX0sX3RpbGVPbkVycm9yOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLm9wdGlvbnMuZXJyb3JUaWxlVXJsO24mJmUuZ2V0QXR0cmlidXRlKFwic3JjXCIpIT09biYmKGUuc3JjPW4pLHQoaSxlKX0sX29uVGlsZVJlbW92ZTpmdW5jdGlvbih0KXt0LnRpbGUub25sb2FkPW51bGx9LF9nZXRab29tRm9yVXJsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdGlsZVpvb20sZT10aGlzLm9wdGlvbnMubWF4Wm9vbTtyZXR1cm4odD10aGlzLm9wdGlvbnMuem9vbVJldmVyc2U/ZS10OnQpK3RoaXMub3B0aW9ucy56b29tT2Zmc2V0fSxfZ2V0U3ViZG9tYWluOmZ1bmN0aW9uKHQpe3Q9TWF0aC5hYnModC54K3QueSkldGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO3JldHVybiB0aGlzLm9wdGlvbnMuc3ViZG9tYWluc1t0XX0sX2Fib3J0TG9hZGluZzpmdW5jdGlvbigpe3ZhciB0LGUsaTtmb3IodCBpbiB0aGlzLl90aWxlcyl0aGlzLl90aWxlc1t0XS5jb29yZHMueiE9PXRoaXMuX3RpbGVab29tJiYoKGk9dGhpcy5fdGlsZXNbdF0uZWwpLm9ubG9hZD11LGkub25lcnJvcj11LGkuY29tcGxldGV8fChpLnNyYz1LLGU9dGhpcy5fdGlsZXNbdF0uY29vcmRzLFQoaSksZGVsZXRlIHRoaXMuX3RpbGVzW3RdLHRoaXMuZmlyZShcInRpbGVhYm9ydFwiLHt0aWxlOmksY29vcmRzOmV9KSkpfSxfcmVtb3ZlVGlsZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlc1t0XTtpZihlKXJldHVybiBlLmVsLnNldEF0dHJpYnV0ZShcInNyY1wiLEspLE5pLnByb3RvdHlwZS5fcmVtb3ZlVGlsZS5jYWxsKHRoaXMsdCl9LF90aWxlUmVhZHk6ZnVuY3Rpb24odCxlLGkpe2lmKHRoaXMuX21hcCYmKCFpfHxpLmdldEF0dHJpYnV0ZShcInNyY1wiKSE9PUspKXJldHVybiBOaS5wcm90b3R5cGUuX3RpbGVSZWFkeS5jYWxsKHRoaXMsdCxlLGkpfX0pO2Z1bmN0aW9uIGppKHQsZSl7cmV0dXJuIG5ldyBEaSh0LGUpfXZhciBIaT1EaS5leHRlbmQoe2RlZmF1bHRXbXNQYXJhbXM6e3NlcnZpY2U6XCJXTVNcIixyZXF1ZXN0OlwiR2V0TWFwXCIsbGF5ZXJzOlwiXCIsc3R5bGVzOlwiXCIsZm9ybWF0OlwiaW1hZ2UvanBlZ1wiLHRyYW5zcGFyZW50OiExLHZlcnNpb246XCIxLjEuMVwifSxvcHRpb25zOntjcnM6bnVsbCx1cHBlcmNhc2U6ITF9LGluaXRpYWxpemU6ZnVuY3Rpb24odCxlKXt0aGlzLl91cmw9dDt2YXIgaSxuPWwoe30sdGhpcy5kZWZhdWx0V21zUGFyYW1zKTtmb3IoaSBpbiBlKWkgaW4gdGhpcy5vcHRpb25zfHwobltpXT1lW2ldKTt2YXIgdD0oZT1jKHRoaXMsZSkpLmRldGVjdFJldGluYSYmYi5yZXRpbmE/MjoxLG89dGhpcy5nZXRUaWxlU2l6ZSgpO24ud2lkdGg9by54KnQsbi5oZWlnaHQ9by55KnQsdGhpcy53bXNQYXJhbXM9bn0sb25BZGQ6ZnVuY3Rpb24odCl7dGhpcy5fY3JzPXRoaXMub3B0aW9ucy5jcnN8fHQub3B0aW9ucy5jcnMsdGhpcy5fd21zVmVyc2lvbj1wYXJzZUZsb2F0KHRoaXMud21zUGFyYW1zLnZlcnNpb24pO3ZhciBlPTEuMzw9dGhpcy5fd21zVmVyc2lvbj9cImNyc1wiOlwic3JzXCI7dGhpcy53bXNQYXJhbXNbZV09dGhpcy5fY3JzLmNvZGUsRGkucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyx0KX0sZ2V0VGlsZVVybDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aWxlQ29vcmRzVG9Od1NlKHQpLGk9dGhpcy5fY3JzLGk9XyhpLnByb2plY3QoZVswXSksaS5wcm9qZWN0KGVbMV0pKSxlPWkubWluLGk9aS5tYXgsZT0oMS4zPD10aGlzLl93bXNWZXJzaW9uJiZ0aGlzLl9jcnM9PT1saT9bZS55LGUueCxpLnksaS54XTpbZS54LGUueSxpLngsaS55XSkuam9pbihcIixcIiksaT1EaS5wcm90b3R5cGUuZ2V0VGlsZVVybC5jYWxsKHRoaXMsdCk7cmV0dXJuIGkrVSh0aGlzLndtc1BhcmFtcyxpLHRoaXMub3B0aW9ucy51cHBlcmNhc2UpKyh0aGlzLm9wdGlvbnMudXBwZXJjYXNlP1wiJkJCT1g9XCI6XCImYmJveD1cIikrZX0sc2V0UGFyYW1zOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGwodGhpcy53bXNQYXJhbXMsdCksZXx8dGhpcy5yZWRyYXcoKSx0aGlzfX0pO0RpLldNUz1IaSxqaS53bXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEhpKHQsZSl9O3ZhciBXaT1vLmV4dGVuZCh7b3B0aW9uczp7cGFkZGluZzouMX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXtjKHRoaXMsdCksaCh0aGlzKSx0aGlzLl9sYXllcnM9dGhpcy5fbGF5ZXJzfHx7fX0sb25BZGQ6ZnVuY3Rpb24oKXt0aGlzLl9jb250YWluZXJ8fCh0aGlzLl9pbml0Q29udGFpbmVyKCksTSh0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LXpvb20tYW5pbWF0ZWRcIikpLHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fdXBkYXRlKCksdGhpcy5vbihcInVwZGF0ZVwiLHRoaXMuX3VwZGF0ZVBhdGhzLHRoaXMpfSxvblJlbW92ZTpmdW5jdGlvbigpe3RoaXMub2ZmKFwidXBkYXRlXCIsdGhpcy5fdXBkYXRlUGF0aHMsdGhpcyksdGhpcy5fZGVzdHJveUNvbnRhaW5lcigpfSxnZXRFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD17dmlld3Jlc2V0OnRoaXMuX3Jlc2V0LHpvb206dGhpcy5fb25ab29tLG1vdmVlbmQ6dGhpcy5fdXBkYXRlLHpvb21lbmQ6dGhpcy5fb25ab29tRW5kfTtyZXR1cm4gdGhpcy5fem9vbUFuaW1hdGVkJiYodC56b29tYW5pbT10aGlzLl9vbkFuaW1ab29tKSx0fSxfb25BbmltWm9vbTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVUcmFuc2Zvcm0odC5jZW50ZXIsdC56b29tKX0sX29uWm9vbTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksdGhpcy5fbWFwLmdldFpvb20oKSl9LF91cGRhdGVUcmFuc2Zvcm06ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUsdGhpcy5fem9vbSksbj10aGlzLl9tYXAuZ2V0U2l6ZSgpLm11bHRpcGx5QnkoLjUrdGhpcy5vcHRpb25zLnBhZGRpbmcpLG89dGhpcy5fbWFwLnByb2plY3QodGhpcy5fY2VudGVyLGUpLG49bi5tdWx0aXBseUJ5KC1pKS5hZGQobykuc3VidHJhY3QodGhpcy5fbWFwLl9nZXROZXdQaXhlbE9yaWdpbih0LGUpKTtiLmFueTNkP2JlKHRoaXMuX2NvbnRhaW5lcixuLGkpOloodGhpcy5fY29udGFpbmVyLG4pfSxfcmVzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fdXBkYXRlKCksdGhpcy5fdXBkYXRlVHJhbnNmb3JtKHRoaXMuX2NlbnRlcix0aGlzLl96b29tKSx0aGlzLl9sYXllcnMpdGhpcy5fbGF5ZXJzW3RdLl9yZXNldCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3Byb2plY3QoKX0sX3VwZGF0ZVBhdGhzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpfSxfdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnBhZGRpbmcsZT10aGlzLl9tYXAuZ2V0U2l6ZSgpLGk9dGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGUubXVsdGlwbHlCeSgtdCkpLnJvdW5kKCk7dGhpcy5fYm91bmRzPW5ldyBmKGksaS5hZGQoZS5tdWx0aXBseUJ5KDErMip0KSkucm91bmQoKSksdGhpcy5fY2VudGVyPXRoaXMuX21hcC5nZXRDZW50ZXIoKSx0aGlzLl96b29tPXRoaXMuX21hcC5nZXRab29tKCl9fSksRmk9V2kuZXh0ZW5kKHtvcHRpb25zOnt0b2xlcmFuY2U6MH0sZ2V0RXZlbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9V2kucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO3JldHVybiB0LnZpZXdwcmVyZXNldD10aGlzLl9vblZpZXdQcmVSZXNldCx0fSxfb25WaWV3UHJlUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSEwfSxvbkFkZDpmdW5jdGlvbigpe1dpLnByb3RvdHlwZS5vbkFkZC5jYWxsKHRoaXMpLHRoaXMuX2RyYXcoKX0sX2luaXRDb250YWluZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtTKHQsXCJtb3VzZW1vdmVcIix0aGlzLl9vbk1vdXNlTW92ZSx0aGlzKSxTKHQsXCJjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBjb250ZXh0bWVudVwiLHRoaXMuX29uQ2xpY2ssdGhpcyksUyh0LFwibW91c2VvdXRcIix0aGlzLl9oYW5kbGVNb3VzZU91dCx0aGlzKSx0Ll9sZWFmbGV0X2Rpc2FibGVfZXZlbnRzPSEwLHRoaXMuX2N0eD10LmdldENvbnRleHQoXCIyZFwiKX0sX2Rlc3Ryb3lDb250YWluZXI6ZnVuY3Rpb24oKXtyKHRoaXMuX3JlZHJhd1JlcXVlc3QpLGRlbGV0ZSB0aGlzLl9jdHgsVCh0aGlzLl9jb250YWluZXIpLGsodGhpcy5fY29udGFpbmVyKSxkZWxldGUgdGhpcy5fY29udGFpbmVyfSxfdXBkYXRlUGF0aHM6ZnVuY3Rpb24oKXtpZighdGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocyl7Zm9yKHZhciB0IGluIHRoaXMuX3JlZHJhd0JvdW5kcz1udWxsLHRoaXMuX2xheWVycyl0aGlzLl9sYXllcnNbdF0uX3VwZGF0ZSgpO3RoaXMuX3JlZHJhdygpfX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LGUsaSxuO3RoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSYmdGhpcy5fYm91bmRzfHwoV2kucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKSx0PXRoaXMuX2JvdW5kcyxlPXRoaXMuX2NvbnRhaW5lcixpPXQuZ2V0U2l6ZSgpLG49Yi5yZXRpbmE/MjoxLFooZSx0Lm1pbiksZS53aWR0aD1uKmkueCxlLmhlaWdodD1uKmkueSxlLnN0eWxlLndpZHRoPWkueCtcInB4XCIsZS5zdHlsZS5oZWlnaHQ9aS55K1wicHhcIixiLnJldGluYSYmdGhpcy5fY3R4LnNjYWxlKDIsMiksdGhpcy5fY3R4LnRyYW5zbGF0ZSgtdC5taW4ueCwtdC5taW4ueSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX3Jlc2V0OmZ1bmN0aW9uKCl7V2kucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpLHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMmJih0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzPSExLHRoaXMuX3VwZGF0ZVBhdGhzKCkpfSxfaW5pdFBhdGg6ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlRGFzaEFycmF5KHQpO3Q9KHRoaXMuX2xheWVyc1toKHQpXT10KS5fb3JkZXI9e2xheWVyOnQscHJldjp0aGlzLl9kcmF3TGFzdCxuZXh0Om51bGx9O3RoaXMuX2RyYXdMYXN0JiYodGhpcy5fZHJhd0xhc3QubmV4dD10KSx0aGlzLl9kcmF3TGFzdD10LHRoaXMuX2RyYXdGaXJzdD10aGlzLl9kcmF3Rmlyc3R8fHRoaXMuX2RyYXdMYXN0fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfcmVtb3ZlUGF0aDpmdW5jdGlvbih0KXt2YXIgZT10Ll9vcmRlcixpPWUubmV4dCxlPWUucHJldjtpP2kucHJldj1lOnRoaXMuX2RyYXdMYXN0PWUsZT9lLm5leHQ9aTp0aGlzLl9kcmF3Rmlyc3Q9aSxkZWxldGUgdC5fb3JkZXIsZGVsZXRlIHRoaXMuX2xheWVyc1toKHQpXSx0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpfSxfdXBkYXRlUGF0aDpmdW5jdGlvbih0KXt0aGlzLl9leHRlbmRSZWRyYXdCb3VuZHModCksdC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpLHRoaXMuX3JlcXVlc3RSZWRyYXcodCl9LF91cGRhdGVTdHlsZTpmdW5jdGlvbih0KXt0aGlzLl91cGRhdGVEYXNoQXJyYXkodCksdGhpcy5fcmVxdWVzdFJlZHJhdyh0KX0sX3VwZGF0ZURhc2hBcnJheTpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdC5vcHRpb25zLmRhc2hBcnJheSl7Zm9yKHZhciBlLGk9dC5vcHRpb25zLmRhc2hBcnJheS5zcGxpdCgvWywgXSsvKSxuPVtdLG89MDtvPGkubGVuZ3RoO28rKyl7aWYoZT1OdW1iZXIoaVtvXSksaXNOYU4oZSkpcmV0dXJuO24ucHVzaChlKX10Lm9wdGlvbnMuX2Rhc2hBcnJheT1ufWVsc2UgdC5vcHRpb25zLl9kYXNoQXJyYXk9dC5vcHRpb25zLmRhc2hBcnJheX0sX3JlcXVlc3RSZWRyYXc6ZnVuY3Rpb24odCl7dGhpcy5fbWFwJiYodGhpcy5fZXh0ZW5kUmVkcmF3Qm91bmRzKHQpLHRoaXMuX3JlZHJhd1JlcXVlc3Q9dGhpcy5fcmVkcmF3UmVxdWVzdHx8eCh0aGlzLl9yZWRyYXcsdGhpcykpfSxfZXh0ZW5kUmVkcmF3Qm91bmRzOmZ1bmN0aW9uKHQpe3ZhciBlO3QuX3B4Qm91bmRzJiYoZT0odC5vcHRpb25zLndlaWdodHx8MCkrMSx0aGlzLl9yZWRyYXdCb3VuZHM9dGhpcy5fcmVkcmF3Qm91bmRzfHxuZXcgZix0aGlzLl9yZWRyYXdCb3VuZHMuZXh0ZW5kKHQuX3B4Qm91bmRzLm1pbi5zdWJ0cmFjdChbZSxlXSkpLHRoaXMuX3JlZHJhd0JvdW5kcy5leHRlbmQodC5fcHhCb3VuZHMubWF4LmFkZChbZSxlXSkpKX0sX3JlZHJhdzpmdW5jdGlvbigpe3RoaXMuX3JlZHJhd1JlcXVlc3Q9bnVsbCx0aGlzLl9yZWRyYXdCb3VuZHMmJih0aGlzLl9yZWRyYXdCb3VuZHMubWluLl9mbG9vcigpLHRoaXMuX3JlZHJhd0JvdW5kcy5tYXguX2NlaWwoKSksdGhpcy5fY2xlYXIoKSx0aGlzLl9kcmF3KCksdGhpcy5fcmVkcmF3Qm91bmRzPW51bGx9LF9jbGVhcjpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fcmVkcmF3Qm91bmRzO2U/KHQ9ZS5nZXRTaXplKCksdGhpcy5fY3R4LmNsZWFyUmVjdChlLm1pbi54LGUubWluLnksdC54LHQueSkpOih0aGlzLl9jdHguc2F2ZSgpLHRoaXMuX2N0eC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuX2N0eC5jbGVhclJlY3QoMCwwLHRoaXMuX2NvbnRhaW5lci53aWR0aCx0aGlzLl9jb250YWluZXIuaGVpZ2h0KSx0aGlzLl9jdHgucmVzdG9yZSgpKX0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgdCxlLGk9dGhpcy5fcmVkcmF3Qm91bmRzO3RoaXMuX2N0eC5zYXZlKCksaSYmKGU9aS5nZXRTaXplKCksdGhpcy5fY3R4LmJlZ2luUGF0aCgpLHRoaXMuX2N0eC5yZWN0KGkubWluLngsaS5taW4ueSxlLngsZS55KSx0aGlzLl9jdHguY2xpcCgpKSx0aGlzLl9kcmF3aW5nPSEwO2Zvcih2YXIgbj10aGlzLl9kcmF3Rmlyc3Q7bjtuPW4ubmV4dCl0PW4ubGF5ZXIsKCFpfHx0Ll9weEJvdW5kcyYmdC5fcHhCb3VuZHMuaW50ZXJzZWN0cyhpKSkmJnQuX3VwZGF0ZVBhdGgoKTt0aGlzLl9kcmF3aW5nPSExLHRoaXMuX2N0eC5yZXN0b3JlKCl9LF91cGRhdGVQb2x5OmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fZHJhd2luZyl7dmFyIGksbixvLHMscj10Ll9wYXJ0cyxhPXIubGVuZ3RoLGg9dGhpcy5fY3R4O2lmKGEpe2ZvcihoLmJlZ2luUGF0aCgpLGk9MDtpPGE7aSsrKXtmb3Iobj0wLG89cltpXS5sZW5ndGg7bjxvO24rKylzPXJbaV1bbl0saFtuP1wibGluZVRvXCI6XCJtb3ZlVG9cIl0ocy54LHMueSk7ZSYmaC5jbG9zZVBhdGgoKX10aGlzLl9maWxsU3Ryb2tlKGgsdCl9fX0sX3VwZGF0ZUNpcmNsZTpmdW5jdGlvbih0KXt2YXIgZSxpLG4sbzt0aGlzLl9kcmF3aW5nJiYhdC5fZW1wdHkoKSYmKGU9dC5fcG9pbnQsaT10aGlzLl9jdHgsbj1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksMSE9KG89KE1hdGgubWF4KE1hdGgucm91bmQodC5fcmFkaXVzWSksMSl8fG4pL24pJiYoaS5zYXZlKCksaS5zY2FsZSgxLG8pKSxpLmJlZ2luUGF0aCgpLGkuYXJjKGUueCxlLnkvbyxuLDAsMipNYXRoLlBJLCExKSwxIT1vJiZpLnJlc3RvcmUoKSx0aGlzLl9maWxsU3Ryb2tlKGksdCkpfSxfZmlsbFN0cm9rZTpmdW5jdGlvbih0LGUpe3ZhciBpPWUub3B0aW9ucztpLmZpbGwmJih0Lmdsb2JhbEFscGhhPWkuZmlsbE9wYWNpdHksdC5maWxsU3R5bGU9aS5maWxsQ29sb3J8fGkuY29sb3IsdC5maWxsKGkuZmlsbFJ1bGV8fFwiZXZlbm9kZFwiKSksaS5zdHJva2UmJjAhPT1pLndlaWdodCYmKHQuc2V0TGluZURhc2gmJnQuc2V0TGluZURhc2goZS5vcHRpb25zJiZlLm9wdGlvbnMuX2Rhc2hBcnJheXx8W10pLHQuZ2xvYmFsQWxwaGE9aS5vcGFjaXR5LHQubGluZVdpZHRoPWkud2VpZ2h0LHQuc3Ryb2tlU3R5bGU9aS5jb2xvcix0LmxpbmVDYXA9aS5saW5lQ2FwLHQubGluZUpvaW49aS5saW5lSm9pbix0LnN0cm9rZSgpKX0sX29uQ2xpY2s6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGksbj10aGlzLl9tYXAubW91c2VFdmVudFRvTGF5ZXJQb2ludCh0KSxvPXRoaXMuX2RyYXdGaXJzdDtvO289by5uZXh0KShlPW8ubGF5ZXIpLm9wdGlvbnMuaW50ZXJhY3RpdmUmJmUuX2NvbnRhaW5zUG9pbnQobikmJigoXCJjbGlja1wiPT09dC50eXBlfHxcInByZWNsaWNrXCI9PT10LnR5cGUpJiZ0aGlzLl9tYXAuX2RyYWdnYWJsZU1vdmVkKGUpfHwoaT1lKSk7dGhpcy5fZmlyZUV2ZW50KCEhaSYmW2ldLHQpfSxfb25Nb3VzZU1vdmU6ZnVuY3Rpb24odCl7dmFyIGU7IXRoaXMuX21hcHx8dGhpcy5fbWFwLmRyYWdnaW5nLm1vdmluZygpfHx0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb218fChlPXRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KHQpLHRoaXMuX2hhbmRsZU1vdXNlSG92ZXIodCxlKSl9LF9oYW5kbGVNb3VzZU91dDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9ob3ZlcmVkTGF5ZXI7ZSYmKHoodGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9maXJlRXZlbnQoW2VdLHQsXCJtb3VzZW91dFwiKSx0aGlzLl9ob3ZlcmVkTGF5ZXI9bnVsbCx0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkPSExKX0sX2hhbmRsZU1vdXNlSG92ZXI6ZnVuY3Rpb24odCxlKXtpZighdGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCl7Zm9yKHZhciBpLG4sbz10aGlzLl9kcmF3Rmlyc3Q7bztvPW8ubmV4dCkoaT1vLmxheWVyKS5vcHRpb25zLmludGVyYWN0aXZlJiZpLl9jb250YWluc1BvaW50KGUpJiYobj1pKTtuIT09dGhpcy5faG92ZXJlZExheWVyJiYodGhpcy5faGFuZGxlTW91c2VPdXQodCksbiYmKE0odGhpcy5fY29udGFpbmVyLFwibGVhZmxldC1pbnRlcmFjdGl2ZVwiKSx0aGlzLl9maXJlRXZlbnQoW25dLHQsXCJtb3VzZW92ZXJcIiksdGhpcy5faG92ZXJlZExheWVyPW4pKSx0aGlzLl9maXJlRXZlbnQoISF0aGlzLl9ob3ZlcmVkTGF5ZXImJlt0aGlzLl9ob3ZlcmVkTGF5ZXJdLHQpLHRoaXMuX21vdXNlSG92ZXJUaHJvdHRsZWQ9ITAsc2V0VGltZW91dChhKGZ1bmN0aW9uKCl7dGhpcy5fbW91c2VIb3ZlclRocm90dGxlZD0hMX0sdGhpcyksMzIpfX0sX2ZpcmVFdmVudDpmdW5jdGlvbih0LGUsaSl7dGhpcy5fbWFwLl9maXJlRE9NRXZlbnQoZSxpfHxlLnR5cGUsdCl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXQuX29yZGVyO24mJihlPW4ubmV4dCxpPW4ucHJldixlJiYoKGUucHJldj1pKT9pLm5leHQ9ZTplJiYodGhpcy5fZHJhd0ZpcnN0PWUpLG4ucHJldj10aGlzLl9kcmF3TGFzdCwodGhpcy5fZHJhd0xhc3QubmV4dD1uKS5uZXh0PW51bGwsdGhpcy5fZHJhd0xhc3Q9bix0aGlzLl9yZXF1ZXN0UmVkcmF3KHQpKSl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXt2YXIgZSxpLG49dC5fb3JkZXI7biYmKGU9bi5uZXh0LChpPW4ucHJldikmJigoaS5uZXh0PWUpP2UucHJldj1pOmkmJih0aGlzLl9kcmF3TGFzdD1pKSxuLnByZXY9bnVsbCxuLm5leHQ9dGhpcy5fZHJhd0ZpcnN0LHRoaXMuX2RyYXdGaXJzdC5wcmV2PW4sdGhpcy5fZHJhd0ZpcnN0PW4sdGhpcy5fcmVxdWVzdFJlZHJhdyh0KSkpfX0pO2Z1bmN0aW9uIFVpKHQpe3JldHVybiBiLmNhbnZhcz9uZXcgRmkodCk6bnVsbH12YXIgVmk9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGRvY3VtZW50Lm5hbWVzcGFjZXMuYWRkKFwibHZtbFwiLFwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWxcIiksZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8bHZtbDpcIit0KycgY2xhc3M9XCJsdm1sXCI+Jyl9fWNhdGNoKHQpe31yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCI8XCIrdCsnIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LmNvbTp2bWxcIiBjbGFzcz1cImx2bWxcIj4nKX19KCksenQ9e19pbml0Q29udGFpbmVyOmZ1bmN0aW9uKCl7dGhpcy5fY29udGFpbmVyPVAoXCJkaXZcIixcImxlYWZsZXQtdm1sLWNvbnRhaW5lclwiKX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX21hcC5fYW5pbWF0aW5nWm9vbXx8KFdpLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2NvbnRhaW5lcj1WaShcInNoYXBlXCIpO00oZSxcImxlYWZsZXQtdm1sLXNoYXBlIFwiKyh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfHxcIlwiKSksZS5jb29yZHNpemU9XCIxIDFcIix0Ll9wYXRoPVZpKFwicGF0aFwiKSxlLmFwcGVuZENoaWxkKHQuX3BhdGgpLHRoaXMuX3VwZGF0ZVN0eWxlKHQpLHRoaXMuX2xheWVyc1toKHQpXT10fSxfYWRkUGF0aDpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250YWluZXI7dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHQub3B0aW9ucy5pbnRlcmFjdGl2ZSYmdC5hZGRJbnRlcmFjdGl2ZVRhcmdldChlKX0sX3JlbW92ZVBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9dC5fY29udGFpbmVyO1QoZSksdC5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChlKSxkZWxldGUgdGhpcy5fbGF5ZXJzW2godCldfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fc3Ryb2tlLGk9dC5fZmlsbCxuPXQub3B0aW9ucyxvPXQuX2NvbnRhaW5lcjtvLnN0cm9rZWQ9ISFuLnN0cm9rZSxvLmZpbGxlZD0hIW4uZmlsbCxuLnN0cm9rZT8oZT1lfHwodC5fc3Ryb2tlPVZpKFwic3Ryb2tlXCIpKSxvLmFwcGVuZENoaWxkKGUpLGUud2VpZ2h0PW4ud2VpZ2h0K1wicHhcIixlLmNvbG9yPW4uY29sb3IsZS5vcGFjaXR5PW4ub3BhY2l0eSxuLmRhc2hBcnJheT9lLmRhc2hTdHlsZT1kKG4uZGFzaEFycmF5KT9uLmRhc2hBcnJheS5qb2luKFwiIFwiKTpuLmRhc2hBcnJheS5yZXBsYWNlKC8oICosICopL2csXCIgXCIpOmUuZGFzaFN0eWxlPVwiXCIsZS5lbmRjYXA9bi5saW5lQ2FwLnJlcGxhY2UoXCJidXR0XCIsXCJmbGF0XCIpLGUuam9pbnN0eWxlPW4ubGluZUpvaW4pOmUmJihvLnJlbW92ZUNoaWxkKGUpLHQuX3N0cm9rZT1udWxsKSxuLmZpbGw/KGk9aXx8KHQuX2ZpbGw9VmkoXCJmaWxsXCIpKSxvLmFwcGVuZENoaWxkKGkpLGkuY29sb3I9bi5maWxsQ29sb3J8fG4uY29sb3IsaS5vcGFjaXR5PW4uZmlsbE9wYWNpdHkpOmkmJihvLnJlbW92ZUNoaWxkKGkpLHQuX2ZpbGw9bnVsbCl9LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fcG9pbnQucm91bmQoKSxpPU1hdGgucm91bmQodC5fcmFkaXVzKSxuPU1hdGgucm91bmQodC5fcmFkaXVzWXx8aSk7dGhpcy5fc2V0UGF0aCh0LHQuX2VtcHR5KCk/XCJNMCAwXCI6XCJBTCBcIitlLngrXCIsXCIrZS55K1wiIFwiK2krXCIsXCIrbitcIiAwLDIzNTkyNjAwXCIpfSxfc2V0UGF0aDpmdW5jdGlvbih0LGUpe3QuX3BhdGgudj1lfSxfYnJpbmdUb0Zyb250OmZ1bmN0aW9uKHQpe2ZlKHQuX2NvbnRhaW5lcil9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtnZSh0Ll9jb250YWluZXIpfX0scWk9Yi52bWw/Vmk6Y3QsR2k9V2kuZXh0ZW5kKHtfaW5pdENvbnRhaW5lcjpmdW5jdGlvbigpe3RoaXMuX2NvbnRhaW5lcj1xaShcInN2Z1wiKSx0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwicG9pbnRlci1ldmVudHNcIixcIm5vbmVcIiksdGhpcy5fcm9vdEdyb3VwPXFpKFwiZ1wiKSx0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm9vdEdyb3VwKX0sX2Rlc3Ryb3lDb250YWluZXI6ZnVuY3Rpb24oKXtUKHRoaXMuX2NvbnRhaW5lciksayh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIsZGVsZXRlIHRoaXMuX3Jvb3RHcm91cCxkZWxldGUgdGhpcy5fc3ZnU2l6ZX0sX3VwZGF0ZTpmdW5jdGlvbigpe3ZhciB0LGUsaTt0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20mJnRoaXMuX2JvdW5kc3x8KFdpLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyksZT0odD10aGlzLl9ib3VuZHMpLmdldFNpemUoKSxpPXRoaXMuX2NvbnRhaW5lcix0aGlzLl9zdmdTaXplJiZ0aGlzLl9zdmdTaXplLmVxdWFscyhlKXx8KHRoaXMuX3N2Z1NpemU9ZSxpLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsZS54KSxpLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLGUueSkpLFooaSx0Lm1pbiksaS5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsW3QubWluLngsdC5taW4ueSxlLngsZS55XS5qb2luKFwiIFwiKSksdGhpcy5maXJlKFwidXBkYXRlXCIpKX0sX2luaXRQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX3BhdGg9cWkoXCJwYXRoXCIpO3Qub3B0aW9ucy5jbGFzc05hbWUmJk0oZSx0Lm9wdGlvbnMuY2xhc3NOYW1lKSx0Lm9wdGlvbnMuaW50ZXJhY3RpdmUmJk0oZSxcImxlYWZsZXQtaW50ZXJhY3RpdmVcIiksdGhpcy5fdXBkYXRlU3R5bGUodCksdGhpcy5fbGF5ZXJzW2godCldPXR9LF9hZGRQYXRoOmZ1bmN0aW9uKHQpe3RoaXMuX3Jvb3RHcm91cHx8dGhpcy5faW5pdENvbnRhaW5lcigpLHRoaXMuX3Jvb3RHcm91cC5hcHBlbmRDaGlsZCh0Ll9wYXRoKSx0LmFkZEludGVyYWN0aXZlVGFyZ2V0KHQuX3BhdGgpfSxfcmVtb3ZlUGF0aDpmdW5jdGlvbih0KXtUKHQuX3BhdGgpLHQucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodC5fcGF0aCksZGVsZXRlIHRoaXMuX2xheWVyc1toKHQpXX0sX3VwZGF0ZVBhdGg6ZnVuY3Rpb24odCl7dC5fcHJvamVjdCgpLHQuX3VwZGF0ZSgpfSxfdXBkYXRlU3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fcGF0aCx0PXQub3B0aW9ucztlJiYodC5zdHJva2U/KGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsdC5jb2xvciksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utb3BhY2l0eVwiLHQub3BhY2l0eSksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIix0LndlaWdodCksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWNhcFwiLHQubGluZUNhcCksZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2UtbGluZWpvaW5cIix0LmxpbmVKb2luKSx0LmRhc2hBcnJheT9lLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNoYXJyYXlcIix0LmRhc2hBcnJheSk6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHJva2UtZGFzaGFycmF5XCIpLHQuZGFzaE9mZnNldD9lLnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIsdC5kYXNoT2Zmc2V0KTplLnJlbW92ZUF0dHJpYnV0ZShcInN0cm9rZS1kYXNob2Zmc2V0XCIpKTplLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLFwibm9uZVwiKSx0LmZpbGw/KGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLHQuZmlsbENvbG9yfHx0LmNvbG9yKSxlLnNldEF0dHJpYnV0ZShcImZpbGwtb3BhY2l0eVwiLHQuZmlsbE9wYWNpdHkpLGUuc2V0QXR0cmlidXRlKFwiZmlsbC1ydWxlXCIsdC5maWxsUnVsZXx8XCJldmVub2RkXCIpKTplLnNldEF0dHJpYnV0ZShcImZpbGxcIixcIm5vbmVcIikpfSxfdXBkYXRlUG9seTpmdW5jdGlvbih0LGUpe3RoaXMuX3NldFBhdGgodCxkdCh0Ll9wYXJ0cyxlKSl9LF91cGRhdGVDaXJjbGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5fcG9pbnQsaT1NYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1cyksMSksbj1cImFcIitpK1wiLFwiKyhNYXRoLm1heChNYXRoLnJvdW5kKHQuX3JhZGl1c1kpLDEpfHxpKStcIiAwIDEsMCBcIixlPXQuX2VtcHR5KCk/XCJNMCAwXCI6XCJNXCIrKGUueC1pKStcIixcIitlLnkrbisyKmkrXCIsMCBcIituKzIqLWkrXCIsMCBcIjt0aGlzLl9zZXRQYXRoKHQsZSl9LF9zZXRQYXRoOmZ1bmN0aW9uKHQsZSl7dC5fcGF0aC5zZXRBdHRyaWJ1dGUoXCJkXCIsZSl9LF9icmluZ1RvRnJvbnQ6ZnVuY3Rpb24odCl7ZmUodC5fcGF0aCl9LF9icmluZ1RvQmFjazpmdW5jdGlvbih0KXtnZSh0Ll9wYXRoKX19KTtmdW5jdGlvbiBLaSh0KXtyZXR1cm4gYi5zdmd8fGIudm1sP25ldyBHaSh0KTpudWxsfWIudm1sJiZHaS5pbmNsdWRlKHp0KSxBLmluY2x1ZGUoe2dldFJlbmRlcmVyOmZ1bmN0aW9uKHQpe3Q9KHQ9dC5vcHRpb25zLnJlbmRlcmVyfHx0aGlzLl9nZXRQYW5lUmVuZGVyZXIodC5vcHRpb25zLnBhbmUpfHx0aGlzLm9wdGlvbnMucmVuZGVyZXJ8fHRoaXMuX3JlbmRlcmVyKXx8KHRoaXMuX3JlbmRlcmVyPXRoaXMuX2NyZWF0ZVJlbmRlcmVyKCkpO3JldHVybiB0aGlzLmhhc0xheWVyKHQpfHx0aGlzLmFkZExheWVyKHQpLHR9LF9nZXRQYW5lUmVuZGVyZXI6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJvdmVybGF5UGFuZVwiIT09dCYmdm9pZCAwIT09dCYmKHZvaWQgMD09PShlPXRoaXMuX3BhbmVSZW5kZXJlcnNbdF0pJiYoZT10aGlzLl9jcmVhdGVSZW5kZXJlcih7cGFuZTp0fSksdGhpcy5fcGFuZVJlbmRlcmVyc1t0XT1lKSxlKX0sX2NyZWF0ZVJlbmRlcmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMucHJlZmVyQ2FudmFzJiZVaSh0KXx8S2kodCl9fSk7dmFyIFlpPXhpLmV4dGVuZCh7aW5pdGlhbGl6ZTpmdW5jdGlvbih0LGUpe3hpLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyx0aGlzLl9ib3VuZHNUb0xhdExuZ3ModCksZSl9LHNldEJvdW5kczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyh0KSl9LF9ib3VuZHNUb0xhdExuZ3M6ZnVuY3Rpb24odCl7cmV0dXJuWyh0PWcodCkpLmdldFNvdXRoV2VzdCgpLHQuZ2V0Tm9ydGhXZXN0KCksdC5nZXROb3J0aEVhc3QoKSx0LmdldFNvdXRoRWFzdCgpXX19KTtHaS5jcmVhdGU9cWksR2kucG9pbnRzVG9QYXRoPWR0LHdpLmdlb21ldHJ5VG9MYXllcj1iaSx3aS5jb29yZHNUb0xhdExuZz1MaSx3aS5jb29yZHNUb0xhdExuZ3M9VGksd2kubGF0TG5nVG9Db29yZHM9TWksd2kubGF0TG5nc1RvQ29vcmRzPXppLHdpLmdldEZlYXR1cmU9Q2ksd2kuYXNGZWF0dXJlPVppLEEubWVyZ2VPcHRpb25zKHtib3hab29tOiEwfSk7dmFyIF90PW4uZXh0ZW5kKHtpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj10Ll9jb250YWluZXIsdGhpcy5fcGFuZT10Ll9wYW5lcy5vdmVybGF5UGFuZSx0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHQub24oXCJ1bmxvYWRcIix0aGlzLl9kZXN0cm95LHRoaXMpfSxhZGRIb29rczpmdW5jdGlvbigpe1ModGhpcy5fY29udGFpbmVyLFwibW91c2Vkb3duXCIsdGhpcy5fb25Nb3VzZURvd24sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7ayh0aGlzLl9jb250YWluZXIsXCJtb3VzZWRvd25cIix0aGlzLl9vbk1vdXNlRG93bix0aGlzKX0sbW92ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW92ZWR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7VCh0aGlzLl9wYW5lKSxkZWxldGUgdGhpcy5fcGFuZX0sX3Jlc2V0U3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9yZXNldFN0YXRlVGltZW91dD0wLHRoaXMuX21vdmVkPSExfSxfY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGU6ZnVuY3Rpb24oKXswIT09dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQmJihjbGVhclRpbWVvdXQodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQpLHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0PTApfSxfb25Nb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIXQuc2hpZnRLZXl8fDEhPT10LndoaWNoJiYxIT09dC5idXR0b24pcmV0dXJuITE7dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCkscmUoKSxMZSgpLHRoaXMuX3N0YXJ0UG9pbnQ9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLFMoZG9jdW1lbnQse2NvbnRleHRtZW51OlJlLG1vdXNlbW92ZTp0aGlzLl9vbk1vdXNlTW92ZSxtb3VzZXVwOnRoaXMuX29uTW91c2VVcCxrZXlkb3duOnRoaXMuX29uS2V5RG93bn0sdGhpcyl9LF9vbk1vdXNlTW92ZTpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlZHx8KHRoaXMuX21vdmVkPSEwLHRoaXMuX2JveD1QKFwiZGl2XCIsXCJsZWFmbGV0LXpvb20tYm94XCIsdGhpcy5fY29udGFpbmVyKSxNKHRoaXMuX2NvbnRhaW5lcixcImxlYWZsZXQtY3Jvc3NoYWlyXCIpLHRoaXMuX21hcC5maXJlKFwiYm94em9vbXN0YXJ0XCIpKSx0aGlzLl9wb2ludD10aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodCk7dmFyIHQ9bmV3IGYodGhpcy5fcG9pbnQsdGhpcy5fc3RhcnRQb2ludCksZT10LmdldFNpemUoKTtaKHRoaXMuX2JveCx0Lm1pbiksdGhpcy5fYm94LnN0eWxlLndpZHRoPWUueCtcInB4XCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1lLnkrXCJweFwifSxfZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZWQmJihUKHRoaXMuX2JveCkseih0aGlzLl9jb250YWluZXIsXCJsZWFmbGV0LWNyb3NzaGFpclwiKSksYWUoKSxUZSgpLGsoZG9jdW1lbnQse2NvbnRleHRtZW51OlJlLG1vdXNlbW92ZTp0aGlzLl9vbk1vdXNlTW92ZSxtb3VzZXVwOnRoaXMuX29uTW91c2VVcCxrZXlkb3duOnRoaXMuX29uS2V5RG93bn0sdGhpcyl9LF9vbk1vdXNlVXA6ZnVuY3Rpb24odCl7MSE9PXQud2hpY2gmJjEhPT10LmJ1dHRvbnx8KHRoaXMuX2ZpbmlzaCgpLHRoaXMuX21vdmVkJiYodGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlVGltZW91dD1zZXRUaW1lb3V0KGEodGhpcy5fcmVzZXRTdGF0ZSx0aGlzKSwwKSx0PW5ldyBzKHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3N0YXJ0UG9pbnQpLHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3BvaW50KSksdGhpcy5fbWFwLmZpdEJvdW5kcyh0KS5maXJlKFwiYm94em9vbWVuZFwiLHtib3hab29tQm91bmRzOnR9KSkpfSxfb25LZXlEb3duOmZ1bmN0aW9uKHQpezI3PT09dC5rZXlDb2RlJiYodGhpcy5fZmluaXNoKCksdGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKSx0aGlzLl9yZXNldFN0YXRlKCkpfX0pLEN0PShBLmFkZEluaXRIb29rKFwiYWRkSGFuZGxlclwiLFwiYm94Wm9vbVwiLF90KSxBLm1lcmdlT3B0aW9ucyh7ZG91YmxlQ2xpY2tab29tOiEwfSksbi5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fbWFwLm9uKFwiZGJsY2xpY2tcIix0aGlzLl9vbkRvdWJsZUNsaWNrLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe3RoaXMuX21hcC5vZmYoXCJkYmxjbGlja1wiLHRoaXMuX29uRG91YmxlQ2xpY2ssdGhpcyl9LF9vbkRvdWJsZUNsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcCxpPWUuZ2V0Wm9vbSgpLG49ZS5vcHRpb25zLnpvb21EZWx0YSxpPXQub3JpZ2luYWxFdmVudC5zaGlmdEtleT9pLW46aStuO1wiY2VudGVyXCI9PT1lLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tP2Uuc2V0Wm9vbShpKTplLnNldFpvb21Bcm91bmQodC5jb250YWluZXJQb2ludCxpKX19KSksWnQ9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJkb3VibGVDbGlja1pvb21cIixDdCksQS5tZXJnZU9wdGlvbnMoe2RyYWdnaW5nOiEwLGluZXJ0aWE6ITAsaW5lcnRpYURlY2VsZXJhdGlvbjozNDAwLGluZXJ0aWFNYXhTcGVlZDoxLzAsZWFzZUxpbmVhcml0eTouMix3b3JsZENvcHlKdW1wOiExLG1heEJvdW5kc1Zpc2Nvc2l0eTowfSksbi5leHRlbmQoe2FkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5fZHJhZ2dhYmxlfHwodD10aGlzLl9tYXAsdGhpcy5fZHJhZ2dhYmxlPW5ldyBYZSh0Ll9tYXBQYW5lLHQuX2NvbnRhaW5lciksdGhpcy5fZHJhZ2dhYmxlLm9uKHtkcmFnc3RhcnQ6dGhpcy5fb25EcmFnU3RhcnQsZHJhZzp0aGlzLl9vbkRyYWcsZHJhZ2VuZDp0aGlzLl9vbkRyYWdFbmR9LHRoaXMpLHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdMaW1pdCx0aGlzKSx0Lm9wdGlvbnMud29ybGRDb3B5SnVtcCYmKHRoaXMuX2RyYWdnYWJsZS5vbihcInByZWRyYWdcIix0aGlzLl9vblByZURyYWdXcmFwLHRoaXMpLHQub24oXCJ6b29tZW5kXCIsdGhpcy5fb25ab29tRW5kLHRoaXMpLHQud2hlblJlYWR5KHRoaXMuX29uWm9vbUVuZCx0aGlzKSkpLE0odGhpcy5fbWFwLl9jb250YWluZXIsXCJsZWFmbGV0LWdyYWIgbGVhZmxldC10b3VjaC1kcmFnXCIpLHRoaXMuX2RyYWdnYWJsZS5lbmFibGUoKSx0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W119LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7eih0aGlzLl9tYXAuX2NvbnRhaW5lcixcImxlYWZsZXQtZ3JhYlwiKSx6KHRoaXMuX21hcC5fY29udGFpbmVyLFwibGVhZmxldC10b3VjaC1kcmFnXCIpLHRoaXMuX2RyYWdnYWJsZS5kaXNhYmxlKCl9LG1vdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3ZlZH0sbW92aW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSYmdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmd9LF9vbkRyYWdTdGFydDpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fbWFwO2UuX3N0b3AoKSx0aGlzLl9tYXAub3B0aW9ucy5tYXhCb3VuZHMmJnRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eT8odD1nKHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kcyksdGhpcy5fb2Zmc2V0TGltaXQ9Xyh0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldE5vcnRoV2VzdCgpKS5tdWx0aXBseUJ5KC0xKSx0aGlzLl9tYXAubGF0TG5nVG9Db250YWluZXJQb2ludCh0LmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKS5hZGQodGhpcy5fbWFwLmdldFNpemUoKSkpLHRoaXMuX3Zpc2Nvc2l0eT1NYXRoLm1pbigxLE1hdGgubWF4KDAsdGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzVmlzY29zaXR5KSkpOnRoaXMuX29mZnNldExpbWl0PW51bGwsZS5maXJlKFwibW92ZXN0YXJ0XCIpLmZpcmUoXCJkcmFnc3RhcnRcIiksZS5vcHRpb25zLmluZXJ0aWEmJih0aGlzLl9wb3NpdGlvbnM9W10sdGhpcy5fdGltZXM9W10pfSxfb25EcmFnOmZ1bmN0aW9uKHQpe3ZhciBlLGk7dGhpcy5fbWFwLm9wdGlvbnMuaW5lcnRpYSYmKGU9dGhpcy5fbGFzdFRpbWU9K25ldyBEYXRlLGk9dGhpcy5fbGFzdFBvcz10aGlzLl9kcmFnZ2FibGUuX2Fic1Bvc3x8dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MsdGhpcy5fcG9zaXRpb25zLnB1c2goaSksdGhpcy5fdGltZXMucHVzaChlKSx0aGlzLl9wcnVuZVBvc2l0aW9ucyhlKSksdGhpcy5fbWFwLmZpcmUoXCJtb3ZlXCIsdCkuZmlyZShcImRyYWdcIix0KX0sX3BydW5lUG9zaXRpb25zOmZ1bmN0aW9uKHQpe2Zvcig7MTx0aGlzLl9wb3NpdGlvbnMubGVuZ3RoJiY1MDx0LXRoaXMuX3RpbWVzWzBdOyl0aGlzLl9wb3NpdGlvbnMuc2hpZnQoKSx0aGlzLl90aW1lcy5zaGlmdCgpfSxfb25ab29tRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldFNpemUoKS5kaXZpZGVCeSgyKSxlPXRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoWzAsMF0pO3RoaXMuX2luaXRpYWxXb3JsZE9mZnNldD1lLnN1YnRyYWN0KHQpLngsdGhpcy5fd29ybGRXaWR0aD10aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcygpLmdldFNpemUoKS54fSxfdmlzY291c0xpbWl0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtKHQtZSkqdGhpcy5fdmlzY29zaXR5fSxfb25QcmVEcmFnTGltaXQ6ZnVuY3Rpb24oKXt2YXIgdCxlO3RoaXMuX3Zpc2Nvc2l0eSYmdGhpcy5fb2Zmc2V0TGltaXQmJih0PXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnN1YnRyYWN0KHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MpLGU9dGhpcy5fb2Zmc2V0TGltaXQsdC54PGUubWluLngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxlLm1pbi54KSksdC55PGUubWluLnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxlLm1pbi55KSksdC54PmUubWF4LngmJih0Lng9dGhpcy5fdmlzY291c0xpbWl0KHQueCxlLm1heC54KSksdC55PmUubWF4LnkmJih0Lnk9dGhpcy5fdmlzY291c0xpbWl0KHQueSxlLm1heC55KSksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3M9dGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5hZGQodCkpfSxfb25QcmVEcmFnV3JhcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dvcmxkV2lkdGgsZT1NYXRoLnJvdW5kKHQvMiksaT10aGlzLl9pbml0aWFsV29ybGRPZmZzZXQsbj10aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54LG89KG4tZStpKSV0K2UtaSxuPShuK2UraSkldC1lLWksdD1NYXRoLmFicyhvK2kpPE1hdGguYWJzKG4raSk/bzpuO3RoaXMuX2RyYWdnYWJsZS5fYWJzUG9zPXRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLmNsb25lKCksdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MueD10fSxfb25EcmFnRW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixvLHM9dGhpcy5fbWFwLHI9cy5vcHRpb25zLGE9IXIuaW5lcnRpYXx8dC5ub0luZXJ0aWF8fHRoaXMuX3RpbWVzLmxlbmd0aDwyO3MuZmlyZShcImRyYWdlbmRcIix0KSwhYSYmKHRoaXMuX3BydW5lUG9zaXRpb25zKCtuZXcgRGF0ZSksdD10aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSksYT0odGhpcy5fbGFzdFRpbWUtdGhpcy5fdGltZXNbMF0pLzFlMyxlPXIuZWFzZUxpbmVhcml0eSxhPSh0PXQubXVsdGlwbHlCeShlL2EpKS5kaXN0YW5jZVRvKFswLDBdKSxpPU1hdGgubWluKHIuaW5lcnRpYU1heFNwZWVkLGEpLHQ9dC5tdWx0aXBseUJ5KGkvYSksbj1pLyhyLmluZXJ0aWFEZWNlbGVyYXRpb24qZSksKG89dC5tdWx0aXBseUJ5KC1uLzIpLnJvdW5kKCkpLnh8fG8ueSk/KG89cy5fbGltaXRPZmZzZXQobyxzLm9wdGlvbnMubWF4Qm91bmRzKSx4KGZ1bmN0aW9uKCl7cy5wYW5CeShvLHtkdXJhdGlvbjpuLGVhc2VMaW5lYXJpdHk6ZSxub01vdmVTdGFydDohMCxhbmltYXRlOiEwfSl9KSk6cy5maXJlKFwibW92ZWVuZFwiKX19KSksU3Q9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJkcmFnZ2luZ1wiLFp0KSxBLm1lcmdlT3B0aW9ucyh7a2V5Ym9hcmQ6ITAsa2V5Ym9hcmRQYW5EZWx0YTo4MH0pLG4uZXh0ZW5kKHtrZXlDb2Rlczp7bGVmdDpbMzddLHJpZ2h0OlszOV0sZG93bjpbNDBdLHVwOlszOF0sem9vbUluOlsxODcsMTA3LDYxLDE3MV0sem9vbU91dDpbMTg5LDEwOSw1NCwxNzNdfSxpbml0aWFsaXplOmZ1bmN0aW9uKHQpe3RoaXMuX21hcD10LHRoaXMuX3NldFBhbkRlbHRhKHQub3B0aW9ucy5rZXlib2FyZFBhbkRlbHRhKSx0aGlzLl9zZXRab29tRGVsdGEodC5vcHRpb25zLnpvb21EZWx0YSl9LGFkZEhvb2tzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLl9jb250YWluZXI7dC50YWJJbmRleDw9MCYmKHQudGFiSW5kZXg9XCIwXCIpLFModCx7Zm9jdXM6dGhpcy5fb25Gb2N1cyxibHVyOnRoaXMuX29uQmx1cixtb3VzZWRvd246dGhpcy5fb25Nb3VzZURvd259LHRoaXMpLHRoaXMuX21hcC5vbih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSG9va3MoKSxrKHRoaXMuX21hcC5fY29udGFpbmVyLHtmb2N1czp0aGlzLl9vbkZvY3VzLGJsdXI6dGhpcy5fb25CbHVyLG1vdXNlZG93bjp0aGlzLl9vbk1vdXNlRG93bn0sdGhpcyksdGhpcy5fbWFwLm9mZih7Zm9jdXM6dGhpcy5fYWRkSG9va3MsYmx1cjp0aGlzLl9yZW1vdmVIb29rc30sdGhpcyl9LF9vbk1vdXNlRG93bjpmdW5jdGlvbigpe3ZhciB0LGUsaTt0aGlzLl9mb2N1c2VkfHwoaT1kb2N1bWVudC5ib2R5LHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGU9aS5zY3JvbGxUb3B8fHQuc2Nyb2xsVG9wLGk9aS5zY3JvbGxMZWZ0fHx0LnNjcm9sbExlZnQsdGhpcy5fbWFwLl9jb250YWluZXIuZm9jdXMoKSx3aW5kb3cuc2Nyb2xsVG8oaSxlKSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMCx0aGlzLl9tYXAuZmlyZShcImZvY3VzXCIpfSxfb25CbHVyOmZ1bmN0aW9uKCl7dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9tYXAuZmlyZShcImJsdXJcIil9LF9zZXRQYW5EZWx0YTpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fcGFuS2V5cz17fSxpPXRoaXMua2V5Q29kZXMsbj0wLG89aS5sZWZ0Lmxlbmd0aDtuPG87bisrKWVbaS5sZWZ0W25dXT1bLTEqdCwwXTtmb3Iobj0wLG89aS5yaWdodC5sZW5ndGg7bjxvO24rKyllW2kucmlnaHRbbl1dPVt0LDBdO2ZvcihuPTAsbz1pLmRvd24ubGVuZ3RoO248bztuKyspZVtpLmRvd25bbl1dPVswLHRdO2ZvcihuPTAsbz1pLnVwLmxlbmd0aDtuPG87bisrKWVbaS51cFtuXV09WzAsLTEqdF19LF9zZXRab29tRGVsdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3pvb21LZXlzPXt9LGk9dGhpcy5rZXlDb2RlcyxuPTAsbz1pLnpvb21Jbi5sZW5ndGg7bjxvO24rKyllW2kuem9vbUluW25dXT10O2ZvcihuPTAsbz1pLnpvb21PdXQubGVuZ3RoO248bztuKyspZVtpLnpvb21PdXRbbl1dPS10fSxfYWRkSG9va3M6ZnVuY3Rpb24oKXtTKGRvY3VtZW50LFwia2V5ZG93blwiLHRoaXMuX29uS2V5RG93bix0aGlzKX0sX3JlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7ayhkb2N1bWVudCxcImtleWRvd25cIix0aGlzLl9vbktleURvd24sdGhpcyl9LF9vbktleURvd246ZnVuY3Rpb24odCl7aWYoISh0LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXt2YXIgZSxpLG49dC5rZXlDb2RlLG89dGhpcy5fbWFwO2lmKG4gaW4gdGhpcy5fcGFuS2V5cylvLl9wYW5BbmltJiZvLl9wYW5BbmltLl9pblByb2dyZXNzfHwoaT10aGlzLl9wYW5LZXlzW25dLHQuc2hpZnRLZXkmJihpPW0oaSkubXVsdGlwbHlCeSgzKSksby5vcHRpb25zLm1heEJvdW5kcyYmKGk9by5fbGltaXRPZmZzZXQobShpKSxvLm9wdGlvbnMubWF4Qm91bmRzKSksby5vcHRpb25zLndvcmxkQ29weUp1bXA/KGU9by53cmFwTGF0TG5nKG8udW5wcm9qZWN0KG8ucHJvamVjdChvLmdldENlbnRlcigpKS5hZGQoaSkpKSxvLnBhblRvKGUpKTpvLnBhbkJ5KGkpKTtlbHNlIGlmKG4gaW4gdGhpcy5fem9vbUtleXMpby5zZXRab29tKG8uZ2V0Wm9vbSgpKyh0LnNoaWZ0S2V5PzM6MSkqdGhpcy5fem9vbUtleXNbbl0pO2Vsc2V7aWYoMjchPT1ufHwhby5fcG9wdXB8fCFvLl9wb3B1cC5vcHRpb25zLmNsb3NlT25Fc2NhcGVLZXkpcmV0dXJuO28uY2xvc2VQb3B1cCgpfVJlKHQpfX19KSksRXQ9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJrZXlib2FyZFwiLFN0KSxBLm1lcmdlT3B0aW9ucyh7c2Nyb2xsV2hlZWxab29tOiEwLHdoZWVsRGVib3VuY2VUaW1lOjQwLHdoZWVsUHhQZXJab29tTGV2ZWw6NjB9KSxuLmV4dGVuZCh7YWRkSG9va3M6ZnVuY3Rpb24oKXtTKHRoaXMuX21hcC5fY29udGFpbmVyLFwid2hlZWxcIix0aGlzLl9vbldoZWVsU2Nyb2xsLHRoaXMpLHRoaXMuX2RlbHRhPTB9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7ayh0aGlzLl9tYXAuX2NvbnRhaW5lcixcIndoZWVsXCIsdGhpcy5fb25XaGVlbFNjcm9sbCx0aGlzKX0sX29uV2hlZWxTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGU9SGUodCksaT10aGlzLl9tYXAub3B0aW9ucy53aGVlbERlYm91bmNlVGltZSxlPSh0aGlzLl9kZWx0YSs9ZSx0aGlzLl9sYXN0TW91c2VQb3M9dGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQpLHRoaXMuX3N0YXJ0VGltZXx8KHRoaXMuX3N0YXJ0VGltZT0rbmV3IERhdGUpLE1hdGgubWF4KGktKCtuZXcgRGF0ZS10aGlzLl9zdGFydFRpbWUpLDApKTtjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPXNldFRpbWVvdXQoYSh0aGlzLl9wZXJmb3JtWm9vbSx0aGlzKSxlKSxSZSh0KX0sX3BlcmZvcm1ab29tOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLGU9dC5nZXRab29tKCksaT10aGlzLl9tYXAub3B0aW9ucy56b29tU25hcHx8MCxuPSh0Ll9zdG9wKCksdGhpcy5fZGVsdGEvKDQqdGhpcy5fbWFwLm9wdGlvbnMud2hlZWxQeFBlclpvb21MZXZlbCkpLG49NCpNYXRoLmxvZygyLygxK01hdGguZXhwKC1NYXRoLmFicyhuKSkpKS9NYXRoLkxOMixpPWk/TWF0aC5jZWlsKG4vaSkqaTpuLG49dC5fbGltaXRab29tKGUrKDA8dGhpcy5fZGVsdGE/aTotaSkpLWU7dGhpcy5fZGVsdGE9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCxuJiYoXCJjZW50ZXJcIj09PXQub3B0aW9ucy5zY3JvbGxXaGVlbFpvb20/dC5zZXRab29tKGUrbik6dC5zZXRab29tQXJvdW5kKHRoaXMuX2xhc3RNb3VzZVBvcyxlK24pKX19KSksa3Q9KEEuYWRkSW5pdEhvb2soXCJhZGRIYW5kbGVyXCIsXCJzY3JvbGxXaGVlbFpvb21cIixFdCksQS5tZXJnZU9wdGlvbnMoe3RhcEhvbGQ6Yi50b3VjaE5hdGl2ZSYmYi5zYWZhcmkmJmIubW9iaWxlLHRhcFRvbGVyYW5jZToxNX0pLG4uZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe1ModGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Eb3duLHRoaXMpfSxyZW1vdmVIb29rczpmdW5jdGlvbigpe2sodGhpcy5fbWFwLl9jb250YWluZXIsXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fb25Eb3duLHRoaXMpfSxfb25Eb3duOmZ1bmN0aW9uKHQpe3ZhciBlO2NsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCksMT09PXQudG91Y2hlcy5sZW5ndGgmJihlPXQudG91Y2hlc1swXSx0aGlzLl9zdGFydFBvcz10aGlzLl9uZXdQb3M9bmV3IHAoZS5jbGllbnRYLGUuY2xpZW50WSksdGhpcy5faG9sZFRpbWVvdXQ9c2V0VGltZW91dChhKGZ1bmN0aW9uKCl7dGhpcy5fY2FuY2VsKCksdGhpcy5faXNUYXBWYWxpZCgpJiYoUyhkb2N1bWVudCxcInRvdWNoZW5kXCIsTyksUyhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsXCIsdGhpcy5fY2FuY2VsQ2xpY2tQcmV2ZW50KSx0aGlzLl9zaW11bGF0ZUV2ZW50KFwiY29udGV4dG1lbnVcIixlKSl9LHRoaXMpLDYwMCksUyhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsIGNvbnRleHRtZW51XCIsdGhpcy5fY2FuY2VsLHRoaXMpLFMoZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUsdGhpcykpfSxfY2FuY2VsQ2xpY2tQcmV2ZW50OmZ1bmN0aW9uIHQoKXtrKGRvY3VtZW50LFwidG91Y2hlbmRcIixPKSxrKGRvY3VtZW50LFwidG91Y2hlbmQgdG91Y2hjYW5jZWxcIix0KX0sX2NhbmNlbDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl9ob2xkVGltZW91dCksayhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsIGNvbnRleHRtZW51XCIsdGhpcy5fY2FuY2VsLHRoaXMpLGsoZG9jdW1lbnQsXCJ0b3VjaG1vdmVcIix0aGlzLl9vbk1vdmUsdGhpcyl9LF9vbk1vdmU6ZnVuY3Rpb24odCl7dD10LnRvdWNoZXNbMF07dGhpcy5fbmV3UG9zPW5ldyBwKHQuY2xpZW50WCx0LmNsaWVudFkpfSxfaXNUYXBWYWxpZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZXdQb3MuZGlzdGFuY2VUbyh0aGlzLl9zdGFydFBvcyk8PXRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZX0sX3NpbXVsYXRlRXZlbnQ6ZnVuY3Rpb24odCxlKXt0PW5ldyBNb3VzZUV2ZW50KHQse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCx2aWV3OndpbmRvdyxzY3JlZW5YOmUuc2NyZWVuWCxzY3JlZW5ZOmUuc2NyZWVuWSxjbGllbnRYOmUuY2xpZW50WCxjbGllbnRZOmUuY2xpZW50WX0pO3QuX3NpbXVsYXRlZD0hMCxlLnRhcmdldC5kaXNwYXRjaEV2ZW50KHQpfX0pKSxPdD0oQS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRhcEhvbGRcIixrdCksQS5tZXJnZU9wdGlvbnMoe3RvdWNoWm9vbTpiLnRvdWNoLGJvdW5jZUF0Wm9vbUxpbWl0czohMH0pLG4uZXh0ZW5kKHthZGRIb29rczpmdW5jdGlvbigpe00odGhpcy5fbWFwLl9jb250YWluZXIsXCJsZWFmbGV0LXRvdWNoLXpvb21cIiksUyh0aGlzLl9tYXAuX2NvbnRhaW5lcixcInRvdWNoc3RhcnRcIix0aGlzLl9vblRvdWNoU3RhcnQsdGhpcyl9LHJlbW92ZUhvb2tzOmZ1bmN0aW9uKCl7eih0aGlzLl9tYXAuX2NvbnRhaW5lcixcImxlYWZsZXQtdG91Y2gtem9vbVwiKSxrKHRoaXMuX21hcC5fY29udGFpbmVyLFwidG91Y2hzdGFydFwiLHRoaXMuX29uVG91Y2hTdGFydCx0aGlzKX0sX29uVG91Y2hTdGFydDpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcy5fbWFwOyF0LnRvdWNoZXN8fDIhPT10LnRvdWNoZXMubGVuZ3RofHxuLl9hbmltYXRpbmdab29tfHx0aGlzLl96b29taW5nfHwoZT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1swXSksaT1uLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KHQudG91Y2hlc1sxXSksdGhpcy5fY2VudGVyUG9pbnQ9bi5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpLHRoaXMuX3N0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCksXCJjZW50ZXJcIiE9PW4ub3B0aW9ucy50b3VjaFpvb20mJih0aGlzLl9waW5jaFN0YXJ0TGF0TG5nPW4uY29udGFpbmVyUG9pbnRUb0xhdExuZyhlLmFkZChpKS5fZGl2aWRlQnkoMikpKSx0aGlzLl9zdGFydERpc3Q9ZS5kaXN0YW5jZVRvKGkpLHRoaXMuX3N0YXJ0Wm9vbT1uLmdldFpvb20oKSx0aGlzLl9tb3ZlZD0hMSx0aGlzLl96b29taW5nPSEwLG4uX3N0b3AoKSxTKGRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcyksUyhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsXCIsdGhpcy5fb25Ub3VjaEVuZCx0aGlzKSxPKHQpKX0sX29uVG91Y2hNb3ZlOmZ1bmN0aW9uKHQpe2lmKHQudG91Y2hlcyYmMj09PXQudG91Y2hlcy5sZW5ndGgmJnRoaXMuX3pvb21pbmcpe3ZhciBlPXRoaXMuX21hcCxpPWUubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzBdKSxuPWUubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQodC50b3VjaGVzWzFdKSxvPWkuZGlzdGFuY2VUbyhuKS90aGlzLl9zdGFydERpc3Q7aWYodGhpcy5fem9vbT1lLmdldFNjYWxlWm9vbShvLHRoaXMuX3N0YXJ0Wm9vbSksIWUub3B0aW9ucy5ib3VuY2VBdFpvb21MaW1pdHMmJih0aGlzLl96b29tPGUuZ2V0TWluWm9vbSgpJiZvPDF8fHRoaXMuX3pvb20+ZS5nZXRNYXhab29tKCkmJjE8bykmJih0aGlzLl96b29tPWUuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSksXCJjZW50ZXJcIj09PWUub3B0aW9ucy50b3VjaFpvb20pe2lmKHRoaXMuX2NlbnRlcj10aGlzLl9zdGFydExhdExuZywxPT1vKXJldHVybn1lbHNle2k9aS5fYWRkKG4pLl9kaXZpZGVCeSgyKS5fc3VidHJhY3QodGhpcy5fY2VudGVyUG9pbnQpO2lmKDE9PW8mJjA9PT1pLngmJjA9PT1pLnkpcmV0dXJuO3RoaXMuX2NlbnRlcj1lLnVucHJvamVjdChlLnByb2plY3QodGhpcy5fcGluY2hTdGFydExhdExuZyx0aGlzLl96b29tKS5zdWJ0cmFjdChpKSx0aGlzLl96b29tKX10aGlzLl9tb3ZlZHx8KGUuX21vdmVTdGFydCghMCwhMSksdGhpcy5fbW92ZWQ9ITApLHIodGhpcy5fYW5pbVJlcXVlc3QpO249YShlLl9tb3ZlLGUsdGhpcy5fY2VudGVyLHRoaXMuX3pvb20se3BpbmNoOiEwLHJvdW5kOiExfSx2b2lkIDApO3RoaXMuX2FuaW1SZXF1ZXN0PXgobix0aGlzLCEwKSxPKHQpfX0sX29uVG91Y2hFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlZCYmdGhpcy5fem9vbWluZz8odGhpcy5fem9vbWluZz0hMSxyKHRoaXMuX2FuaW1SZXF1ZXN0KSxrKGRvY3VtZW50LFwidG91Y2htb3ZlXCIsdGhpcy5fb25Ub3VjaE1vdmUsdGhpcyksayhkb2N1bWVudCxcInRvdWNoZW5kIHRvdWNoY2FuY2VsXCIsdGhpcy5fb25Ub3VjaEVuZCx0aGlzKSx0aGlzLl9tYXAub3B0aW9ucy56b29tQW5pbWF0aW9uP3RoaXMuX21hcC5fYW5pbWF0ZVpvb20odGhpcy5fY2VudGVyLHRoaXMuX21hcC5fbGltaXRab29tKHRoaXMuX3pvb20pLCEwLHRoaXMuX21hcC5vcHRpb25zLnpvb21TbmFwKTp0aGlzLl9tYXAuX3Jlc2V0Vmlldyh0aGlzLl9jZW50ZXIsdGhpcy5fbWFwLl9saW1pdFpvb20odGhpcy5fem9vbSkpKTp0aGlzLl96b29taW5nPSExfX0pKSxYaT0oQS5hZGRJbml0SG9vayhcImFkZEhhbmRsZXJcIixcInRvdWNoWm9vbVwiLE90KSxBLkJveFpvb209X3QsQS5Eb3VibGVDbGlja1pvb209Q3QsQS5EcmFnPVp0LEEuS2V5Ym9hcmQ9U3QsQS5TY3JvbGxXaGVlbFpvb209RXQsQS5UYXBIb2xkPWt0LEEuVG91Y2hab29tPU90LHQuQm91bmRzPWYsdC5Ccm93c2VyPWIsdC5DUlM9b3QsdC5DYW52YXM9RmksdC5DaXJjbGU9dmksdC5DaXJjbGVNYXJrZXI9Z2ksdC5DbGFzcz1ldCx0LkNvbnRyb2w9Qix0LkRpdkljb249UmksdC5EaXZPdmVybGF5PUFpLHQuRG9tRXZlbnQ9bXQsdC5Eb21VdGlsPXB0LHQuRHJhZ2dhYmxlPVhlLHQuRXZlbnRlZD1pdCx0LkZlYXR1cmVHcm91cD1jaSx0Lkdlb0pTT049d2ksdC5HcmlkTGF5ZXI9TmksdC5IYW5kbGVyPW4sdC5JY29uPWRpLHQuSW1hZ2VPdmVybGF5PUVpLHQuTGF0TG5nPXYsdC5MYXRMbmdCb3VuZHM9cyx0LkxheWVyPW8sdC5MYXllckdyb3VwPXVpLHQuTGluZVV0aWw9dnQsdC5NYXA9QSx0Lk1hcmtlcj1taSx0Lk1peGluPWZ0LHQuUGF0aD1maSx0LlBvaW50PXAsdC5Qb2x5VXRpbD1ndCx0LlBvbHlnb249eGksdC5Qb2x5bGluZT15aSx0LlBvcHVwPUJpLHQuUG9zQW5pbWF0aW9uPUZlLHQuUHJvamVjdGlvbj13dCx0LlJlY3RhbmdsZT1ZaSx0LlJlbmRlcmVyPVdpLHQuU1ZHPUdpLHQuU1ZHT3ZlcmxheT1PaSx0LlRpbGVMYXllcj1EaSx0LlRvb2x0aXA9SWksdC5UcmFuc2Zvcm1hdGlvbj1hdCx0LlV0aWw9dHQsdC5WaWRlb092ZXJsYXk9a2ksdC5iaW5kPWEsdC5ib3VuZHM9Xyx0LmNhbnZhcz1VaSx0LmNpcmNsZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIG5ldyB2aSh0LGUsaSl9LHQuY2lyY2xlTWFya2VyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBnaSh0LGUpfSx0LmNvbnRyb2w9VWUsdC5kaXZJY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgUmkodCl9LHQuZXh0ZW5kPWwsdC5mZWF0dXJlR3JvdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGNpKHQsZSl9LHQuZ2VvSlNPTj1TaSx0Lmdlb0pzb249TXQsdC5ncmlkTGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOaSh0KX0sdC5pY29uPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZGkodCl9LHQuaW1hZ2VPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IEVpKHQsZSxpKX0sdC5sYXRMbmc9dyx0LmxhdExuZ0JvdW5kcz1nLHQubGF5ZXJHcm91cD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgdWkodCxlKX0sdC5tYXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEEodCxlKX0sdC5tYXJrZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG1pKHQsZSl9LHQucG9pbnQ9bSx0LnBvbHlnb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHhpKHQsZSl9LHQucG9seWxpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHlpKHQsZSl9LHQucG9wdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IEJpKHQsZSl9LHQucmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBZaSh0LGUpfSx0LnNldE9wdGlvbnM9Yyx0LnN0YW1wPWgsdC5zdmc9S2ksdC5zdmdPdmVybGF5PWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbmV3IE9pKHQsZSxpKX0sdC50aWxlTGF5ZXI9amksdC50b29sdGlwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBJaSh0LGUpfSx0LnRyYW5zZm9ybWF0aW9uPWh0LHQudmVyc2lvbj1cIjEuOS40XCIsdC52aWRlb092ZXJsYXk9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBuZXcga2kodCxlLGkpfSx3aW5kb3cuTCk7dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5MPVhpLHRoaXN9LHdpbmRvdy5MPXR9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlYWZsZXQuanMubWFwIl0sIm5hbWVzIjpbInQiLCJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsImdsb2JhbFRoaXMiLCJzZWxmIiwibGVhZmxldCIsImwiLCJpIiwibiIsIm8iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJSIiwiT2JqZWN0IiwiY3JlYXRlIiwiTiIsInByb3RvdHlwZSIsImEiLCJBcnJheSIsInNsaWNlIiwiYmluZCIsImFwcGx5IiwiY2FsbCIsImNvbmNhdCIsIkQiLCJoIiwiX2xlYWZsZXRfaWQiLCJqIiwicyIsInIiLCJzZXRUaW1lb3V0IiwiSCIsInUiLCJNYXRoIiwicG93Iiwicm91bmQiLCJXIiwidHJpbSIsInJlcGxhY2UiLCJGIiwic3BsaXQiLCJjIiwiaGFzT3duUHJvcGVydHkiLCJvcHRpb25zIiwiVSIsInB1c2giLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0b1VwcGVyQ2FzZSIsImluZGV4T2YiLCJqb2luIiwiViIsInEiLCJFcnJvciIsImQiLCJpc0FycmF5IiwidG9TdHJpbmciLCJHIiwiSyIsIlkiLCJ3aW5kb3ciLCJYIiwiSiIsIkRhdGUiLCJtYXgiLCIkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiUSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiY2xlYXJUaW1lb3V0IiwieCIsInR0IiwiX19wcm90b19fIiwiZXh0ZW5kIiwibGFzdElkIiwic3RhbXAiLCJ0aHJvdHRsZSIsIndyYXBOdW0iLCJmYWxzZUZuIiwiZm9ybWF0TnVtIiwic3BsaXRXb3JkcyIsInNldE9wdGlvbnMiLCJnZXRQYXJhbVN0cmluZyIsInRlbXBsYXRlIiwiZW1wdHlJbWFnZVVybCIsInJlcXVlc3RGbiIsImNhbmNlbEZuIiwicmVxdWVzdEFuaW1GcmFtZSIsImNhbmNlbEFuaW1GcmFtZSIsImV0IiwiaW5pdGlhbGl6ZSIsImNhbGxJbml0SG9va3MiLCJfX3N1cGVyX18iLCJjb25zdHJ1Y3RvciIsInN0YXRpY3MiLCJpbmNsdWRlcyIsIkwiLCJNaXhpbiIsIkV2ZW50cyIsImNvbnNvbGUiLCJ3YXJuIiwic3RhY2siLCJfaW5pdEhvb2tzIiwiX2luaXRIb29rc0NhbGxlZCIsImluY2x1ZGUiLCJtZXJnZU9wdGlvbnMiLCJhZGRJbml0SG9vayIsIm9uIiwiX29uIiwib2ZmIiwiX29mZiIsIl9ldmVudHMiLCJfbGlzdGVucyIsImZuIiwiY3R4Iiwib25jZSIsIl9maXJpbmdDb3VudCIsInNwbGljZSIsImZpcmUiLCJsaXN0ZW5zIiwidHlwZSIsInRhcmdldCIsInNvdXJjZVRhcmdldCIsIl9wcm9wYWdhdGVFdmVudCIsIl9ldmVudFBhcmVudHMiLCJhZGRFdmVudFBhcmVudCIsInJlbW92ZUV2ZW50UGFyZW50IiwibGF5ZXIiLCJwcm9wYWdhdGVkRnJvbSIsIml0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjbGVhckFsbEV2ZW50TGlzdGVuZXJzIiwiYWRkT25lVGltZUV2ZW50TGlzdGVuZXIiLCJmaXJlRXZlbnQiLCJoYXNFdmVudExpc3RlbmVycyIsInAiLCJ5IiwibnQiLCJ0cnVuYyIsImZsb29yIiwiY2VpbCIsIm0iLCJmIiwiXyIsImciLCJ2IiwiaXNOYU4iLCJsYXQiLCJsbmciLCJhbHQiLCJ3IiwibG9uIiwiY2xvbmUiLCJhZGQiLCJfYWRkIiwic3VidHJhY3QiLCJfc3VidHJhY3QiLCJkaXZpZGVCeSIsIl9kaXZpZGVCeSIsIm11bHRpcGx5QnkiLCJfbXVsdGlwbHlCeSIsInNjYWxlQnkiLCJ1bnNjYWxlQnkiLCJfcm91bmQiLCJfZmxvb3IiLCJfY2VpbCIsIl90cnVuYyIsImRpc3RhbmNlVG8iLCJzcXJ0IiwiZXF1YWxzIiwiY29udGFpbnMiLCJhYnMiLCJtaW4iLCJnZXRDZW50ZXIiLCJnZXRCb3R0b21MZWZ0IiwiZ2V0VG9wUmlnaHQiLCJnZXRUb3BMZWZ0IiwiZ2V0Qm90dG9tUmlnaHQiLCJnZXRTaXplIiwiaW50ZXJzZWN0cyIsIm92ZXJsYXBzIiwiaXNWYWxpZCIsInBhZCIsIl9zb3V0aFdlc3QiLCJfbm9ydGhFYXN0IiwiZ2V0U291dGhXZXN0IiwiZ2V0Tm9ydGhFYXN0IiwiZ2V0Tm9ydGhXZXN0IiwiZ2V0Tm9ydGgiLCJnZXRXZXN0IiwiZ2V0U291dGhFYXN0IiwiZ2V0U291dGgiLCJnZXRFYXN0IiwidG9CQm94U3RyaW5nIiwib3QiLCJsYXRMbmdUb1BvaW50IiwicHJvamVjdGlvbiIsInByb2plY3QiLCJzY2FsZSIsInRyYW5zZm9ybWF0aW9uIiwiX3RyYW5zZm9ybSIsInBvaW50VG9MYXRMbmciLCJ1bnRyYW5zZm9ybSIsInVucHJvamVjdCIsInpvb20iLCJsb2ciLCJMTjIiLCJnZXRQcm9qZWN0ZWRCb3VuZHMiLCJpbmZpbml0ZSIsImJvdW5kcyIsInRyYW5zZm9ybSIsInN0IiwiZGlzdGFuY2UiLCJ3cmFwIiwid3JhcExhdExuZyIsInRvQm91bmRzIiwiY29zIiwiUEkiLCJ3cmFwTG5nIiwid3JhcExhdCIsIndyYXBMYXRMbmdCb3VuZHMiLCJzaW4iLCJhdGFuMiIsInJ0IiwiTUFYX0xBVElUVURFIiwiYXRhbiIsImV4cCIsImF0IiwiX2EiLCJfYiIsIl9jIiwiX2QiLCJodCIsImx0IiwiY29kZSIsInV0IiwiY3QiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnROUyIsImR0IiwiYiIsInN2ZyIsIl90IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJwdCIsIm10IiwibmF2aWdhdG9yIiwiZnQiLCJndCIsInZ0IiwieXQiLCJwYXJzZUludCIsImV4ZWMiLCJ1c2VyQWdlbnQiLCJ4dCIsIm9wZXJhIiwid3QiLCJidCIsIlB0IiwiTHQiLCJUdCIsInBsYXRmb3JtIiwiTXQiLCJ6dCIsIldlYktpdENTU01hdHJpeCIsIkN0IiwiTF9ESVNBQkxFXzNEIiwiWnQiLCJvcmllbnRhdGlvbiIsIlN0IiwiRXQiLCJrdCIsIlBvaW50ZXJFdmVudCIsIk1TUG9pbnRlckV2ZW50IiwiT3QiLCJBdCIsIlRvdWNoRXZlbnQiLCJCdCIsIkxfTk9fVE9VQ0giLCJJdCIsIlJ0IiwiTnQiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2NyZWVuIiwiZGV2aWNlWERQSSIsImxvZ2ljYWxYRFBJIiwiRHQiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImp0IiwiY3JlYXRlRWxlbWVudCIsImdldENvbnRleHQiLCJIdCIsImNyZWF0ZVNWR1JlY3QiLCJXdCIsImlubmVySFRNTCIsImZpcnN0Q2hpbGQiLCJuYW1lc3BhY2VVUkkiLCJ0b0xvd2VyQ2FzZSIsImllIiwiaWVsdDkiLCJlZGdlIiwid2Via2l0IiwiYW5kcm9pZCIsImFuZHJvaWQyMyIsImFuZHJvaWRTdG9jayIsImNocm9tZSIsImdlY2tvIiwic2FmYXJpIiwicGhhbnRvbSIsIm9wZXJhMTIiLCJ3aW4iLCJpZTNkIiwid2Via2l0M2QiLCJnZWNrbzNkIiwiYW55M2QiLCJtb2JpbGUiLCJtb2JpbGVXZWJraXQiLCJtb2JpbGVXZWJraXQzZCIsIm1zUG9pbnRlciIsInBvaW50ZXIiLCJ0b3VjaCIsInRvdWNoTmF0aXZlIiwibW9iaWxlT3BlcmEiLCJtb2JpbGVHZWNrbyIsInJldGluYSIsInBhc3NpdmVFdmVudHMiLCJjYW52YXMiLCJ2bWwiLCJiZWhhdmlvciIsImFkaiIsImlubGluZVN2ZyIsIm1hYyIsImxpbnV4IiwiRnQiLCJVdCIsIlZ0IiwicXQiLCJHdCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIiwiS3QiLCJNU1BPSU5URVJfVFlQRV9UT1VDSCIsInBvaW50ZXJUeXBlIiwiTyIsImVlIiwiWXQiLCJYdCIsIkp0IiwiJHQiLCJRdCIsInRlIiwicG9pbnRlcklkIiwiTVNQT0lOVEVSX1RZUEVfTU9VU0UiLCJ0b3VjaGVzIiwiY2hhbmdlZFRvdWNoZXMiLCJuZSIsImRldGFpbCIsInNvdXJjZUNhcGFiaWxpdGllcyIsImZpcmVzVG91Y2hFdmVudHMiLCJOZSIsInNvbWUiLCJIVE1MTGFiZWxFbGVtZW50IiwiYXR0cmlidXRlcyIsImZvciIsIkhUTUxJbnB1dEVsZW1lbnQiLCJIVE1MU2VsZWN0RWxlbWVudCIsIm5vdyIsImlzVHJ1c3RlZCIsIl9zaW11bGF0ZWQiLCJkYmxjbGljayIsInNpbURibGNsaWNrIiwib2UiLCJzZSIsInJlIiwiYWUiLCJoZSIsImxlIiwidWUiLCJ3ZSIsImNlIiwiZGUiLCJfZSIsImdldEVsZW1lbnRCeUlkIiwicGUiLCJjdXJyZW50U3R5bGUiLCJkZWZhdWx0VmlldyIsImdldENvbXB1dGVkU3R5bGUiLCJQIiwiY2xhc3NOYW1lIiwiYXBwZW5kQ2hpbGQiLCJUIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwibWUiLCJmZSIsImxhc3RDaGlsZCIsImdlIiwiaW5zZXJ0QmVmb3JlIiwidmUiLCJjbGFzc0xpc3QiLCJ4ZSIsIlJlZ0V4cCIsInRlc3QiLCJNIiwieWUiLCJ6IiwicmVtb3ZlIiwiYmFzZVZhbCIsImNvcnJlc3BvbmRpbmdFbGVtZW50IiwiQyIsIm9wYWNpdHkiLCJmaWx0ZXJzIiwiaXRlbSIsIkVuYWJsZWQiLCJPcGFjaXR5IiwiZmlsdGVyIiwiYmUiLCJaIiwiX2xlYWZsZXRfcG9zIiwibGVmdCIsInRvcCIsIlBlIiwiTGUiLCJTIiwiVGUiLCJrIiwiTWUiLCJ0YWJJbmRleCIsInplIiwib3V0bGluZVN0eWxlIiwiQ2UiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImJvZHkiLCJaZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiYm91bmRpbmdDbGllbnRSZWN0IiwiVFJBTlNGT1JNIiwiVFJBTlNJVElPTiIsIlRSQU5TSVRJT05fRU5EIiwiZ2V0U3R5bGUiLCJlbXB0eSIsInRvRnJvbnQiLCJ0b0JhY2siLCJoYXNDbGFzcyIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJzZXRDbGFzcyIsImdldENsYXNzIiwic2V0T3BhY2l0eSIsInRlc3RQcm9wIiwic2V0VHJhbnNmb3JtIiwic2V0UG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsImRpc2FibGVUZXh0U2VsZWN0aW9uIiwiZW5hYmxlVGV4dFNlbGVjdGlvbiIsImRpc2FibGVJbWFnZURyYWciLCJlbmFibGVJbWFnZURyYWciLCJwcmV2ZW50T3V0bGluZSIsInJlc3RvcmVPdXRsaW5lIiwiZ2V0U2l6ZWRQYXJlbnROb2RlIiwiZ2V0U2NhbGUiLCJrZSIsIkUiLCJTZSIsIk9lIiwiRWUiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIndoZWVsIiwiZXZlbnQiLCJwYXNzaXZlIiwiV2UiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiQWUiLCJzdG9wUHJvcGFnYXRpb24iLCJvcmlnaW5hbEV2ZW50IiwiX3N0b3BwZWQiLCJjYW5jZWxCdWJibGUiLCJCZSIsIkllIiwiX2xlYWZsZXRfZGlzYWJsZV9jbGljayIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJSZSIsImNvbXBvc2VkUGF0aCIsIkRlIiwiY2xpZW50WCIsImNsaWVudExlZnQiLCJjbGllbnRZIiwiY2xpZW50VG9wIiwiamUiLCJIZSIsIndoZWVsRGVsdGFZIiwiZGVsdGFZIiwiZGVsdGFNb2RlIiwiZGVsdGFYIiwiZGVsdGFaIiwid2hlZWxEZWx0YSIsInJlbGF0ZWRUYXJnZXQiLCJkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24iLCJkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbiIsInN0b3AiLCJnZXRQcm9wYWdhdGlvblBhdGgiLCJnZXRNb3VzZVBvc2l0aW9uIiwiZ2V0V2hlZWxEZWx0YSIsImlzRXh0ZXJuYWxUYXJnZXQiLCJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIiwiRmUiLCJydW4iLCJfZWwiLCJfaW5Qcm9ncmVzcyIsIl9kdXJhdGlvbiIsIl9lYXNlT3V0UG93ZXIiLCJfc3RhcnRQb3MiLCJfb2Zmc2V0IiwiX3N0YXJ0VGltZSIsIl9hbmltYXRlIiwiX3N0ZXAiLCJfY29tcGxldGUiLCJfYW5pbUlkIiwiX3J1bkZyYW1lIiwiX2Vhc2VPdXQiLCJBIiwiY3JzIiwiY2VudGVyIiwibWluWm9vbSIsIm1heFpvb20iLCJsYXllcnMiLCJtYXhCb3VuZHMiLCJyZW5kZXJlciIsInpvb21BbmltYXRpb24iLCJ6b29tQW5pbWF0aW9uVGhyZXNob2xkIiwiZmFkZUFuaW1hdGlvbiIsIm1hcmtlclpvb21BbmltYXRpb24iLCJ0cmFuc2Zvcm0zRExpbWl0Iiwiem9vbVNuYXAiLCJ6b29tRGVsdGEiLCJ0cmFja1Jlc2l6ZSIsIl9oYW5kbGVycyIsIl9sYXllcnMiLCJfem9vbUJvdW5kTGF5ZXJzIiwiX3NpemVDaGFuZ2VkIiwiX2luaXRDb250YWluZXIiLCJfaW5pdExheW91dCIsIl9vblJlc2l6ZSIsIl9pbml0RXZlbnRzIiwic2V0TWF4Qm91bmRzIiwiX3pvb20iLCJfbGltaXRab29tIiwic2V0VmlldyIsInJlc2V0IiwiX3pvb21BbmltYXRlZCIsIl9jcmVhdGVBbmltUHJveHkiLCJfcHJveHkiLCJfY2F0Y2hUcmFuc2l0aW9uRW5kIiwiX2FkZExheWVycyIsIl9saW1pdENlbnRlciIsIl9zdG9wIiwiX2xvYWRlZCIsImFuaW1hdGUiLCJwYW4iLCJkdXJhdGlvbiIsIl90cnlBbmltYXRlZFpvb20iLCJfdHJ5QW5pbWF0ZWRQYW4iLCJfc2l6ZVRpbWVyIiwiX3Jlc2V0VmlldyIsIm5vTW92ZVN0YXJ0Iiwic2V0Wm9vbSIsInpvb21JbiIsInpvb21PdXQiLCJzZXRab29tQXJvdW5kIiwiZ2V0Wm9vbVNjYWxlIiwibGF0TG5nVG9Db250YWluZXJQb2ludCIsImNvbnRhaW5lclBvaW50VG9MYXRMbmciLCJfZ2V0Qm91bmRzQ2VudGVyWm9vbSIsImdldEJvdW5kcyIsInBhZGRpbmdUb3BMZWZ0IiwicGFkZGluZyIsInBhZGRpbmdCb3R0b21SaWdodCIsImdldEJvdW5kc1pvb20iLCJmaXRCb3VuZHMiLCJmaXRXb3JsZCIsInBhblRvIiwicGFuQnkiLCJfcGFuQW5pbSIsInN0ZXAiLCJfb25QYW5UcmFuc2l0aW9uU3RlcCIsImVuZCIsIl9vblBhblRyYW5zaXRpb25FbmQiLCJfbWFwUGFuZSIsIl9nZXRNYXBQYW5lUG9zIiwiZWFzZUxpbmVhcml0eSIsIl9yYXdQYW5CeSIsImdldFpvb20iLCJmbHlUbyIsIl9tb3ZlU3RhcnQiLCJfZmx5VG9GcmFtZSIsIl9tb3ZlIiwiZ2V0U2NhbGVab29tIiwiX21vdmVFbmQiLCJmbHlUb0JvdW5kcyIsIl9wYW5JbnNpZGVNYXhCb3VuZHMiLCJzZXRNaW5ab29tIiwic2V0TWF4Wm9vbSIsInBhbkluc2lkZUJvdW5kcyIsIl9lbmZvcmNpbmdCb3VuZHMiLCJwYW5JbnNpZGUiLCJnZXRQaXhlbEJvdW5kcyIsImludmFsaWRhdGVTaXplIiwiX2xhc3RDZW50ZXIiLCJkZWJvdW5jZU1vdmVlbmQiLCJvbGRTaXplIiwibmV3U2l6ZSIsImxvY2F0ZSIsIl9sb2NhdGVPcHRpb25zIiwidGltZW91dCIsIndhdGNoIiwiX2hhbmRsZUdlb2xvY2F0aW9uUmVzcG9uc2UiLCJfaGFuZGxlR2VvbG9jYXRpb25FcnJvciIsIl9sb2NhdGlvbldhdGNoSWQiLCJnZW9sb2NhdGlvbiIsIndhdGNoUG9zaXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJtZXNzYWdlIiwic3RvcExvY2F0ZSIsImNsZWFyV2F0Y2giLCJfY29udGFpbmVyIiwiY29vcmRzIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJhY2N1cmFjeSIsImxhdGxuZyIsInRpbWVzdGFtcCIsImFkZEhhbmRsZXIiLCJlbmFibGUiLCJfY29udGFpbmVySWQiLCJfY2xlYXJDb250cm9sUG9zIiwiX3Jlc2l6ZVJlcXVlc3QiLCJfY2xlYXJIYW5kbGVycyIsIl9wYW5lcyIsIl9yZW5kZXJlciIsImNyZWF0ZVBhbmUiLCJfY2hlY2tJZkxvYWRlZCIsIl9tb3ZlZCIsImxheWVyUG9pbnRUb0xhdExuZyIsIl9nZXRDZW50ZXJMYXllclBvaW50IiwiZ2V0TWluWm9vbSIsIl9sYXllcnNNaW5ab29tIiwiZ2V0TWF4Wm9vbSIsIl9sYXllcnNNYXhab29tIiwiX3NpemUiLCJjbGllbnRXaWR0aCIsImNsaWVudEhlaWdodCIsIl9nZXRUb3BMZWZ0UG9pbnQiLCJnZXRQaXhlbE9yaWdpbiIsIl9waXhlbE9yaWdpbiIsImdldFBpeGVsV29ybGRCb3VuZHMiLCJnZXRQYW5lIiwiZ2V0UGFuZXMiLCJnZXRDb250YWluZXIiLCJsYXRMbmdUb0xheWVyUG9pbnQiLCJjb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCIsImxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50IiwibW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQiLCJtb3VzZUV2ZW50VG9MYXllclBvaW50IiwibW91c2VFdmVudFRvTGF0TG5nIiwiX29uU2Nyb2xsIiwiX2ZhZGVBbmltYXRlZCIsInBvc2l0aW9uIiwiX2luaXRQYW5lcyIsIl9pbml0Q29udHJvbFBvcyIsIl9wYW5lUmVuZGVyZXJzIiwibWFya2VyUGFuZSIsInNoYWRvd1BhbmUiLCJfZ2V0TmV3UGl4ZWxPcmlnaW4iLCJwaW5jaCIsIl9nZXRab29tU3BhbiIsIl90YXJnZXRzIiwiX2hhbmRsZURPTUV2ZW50IiwiX29uTW92ZUVuZCIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJfZmluZEV2ZW50VGFyZ2V0cyIsInNyY0VsZW1lbnQiLCJfZHJhZ2dhYmxlTW92ZWQiLCJfaXNDbGlja0Rpc2FibGVkIiwiX2xlYWZsZXRfZGlzYWJsZV9ldmVudHMiLCJfZmlyZURPTUV2ZW50IiwiX21vdXNlRXZlbnRzIiwiZ2V0TGF0TG5nIiwiX3JhZGl1cyIsImNvbnRhaW5lclBvaW50IiwibGF5ZXJQb2ludCIsImJ1YmJsaW5nTW91c2VFdmVudHMiLCJkcmFnZ2luZyIsImVuYWJsZWQiLCJtb3ZlZCIsImJveFpvb20iLCJkaXNhYmxlIiwid2hlblJlYWR5IiwiX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCIsIl9sYXRMbmdCb3VuZHNUb05ld0xheWVyQm91bmRzIiwiX2dldENlbnRlck9mZnNldCIsIl9nZXRCb3VuZHNPZmZzZXQiLCJfbGltaXRPZmZzZXQiLCJfcmVib3VuZCIsIm1hcFBhbmUiLCJfYW5pbWF0aW5nWm9vbSIsIl9vblpvb21UcmFuc2l0aW9uRW5kIiwiX2FuaW1Nb3ZlRW5kIiwiX2Rlc3Ryb3lBbmltUHJveHkiLCJwcm9wZXJ0eU5hbWUiLCJfbm90aGluZ1RvQW5pbWF0ZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJfYW5pbWF0ZVpvb20iLCJfYW5pbWF0ZVRvQ2VudGVyIiwiX2FuaW1hdGVUb1pvb20iLCJub1VwZGF0ZSIsIl90ZW1wRmlyZVpvb21FdmVudCIsIlVlIiwiQiIsIl9tYXAiLCJyZW1vdmVDb250cm9sIiwiYWRkQ29udHJvbCIsImFkZFRvIiwib25BZGQiLCJfY29udHJvbENvcm5lcnMiLCJvblJlbW92ZSIsIl9yZWZvY3VzT25NYXAiLCJzY3JlZW5YIiwic2NyZWVuWSIsImZvY3VzIiwiVmUiLCJfY29udHJvbENvbnRhaW5lciIsImNvbGxhcHNlZCIsImF1dG9aSW5kZXgiLCJoaWRlU2luZ2xlQmFzZSIsInNvcnRMYXllcnMiLCJzb3J0RnVuY3Rpb24iLCJfbGF5ZXJDb250cm9sSW5wdXRzIiwiX2xhc3RaSW5kZXgiLCJfaGFuZGxpbmdDbGljayIsIl9wcmV2ZW50Q2xpY2siLCJfYWRkTGF5ZXIiLCJfdXBkYXRlIiwiX2NoZWNrRGlzYWJsZWRMYXllcnMiLCJfb25MYXllckNoYW5nZSIsIl9leHBhbmRJZk5vdENvbGxhcHNlZCIsImFkZEJhc2VMYXllciIsImFkZE92ZXJsYXkiLCJyZW1vdmVMYXllciIsIl9nZXRMYXllciIsImV4cGFuZCIsIl9zZWN0aW9uIiwib2Zmc2V0VG9wIiwiY29sbGFwc2UiLCJzZXRBdHRyaWJ1dGUiLCJfZXhwYW5kU2FmZWx5IiwiX2xheWVyc0xpbmsiLCJocmVmIiwidGl0bGUiLCJrZXlkb3duIiwia2V5Q29kZSIsImNsaWNrIiwiX2Jhc2VMYXllcnNMaXN0IiwiX3NlcGFyYXRvciIsIl9vdmVybGF5c0xpc3QiLCJuYW1lIiwib3ZlcmxheSIsInNvcnQiLCJzZXRaSW5kZXgiLCJfYWRkSXRlbSIsImRpc3BsYXkiLCJfY3JlYXRlUmFkaW9FbGVtZW50IiwiaGFzTGF5ZXIiLCJkZWZhdWx0Q2hlY2tlZCIsImxheWVySWQiLCJfb25JbnB1dENsaWNrIiwiY2hlY2tlZCIsImFkZExheWVyIiwiZGlzYWJsZWQiLCJxZSIsInpvb21JblRleHQiLCJ6b29tSW5UaXRsZSIsInpvb21PdXRUZXh0Iiwiem9vbU91dFRpdGxlIiwiX3pvb21JbkJ1dHRvbiIsIl9jcmVhdGVCdXR0b24iLCJfem9vbUluIiwiX3pvb21PdXRCdXR0b24iLCJfem9vbU91dCIsIl91cGRhdGVEaXNhYmxlZCIsIl9kaXNhYmxlZCIsInNoaWZ0S2V5IiwiR2UiLCJ6b29tQ29udHJvbCIsIm1heFdpZHRoIiwibWV0cmljIiwiaW1wZXJpYWwiLCJfYWRkU2NhbGVzIiwidXBkYXRlV2hlbklkbGUiLCJfbVNjYWxlIiwiX2lTY2FsZSIsIl91cGRhdGVTY2FsZXMiLCJfdXBkYXRlTWV0cmljIiwiX3VwZGF0ZUltcGVyaWFsIiwiX2dldFJvdW5kTnVtIiwiX3VwZGF0ZVNjYWxlIiwiS2UiLCJwcmVmaXgiLCJfYXR0cmlidXRpb25zIiwiYXR0cmlidXRpb25Db250cm9sIiwiZ2V0QXR0cmlidXRpb24iLCJhZGRBdHRyaWJ1dGlvbiIsIl9hZGRBdHRyaWJ1dGlvbiIsInJlbW92ZUF0dHJpYnV0aW9uIiwic2V0UHJlZml4IiwiTGF5ZXJzIiwiWm9vbSIsIlNjYWxlIiwiQXR0cmlidXRpb24iLCJhdHRyaWJ1dGlvbiIsIl9lbmFibGVkIiwiYWRkSG9va3MiLCJyZW1vdmVIb29rcyIsIlllIiwiWGUiLCJjbGlja1RvbGVyYW5jZSIsIl9lbGVtZW50IiwiX2RyYWdTdGFydFRhcmdldCIsIl9wcmV2ZW50T3V0bGluZSIsIl9vbkRvd24iLCJfZHJhZ2dpbmciLCJmaW5pc2hEcmFnIiwid2hpY2giLCJidXR0b24iLCJfbW92aW5nIiwiX3N0YXJ0UG9pbnQiLCJfcGFyZW50U2NhbGUiLCJfb25Nb3ZlIiwiX29uVXAiLCJfbGFzdFRhcmdldCIsIlNWR0VsZW1lbnRJbnN0YW5jZSIsImNvcnJlc3BvbmRpbmdVc2VFbGVtZW50IiwiX25ld1BvcyIsIl9sYXN0RXZlbnQiLCJfdXBkYXRlUG9zaXRpb24iLCJub0luZXJ0aWEiLCJKZSIsIl9jb2RlIiwic2kiLCJvaSIsIiRlIiwiSSIsIlFlIiwidGkiLCJjbGlwUG9seWdvbiIsInBvbHlnb25DZW50ZXIiLCJjZW50cm9pZCIsImVpIiwiVWludDhBcnJheSIsInJpIiwiaWkiLCJuaSIsImFpIiwiaGkiLCJzaW1wbGlmeSIsInBvaW50VG9TZWdtZW50RGlzdGFuY2UiLCJjbG9zZXN0UG9pbnRPblNlZ21lbnQiLCJjbGlwU2VnbWVudCIsIl9nZXRFZGdlSW50ZXJzZWN0aW9uIiwiX2dldEJpdENvZGUiLCJfc3FDbG9zZXN0UG9pbnRPblNlZ21lbnQiLCJpc0ZsYXQiLCJfZmxhdCIsInBvbHlsaW5lQ2VudGVyIiwiUl9NSU5PUiIsInRhbiIsIkxvbkxhdCIsIk1lcmNhdG9yIiwiU3BoZXJpY2FsTWVyY2F0b3IiLCJsaSIsIkVhcnRoIiwiRVBTRzMzOTUiLCJFUFNHMzg1NyIsIkVQU0c5MDA5MTMiLCJFUFNHNDMyNiIsIlNpbXBsZSIsInBhbmUiLCJyZW1vdmVGcm9tIiwiX21hcFRvQWRkIiwiYWRkSW50ZXJhY3RpdmVUYXJnZXQiLCJyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCIsIl9sYXllckFkZCIsImdldEV2ZW50cyIsInVpIiwiYmVmb3JlQWRkIiwiZWFjaExheWVyIiwiX2FkZFpvb21MaW1pdCIsIl91cGRhdGVab29tTGV2ZWxzIiwiX3JlbW92ZVpvb21MaW1pdCIsImdldExheWVySWQiLCJjbGVhckxheWVycyIsImludm9rZSIsImdldExheWVyIiwiZ2V0TGF5ZXJzIiwiY2kiLCJzZXRTdHlsZSIsImJyaW5nVG9Gcm9udCIsImJyaW5nVG9CYWNrIiwiZGkiLCJwb3B1cEFuY2hvciIsInRvb2x0aXBBbmNob3IiLCJjcm9zc09yaWdpbiIsImNyZWF0ZUljb24iLCJfY3JlYXRlSWNvbiIsImNyZWF0ZVNoYWRvdyIsIl9nZXRJY29uVXJsIiwiX2NyZWF0ZUltZyIsInRhZ05hbWUiLCJfc2V0SWNvblN0eWxlcyIsInNoYWRvd0FuY2hvciIsImljb25BbmNob3IiLCJtYXJnaW5MZWZ0IiwibWFyZ2luVG9wIiwic3JjIiwiX2kiLCJpY29uVXJsIiwiaWNvblJldGluYVVybCIsInNoYWRvd1VybCIsImljb25TaXplIiwic2hhZG93U2l6ZSIsImltYWdlUGF0aCIsIl9kZXRlY3RJY29uUGF0aCIsIl9zdHJpcFVybCIsInF1ZXJ5U2VsZWN0b3IiLCJzdWJzdHJpbmciLCJwaSIsIl9tYXJrZXIiLCJfaWNvbiIsIl9kcmFnZ2FibGUiLCJkcmFnc3RhcnQiLCJfb25EcmFnU3RhcnQiLCJwcmVkcmFnIiwiX29uUHJlRHJhZyIsImRyYWciLCJfb25EcmFnIiwiZHJhZ2VuZCIsIl9vbkRyYWdFbmQiLCJfYWRqdXN0UGFuIiwiYXV0b1BhblNwZWVkIiwiYXV0b1BhblBhZGRpbmciLCJfcGFuUmVxdWVzdCIsIl9vbGRMYXRMbmciLCJjbG9zZVBvcHVwIiwiYXV0b1BhbiIsIl9zaGFkb3ciLCJfbGF0bG5nIiwib2xkTGF0TG5nIiwibWkiLCJpY29uIiwiaW50ZXJhY3RpdmUiLCJrZXlib2FyZCIsInpJbmRleE9mZnNldCIsInJpc2VPbkhvdmVyIiwicmlzZU9mZnNldCIsImF1dG9QYW5PbkZvY3VzIiwiZHJhZ2dhYmxlIiwiX2luaXRJY29uIiwidXBkYXRlIiwiX3JlbW92ZUljb24iLCJfcmVtb3ZlU2hhZG93Iiwidmlld3Jlc2V0Iiwic2V0TGF0TG5nIiwic2V0WkluZGV4T2Zmc2V0IiwiZ2V0SWNvbiIsInNldEljb24iLCJfcG9wdXAiLCJiaW5kUG9wdXAiLCJnZXRFbGVtZW50IiwiX3NldFBvcyIsIm1vdXNlb3ZlciIsIl9icmluZ1RvRnJvbnQiLCJtb3VzZW91dCIsIl9yZXNldFpJbmRleCIsIl9wYW5PbkZvY3VzIiwiX3VwZGF0ZU9wYWNpdHkiLCJfaW5pdEludGVyYWN0aW9uIiwiX3pJbmRleCIsIl91cGRhdGVaSW5kZXgiLCJ6SW5kZXgiLCJfZ2V0UG9wdXBBbmNob3IiLCJfZ2V0VG9vbHRpcEFuY2hvciIsImZpIiwic3Ryb2tlIiwiY29sb3IiLCJ3ZWlnaHQiLCJsaW5lQ2FwIiwibGluZUpvaW4iLCJkYXNoQXJyYXkiLCJkYXNoT2Zmc2V0IiwiZmlsbCIsImZpbGxDb2xvciIsImZpbGxPcGFjaXR5IiwiZmlsbFJ1bGUiLCJnZXRSZW5kZXJlciIsIl9pbml0UGF0aCIsIl9yZXNldCIsIl9hZGRQYXRoIiwiX3JlbW92ZVBhdGgiLCJyZWRyYXciLCJfdXBkYXRlUGF0aCIsIl91cGRhdGVTdHlsZSIsIl91cGRhdGVCb3VuZHMiLCJfYnJpbmdUb0JhY2siLCJfcGF0aCIsIl9wcm9qZWN0IiwiX2NsaWNrVG9sZXJhbmNlIiwidG9sZXJhbmNlIiwiZ2kiLCJyYWRpdXMiLCJzZXRSYWRpdXMiLCJnZXRSYWRpdXMiLCJfcG9pbnQiLCJfcmFkaXVzWSIsIl9weEJvdW5kcyIsIl91cGRhdGVDaXJjbGUiLCJfZW1wdHkiLCJfYm91bmRzIiwiX2NvbnRhaW5zUG9pbnQiLCJ2aSIsIl9tUmFkaXVzIiwiYWNvcyIsInlpIiwic21vb3RoRmFjdG9yIiwibm9DbGlwIiwiX3NldExhdExuZ3MiLCJnZXRMYXRMbmdzIiwiX2xhdGxuZ3MiLCJzZXRMYXRMbmdzIiwiaXNFbXB0eSIsImNsb3Nlc3RMYXllclBvaW50IiwiX3BhcnRzIiwiX2RlZmF1bHRTaGFwZSIsImFkZExhdExuZyIsIl9jb252ZXJ0TGF0TG5ncyIsIl9yaW5ncyIsIl9wcm9qZWN0TGF0bG5ncyIsIl9yYXdQeEJvdW5kcyIsIl9jbGlwUG9pbnRzIiwiX3NpbXBsaWZ5UG9pbnRzIiwiX3VwZGF0ZVBvbHkiLCJ4aSIsInBvcCIsIndpIiwiYWRkRGF0YSIsImZlYXR1cmVzIiwiZ2VvbWV0cmllcyIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJiaSIsImZlYXR1cmUiLCJaaSIsImRlZmF1bHRPcHRpb25zIiwicmVzZXRTdHlsZSIsIm9uRWFjaEZlYXR1cmUiLCJfc2V0TGF5ZXJTdHlsZSIsInBvaW50VG9MYXllciIsImNvb3Jkc1RvTGF0TG5nIiwiTGkiLCJQaSIsIlRpIiwicHJvcGVydGllcyIsIm1hcmtlcnNJbmhlcml0T3B0aW9ucyIsIk1pIiwiemkiLCJDaSIsInRvR2VvSlNPTiIsIlNpIiwidG9NdWx0aVBvaW50IiwiRWkiLCJlcnJvck92ZXJsYXlVcmwiLCJfdXJsIiwiX2ltYWdlIiwiX2luaXRJbWFnZSIsInNldFVybCIsInNldEJvdW5kcyIsInpvb21hbmltIiwib25zZWxlY3RzdGFydCIsIm9ubW91c2Vtb3ZlIiwib25sb2FkIiwib25lcnJvciIsIl9vdmVybGF5T25FcnJvciIsImtpIiwiYXV0b3BsYXkiLCJsb29wIiwia2VlcEFzcGVjdFJhdGlvIiwibXV0ZWQiLCJwbGF5c0lubGluZSIsIm9ubG9hZGVkZGF0YSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwib2JqZWN0Rml0IiwiT2kiLCJBaSIsIm9mZnNldCIsImNvbnRlbnQiLCJfc291cmNlIiwiX2NvbnRlbnQiLCJvcGVuT24iLCJjbG9zZSIsInRvZ2dsZSIsIl9wcmVwYXJlT3BlbiIsIl9yZW1vdmVUaW1lb3V0IiwiZ2V0Q29udGVudCIsInNldENvbnRlbnQiLCJ2aXNpYmlsaXR5IiwiX3VwZGF0ZUNvbnRlbnQiLCJfdXBkYXRlTGF5b3V0IiwiaXNPcGVuIiwiX2NvbnRlbnROb2RlIiwiaGFzQ2hpbGROb2RlcyIsIl9nZXRBbmNob3IiLCJfY29udGFpbmVyQm90dG9tIiwiX2NvbnRhaW5lckxlZnQiLCJfY29udGFpbmVyV2lkdGgiLCJib3R0b20iLCJCaSIsIl9pbml0T3ZlcmxheSIsIm1pbldpZHRoIiwibWF4SGVpZ2h0IiwiYXV0b1BhblBhZGRpbmdUb3BMZWZ0IiwiYXV0b1BhblBhZGRpbmdCb3R0b21SaWdodCIsImtlZXBJblZpZXciLCJjbG9zZUJ1dHRvbiIsImF1dG9DbG9zZSIsImNsb3NlT25Fc2NhcGVLZXkiLCJwb3B1cCIsImNsb3NlT25DbGljayIsImNsb3NlUG9wdXBPbkNsaWNrIiwicHJlY2xpY2siLCJtb3ZlZW5kIiwiX3dyYXBwZXIiLCJfdGlwQ29udGFpbmVyIiwiX3RpcCIsIl9jbG9zZUJ1dHRvbiIsIndoaXRlU3BhY2UiLCJfYXV0b3Bhbm5pbmciLCJJaSIsIm9wZW5Qb3B1cCIsIl9wb3B1cEhhbmRsZXJzQWRkZWQiLCJfb3BlblBvcHVwIiwia2V5cHJlc3MiLCJfb25LZXlQcmVzcyIsIm1vdmUiLCJfbW92ZVBvcHVwIiwidW5iaW5kUG9wdXAiLCJ0b2dnbGVQb3B1cCIsImlzUG9wdXBPcGVuIiwic2V0UG9wdXBDb250ZW50IiwiZ2V0UG9wdXAiLCJkaXJlY3Rpb24iLCJwZXJtYW5lbnQiLCJzdGlja3kiLCJ0b29sdGlwIiwiX3NldFBvc2l0aW9uIiwiUmkiLCJvcGVuVG9vbHRpcCIsImNsb3NlVG9vbHRpcCIsImJpbmRUb29sdGlwIiwiX3Rvb2x0aXAiLCJpc1Rvb2x0aXBPcGVuIiwidW5iaW5kVG9vbHRpcCIsIl9pbml0VG9vbHRpcEludGVyYWN0aW9ucyIsIl90b29sdGlwSGFuZGxlcnNBZGRlZCIsIl9tb3ZlVG9vbHRpcCIsIl9vcGVuVG9vbHRpcCIsIl9hZGRGb2N1c0xpc3RlbmVycyIsIm1vdXNlbW92ZSIsIl9zZXRBcmlhRGVzY3JpYmVkQnlPbkxheWVyIiwidG9nZ2xlVG9vbHRpcCIsInNldFRvb2x0aXBDb250ZW50IiwiZ2V0VG9vbHRpcCIsIl9hZGRGb2N1c0xpc3RlbmVyc09uTGF5ZXIiLCJpZCIsIm1vdmluZyIsIl9vcGVuT25jZUZsYWciLCJodG1sIiwiYmdQb3MiLCJFbGVtZW50IiwiYmFja2dyb3VuZFBvc2l0aW9uIiwiRGVmYXVsdCIsIk5pIiwidGlsZVNpemUiLCJ1cGRhdGVXaGVuWm9vbWluZyIsInVwZGF0ZUludGVydmFsIiwibWF4TmF0aXZlWm9vbSIsIm1pbk5hdGl2ZVpvb20iLCJub1dyYXAiLCJrZWVwQnVmZmVyIiwiX2xldmVscyIsIl90aWxlcyIsIl9yZW1vdmVBbGxUaWxlcyIsIl90aWxlWm9vbSIsIl9zZXRBdXRvWkluZGV4IiwiaXNMb2FkaW5nIiwiX2xvYWRpbmciLCJfY2xhbXBab29tIiwiX3VwZGF0ZUxldmVscyIsInZpZXdwcmVyZXNldCIsIl9pbnZhbGlkYXRlQWxsIiwiY3JlYXRlVGlsZSIsImdldFRpbGVTaXplIiwiY2hpbGRyZW4iLCJpc0Zpbml0ZSIsImN1cnJlbnQiLCJsb2FkZWQiLCJlbCIsImFjdGl2ZSIsIl9vbk9wYXF1ZVRpbGUiLCJfbm9QcnVuZSIsIl9wcnVuZVRpbGVzIiwiX2ZhZGVGcmFtZSIsIk51bWJlciIsIl9vblVwZGF0ZUxldmVsIiwiX3JlbW92ZVRpbGVzQXRab29tIiwiX29uUmVtb3ZlTGV2ZWwiLCJvcmlnaW4iLCJfc2V0Wm9vbVRyYW5zZm9ybSIsIl9vbkNyZWF0ZUxldmVsIiwiX2xldmVsIiwicmV0YWluIiwiX3JldGFpblBhcmVudCIsIl9yZXRhaW5DaGlsZHJlbiIsIl9yZW1vdmVUaWxlIiwiX3RpbGVDb29yZHNUb0tleSIsIl9zZXRWaWV3IiwiX2Fib3J0TG9hZGluZyIsIl9yZXNldEdyaWQiLCJfc2V0Wm9vbVRyYW5zZm9ybXMiLCJfdGlsZVNpemUiLCJfZ2xvYmFsVGlsZVJhbmdlIiwiX3B4Qm91bmRzVG9UaWxlUmFuZ2UiLCJfd3JhcFgiLCJfd3JhcFkiLCJfZ2V0VGlsZWRQaXhlbEJvdW5kcyIsIl9pc1ZhbGlkVGlsZSIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJfYWRkVGlsZSIsIl90aWxlQ29vcmRzVG9Cb3VuZHMiLCJfa2V5VG9Cb3VuZHMiLCJfa2V5VG9UaWxlQ29vcmRzIiwiX3RpbGVDb29yZHNUb053U2UiLCJ0aWxlIiwiX2luaXRUaWxlIiwiX2dldFRpbGVQb3MiLCJfd3JhcENvb3JkcyIsIl90aWxlUmVhZHkiLCJlcnJvciIsIl9ub1RpbGVzVG9Mb2FkIiwiRGkiLCJzdWJkb21haW5zIiwiZXJyb3JUaWxlVXJsIiwiem9vbU9mZnNldCIsInRtcyIsInpvb21SZXZlcnNlIiwiZGV0ZWN0UmV0aW5hIiwicmVmZXJyZXJQb2xpY3kiLCJfb25UaWxlUmVtb3ZlIiwiX3RpbGVPbkxvYWQiLCJfdGlsZU9uRXJyb3IiLCJnZXRUaWxlVXJsIiwiX2dldFN1YmRvbWFpbiIsIl9nZXRab29tRm9yVXJsIiwiZ2V0QXR0cmlidXRlIiwiY29tcGxldGUiLCJqaSIsIkhpIiwiZGVmYXVsdFdtc1BhcmFtcyIsInNlcnZpY2UiLCJyZXF1ZXN0Iiwic3R5bGVzIiwiZm9ybWF0IiwidHJhbnNwYXJlbnQiLCJ2ZXJzaW9uIiwidXBwZXJjYXNlIiwid21zUGFyYW1zIiwiX2NycyIsIl93bXNWZXJzaW9uIiwicGFyc2VGbG9hdCIsInNldFBhcmFtcyIsIldNUyIsIndtcyIsIldpIiwiX3VwZGF0ZVBhdGhzIiwiX2Rlc3Ryb3lDb250YWluZXIiLCJfb25ab29tIiwiem9vbWVuZCIsIl9vblpvb21FbmQiLCJfb25BbmltWm9vbSIsIl91cGRhdGVUcmFuc2Zvcm0iLCJfY2VudGVyIiwiRmkiLCJfb25WaWV3UHJlUmVzZXQiLCJfcG9zdHBvbmVVcGRhdGVQYXRocyIsIl9kcmF3IiwiX29uTW91c2VNb3ZlIiwiX29uQ2xpY2siLCJfaGFuZGxlTW91c2VPdXQiLCJfY3R4IiwiX3JlZHJhd1JlcXVlc3QiLCJfcmVkcmF3Qm91bmRzIiwiX3JlZHJhdyIsInRyYW5zbGF0ZSIsIl91cGRhdGVEYXNoQXJyYXkiLCJfb3JkZXIiLCJwcmV2IiwiX2RyYXdMYXN0IiwibmV4dCIsIl9kcmF3Rmlyc3QiLCJfcmVxdWVzdFJlZHJhdyIsIl9leHRlbmRSZWRyYXdCb3VuZHMiLCJfZGFzaEFycmF5IiwiX2NsZWFyIiwiY2xlYXJSZWN0Iiwic2F2ZSIsInJlc3RvcmUiLCJiZWdpblBhdGgiLCJyZWN0IiwiY2xpcCIsIl9kcmF3aW5nIiwiY2xvc2VQYXRoIiwiX2ZpbGxTdHJva2UiLCJhcmMiLCJnbG9iYWxBbHBoYSIsImZpbGxTdHlsZSIsInNldExpbmVEYXNoIiwibGluZVdpZHRoIiwic3Ryb2tlU3R5bGUiLCJfZmlyZUV2ZW50IiwiX2hhbmRsZU1vdXNlSG92ZXIiLCJfaG92ZXJlZExheWVyIiwiX21vdXNlSG92ZXJUaHJvdHRsZWQiLCJVaSIsIlZpIiwibmFtZXNwYWNlcyIsImNvb3Jkc2l6ZSIsIl9zdHJva2UiLCJfZmlsbCIsInN0cm9rZWQiLCJmaWxsZWQiLCJkYXNoU3R5bGUiLCJlbmRjYXAiLCJqb2luc3R5bGUiLCJfc2V0UGF0aCIsInFpIiwiR2kiLCJfcm9vdEdyb3VwIiwiX3N2Z1NpemUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJLaSIsIl9nZXRQYW5lUmVuZGVyZXIiLCJfY3JlYXRlUmVuZGVyZXIiLCJwcmVmZXJDYW52YXMiLCJZaSIsIl9ib3VuZHNUb0xhdExuZ3MiLCJwb2ludHNUb1BhdGgiLCJnZW9tZXRyeVRvTGF5ZXIiLCJjb29yZHNUb0xhdExuZ3MiLCJsYXRMbmdUb0Nvb3JkcyIsImxhdExuZ3NUb0Nvb3JkcyIsImdldEZlYXR1cmUiLCJhc0ZlYXR1cmUiLCJfcGFuZSIsIm92ZXJsYXlQYW5lIiwiX3Jlc2V0U3RhdGVUaW1lb3V0IiwiX2Rlc3Ryb3kiLCJfb25Nb3VzZURvd24iLCJfcmVzZXRTdGF0ZSIsIl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSIsImNvbnRleHRtZW51IiwibW91c2V1cCIsIl9vbk1vdXNlVXAiLCJfb25LZXlEb3duIiwiX2JveCIsIl9maW5pc2giLCJib3hab29tQm91bmRzIiwiZG91YmxlQ2xpY2tab29tIiwiX29uRG91YmxlQ2xpY2siLCJpbmVydGlhIiwiaW5lcnRpYURlY2VsZXJhdGlvbiIsImluZXJ0aWFNYXhTcGVlZCIsIndvcmxkQ29weUp1bXAiLCJtYXhCb3VuZHNWaXNjb3NpdHkiLCJfb25QcmVEcmFnTGltaXQiLCJfb25QcmVEcmFnV3JhcCIsIl9wb3NpdGlvbnMiLCJfdGltZXMiLCJfb2Zmc2V0TGltaXQiLCJfdmlzY29zaXR5IiwiX2xhc3RUaW1lIiwiX2xhc3RQb3MiLCJfYWJzUG9zIiwiX3BydW5lUG9zaXRpb25zIiwic2hpZnQiLCJfaW5pdGlhbFdvcmxkT2Zmc2V0IiwiX3dvcmxkV2lkdGgiLCJfdmlzY291c0xpbWl0Iiwia2V5Ym9hcmRQYW5EZWx0YSIsImtleUNvZGVzIiwicmlnaHQiLCJkb3duIiwidXAiLCJfc2V0UGFuRGVsdGEiLCJfc2V0Wm9vbURlbHRhIiwiX29uRm9jdXMiLCJibHVyIiwiX29uQmx1ciIsIm1vdXNlZG93biIsIl9hZGRIb29rcyIsIl9yZW1vdmVIb29rcyIsIl9mb2N1c2VkIiwic2Nyb2xsVG8iLCJfcGFuS2V5cyIsIl96b29tS2V5cyIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2Nyb2xsV2hlZWxab29tIiwid2hlZWxEZWJvdW5jZVRpbWUiLCJ3aGVlbFB4UGVyWm9vbUxldmVsIiwiX29uV2hlZWxTY3JvbGwiLCJfZGVsdGEiLCJfbGFzdE1vdXNlUG9zIiwiX3RpbWVyIiwiX3BlcmZvcm1ab29tIiwidGFwSG9sZCIsInRhcFRvbGVyYW5jZSIsIl9ob2xkVGltZW91dCIsIl9jYW5jZWwiLCJfaXNUYXBWYWxpZCIsIl9jYW5jZWxDbGlja1ByZXZlbnQiLCJfc2ltdWxhdGVFdmVudCIsIk1vdXNlRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsInZpZXciLCJkaXNwYXRjaEV2ZW50IiwidG91Y2hab29tIiwiYm91bmNlQXRab29tTGltaXRzIiwiX29uVG91Y2hTdGFydCIsIl96b29taW5nIiwiX2NlbnRlclBvaW50IiwiX3N0YXJ0TGF0TG5nIiwiX3BpbmNoU3RhcnRMYXRMbmciLCJfc3RhcnREaXN0IiwiX3N0YXJ0Wm9vbSIsIl9vblRvdWNoTW92ZSIsIl9vblRvdWNoRW5kIiwiX2FuaW1SZXF1ZXN0IiwiWGkiLCJCb3hab29tIiwiRG91YmxlQ2xpY2tab29tIiwiRHJhZyIsIktleWJvYXJkIiwiU2Nyb2xsV2hlZWxab29tIiwiVGFwSG9sZCIsIlRvdWNoWm9vbSIsIkJvdW5kcyIsIkJyb3dzZXIiLCJDUlMiLCJDYW52YXMiLCJDaXJjbGUiLCJDaXJjbGVNYXJrZXIiLCJDbGFzcyIsIkNvbnRyb2wiLCJEaXZJY29uIiwiRGl2T3ZlcmxheSIsIkRvbUV2ZW50IiwiRG9tVXRpbCIsIkRyYWdnYWJsZSIsIkV2ZW50ZWQiLCJGZWF0dXJlR3JvdXAiLCJHZW9KU09OIiwiR3JpZExheWVyIiwiSGFuZGxlciIsIkljb24iLCJJbWFnZU92ZXJsYXkiLCJMYXRMbmciLCJMYXRMbmdCb3VuZHMiLCJMYXllciIsIkxheWVyR3JvdXAiLCJMaW5lVXRpbCIsIk1hcCIsIk1hcmtlciIsIlBhdGgiLCJQb2ludCIsIlBvbHlVdGlsIiwiUG9seWdvbiIsIlBvbHlsaW5lIiwiUG9wdXAiLCJQb3NBbmltYXRpb24iLCJQcm9qZWN0aW9uIiwiUmVjdGFuZ2xlIiwiUmVuZGVyZXIiLCJTVkciLCJTVkdPdmVybGF5IiwiVGlsZUxheWVyIiwiVG9vbHRpcCIsIlRyYW5zZm9ybWF0aW9uIiwiVXRpbCIsIlZpZGVvT3ZlcmxheSIsImNpcmNsZSIsImNpcmNsZU1hcmtlciIsImNvbnRyb2wiLCJkaXZJY29uIiwiZmVhdHVyZUdyb3VwIiwiZ2VvSlNPTiIsImdlb0pzb24iLCJncmlkTGF5ZXIiLCJpbWFnZU92ZXJsYXkiLCJsYXRMbmciLCJsYXRMbmdCb3VuZHMiLCJsYXllckdyb3VwIiwibWFwIiwibWFya2VyIiwicG9pbnQiLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyZWN0YW5nbGUiLCJzdmdPdmVybGF5IiwidGlsZUxheWVyIiwidmlkZW9PdmVybGF5Iiwibm9Db25mbGljdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///741\n')},610:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("\n;// CONCATENATED MODULE: ./js/GLS-utils.js\n/** \n * Singleton object we can use for platform independent stuff \n */\nclass GLSUtils {\n  constructor(){}\n\n  /** \n   * Inject Script into the page \n   * @param string src \n   */\n  injectExternalScript(src){\n    let s=document.createElement(\"script\");\n    s.setAttribute(\"src\", src);\n    document.body.appendChild(s);\n  }\n\n  /** \n   * Inject a script string \n   */\n  injectScript(contents){\n    let e=document.createElement(\"script\");\n    e.value=contents;\n    document.body.appendChild(e);\n  }\n\n  /** \n   * Removes all not numeric chars from the string \n   *\n   * @param string string - the input string \n   * @return the string without chars that are not numbers \n   */\n  removeNonNumeric(string){\n    return string.replace(/\\D/g, '');\n  }\n\n  /** \n   * Check if the given url exists and is valid\n   * We use this to check if the carrier icon exists given \n   * a url path and the naming convention {carrier_id}.svg \n   * Make sure the correct protocol is appended to the url http!=https \n   * \n   * @return true it the url exists and is valid \n   */\n  isUrlValid(url){\n    var http=new XMLHttpRequest();\n    http.open('HEAD', url, false);\n    http.send();\n    return http.status==200;\n  }\n\n  /** \n   * Open a new window with the provided URL \n   * @string url \n   * @return bool if the window was opened, false if popup blocker enabled \n   */\n  openNewWindow(url, options){\n    let newWin=window.open(url, '_blank', options);\n    let blocked = !newWin||newWin.closed||typeof newWin.closed=='undefined';\n    return !blocked;\n  }\n}\nlet utils=new GLSUtils();\n/* harmony default export */ const GLS_utils=(utils);\n;// CONCATENATED MODULE: ./js/GLS-woo-commerce.js\n\nclass Woocommerce {\n  constructor(ajax_url=\"\"){\n    this.ajax_url=ajax_url;\n  }\n\n  /** \n   * @return true if this is the checkout page \n   */\n  isCheckout(){\n    console.log(\"Checkout\");\n    return jQuery(\"body\").hasClass('woocommerce-checkout');\n  }\n\n  /* \n   * If there is only one method available woo will use a hidden field for the selected carrier \n   *  + Generic Methods do not have an instance id \n   */\n  getShippingMethodId(){\n    let eCheckbox=jQuery(\"input[name='shipping_method[0]']:checked\");\n    let eHidden=jQuery(\"input[name='shipping_method[0]']\");\n\n    // eCheckboxes.addEventListener('change', function(event){\n    //     console.log(\"Caooooo\")\n    // });\n    let shippingMethod=eCheckbox.length > 0 ? eCheckbox.val():eHidden.val();\n    if(shippingMethod.indexOf(':') > 0){\n      var method_parts=shippingMethod.split(':');\n      return GLS_utils.removeNonNumeric(method_parts[0]);\n    }else{\n      return shippingMethod;\n    }\n  }\n\n  /** \n   * Wordpress won't send session cookies to wp-admin and the session handling in woocommerce is so poorly documented we are better off \n   * extracting necessary info client side our selves. We're emulating their checkout.js \n   * @return an object containing address parts \n   */\n  getShippingData(){\n    // ##DJDJ Verovatno samo ovde treba da se izmeni i povuku podaci sa pravih idjeva za input text\n    var country=jQuery('#billing_country').val(),\n      state=jQuery('#billing_state').val(),\n      postcode=jQuery('input#billing_postcode').val(),\n      city=jQuery('#billing_city').val(),\n      address=jQuery('input#billing_address_1').val(),\n      address_2=jQuery('input#billing_address_2').val(),\n      s_country=country,\n      s_state=state,\n      s_postcode=postcode,\n      s_city=city,\n      s_address=address,\n      s_address_2=address_2;\n    if(jQuery('#ship-to-different-address').find('input').is(':checked')){\n      s_country=jQuery('#shipping_country').val();\n      s_state=jQuery('#shipping_state').val();\n      s_postcode=jQuery('input#shipping_postcode').val();\n      s_city=jQuery('#shipping_city').val();\n      s_address=jQuery('input#shipping_address_1').val();\n      s_address_2=jQuery('input#shipping_address_2').val();\n    }\n    if(s_country==\"\"){\n      console.log(\"COUNTRY EMPTY\");\n      jQuery('input[aria-label*=\"Country/Region\"]').each(function (){\n        s_country=jQuery(this).val();\n      });\n    }else if(s_country==\"\"){\n      console.log(\"COUNTRY EMPTY AGAIN\");\n      jQuery('#shipping-country option:selected').text();\n    }\n    window.GLS_shipping_address={\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": s_address,\n        \"Streetname2\": s_address_2,\n        \"HouseNumber\": '',\n        \"NumberExtension\": '',\n        \"PostalCode\": s_postcode,\n        \"s_postcode\": s_postcode,\n        \"City\": s_city,\n        \"Country\": s_country,\n        \"State\": s_state\n      },\n      post_data: jQuery('form.checkout').serialize(),\n      \"CarrierId\": jQuery(\"#shipping_carrier_id\").val()\n    };\n    return {\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": s_address,\n        \"Streetname2\": s_address_2,\n        \"HouseNumber\": '',\n        \"NumberExtension\": '',\n        \"PostalCode\": s_postcode,\n        \"s_postcode\": s_postcode,\n        \"City\": s_city,\n        \"Country\": s_country,\n        \"State\": s_state\n      },\n      post_data: jQuery('form.checkout').serialize(),\n      \"CarrierId\": jQuery(\"#shipping_carrier_id\").val()\n    };\n  }\n\n  /** \n   * We must run this onload \n   * And on method change \n   * because people may never change the carrier or select a pickup point \n   */\n  setCarrier(carrier_id){\n    console.log(\"Set carrier id\");\n    console.log(carrier_id);\n    this.carrier_id=typeof carrier_id!='undefined' ? carrier_id:this.getShippingMethodId();\n    jQuery(\"#shipping_carrier_id\").val(this.carrier_id);\n  }\n\n  /** \n   * @param Pickup pickup \n   */\n  setPickupPoint(pickup){\n    console.log(\"SET PICKUP POINT @#@#\");\n    console.log(pickup);\n    let pickup_label=pickup.Information.Name + \" \" + pickup.Information.Address;\n    let req={\n      'action': 'GLS_set_pickup_point',\n      'shipping_pickup_label': pickup_label,\n      'GLS_pickup_extended': jQuery('.GLS_mapfields' + pickup.PointId).val(),\n      'GLS-pickup__description': pickup_label,\n      'shipping_pickup_id': pickup.PointId,\n      'shipping_carrier_id': window.carrier_id\n    };\n    jQuery.getJSON(this.ajax_url, req, data=> {\n      console.log(\"Uspeooooo sam zemo\");\n      console.log(data);\n    }).fail(err=> {\n      console.log(\"Fatal error widget requesting points do we have an API bug?\", err.responseText);\n    });\n\n    // ##DJDJ Ovdeee\n    // jQuery(\"#GLS-pickup__description\").html(\"Selecetd pickup\" + \":\" +pickup_label);\n    let displayText=GLS_select + \"ed\";\n    jQuery(\"#GLS-pickup__description\").html(displayText + \":\" + pickup_label);\n    jQuery(\"#shipping_pickup_id\").val(pickup.PointId);\n    jQuery(\"#shipping_pickup_label\").val(pickup_label);\n    jQuery(\"#GLSpickup\").val(pickup.PointId);\n\n    // Is there extra info ? \n    if(jQuery('.GLS_mapfields' + pickup.PointId).length > 0){\n      jQuery('#shipping_pickup_extended').val(jQuery('.GLS_mapfields' + pickup.PointId).val());\n    }\n  }\n}\n// EXTERNAL MODULE: ./js/leaflet-1.4.0.js\nvar leaflet_1_4_0=__webpack_require__(741);\nvar leaflet_1_4_0_default=/*#__PURE__*/__webpack_require__.n(leaflet_1_4_0);\n;// CONCATENATED MODULE: ./js/GLS-open-map.js\n\n\nclass GLSOpenMap {\n  constructor(options, GLS){\n    console.log(\"OPENMAPCONSTRUCT2222\");\n    this.GLS=GLS;\n    this.options=options;\n    this.map=null;\n    this.host=options.host||'https://my.GLS.me';\n    this.icon_folder=typeof GLS_icon_folder!=='undefined' ? GLS_icon_folder:'';\n    this.mapWrapper=null;\n    this.stylePath=options.stylePath||this.host + '/shopsystems/v2/assets/GLSwidget.css';\n    this.markers=[];\n    this.pickupPoints=[];\n    this.carrier_icon_config={\n      30: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: [32, 32]\n      },\n      68: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: [57, 92]\n      },\n      71: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: [57, 92]\n      }\n    };\n    this.selectedPointIdx=null;\n    this.moveListeners=[];\n    this.isMoving=false; /* The map is loading points */\n    this.isUserMoving=false; /* The user is moving the map */\n    this.bounds=null;\n  }\n  setCarrierId(carrier_id){\n    console.log(\"OPENMAPCARRIERID\");\n    this.carrier_id=carrier_id;\n    this.current_icon=this.getCarrierIconOfType(this.carrier_id);\n  }\n  selectPoint(idx){\n    console.log(\"Select point\");\n    console.log(idx);\n    if(this.selectedPointIdx!=null){\n      this.markers[this.selectedPointIdx].setIcon(this.getCarrierIconOfType(this.carrier_id, this.pickupPoints[this.selectedPointIdx].Type, 0));\n    }\n    this.selectedPointIdx=idx;\n    this.markers[idx].setIcon(this.getCarrierIconOfType(this.carrier_id, this.pickupPoints[idx].Type, 1));\n  }\n  /**\n   *\n   * @param string imageUrl - full url to the icon\n   * @return L.icon object\n   */\n  createIcon(imageUrl){\n    let iconSize=typeof this.carrier_icon_config[this.carrier_id]!=\"undefined\" ? this.carrier_icon_config[this.carrier_id].iconSize:50;\n    return leaflet_1_4_0_default().icon({\n      iconUrl: imageUrl,\n      iconSize: [iconSize, iconSize],\n      /* size of the icon */\n      iconAnchor: [iconSize / 2, iconSize],\n      /* point of the icon which will correspond to marker's location */\n      popupAnchor: [-1 * iconSize / 2, -1 * iconSize / 2] /* point from which the popup should open relative to the iconAnchor */\n    });\n  }\n  setZoom=function (zoom){\n    this.map.setZoom(zoom);\n  };\n  isMapMoving(){\n    return this.isMoving||this.isUserMoving;\n  }\n  /**\n   * @param decimal lat\n   * @param decimal lng\n   */\n  centerMap(lat, lng){\n    let latlng=leaflet_1_4_0_default().latLng(lat, lng);\n  }\n\n  /**\n   * if the script has not been loaded , load it.\n   * We use this function because we only want to load the script when the user clicks the button\n   */\n  // ##DJDJ Proveri radi li bez ovoga\n  grantReady(){\n    if(!this.isScriptLoaded){\n      this.loadScript();\n    }\n  }\n\n  // ##DJDJ Bpost stuff\n  geocodeBpost(queryparts, fcallback){\n    console.log(\"BPOSTGEOCODE\");\n    this._geocode(queryparts.address, fcallback);\n  }\n  _geocode(queryparts, fcallback){\n    jQuery.getJSON('https://bpostdev.GLS.me/shopsystems/v2/shopify/bpostgeocode?searchText=' + queryparts, {}, function (resp){\n      console.log(resp.response);\n      let results=[];\n      let index=0;\n      if(resp.response&&resp.response.topSuggestions){\n        console.log(1);\n        console.log(resp);\n        let places=resp.response.topSuggestions;\n        for (let i=0; i < places.length; ++i){\n          index++;\n          // ##DJDJ Vrati ovo kako je bilo mozda?\n          if(places[i].address.searchBarString){\n            // if(index==1){\n            console.log(2);\n            results.push({\n              \"display_name\": places[i].address.searchBarString,\n              \"address\": {\n                City: places[i].address.municipalityName,\n                Country: 'be',\n                PostalCode: places[i].address.postalCode,\n                // ##DJDJ Ovo isto\n                Streetname1: places[i].address.searchBarString\n              },\n              \"lat\": places[i].address.latitude,\n              \"lng\": places[i].address.longitude\n            });\n          }\n        }\n      }\n      console.log(\"Rezultati\");\n      console.log(results);\n      fcallback&&fcallback(results);\n    });\n  }\n  // ##DJDJ GLS part\n  geocode(queryparts, fcallback){\n    console.log(\"GEOCODE FUNCTION\");\n    console.log(queryparts);\n    let queryval=queryparts.address;\n    let query=\"\";\n    const country=queryparts.country ? queryparts.country.toLowerCase():null;\n    if(queryval.match(/^([0-9\\-]+)$/)){\n      if(queryparts.country=='Portugal'&&typeof missingZipPT!='undefined'){\n        /* Is this a postal code we know is not geocodable in nominatim? */\n        let zip4dig=queryval.substring(0, 4);\n        for (let i=0; i < missingZipPT.length; ++i){\n          if(missingZipPT[i].zipcode==zip4dig){\n            this.queryResults={\n              \"display_name\": missingZipPT[i].display_name,\n              \"lat\": missingZipPT[i].lat,\n              \"lon\": missingZipPT[i].lng\n            };\n            return fcallback([this.queryResults]);\n          }\n        }\n      }\n      query='postalcode=' + queryval + '&country=' + country;\n    }else if(country){\n      query='q=' + queryval;\n    }\n    console.log(query);\n    jQuery(\"#sw-query-results\").html('<div class=\"sw-loader\"><div></div><div></div><div></div></div>');\n    jQuery.getJSON(\"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&\" + query, res=> {\n      console.log(\"Rezultat\");\n      console.log(res);\n      if(res.length==0&&queryval.match(/^([0-9\\-]+)$/)&&(country.toUpperCase()=='PT'||country.toLowerCase()=='portugal')){\n        jQuery(\"#sw-query\").val(queryval.substring(0, 4));\n        // ##DJDJ This is missing\n        this.geocodeQuery();\n        return;\n      }\n      this.queryResults=[];\n      console.log(\"TESTTESTOVDE\");\n      for (let i=0; i < res.length; ++i){\n        console.log(\"OVAJ RESPONSE\");\n        console.log(res[i]);\n        const wanted=res[i].address.postcode||res[i].address.city||res[i].address.county;\n        if(wanted&&jQuery('#shipping-country option:selected').val()!=\"\"){\n          if(jQuery('#shipping-country option:selected').val().toLowerCase()===res[i].address.country_code.toLowerCase()){\n            console.log(\"Wanted and val not null\");\n            this.pushDisplayedResults(res[i], queryparts);\n          }\n        }else if(wanted&&jQuery('#shipping-country option:selected').val()==\"\"){\n          console.log(\"Wanted and val null\");\n          this.pushDisplayedResults(res[i], queryparts);\n        }\n      }\n      console.log(fcallback);\n      console.log(this.queryResults);\n      fcallback&&fcallback(this.queryResults);\n    });\n  }\n  pushDisplayedResults(res, queryparts){\n    console.log(\"IF WANTED\");\n    let nomAddr=res;\n    const street=typeof nomAddr.address.road!='undefined' ? nomAddr.address.road:nomAddr.display_name;\n    let display_name=(street ? street:'') + ' ' + (nomAddr.address.postcode ? nomAddr.address.postcode:'');\n    if(typeof nomAddr.address.city!=='undefined'){\n      console.log(\"IMA GRAD\");\n      display_name +=' ' + nomAddr.address.city;\n    }\n    if(typeof nomAddr.address.region!=='undefined'){\n      console.log(\"IMA REGION\");\n      display_name +=' ' + nomAddr.address.region;\n    }\n    if(nomAddr.address.county){\n      console.log(\"IMA COUNTY\");\n      display_name +=' ' + nomAddr.address.county;\n    }\n    if(queryparts.country.toLowerCase()!==nomAddr.address.country.toLowerCase()){\n      display_name +=\" \" + nomAddr.address.country_code;\n    }\n    this.queryResults.push({\n      \"display_name\": display_name,\n      \"address\": {\n        City: nomAddr.address.city,\n        Country: nomAddr.address.country_code,\n        PostalCode: nomAddr.address.postcode,\n        Streetname1: street,\n        State: nomAddr.address.region\n      },\n      \"lat\": nomAddr.lat,\n      \"lng\": nomAddr.lon\n    });\n  }\n\n  /**\n   * @param f_callback what function to call when the request resolves\n   * @param city - city name\n   * @param country - country in iso2 uppercase\n   * @param postalcode - the postal code\n   * @param streetname - the streetname\n   */\n  geocodeAddress(f_callback, city, country, postalcode, streetname){\n    var queryString=\"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1\" + \"&city=\" + city + \"&country=\" + country;\n    if(typeof postalcode!=='undefined'){\n      if(country=='PT'||country=='Portugal'){\n        postalcode=postalcode.substr(0, 4);\n      }\n      queryString +=\"&postalcode=\" + postalcode;\n    }\n    if(typeof streetname!=='undefined'){\n      queryString +=\"&street=\" + streetname;\n    }\n    if(typeof btoa!=='undefined'&&typeof this.address_cache[btoa(queryString)]!=='undefined'){\n      f_callback(this.address_cache[btoa(queryString)]);\n    }else{\n      jQuery.getJSON(queryString, {}, response=> {\n        let geocode={\n          'iso2': '',\n          'lat': '',\n          'lng': ''\n        };\n        if(response.length > 0){\n          let location=response[0];\n          geocode.iso2=location.address.country_code;\n          geocode.lat=location.lat;\n          geocode.lng=location.lon;\n        }\n        this.address_cache[btoa(queryString)]=geocode;\n        f_callback(geocode);\n        console.log(response);\n      });\n    }\n  }\n  // ##DJDJ Bpost\n  geocodeAddressPartsBpost(fcallback, city, country, postalcode, streetname){\n    let queryString='';\n    console.log(\"Address parts bpost\");\n    if(typeof streetname!='undefined'){\n      queryString +=encodeURI(streetname);\n    }\n    if(typeof postalcode!='undefined'){\n      queryString +=\",\" + postalcode;\n    }\n    this._geocode(queryString, function (results){\n      let latln={\n        lat: 0,\n        lng: 0\n      };\n      if(results.length > 0){\n        latln={\n          lat: results[0].latitude,\n          lng: results[0].longitude\n        };\n      }\n      fcallback&&fcallback(latln);\n    });\n  }\n  // ##DJDJ GLS code\n  geocodeAddressParts(f_callback, city, country, postalcode, streetname){\n    console.log(\"ADDRESSPARTS MICO\");\n    console.log(city);\n    console.log(country);\n    console.log(postalcode);\n    console.log(streetname);\n    var queryString=\"https://nominatim.openstreetmap.org/search?format=json&addressdetails=1\" + \"&city=\" + city + \"&country_code=\" + country;\n    if(typeof postalcode!='undefined'){\n      if(country=='PT'||country=='Portugal'){\n        postalcode=postalcode.substr(0, 4);\n      }\n      queryString +=\"&postalcode=\" + postalcode;\n    }\n    if(typeof streetname!='undefined'){\n      queryString +=\"&street=\" + encodeURI(streetname);\n    }\n    jQuery.getJSON(queryString, {}, function (response){\n      let geocode={\n        'iso2': '',\n        'lat': '',\n        'lng': ''\n      };\n      if(response.length > 0){\n        let location=response[0];\n        geocode.iso2=location.address.country_code;\n        geocode.lat=location.lat;\n        geocode.lng=location.lon;\n      }\n      console.log(\"geocode  \" + response.length + 'results');\n      if(geocode.lan){\n        console.log(\"returning \", geocode);\n      }\n      f_callback(geocode);\n    });\n  }\n  loadScript(){\n    GLS_utils.injectExternalScript(GLS_PLUGIN_URL + \"views/js/leaflet-1.4.0.js\");\n    this.isScriptLoaded=true;\n    return;\n  }\n\n  /**\n   * Leaflet does not receive a callback so we wait here for the script to be loaded\n   */\n  initMap(){\n    console.log(\"Load map\");\n    // this.mapWrapper=jQuery(this.options.mapParentContainer);\n    this.mapWrapper=jQuery(\"body\");\n    if(this.mapWrapper.hasClass('leaflet-container')){\n      console.log(\"map was already loaded\");\n      return;\n    }\n    this.icon_selected=this.createIcon(this.icon_folder + 'selected.png');\n    this.icon_default=this.createIcon(this.icon_folder + 'default.png');\n    if(!this.current_icon){\n      this.current_icon=this.icon_default;\n    }\n    this.map=new (leaflet_1_4_0_default()).map('sw-map', {\n      \"zoom\": 16,\n      \"center\": [51.505, -0.09]\n    });\n    leaflet_1_4_0_default().tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n      \"attribution\": '&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors'\n    }).addTo(this.map);\n    this.options.onmapready&&this.options.onmapready();\n    this.map.on('click', ()=> {\n      jQuery(\".sw-map-selected-point\").html(\"\");\n    });\n    this.map.on('moveend', ()=> {\n      let center=this.getCenter();\n      if(!this.isInBounds(center.lat, center.lng)){\n        this.moveEnd();\n      }\n    });\n  }\n  async moveEnd(){\n    if(this.isMapMoving()){\n      return;\n    }\n    this.isUserMoving=true;\n    let mapCenter=this.map.getCenter();\n    for (let i=0; this.moveListeners&&i < this.moveListeners.length; ++i){\n      await this.moveListeners[i](mapCenter);\n    }\n    console.log(\"MOVE LISTENERS ENDED\");\n    this.isUserMoving=false;\n  }\n  addMapMoveListener(fcallback){\n    this.moveListeners.push(fcallback);\n  }\n  getCenter(){\n    return this.map.getCenter();\n  }\n  isInBounds(lat, lng){\n    if(!this.bounds){\n      return false;\n    }\n    let inLat=lat > this.bounds.bottomLeft.lat&&lat < this.bounds.topRight.lat;\n    let eastBound=lng < this.bounds.topRight.lng;\n    let westBound=lng > this.bounds.bottomLeft.lng;\n    let inLng;\n    if(this.bounds.topRight.lng < this.bounds.bottomLeft.lng){\n      inLng=eastBound||westBound;\n    }else{\n      inLng=eastBound&&westBound;\n    }\n    return inLng&&inLat;\n  }\n  clearMarkers(){\n    console.log(\"Clear markers\");\n    console.log(this.map);\n    this.bounds=null;\n    this.selectedPointIdx=null;\n    if(this.markers.length > 0){\n      for (let i=0; i < this.markers.length; ++i){\n        this.map.removeLayer(this.markers[i]);\n      }\n    }\n    this.markers=[];\n    if(!this.isMoving){\n      this.map.setMinZoom(0);\n    }\n  }\n\n  /**\n   * Add the markers to map\n   * @param array pickupPoints - an array of pickupPoints\n   * @param function callback\n   */\n  addMarkers(pickupPoints, callback){\n    console.log(\"ADD MARKERS 232323\");\n    this.isMoving=true;\n    this.pickupPoints=pickupPoints;\n    for (let x=0; x < pickupPoints.length; ++x){\n      this.markers[x]=this.getMarker(pickupPoints[x]);\n      /*    we need to do this because the values for lat,lng we have are rounded, so they will not match the ones returned by google */\n      this.pickupPoints[x].marker=this.markers[x];\n      this.markers[x].on('click', function (){\n        if(typeof callback=='function'){\n          callback(x);\n        }\n      });\n    }\n    this.fitBounds();\n    console.log(\"Gotov fit bounds\");\n  }\n  resetMarker(marker){\n    marker.setIcon(this.icon_default);\n  }\n  selectMarker(marker){\n    marker.setIcon(this.icon_selected);\n  }\n\n  /**\n   * Adjust the zoom in the map to display all the markers\n   * There's a fit bounds that receives 2 corners, but calculating them is up to us.\n   * corners: top left, bottom right\n   * then we center the map at the center of the square\n   */\n  fitBounds=function (){\n    jQuery('html,body').scrollTop(0);\n    this.map.invalidateSize();\n\n    /*this function changes the map center*/\n    this.isMoving=true;\n    let bottomLeft=[parseFloat(this.pickupPoints[0].Lat), parseFloat(this.pickupPoints[0].Long)];\n    let topRight=[parseFloat(this.pickupPoints[0].Lat), parseFloat(this.pickupPoints[0].Long)];\n    for (let i=0; i < this.pickupPoints.length; ++i){\n      let lat=parseFloat(this.pickupPoints[i].Lat);\n      let lng=parseFloat(this.pickupPoints[i].Long);\n      if(lat < bottomLeft[0]){\n        bottomLeft[0]=lat;\n      }\n      if(lat > topRight[0]){\n        topRight[0]=lat;\n      }\n      if(lng > topRight[1]){\n        topRight[1]=lng;\n      }\n      if(lng < bottomLeft[1]){\n        bottomLeft[1]=lng;\n      }\n    }\n    let centerX=bottomLeft[0] + (topRight[0] - bottomLeft[0]) / 2;\n    let centerY=bottomLeft[1] + (topRight[1] - bottomLeft[1]) / 2;\n    this.center=[centerX, centerY];\n    this.centerMap(centerX, centerY);\n    this.map.fitBounds([bottomLeft, topRight]);\n    this.bounds={\n      \"bottomLeft\": {\n        lat: bottomLeft[0],\n        lng: bottomLeft[1]\n      },\n      \"topRight\": {\n        lat: topRight[0],\n        lng: topRight[1]\n      }\n    };\n\n    /* Grant changes are applied before we state we're no longer moving the map around via js */\n    setTimeout(()=> {\n      this.isMoving=false;\n      let zoom=10;\n      if(zoom > 16||zoom < 10){\n        zoom=10;\n      }\n      this.map.setMinZoom(zoom);\n      console.log(\"map zoom is \", zoom);\n    }, 1000);\n    return false;\n  };\n  getIcon(pickupPoint){\n    return pickupPoint.Type > 0 ? this.getCarrierIconOfType(this.carrier_id, pickupPoint.Type):this.current_icon;\n  }\n\n  /**\n   * Return a marker for the openLayers\n   * IconAnchor: The coordinates of the \"tip\" of the icon (relative to its top left corner).\n   * The icon will be aligned so that this point is at the marker's geographical location.\n   * Centered by default if size is specified, also can be set in CSS with negative margins.\n   */\n  getMarker(pickupPoint){\n    let marker=leaflet_1_4_0_default().marker([pickupPoint.Lat, pickupPoint.Long], {\n      \"icon\": this.getIcon(pickupPoint),\n      \"title\": pickupPoint.Information.Name + \"\\n\" + pickupPoint.Information.Address\n    });\n    marker.addTo(this.map);\n    return marker;\n  }\n  getCarrierIconOfType(carrier_id, type, selected){\n    var allowedTypes=[1, 2, 4, 16, 990];\n    let carrier_icon_url;\n    let file_extension='.' + (typeof this.carrier_icon_config[carrier_id]!='undefined' ? this.carrier_icon_config[carrier_id].extension:\"png\");\n    let selectedextension=typeof this.carrier_icon_config[carrier_id]!='undefined'&&this.carrier_icon_config[carrier_id].selectedState&&selected ? '_s':'';\n    if(selected&&!selectedextension){\n      return this.icon_selected;\n    }\n    if(type&&allowedTypes.includes(type)){\n      carrier_icon_url=this.icon_folder + '' + carrier_id + '_' + type + selectedextension + file_extension;\n    }else{\n      carrier_icon_url=this.icon_folder + carrier_id + selectedextension + file_extension;\n    }\n    return this.createIcon(carrier_icon_url);\n  }\n  /**\n   * Checks if we have an icon for this carrier.\n   * If yes then change the carrier icon\n   * If not then use the default icon\n   *\n   * @param int carrier_id - the carrier id\n   */\n  setCarrierIcon(carrier_id){\n    console.log(\"SetCarrierIcon\");\n    if(typeof (leaflet_1_4_0_default())==='undefined'){\n      setTimeout(()=> {\n        this.setCarrierIcon(carrier_id);\n      }, 200);\n      return;\n    }\n    this.carrier_id=carrier_id;\n    let carrier_icon_url=this.icon_folder + '' + carrier_id + '.png';\n    if(typeof this.cache_icon_valid[carrier_icon_url]==='undefined'){\n      this.cache_icon_valid[carrier_icon_url]=GLS_utils.carrierIconExists(carrier_id, '', this.icon_folder);\n    }\n    this.current_icon=this.cache_icon_valid[carrier_icon_url] ? this.createIcon(carrier_icon_url):this.icon_default;\n  }\n}\n;// CONCATENATED MODULE: ./js/GLS-gmaps.js\n\nclass GLSGmaps {\n  constructor(options){\n    console.log(\"Entered\");\n    this.isScriptLoaded=false;\n    this.markers=[];\n    this.map=null;\n    this.pickupPoints=[];\n    this.options=options;\n    this.host=options.host;\n    console.log(\"Icon folder\");\n    console.log(GLS_icon_folder);\n    this.icon_folder=typeof GLS_icon_folder!=='undefined' ? GLS_icon_folder:'';\n    this.icon_selected=this.icon_folder + 'selected.png';\n    this.icon_default=this.icon_folder + 'default.png';\n    this.current_icon=this.icon_default;\n    this.moveListeners=[];\n    this.carrier_id=null;\n    this.carrier_icon_config={\n      30: {\n        extension: 'svg',\n        selectedState: true,\n        iconSize: 98\n      }\n    };\n    this.GLSWidget=new GLS_widget(options);\n  }\n  initMap(carrier_id, f_callback){\n    this.carrier_id=carrier_id;\n    let me=this;\n    this.loadScript(\"https://maps.googleapis.com/maps/api/js?key=\" + this.options.gmapskey + \"&callback=\", ()=> {\n      console.log(\"USAO U IF\");\n      me.isScriptLoaded=true;\n      f_callback&&f_callback();\n      this.loadMap();\n    });\n    console.log(\"Initmap Nije usao u if\");\n  }\n  loadScript(url, callback){\n    var script=document.createElement(\"script\");\n    script.type=\"text/javascript\";\n    if(script.readyState){\n      /*IE */\n      script.onreadystatechange=function (){\n        if(script.readyState=='loaded'||script.readyState=='complete'){\n          script.onreadystatechange=null;\n          calback&&callback();\n        }\n      };\n    }else{\n      script.onload=function (){\n        callback&&callback();\n      };\n    }\n    script.src=url;\n    document.getElementsByTagName(\"head\")[0].appendChild(script);\n  }\n  addMarkers(pickupPoints, callback){\n    this.pickupPoints=pickupPoints;\n    for (let x=0; x < pickupPoints.length; ++x){\n      this.markers[x]=this.getMarker(pickupPoints[x]);\n      pickupPoints[x].marker=this.markers[x];\n      this.markers[x].addListener('click', ()=> {\n        if(typeof callback!='undefined'){\n          callback(x);\n        }\n      });\n    }\n    this.fitBounds();\n  }\n  addMapMoveListener(fcallback){\n    this.moveListeners.push(fcallback);\n  }\n  centerMap(lat, lng){\n    this.map.setCenter(new google.maps.LatLng(lat, lng));\n  }\n  clearMarkers(){\n    if(this.markers.length > 0){\n      for (let i=0; i < this.markers.length; ++i){\n        this.markers[i].setMap(null);\n      }\n      this.markers=[];\n    }\n  }\n  fitBounds(){\n    var bounds=new google.maps.LatLngBounds();\n    for (let x=0; x < this.markers.length; ++x){\n      bounds.extend(this.markers[x].getPosition());\n    }\n    this.map.fitBounds(bounds);\n    this.bounds=this.map.getBounds();\n  }\n  getMarker(pickupPoint){\n    console.log(\"GETMARKER\");\n    let url=this.getCarrierIconUrl(pickupPoint.Type, 0);\n    let options={\n      position: new google.maps.LatLng(pickupPoint.Lat, pickupPoint.Long),\n      map: this.map,\n      icon: {\n        url\n      }\n    };\n    // ##DJDJ Ako nista odradi kao i u open map\n    console.log(\"PRE IF\");\n    if(typeof this.carrier_icon_config[this.carrier_id]!='undefined'){\n      console.log(\"IF GET MARKER\");\n      console.log(this.carrier_icon_config);\n      console.log(this.carrier_icon_config[this.carrier_id].iconSize);\n      options.icon.size=new google.maps.Size(this.carrier_icon_config[this.carrier_id].iconSize, this.carrier_icon_config[this.carrier_id].iconSize);\n    }else{\n      console.log(\"ELSE GET MARKER\");\n      options.icon.scaledSize=new google.maps.Size(50, 50);\n    }\n    console.log(\"POSLE IF\");\n    let marker=new google.maps.Marker(options);\n    return marker;\n  }\n  isMapMoving(){\n    return this.isMoving||this.isUserMoving;\n  }\n  async moveEnd(){\n    if(this.isMapMoving()){\n      return;\n    }\n    this.isUserMoving=true;\n    let mapCenter=this.map.getCenter();\n    for (let i=0; this.moveListeners&&i < this.moveListeners.length; ++i){\n      await this.moveListeners[i]({\n        \"lat\": mapCenter.lat(),\n        \"lng\": mapCenter.lng()\n      });\n    }\n    console.log(\"MOVE LISTENERS ENDED\");\n    this.isUserMoving=false;\n  }\n  loadMap(){\n    console.log(\"LOADMAP\");\n    this.map=new google.maps.Map(document.getElementById(\"sw-map\"), {\n      center: {\n        lat: -34.397,\n        lng: 150.644\n      },\n      zoom: 16,\n      mapTypeControl: false\n    });\n    this.map.addListener('center_changed', ()=> {\n      let center=this.map.getCenter();\n      if(this.bounds&&!this.bounds.contains(center)){\n        this.moveEnd();\n      }\n    });\n  }\n  geocode(queryparts, f_callback){\n    if(typeof google=='undefined'){\n      setTimeout(()=> {\n        this.geocode(shippingData, f_callback);\n      }, 200);\n      return;\n    }\n    this.clearMarkers();\n    let geocoder=new google.maps.Geocoder();\n    let me=this;\n    console.log('geocoding ', queryparts);\n    let query=\"components=country:\" + queryparts.country;\n    if(queryparts.address&&queryparts.address.match(/^([0-9\\-]+)$/)){\n      if(queryparts.country.toUpperCase()=='PT'&&typeof missingZipPT!='undefined'){\n        let zip4dig=queryparts.address.substring(0, 4);\n        for (let i=0; i < missingZipPT.length; ++i){\n          if(missingZipPT[i].zipcode==zip4dig){\n            let queryResults=[{\n              display_name: missingZipPT[i].display_name,\n              lat: missingZipPT[i].lat,\n              lon: missingZipPT[i].lng\n            }];\n            return f_callback(queryResults);\n          }\n        }\n      }\n    }\n    if(queryparts.components){\n      query +='|' + queryparts.components;\n    }else if(queryparts.address.match(/^[0-9]/)){\n      query +='|postal_code:' + queryparts.address;\n    }else{\n      query +='&address=' + queryparts.address;\n    }\n    jQuery.get('https://maps.google.com/maps/api/geocode/json?sensor=false&key=' + this.options.gmapskey + '&' + query, function (response){\n      let results=response.results;\n      let status=response.status;\n      console.log(results);\n      let geocode={\n        iso2: '',\n        lat: '',\n        lng: ''\n      };\n      if(status!='OK'){\n        console.log('Geocode was not successful for the following reason: ' + status, response.error_msg);\n        f_callback(geocode);\n        return;\n      }\n      let places=[];\n      for (let i=0; i < results.length; ++i){\n        geocode=results[i];\n        let display_name='';\n        for (let j=0; geocode.address_components&&j < geocode.address_components.length; ++j){\n          display_name +=(display_name ? ', ':'') + geocode.address_components[j].long_name;\n        }\n        places.push({\n          iso2: me.getCountryCodeFromResult(geocode),\n          display_name,\n          lat: geocode.geometry.location.lat,\n          lng: geocode.geometry.location.lng\n        });\n      }\n      f_callback(places);\n    });\n  }\n  getCountryCodeFromResult(geocode){\n    if(typeof geocode.address_components==\"undefined\"){\n      return \"\";\n    }\n    let components=geocode.address_components;\n    for (let i=0; i < components.length; ++i){\n      let types=components[i].types;\n      for (let j=0; j < types.length; ++j){\n        if(types[j]=='country'){\n          return components[i].short_name;\n        }\n      }\n    }\n  }\n  geocodeAddressParts(f_callback, city, country, postalcode, streetname){\n    if(typeof postalcode!='undefined'){\n      if(country=='PT'||country=='Portugal'){\n        postalcode=postalcode.substr(0, 4);\n      }\n    }\n    let components=\"postal_code:\" + postalcode + \"|locality:\" + city;\n    this.geocode({\n      country,\n      \"components\": components\n    }, places=> {\n      f_callback(places[0]);\n    });\n  }\n  setCarrierId(carrier_id){\n    this.carrier_id=carrier_id;\n  }\n  selectPoint(idx){\n    console.log(\"Selectpoint\");\n    for (let i=0; i < this.markers.length; ++i){\n      let point=this.pickupPoints[i];\n      console.log(point);\n      let icon={\n        url: this.getCarrierIconUrl(point.Type, idx==i)\n      };\n      if(typeof this.carrier_icon_config[this.carrier_id]!=\"undefined\"){\n        icon.size=new google.maps.Size(this.carrier_icon_config[this.carrier_id].iconSize, this.carrier_icon_config[this.carrier_id].iconSize);\n      }else{\n        icon.scaledSize=new google.maps.Size(50, 50);\n      }\n      console.log(\"SetICOD\");\n      console.log(icon);\n      this.markers[i].setIcon(icon);\n    }\n  }\n  setCarrierId(carrier_id){\n    this.carrier_id=carrier_id;\n  }\n  getCarrierIconUrl(type, selected){\n    let carrier_icon_url;\n    let file_extension='.' + (typeof this.carrier_icon_config[this.carrier_id]!='undefined' ? this.carrier_icon_config[this.carrier_id].extension:\"png\");\n    let selectedextension=typeof this.carrier_icon_config[this.carrier_id]!='undefined'&&this.carrier_icon_config[this.carrier_id].selectedState&&selected ? '_s':'';\n    if(selected&&!selectedextension){\n      return this.icon_selected;\n    }\n    if(type&&typeof GLS_carrier_imgs!='undefined'&&GLS_carrier_imgs.indexOf(this.carrier_id + \"_\" + type + file_extension)){\n      console.log(\"getCarrierIconUrl 1\");\n      carrier_icon_url=this.icon_folder + '' + this.carrier_id + '_' + type + selectedextension + file_extension;\n    }else{\n      console.log(\"getCarrierIconUrl 2\");\n      console.log(this.carrier_id);\n      // ##DJDJ Ne znam zasto je svg, pogledaj da vratis kako je bilo\n      carrier_icon_url=this.icon_folder + this.carrier_id + selectedextension + '.png';\n    }\n    return carrier_icon_url;\n  }\n}\n/* harmony default export */ const GLS_gmaps=(GLSGmaps);\n;// CONCATENATED MODULE: ./js/GLS-widget.js\n// eslint-disable-next-line prop-types\n\n\n\n\nclass GLSWidget {\n  constructor(options){\n    this.pickupPoints=[];\n    this.selectedPoint=null;\n    this.options=options;\n    this.markers=[];\n    this.host=options.host||'https://GLS.me';\n    this.debug=options.debug||0;\n    this.mapParentContainer=options.mapParentContainer||'body';\n    this.buttonParentContainer=options.buttonParentContainer||'';\n    this.isScriptLoaded=false;\n    this.buttonClass=this.options.button_class||'';\n    this.labels=this.options.labels||{};\n    this.platform=new Woocommerce(options.ajax_url);\n    this.timeoutKeyDown=null;\n    this.searchRunning=false;\n    this.address=this.options.address||null;\n    this.carrier_id=this.options.carrierId||0;\n    this.lang='en';\n    this.weekdaynames=[GLS_monday, GLS_tuesday, GLS_wednesday, GLS_thursday, GLS_friday, GLS_saturday, GLS_sunday];\n    this.selectedDisplayOption=0;\n    this.cacheResults={};\n    console.log(\"Jeste checkout ili nije\");\n    jQuery(document).ready(()=> {\n      let hasRunCheckVisibility=false; // Ensure the visibility check only runs once\n      let hasRunPlaceOrderCheck=false;\n\n      // Check visibility for shipping options (run only once)\n      const checkVisibility=setInterval(()=> {\n        const inputElement=jQuery(\".wc-block-components-shipping-rates-control__package\");\n        if(inputElement.is(':visible')&&!hasRunCheckVisibility){\n          hasRunCheckVisibility=true;\n          clearInterval(checkVisibility); // Clear interval after first successful check\n\n          console.log(\"Ovdeeee sam\");\n          window.selectedText=\"\";\n          window.selectedText=jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__input:checked\").closest(\"label\").find(\".wc-block-components-radio-control__label\").text();\n          if(window.selectedText===\"\"){\n            console.log(\"Prazan\");\n            jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__option-layout\").each(function (){\n              window.selectedText=jQuery(this).find(\".wc-block-components-radio-control__label\").text();\n            });\n          }\n          if(typeof this.isBlockCheckout===\"function\"&&this.isBlockCheckout()){\n            this.getSelectedCarrier();\n            this.getFormChange();\n          }\n          this.getOnClick();\n        }\n      }, 500); // Interval delay in milliseconds\n\n      // Check visibility for \"Place Order\" button (run only once)\n      const placeOrderCheck=setInterval(()=> {\n        const placeOrderButton=jQuery(\"#place_order\");\n        if(placeOrderButton.is(':visible')&&!hasRunPlaceOrderCheck){\n          hasRunPlaceOrderCheck=true;\n          clearInterval(placeOrderCheck); // Clear interval after first successful check\n\n          console.log(\"Ovdeeee sam visible checkout\");\n          placeOrderButton.on('click', function (e){\n            let shipping_pickup_id=jQuery(\"#shipping_pickup_id\").val();\n            console.log(\"Clicked\");\n            console.log(window.carrier_id);\n            console.log(window.mandatoryData);\n            if(window.mandatoryData!==\"\"&&window.mandatoryData.pickupMandatory&&shipping_pickup_id===\"\"){\n              console.log(\"USAO IF\");\n              e.preventDefault(); // Prevent default form submission\n\n              // Modal creation\n              const modal=jQuery('<div>', {\n                id: 'myModal',\n                css: {\n                  'display': 'none',\n                  'position': 'fixed',\n                  'z-index': '1',\n                  'left': '0',\n                  'top': '0',\n                  'width': '100%',\n                  'height': '100%',\n                  'overflow': 'auto',\n                  'background-color': 'rgba(0,0,0,0.4)'\n                }\n              });\n              const modalContent=jQuery('<div>', {\n                css: {\n                  'background-color': '#fefefe',\n                  'margin': '15% auto',\n                  'padding': '20px',\n                  'border': '1px solid #888',\n                  'width': '80%'\n                }\n              });\n              const closeButton=jQuery('<span>', {\n                text: '×',\n                css: {\n                  'color': '#aaa',\n                  'float': 'right',\n                  'font-size': '28px',\n                  'font-weight': 'bold',\n                  'cursor': 'pointer'\n                }\n              });\n              const message=jQuery('<p>', {\n                text: GLS_mandatory_point\n              });\n              let button=jQuery(\"<button class='button alt Bpost-pick-location' id='Bpost_pickup_button' type='button' onClick='Bpost.getPickupLocations(event)'>\" + Bpost_choose_pickup_location + \"</button>\");\n\n              // Append the elements\n              modalContent.append(closeButton);\n              modalContent.append(message);\n              modal.append(modalContent);\n              modalContent.append(button);\n              jQuery('body').append(modal);\n\n              // Show the modal\n              modal.show();\n\n              // Close modal handlers\n              closeButton.on('click', function (){\n                modal.hide();\n              });\n              jQuery(window).on('click', function (event){\n                if(jQuery(event.target).is(modal)){\n                  modal.hide();\n                }\n              });\n              return false; // Prevent submission\n            }\n          });\n        }\n      }, 500); // Interval delay in milliseconds\n    });\n    this.getOnSubmitButtonBlockClickNoTheme();\n    this.getThemeShippingMethod(options);\n  }\n  getThemeShippingMethod(options){\n    console.log(\"Options\");\n    console.log(options);\n    if(jQuery('.woocommerce-checkout-payment').length > 0){\n      jQuery(document).ajaxComplete((event, xhr, settings)=> {\n        if(settings.url.includes(\"update_order_review\")){\n          console.log(\"Complete request\");\n          console.log('Request made to wc-ajax=update_order_review');\n          console.log(jQuery('.Bpost-pick-location'));\n          var checkedRadio=jQuery('#shipping_method input[type=\"radio\"]:checked');\n\n          // Get the associated label text of the checked radio button\n          var selectedText=checkedRadio.siblings('label').text().split(':')[0].trim();\n\n          // Log or use the selected shipping method\n          console.log('Selected shipping method: ' + selectedText);\n          if(selectedText==''){\n            // Select the parent element containing the list of shipping methods\n            const shippingMethodsList=document.querySelector('#shipping_method');\n\n            // Check if the list exists\n            if(shippingMethodsList){\n              // Traverse the list items\n              const shippingMethodItems=shippingMethodsList.querySelectorAll('li');\n\n              // Iterate over each list item\n              shippingMethodItems.forEach(item=> {\n                // Find the <label> element inside the <li>\n                const labelElement=item.querySelector('label');\n                if(labelElement){\n                  // Extract the text content before the colon (:) to get the dynamic title\n                  const labelText=labelElement.textContent.trim();\n                  selectedText=labelText.split(':')[0].trim();\n                  console.log('Shipping Method Title:', selectedText);\n                }\n              });\n            }\n          }\n          let req={\n            'action': 'Bpost_selected_carrier',\n            'carrier': selectedText\n          };\n          console.log(\"Dosao si dovde\");\n          console.log(req);\n          jQuery.getJSON(window.location.origin + '/wp-admin/admin-ajax.php?', req, data=> {\n            console.log(\"Caoaooo nasaooo22\");\n            console.log(data.status);\n            if(data.status==1){\n              console.log(\"Caooooo status 123\");\n              if(data.pickupMandatory==true){\n                window.mandatoryData=data;\n              }\n              this.carrier_id=data.carrier_id;\n              window.carrier_id=data.carrier_id;\n              jQuery(document).ready(()=> {\n                var checkVisibility=setInterval(()=> {\n                  var inputElement=jQuery(\".woocommerce-checkout-payment\");\n                  if(inputElement.is(':visible')){\n                    // The input element is visible, you can proceed with your script\n                    clearInterval(checkVisibility); // Stop checking\n                    // Your code here\n                    console.log(\"ITS VISIBLE 222\");\n                    jQuery('#place_order').prop('disabled', true);\n                    if(jQuery(\"#pickupText\").length==0){\n                      jQuery('#place_order').after('<p id=\"pickupText\" style=\"color:red;\">Select pickup point</p>');\n                    }else if(jQuery(\"#pickupText\").length > 0){\n                      jQuery(\"#pickupText\").show();\n                    }\n                    jQuery('.Bpost-pick-location').show();\n                  }\n                }, 100); // Check every 100 milliseconds\n              });\n            }else{\n              console.log(\"Else nema pickup\");\n              jQuery('.Bpost-pick-location').hide();\n              jQuery('#shipping_pickup_id').val('');\n              jQuery('#shipping_pickup_label').val('');\n              jQuery('#shipping_pickup_extended').val('');\n\n              // Hide the span element\n              jQuery('.Bpost-pickup__description').hide();\n              if(jQuery('.Bpost-pickup__description').length > 0){\n                console.log(\"Usao iako nema\");\n                jQuery('.Bpost-pickup__description').hide();\n              }\n              jQuery('#place_order').prop('disabled', false);\n              jQuery('#pickupText').hide();\n            }\n          }).fail(err=> {\n            console.log(\"Fatal error widget requesting points do we have an API bug?\");\n          });\n        }\n      });\n      (function (open){\n        XMLHttpRequest.prototype.open=function (method, url, async, user, pass){\n          // Check if the request URL contains 'wc-ajax=update_order_review'\n          if(url.indexOf('wc-ajax=update_order_review')!==-1){\n            console.log('Request made to wc-ajax=update_order_review');\n            console.log(jQuery('.Bpost-pick-location'));\n            var checkedRadio=jQuery('#shipping_method input[type=\"radio\"]:checked');\n\n            // Get the associated label text of the checked radio button\n            var selectedText=checkedRadio.siblings('label').text().split(':')[0].trim();\n\n            // Log or use the selected shipping method\n            console.log('Selected shipping method: ' + selectedText);\n            let req={\n              'action': 'Bpost_selected_carrier',\n              'carrier': selectedText\n            };\n            console.log(\"Dosao si dovde\");\n            console.log(req);\n            jQuery.getJSON(window.location.origin + '/wp-admin/admin-ajax.php?', req, data=> {\n              console.log(\"Caoaooo nasaooo22\");\n              console.log(data.status);\n              if(data.status==1){\n                console.log(\"Caooooo status 123\");\n                if(data.pickupMandatory==true){\n                  window.mandatoryData=data;\n                }\n                this.carrier_id=data.carrier_id;\n                window.carrier_id=data.carrier_id;\n                jQuery(document).ready(()=> {\n                  var checkVisibility=setInterval(()=> {\n                    var inputElement=jQuery(\".woocommerce-checkout-payment\");\n                    if(inputElement.is(':visible')){\n                      // The input element is visible, you can proceed with your script\n                      clearInterval(checkVisibility); // Stop checking\n                      // Your code here\n                      console.log(\"ITS VISIBLE 222\");\n                      jQuery('#place_order').prop('disabled', true);\n                      if(jQuery(\"#pickupText\").length==0){\n                        jQuery('#place_order').after('<p id=\"pickupText\" style=\"color:red;\">Select pickup point</p>');\n                      }else if(jQuery(\"#pickupText\").length > 0){\n                        jQuery(\"#pickupText\").show();\n                      }\n                      jQuery('.Bpost-pick-location').show();\n                    }\n                  }, 100); // Check every 100 milliseconds\n                });\n              }else{\n                console.log(\"Else nema pickup\");\n                jQuery('.Bpost-pick-location').hide();\n\n                // Remove values from hidden inputs\n                jQuery('#shipping_pickup_id').val('');\n                jQuery('#shipping_pickup_label').val('');\n                jQuery('#shipping_pickup_extended').val('');\n\n                // Hide the span element\n                jQuery('.Bpost-pickup__description').hide();\n                if(jQuery('.Bpost-pickup__description').length > 0){\n                  console.log(\"Usao iako nema\");\n                  jQuery('.Bpost-pickup__description').hide();\n                }\n                jQuery('#place_order').prop('disabled', false);\n                jQuery('#pickupText').hide();\n              }\n            }).fail(err=> {\n              console.log(\"Fatal error widget requesting points do we have an API bug?\");\n            });\n          }\n\n          // Call the original open method\n          open.apply(this, arguments);\n        };\n      })(XMLHttpRequest.prototype.open);\n    }\n  }\n  getFormChange(){\n    jQuery(\".wc-block-checkout__form\").on('change', ()=> {\n      // This function will be triggered when any form field inside the \"checkout\" form is changed\n      console.log(\"Form changed! block block\");\n      if(jQuery('#shipping-loader').length <=0){\n        const loaderText=jQuery('<div id=\"shipping-loader\">Loading shipping method data...</div>').css({\n          'display': 'flex',\n          'align-items': 'center',\n          'font-size': '14px',\n          'color': '#333',\n          'margin-top': '10px'\n        });\n\n        // Append the loader text to the bottom of the #shipping-option element\n        jQuery('#shipping-option').append(loaderText);\n      }\n      this.disableButton();\n      setTimeout(()=> {\n        window.selectedText=jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__input:checked\").closest(\"label\").find(\".wc-block-components-radio-control__label\").text();\n        if(window.selectedText===undefined){\n          console.log(\"Prazan\");\n          jQuery(\"fieldset.wc-block-checkout__shipping-option\").find(\".wc-block-components-radio-control__option-layout\").each(function (){\n            window.selectedText=jQuery(this).find(\".wc-block-components-radio-control__label\").text();\n          });\n        }\n\n        // You can perform your desired actions here\n        this.getSelectedCarrier();\n      }, 2000);\n    });\n    this.enableButton();\n  }\n  getOnSubmitButtonBlockClickNoTheme(){\n    console.log(\"Submitted no theme\");\n    var checkVisibility=setInterval(()=> {\n      var inputElement=jQuery('.wc-block-components-checkout-place-order-button');\n      if(inputElement.is(':visible')){\n        // The input element is visible, you can proceed with your script\n        clearInterval(checkVisibility); // Stop checking\n        // Your code here\n\n        inputElement.on('click', function (e){\n          let shipping_pickup_id=jQuery(\"#shipping_pickup_id\").val();\n          console.log(\"Clicked\");\n          console.log(carrier_id);\n          console.log(window.mandatoryData);\n          if(window.mandatoryData!=\"\"&&window.mandatoryData.pickupMandatory&&shipping_pickup_id==\"\"){\n            var modal=jQuery('<div>', {\n              id: 'myModal',\n              css: {\n                'display': 'none',\n                'position': 'fixed',\n                'z-index': '1',\n                'left': '0',\n                'top': '0',\n                'width': '100%',\n                'height': '100%',\n                'overflow': 'auto',\n                'background-color': 'rgba(0,0,0,0.4)'\n              }\n            });\n            var modalContent=jQuery('<div>', {\n              css: {\n                'background-color': '#fefefe',\n                'margin': '15% auto',\n                'padding': '20px',\n                'border': '1px solid #888',\n                'width': '80%'\n              }\n            });\n            var closeButton=jQuery('<span>', {\n              text: '×',\n              css: {\n                'color': '#aaa',\n                'float': 'right',\n                'font-size': '28px',\n                'font-weight': 'bold',\n                'cursor': 'pointer'\n              }\n            });\n            var message=jQuery('<p>', {\n              text: GLS_mandatory_point\n            });\n            let button=jQuery(\"<button class='button alt GLS-pick-location' id='GLS_pickup_button' type='button' onClick='GLS.getPickupLocations(event)'>\" + GLS_choose_pickup_location + \"</button>\");\n\n            // Append the elements\n            modalContent.append(closeButton);\n            modalContent.append(message);\n            modal.append(modalContent);\n            modalContent.append(button);\n            jQuery('body').append(modal);\n\n            // Show the modal\n            modal.show();\n\n            // Close the modal when the user clicks on <span> (x)\n            closeButton.on('click', function (){\n              modal.hide();\n            });\n\n            // Close the modal when the user clicks anywhere outside of the modal content\n            jQuery(window).on('click', function (event){\n              if(jQuery(event.target).is(modal)){\n                modal.hide();\n              }\n            });\n            return false;\n          }\n        });\n      }\n    }, 100); // Check every 100 milliseconds\n\n    // jQuery('#place_order')\n  }\n  getSelectedCarrier(){\n    console.log(\"selectedCarrier\");\n    if(jQuery('#shipping-loader').length){\n      jQuery('#shipping-loader').remove();\n    }\n    console.log(window.selectedText);\n    window.mandatoryData=\"\";\n    jQuery(\"#GLS_pickup_button\").remove();\n    let req={\n      'action': 'GLS_selected_carrier',\n      'carrier': window.selectedText\n    };\n    jQuery.getJSON(this.options.ajax_url, req, data=> {\n      console.log(\"Caoaooo nasaooo22\");\n      this.disableButton();\n      jQuery('#GLS-pickup__description').hide();\n      console.log(data.status);\n      if(data.status==1){\n        console.log(\"Caooooo status 123\");\n        if(data.pickupMandatory==true){\n          window.mandatoryData=data;\n        }\n        this.carrier_id=data.carrier_id;\n        window.carrier_id=data.carrier_id;\n        jQuery(document).ready(()=> {\n          var checkVisibility=setInterval(()=> {\n            var inputElement=jQuery(\".wc-block-components-shipping-rates-control__package\");\n            if(inputElement.is(':visible')){\n              // The input element is visible, you can proceed with your script\n              clearInterval(checkVisibility); // Stop checking\n              // Your code here\n              console.log(\"ITS VISIBLE 222\");\n              this.getBlockShippingData();\n              console.log(inputElement);\n              if(jQuery('#GLS_pickup_button').length <=0){\n                console.log(\"No pickup button on page so we add\");\n                let button=jQuery(\"<button class='button alt GLS-pick-location' type='button' id='GLS_pickup_button' onClick='GLS.getPickupLocations(event)'>\" + GLS_choose_pickup_location + \"</button>\");\n                let shipping_pickup_id=jQuery(\"<input type='hidden' name='shipping_pickup_id' id='shipping_pickup_id'/>\");\n                let shipping_pickup_label=jQuery(\"<input type='hidden' name='shipping_pickup_label' id='shipping_pickup_label'/>\");\n                let GLS_pickup_extended=jQuery(\"<input type='hidden' name='GLS_pickup_extended' id='shipping_pickup_extended'/>\");\n                let GLS_pickup_description=jQuery(\"<span className='GLS-pickup__description' id='GLS-pickup__description'></span>\");\n                let shipping_carrier_id=jQuery(\"<tr style='display: none'><td><input type='hidden' name='shipping_carrier_id' id='shipping_carrier_id'/>\");\n                console.log(button);\n                inputElement[0].append(button[0]);\n                inputElement[0].append(shipping_pickup_id[0]);\n                inputElement[0].append(shipping_pickup_label[0]);\n                inputElement[0].append(GLS_pickup_extended[0]);\n                inputElement[0].append(GLS_pickup_description[0]);\n                inputElement[0].append(shipping_carrier_id[0]);\n              }\n              this.mapinterface.setCarrierId(this.carrier_id);\n              if(jQuery('#GLS_pickup_button').is(':visible')){\n                console.log('Button is visible so we can enable');\n                setTimeout(function (){\n                  // Code to run after 300 milliseconds\n                  console.log('400 milliseconds have passed');\n                  jQuery('.wc-block-components-checkout-place-order-button').prop('disabled', false);\n\n                  // Reset CSS styles for the enabled state\n                  jQuery('.wc-block-components-checkout-place-order-button').css({\n                    'background-color': 'black',\n                    'cursor': 'pointer',\n                    'opacity': '1' // Reset opacity to make it fully visible\n                  });\n                }, 300);\n              }\n            }\n          }, 100); // Check every 100 milliseconds\n        });\n      }else{\n        console.log(\"BUTTON ENABLED GET SELECTED CARRIER\");\n        if(jQuery('#GLS-pickup__description').length > 0){\n          jQuery('#GLS-pickup__description').hide();\n        }\n        this.enableButton();\n      }\n    }).fail(err=> {\n      console.log(\"Fatal error widget requesting points do we have an API bug?\");\n    });\n  }\n  isBlockCheckout(){\n    if(jQuery(\".wc-block-checkout\").length > 0){\n      return true;\n    }\n    return false;\n  }\n  getOnClick(){\n    jQuery(\"#sw-query-btn\").on('click', ()=> {\n      this.geocodeQuery();\n    });\n    jQuery('form[name=\"checkout\"]').on('change', ()=> {\n      // This function will be triggered when any form field inside the \"checkout\" form is changed\n      console.log(\"Form changed!\");\n      this.getFormShippingData();\n      // You can perform your desired actions here\n    });\n  }\n  getFormShippingData(){\n    var country=jQuery('#billing_country').val(),\n      state=jQuery('#billing_state').val(),\n      postcode=jQuery('input#billing_postcode').val(),\n      city=jQuery('#billing_city').val(),\n      address=jQuery('input#billing_address_1').val(),\n      address_2=jQuery('input#billing_address_2').val(),\n      s_country=country,\n      s_state=state,\n      s_postcode=postcode,\n      s_city=city,\n      s_address=address,\n      s_address_2=address_2;\n    if(jQuery('#ship-to-different-address').find('input').is(':checked')){\n      s_country=jQuery('#shipping_country').val();\n      s_state=jQuery('#shipping_state').val();\n      s_postcode=jQuery('input#shipping_postcode').val();\n      s_city=jQuery('#shipping_city').val();\n      s_address=jQuery('input#shipping_address_1').val();\n      s_address_2=jQuery('input#shipping_address_2').val();\n    }\n    jQuery('input[aria-label*=\"Country/Region\"]').each(function (){\n      var s_country=jQuery(this).val();\n    });\n    window.GLS_shipping_address={\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": s_address,\n        \"Streetname2\": s_address_2,\n        \"HouseNumber\": '',\n        \"NumberExtension\": '',\n        \"PostalCode\": s_postcode,\n        \"s_postcode\": s_postcode,\n        \"City\": s_city,\n        \"Country\": s_country,\n        \"State\": s_state\n      },\n      post_data: jQuery('form.checkout').serialize(),\n      \"CarrierId\": jQuery(\"#shipping_carrier_id\").val()\n    };\n    this.options.address=window.GLS_shipping_address.Address;\n  }\n  getGLSId(mage_id){\n    var carrier_id=mage_id.match(/([\\d]+)_pickup/);\n    if(carrier_id!=null){\n      return carrier_id[1];\n    }\n    for (let x=0; x < GLS_carriers.length; ++x){\n      if(GLS_carriers[x].ClassName===mage_id){\n        return typeof GLS_carriers[x].Id=='object' ? GLS_carriers[x].Id['0']:GLS_carriers[x].Id;\n      }\n    }\n    return 0;\n  }\n\n  /*\n  * Adds the map to the page\n  */\n  init(){\n    this.options.address&&this.setAddress(this.options.address);\n    this.loadScripts();\n    !this.options.address&&localStorage.getItem('GLSAddress')&&this.setAddress(JSON.parse(localStorage.getItem('GLSAddress')));\n  }\n  addPointInfo(p, selected, extra_class, parentContainer){\n    if(typeof extra_class=='undefined'){\n      extra_class='';\n    }\n    let open=typeof p.WorkingHoursRaw!='undefined'&&p.WorkingHoursRaw ? JSON.parse(p.WorkingHoursRaw):[];\n    let openhtml='';\n    let m2f='';\n    let wkd='';\n    let local=p.Information.Address;\n\n    /* ----------------------\n    / To replace when we have an actual format for it  */\n    let openHours=[];\n\n    /* LEGACY code that we are using to transform the raw data into something we can work with  ----------- */\n    let regexFormatDev=new RegExp(/([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)/, 'g');\n    let regexFormatLive=new RegExp(/([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)\\_([a-zA-Z0-9]+)/, 'g');\n    let regexFormat=regexFormatLive;\n    let regDay=1; /* Monday, Tuesday ..*/\n    let regOpenIdx=4; /* 1,2,... */\n    let regTypeIdx=2; /* Open | closing */\n\n    if(Object.keys(open).length > 0&&Object.keys(open).shift().match(regexFormatDev)){\n      regexFormat=regexFormatDev;\n      regTypeIdx=3;\n      regOpenIdx=7;\n    }\n    for (let key in open){\n      let value=open[key];\n      if(key.match(regexFormat)){\n        let res=regexFormat.exec(key);\n        let dayname=res[regDay];\n        let openidx=parseInt(res[regOpenIdx]) - 1;\n        let dayidx=this.weekdaynames.indexOf(dayname);\n        if(typeof openHours[dayidx]=='undefined'){\n          openHours[dayidx]=[];\n        }\n        if(typeof openHours[dayidx][openidx]=='undefined'){\n          openHours[dayidx][openidx]={\n            OpenTime: '',\n            CloseTime: ''\n          };\n        }\n        openHours[dayidx][openidx][res[regTypeIdx]=='Closing' ? 'CloseTime':'OpenTime']=value;\n      }\n    }\n\n    /* Make sure it's sorted */\n    for (let i=0; i < openHours.length; ++i){\n      /* Sometimes it's closed on monday meaning there's nothing at idx 0*/\n      if(typeof openHours[i]!=\"undefined\"){\n        let schedule=openHours[i];\n        schedule.sort((a, b)=> {\n          let aopen=parseInt(a.OpenTime.substring(0, 2));\n          let bopen=parseInt(b.OpenTime.substring(0, 2));\n          return aopen - bopen;\n        });\n      }\n    }\n\n    /* Group data set\n    Label can be:\n    First day - last day with same schedule\n    Every day */\n\n    open=typeof p.WorkingHours!='undefined' ? p.WorkingHours:openHours;\n    /** It's a hash, not an array **/\n    let ndaysopen=Object.keys(open).length;\n    let fromday=this.weekdaynames[0];\n    let previousTime='';\n    let hourshtml='';\n    let fromdayidx=0;\n    let toDay='';\n    /*-------*/\n\n    for (let i=0; i < 7; ++i){\n      let day=open[i];\n      let dayhtml='';\n      let today=this.weekdaynames[i];\n      dayhtml +=`<div class=\"sw-point-info-day\">`;\n      hourshtml='';\n      for (let j=0; day&&j < day.length; ++j){\n        let hours=day[j];\n        if(hours.OpenTime==null&&hours.CloseTime=='23:59'){\n          hourshtml +='24h';\n        }else{\n          hourshtml +=(hourshtml ? ' | ':'') + `<span>${hours.OpenTime ? hours.OpenTime:''} - ${hours.CloseTime ? hours.CloseTime:''}</span>`;\n        }\n      }\n\n      /** last day or different time, print last **/\n      if(previousTime&&previousTime!=hourshtml||i==6){\n        /** not a lot of sense in mon-mon*/\n        let isinterval=i - fromdayidx > 2;\n        let islast=i==6;\n        if(previousTime){\n          toDay=islast&&hourshtml==previousTime ? this.weekdaynames[i]:this.weekdaynames[i - 1];\n          dayhtml +=`<label>${(isinterval&&fromday ? fromday + ' - ':'') + toDay}:</label><span>${previousTime}</span></div>`;\n          openhtml +=dayhtml;\n        }\n        if(islast&&hourshtml&&hourshtml!=previousTime){\n          openhtml +=`<div class=\"sw-point-info-day\"><label>${this.weekdaynames[i]}:</label><span>${hourshtml}</span></div></div>`;\n        }\n        fromday=i < ndaysopen - 1 ? this.weekdaynames[i]:'';\n        fromdayidx=i;\n        previousTime=hourshtml;\n      }else{\n        previousTime=hourshtml;\n      }\n    }\n    if(!openhtml&&previousTime){\n      openhtml=`<label>${fromday} - ${this.weekdaynames[ndaysopen - 1]}: </label><span>${previousTime}</span></div>`;\n    }\n\n    /* / END LEGACY code ----------- */\n\n    console.log(\"Point\");\n    console.log(p);\n    let ePointInfo=jQuery(`<div class=\"sw-point-info ${extra_class}\">\n  <h4 class='sw-point-info-name'>${p.Information.Name}</h4>\n  <div class='sw-point-info-addr'>${local}</div>\n  ${p.Distance!==null ? `<div class='sw-point-info-distance'>` + GLS_distance + \" \" + ` ${p.Distance} ` + GLS_meter + \" \" + `</div>`:''}\n  <div class='sw-point-info-open'>${this.getWorkingDays(p.WorkingHours)}</div>\n</div>`);\n\n    /* Is there aditional information required?  */\n    if(typeof p.MapFieldsSelect!='undefined'){\n      let moreFields=p.MapFieldsSelect;\n      for (let k=0; k < moreFields.length; ++k){\n        ePointInfo.append(`<div class=\"sw-point-info-additional\"><label>${moreFields[k]}</label><input data-id=\"${moreFields[k]}\" class=\"GLS_mapfields${p.PointId}\" type=\"text\"  id=\"${moreFields[k]}${p.PointId}\"/></div>`);\n      }\n    }\n    let btn=jQuery(`<button class=\"sw-point-info-btn ${selected ? 'selected':''}\">${selected ? GLS_selected:GLS_select}</button>`);\n    btn.on('click', ()=> {\n      this.selectPoint(p);\n    });\n    ePointInfo.append(btn);\n    parentContainer.append(ePointInfo);\n  }\n  /**\n   * Append custom style\n   * @param string css - a string with the style to inject\n   */\n  addCustomStyle(css){\n    var style=document.createElement(\"style\");\n    style.type=\"text/css\";\n    if(style.styleSheet){\n      style.styleSheet.cssText=css;\n    }else{\n      style.appendChild(document.createTextNode(css));\n    }\n    document.getElementsByTagName(\"head\")[0].appendChild(style);\n  }\n  addMapHtml(){\n    console.log(\"ADD MAP HTML Options address\");\n    let addresstr='';\n    /* Ireland does not have postal codes */\n    if(this.options.address.Streetname1){\n      addresstr=this.options.address.PostalCode ? this.options.address.PostalCode:this.options.address.Streetname1;\n    }\n    let maphtml=`<div id=\"sw\">\n    <div id=\"sw__overlay\"></div>\n    <div id=\"sw__container\">\n      <div id=\"sw-search\">\n        <div id=\"sw-query-wrapper\">\n          <input type=\"text\" id=\"sw-query\" placeholder=\"${addresstr}\">\n        </div>\n        <div id=\"sw-query-results\"></div>\n        <div id=\"query-options\">\n        </div>\n      </div>\n      <div id=\"sw-display-options\">\n      </div> \n      <div id=\"sw-map-wrapper\" class=\"sw-tab selected\">\n        <div class=\"sw-query-results-description\"></div>\n        <div id=\"sw-map\" class=\"GLS-pickup__map\"></div>\n        <div id=\"sw-map-error\"></div> \n        <div id=\"sw-map-selected-point\"></div>\n      </div>  \n      <div class='sw-tab'>\n        <div class=\"sw-query-results-description\"></div>\n        <div id=\"sw-list-points\"></div>\n      </div>\n      <div id=\"sw-map-message\"></div>\n      <div id=\"sw-search-status\">\n        <div class=\"sw-loader\"><div></div><div></div><div></div></div>\n      </div>\n    </div>\n  </div>`;\n    jQuery(this.mapParentContainer).append(maphtml);\n    let displayOptions=jQuery(\"#sw-display-options\");\n    let optMap=jQuery(`<span class='sw-display-option selected'>` + GLS_map + `</span>`);\n    let optList=jQuery(`<span class='sw-display-option'\">` + GLS_list + `</span>`);\n    optMap.on('click', ()=> {\n      this.selectDisplayOption(0);\n    });\n    optList.on('click', ()=> {\n      this.selectDisplayOption(1);\n    });\n    displayOptions.append(optMap);\n    displayOptions.append(optList);\n    let queryopt=jQuery(\"#sw-query-wrapper\");\n    let searchbtn=jQuery(`<button id=\"sw-query-btn\"\">` + GLS_search + `</button>`);\n    queryopt.append(searchbtn);\n    searchbtn.on('click', ()=> {\n      this.geocodeQuery();\n    });\n    let queryinput=jQuery(\"#sw-query\");\n    queryinput.on('keyup', evt=> {\n      if(evt.keyCode==13){\n        this.geocodeQuery();\n      }\n      this.timeoutKeyDown&&clearTimeout(this.timeoutKeyDown);\n      this.timeoutKeyDown=setTimeout(()=> {\n        this.geocodeQuery();\n      }, 300);\n    });\n    jQuery(\"#sw__overlay\").click(()=> {\n      this.closeMap();\n    });\n  }\n  /**\n   * @param decimal lat\n   * @param decimal lng\n   */\n  centerMap(lat, lng){\n    this.mapinterface.centerMap(lat, lng);\n  }\n  /**\n   * Hide the map\n   */\n  closeMap(){\n    jQuery(\"#sw\").removeClass(\"open\");\n    jQuery('html,body').scrollTop(this.userScroll);\n  }\n  displayMessage(msg){\n    console.log(\"Message display\");\n    console.log(msg);\n    jQuery('#sw-map-message').addClass(\"open\");\n    if(msg.Id==99){\n      console.log(\"IF 99\");\n      jQuery('#sw-map-message').html(GLS_no_points_found);\n    }else{\n      jQuery('#sw-map-message').html(msg);\n    }\n  }\n  /**\n   * Display the possible option to the user in a list under the search input\n   */\n\n  //\n  // ##DJDJ Bpost stuff\n  displayPlaces(places){\n    console.log(11);\n    jQuery(\".sw-query-results-description\").html('');\n    this.queryResults=places;\n    let resultsContainer=jQuery(\"#sw-query-results\");\n\n    // ##DJDJ Ovde verovatno treba izmena da se odradi\n    console.log(\"Display places\");\n    console.log(places);\n    let html='';\n    for (let i=0; i < places.length; ++i){\n      if(typeof places[i].address.PostalCode!='undefined'){\n        console.log(\"Found place\");\n        html +=`<div class=\"sw-query-result\" data-idx=\"${i}\">${places[i].display_name}</div>`;\n      }\n    }\n    if(!html){\n      console.log(\"No place found\");\n      html=GLS_no_results;\n    }\n    console.log(22);\n    resultsContainer.html(html);\n    jQuery(\".sw-query-result\").on('click', evt=> {\n      console.log(33);\n      let idx=jQuery(evt.target).attr(\"data-idx\");\n      if(parseInt(idx)=='isNaN'||idx > this.queryResults.length){\n        console.log(\"invalid idx selected: \", idx);\n        return;\n      }\n      let place=this.queryResults[idx];\n      this.options.address.Lat=place.lat;\n      this.options.address.Long=place.lng;\n      console.log(\"selected \", this.queryResults[idx]);\n      jQuery(\"#sw-query-results\").html('');\n      jQuery(\"#sw-query\").val(place.display_name);\n      if(typeof place.address!='undefined'){\n        for (let prop in place.address){\n          if(place.address[prop]&&place.address[prop].length > 0){\n            this.options.address[prop]=place.address[prop];\n          }\n        }\n      }\n      this.options.address.Streetname1=place.address.Streetname1;\n      console.log(place.address, \"Address is now \", this.options.address);\n      this.fetchPoints(this.options.address);\n    });\n  }\n  hashLatLng(point){\n    let latstr=(point.lat + '').replace('.', '-');\n    let lngstr=(point.lng + '').replace('.', '-');\n    return 'r' + latstr + '_' + lngstr;\n  }\n  displayResults(data){\n    console.log(\"DisplayPoints22322\");\n    console.log(data);\n    this.mapinterface.clearMarkers();\n    jQuery(\"#sw__container\").removeClass('searching');\n    this.pickupPointsLoadStop();\n    jQuery(\".sw-query-results-description\").html(\"<div class='sw-query-results-description'>\" + GLS_the + data.Count + GLS_closest + \"</div>\");\n\n    // ##DJDJ WP exclusive issue because of this\n    setTimeout(()=> {\n      this.pickupPoints=data.Point;\n      this.mapChanged=Date.now();\n      this.updateList(this.pickupPoints);\n      this.mapinterface.addMarkers(this.pickupPoints, idx=> {\n        console.log(\"Added markers\");\n        let parent=jQuery(\"#sw-map-selected-point\");\n        parent.html(\"\");\n        this.addPointInfo(this.pickupPoints[idx], 0, '', parent);\n        console.log(\"added point info\");\n        this.mapinterface.selectPoint(idx);\n        console.log(\"After select point break\");\n      });\n    }, 100);\n  }\n  /***\n   * Get Points from the API and display them\n   **/\n  fetchPoints(address, fresolve){\n    // ##DJDJ Ako je block ovo ne treba, ako nije onda treba\n    if(!this.isBlockCheckout()){\n      this.carrier_id=jQuery('#shipping_carrier_id').val();\n      this.setCarrierId(jQuery('#shipping_carrier_id').val());\n    }\n    address.Country=jQuery('#shipping-country').val();\n\n    // ##DJDJ Ovo dole u else je visak izgleda\n    // else {\n    //     this.setCarrierId(this.carrier_id);\n    // }\n    console.log(\"FetchPoints232222\");\n    // ##DJDJ Ovde si stao, treba se proslediti carrier id nekako\n    console.log(address);\n    console.log(this.carrier_id);\n    this.selectedPoint=null;\n    jQuery(\"#sw-map-selected-point\").html('');\n    jQuery('#sw-map-message').removeClass('open');\n    jQuery(\".sw-query-results-description\").html('');\n    if(!this.mapinterface.isMapMoving()){\n      jQuery(\"#sw__container\").addClass('searching');\n    }\n    if(typeof this.cacheResults[this.hashLatLng({\n      lat: this.options.address.Lat,\n      lng: this.options.address.Long\n    })]!=\"undefined\"){\n      console.log(\"OVDEEEEE\");\n      this.displayResults(this.cacheResults[this.hashLatLng({\n        lat: this.options.address.Lat,\n        lng: this.options.address.Long\n      })]);\n    }\n    let req={\n      \"Address\": address,\n      \"CarrierId\": this.carrier_id,\n      'action': 'GLS_pickup_locations'\n    };\n    jQuery.getJSON(this.options.ajax_url, req, data=> {\n      console.log(\"Caoaooo nasaooo\");\n      console.log(this.options.ajax_url);\n      this.mapinterface.clearMarkers();\n      console.log(data);\n      /* We have the points remove the loader */\n      this.pickupPointsLoadStop();\n      jQuery(\"#sw-map-wrapper\").removeClass('loading');\n      this.searchRunning=false;\n      jQuery(\"#sw__container\").removeClass('searching');\n      this.searchRunning=false;\n      if(data.Error&&data.Error.Id!=0){\n        this.displayMessage(data.Error);\n      }\n      if(data.Point){\n        if(data.Point.length > 0){\n          this.cacheResults[this.hashLatLng({\n            lat: this.options.address.Lat,\n            lng: this.options.address.Long\n          })]=data;\n          this.displayResults(data);\n        }else{\n          this.displayMessage(GLS_no_points_found);\n        }\n      }\n      if(typeof fresolve!='undefined'){\n        /* We want to make sure changes are commited to the dom before we declare we're done */\n        setTimeout(()=> {\n          fresolve();\n        }, 300);\n      }\n    }).fail(err=> {\n      this.displayMessage(GLS_no_points_found);\n      console.log(\"Fatal error widget requesting points do we have an API bug?\", err.responseText);\n    });\n  }\n  geocodeQuery(){\n    jQuery(\"#sw-query-results\").html('');\n    console.log(\"Geocode query\");\n    let queryval=jQuery(\"#sw-query\").val();\n    console.log(queryval);\n    this.options.address.Lat=null;\n    this.options.address.Long=null;\n    if(queryval.length < 4){\n      return;\n    }\n    console.log(\"OVOTITREBA\");\n    console.log(this.options.address);\n    console.log(this.mapinterface);\n    console.log(\"OVDE COUNTRY\");\n    if(jQuery('#components-form-token-input-0').length){\n      this.options.address.Country=jQuery('#components-form-token-input-0').val();\n    }else if(jQuery(\"#shipping-country option:selected\").length){\n      this.options.address.Country=jQuery(\"#shipping-country option:selected\").text();\n    }else if(jQuery('#shipping-country').length > 0){\n      this.options.address.Country=jQuery('#shipping-country option:selected').text();\n    }else if(jQuery('#select2-billing_country-container').length > 0){\n      this.options.address.Country=jQuery('#select2-billing_country-container').text();\n    }\n    if(GLS_PLUGIN_URL.includes('Bpost')&&(this.options.address.Country=='BE'||this.options.address.Country=='be'||this.options.address.Country=='Belgium')){\n      this.mapinterface.geocodeBpost({\n        \"address\": queryval,\n        \"country\": 'BE'\n      }, resp=> {\n        console.log(\"Geocodeeee\");\n        console.log(resp);\n        this.displayPlaces(resp);\n      });\n    }else{\n      this.mapinterface.geocode({\n        \"address\": queryval,\n        \"country\": this.options.address.Country\n      }, resp=> {\n        console.log(\"Geocodeeee\");\n        console.log(resp);\n        this.displayPlaces(resp);\n      });\n    }\n  }\n  /**\n   *\n   * @param shippingData, the address parts\n   * @param f_callback , the function to call when all mighty google returns a result\n   */\n  geocodeAddress(address, f_callback){\n    console.log(address);\n    console.log(\"GEOCODEADDRESS\");\n    if(address.country=='Portugal'&&typeof missingZipPT!='undefined'){\n      /* Is this a postal code we know is not geocodable in nominatim? */\n      let zip4dig=address.postcode.substring(0, 4);\n      for (let i=0; i < missingZipPT.length; ++i){\n        if(missingZipPT[i].zipcode==zip4dig){\n          this.queryResults=[{\n            display_name: missingZipPT[i].display_name,\n            lat: missingZipPT[i].lat,\n            lng: missingZipPT[i].lng,\n            address: {\n              street: \"street\",\n              postcode: address.postcode,\n              city: missingZipPT[i].display_name,\n              country_code: address.country\n            }\n          }];\n          console.log(this.queryResults);\n          f_callback(this.queryResults);\n          return;\n        }\n      }\n    }\n    console.log(\"Nije reseno\");\n    console.log(this.mapinterface);\n    console.log(\"ADRESA\");\n    console.log(address);\n    if(GLS_PLUGIN_URL.includes('Bpost')&&(address.Country=='BE'||address.Country=='be'||address.Country=='Belgium')){\n      this.mapinterface.geocodeAddressPartsBpost(geocode=> {\n        if(!geocode.lat){\n          return this.mapinterface.geocodeAddressPartsBpost(geocode=> {\n            f_callback(geocode);\n          }, address.City, address.Country);\n        }\n        f_callback(geocode);\n      }, address.City, address.Country, address.PostalCode, address.Streetname1);\n    }else{\n      this.mapinterface.geocodeAddressParts(geocode=> {\n        if(!geocode.lat){\n          return this.mapinterface.geocodeAddressParts(geocode=> {\n            f_callback(geocode);\n          }, address.City, address.Country);\n        }\n        f_callback(geocode);\n      }, address.City, address.Country, address.PostalCode, address.Streetname1);\n    }\n  }\n  mapMoved(mapcenter){\n    jQuery(\"#sw-point-info\").html(\"\");\n    return new Promise((resolve, reject)=> {\n      this.options.address.Lat=mapcenter.lat;\n      this.options.address.Long=mapcenter.lng;\n      this.fetchPoints(this.options.address, resolve);\n    });\n  }\n  loadLabels(fcallback){\n    jQuery.getJSON(this.options.ajaxLoadLabels, resp=> {\n      this.options.labels=resp;\n      fcallback(resp);\n    }).fail(err=> {\n      console.log(\"error fetching widget labels at \" + this.options.ajaxLoadLabels, err);\n    });\n  }\n  loadScripts(){\n    console.log(\"Load scripts widget\");\n    /* not defined or version < 1.7 compare only subversion for simplicity **/\n    if(typeof jQuery=='undefined'||parseInt(jQuery.fn.jquery.substring(2, 2)) < 7){\n      console.log(\"Load scripts widget if\");\n      var me=this;\n      this.loadScript('https://code.jquery.com/jquery-3.7.0.min.js', function (){\n        me.scriptsLoaded();\n        if(me.options.oninit){\n          me.options.oninit();\n        }\n      });\n    }else{\n      console.log(\"jquery is widget loaded bootstrap\");\n      this.scriptsLoaded();\n      if(this.options.oninit){\n        this.options.oninit();\n      }\n    }\n  }\n  /**\n   * @param String url - the url of the script to load\n   * @param String callback - the name of the function to call after the script is loaded\n   */\n  loadScript(url, callback){\n    console.log(\"Load Script widget singular\");\n    var script=document.createElement(\"script\");\n    script.type=\"text/javascript\";\n    if(script.readyState){\n      /*IE */\n      script.onreadystatechange=()=> {\n        if(script.readyState=='loaded'||script.readyState=='complete'){\n          script.onreadystatechange=null;\n          calback&&callback();\n        }\n      };\n    }else{\n      script.onload=()=> {\n        callback&&callback();\n      };\n    }\n    script.src=url;\n    document.getElementsByTagName(\"head\")[0].appendChild(script);\n  }\n  /**\n   * @param string url\n   */\n  static loadStyle(url){\n    console.log(\"LOADDDDD TESTTTTTTT\");\n    var style=document.createElement('link');\n    style.rel='stylesheet';\n    style.href=url;\n    document.getElementsByTagName('head')[0].appendChild(style);\n  }\n  log(msg, force){\n    if(!force&&!this.options.debug){\n      return;\n    }\n    console.log(msg);\n  }\n  /**\n   * clear any ui elements that result from selection and other state variables\n   */\n  resetMapElements(){\n    this.selectedPoint=null;\n    jQuery(\"#sw-map-selected-point\").html('');\n    jQuery('#sw-map-message').removeClass('open');\n    jQuery(\".sw-query-results-description\").html('');\n  }\n  openMap(){\n    console.log(\"Open map widget23222222666666\");\n    if(!this.isBlockCheckout()){\n      var platform=new Woocommerce();\n      this.options.address=platform.getShippingData().Address;\n    }\n\n    // console.log(this.carrier_id);\n    this.userScroll=jQuery('html,body').scrollTop();\n    jQuery('html,body').scrollTop(0);\n    jQuery(\"#sw\").addClass(\"open\");\n    jQuery(\"#sw-map-wrapper\").addClass('loading');\n    console.log(\"Ovdeee 1\");\n    jQuery(\"#sw-query\").val(this.options.address.Streetname1);\n    this.selectDisplayOption(0);\n    console.log(\"Ovdeee 3\");\n    console.log(this.options.address);\n    if(this.options.address.Streetname1){\n      console.log(\"Ima ulicu\");\n      if(!this.options.address.lat){\n        console.log(\"Nema lat\");\n        this.geocodeAddress(this.options.address, geo=> {\n          console.log(\"GEOOOOOOOO\");\n          console.log(geo);\n          geo.length&&(geo=geo[0]);\n          this.options.address.Lat=geo.lat;\n          this.options.address.Long=geo.lng;\n          console.log(\"GEOCODE222\");\n          console.log(this.options.address);\n          this.fetchPoints(this.options.address);\n        });\n      }else{\n        console.log(\"Nema ulicu i ide u fetch\");\n        this.fetchPoints(this.options.address);\n      }\n    }\n  }\n  getShippingData(){\n    let shippingData=[];\n    this.getBlockShippingData();\n    shippingData[\"Address\"]=this.options.address;\n    // shippingData[\"CarrierId\"]=this.carrier_id;\n    return shippingData;\n  }\n  getBlockShippingData(){\n    var address=jQuery('#shipping-address_1').val();\n    var apartment=jQuery('#shipping-address_2').val();\n    var city=jQuery('#shipping-city').val();\n    var postalCode=jQuery('#shipping-postcode').val();\n\n    // Extracting Country\n    var country=jQuery('#components-form-token-input-0').val();\n    if(country==\"\"){\n      console.log(\"COUNTRY EMPTY\");\n      jQuery('input[aria-label*=\"Country/Region\"]').each(function (){\n        country=jQuery(this).val();\n      });\n    }else if(country==\"\"){\n      country=jQuery('#shipping-country option:selected').text();\n    }\n    console.log(\"BLOCK SHIPPING DATA ON GET BLOCK SHIPPING DATA\");\n    console.log(country);\n    window.GLS_shipping_address={\n      \"Address\": {\n        \"Lat\": \"\",\n        \"Long\": \"\",\n        \"Streetname1\": address,\n        \"Streetname2\": '',\n        \"HouseNumber\": apartment,\n        \"NumberExtension\": '',\n        \"PostalCode\": postalCode,\n        \"s_postcode\": postalCode,\n        \"City\": city,\n        \"Country\": country,\n        \"State\": ''\n      }\n    };\n    this.options.address=window.GLS_shipping_address.Address;\n  }\n  pickupPointsLoadStop(){\n    jQuery(\"#sw-map-wrapper\").removeClass('loading');\n    this.searchRunning=false;\n  }\n  /**\n   *  Resets the selected point to null\n   **/\n  resetSelection(){\n    this.selectedPoint=null;\n  }\n  selectPoint(pickup){\n    console.log(\"Select POINT\");\n    console.log(pickup);\n    this.selectedPoint=pickup;\n    if(jQuery('#GLS-pickup__description').length&&jQuery('#GLS-pickup__description').is(':hidden')){\n      jQuery('#GLS-pickup__description').show();\n    }\n    if(jQuery('.GLS-pickup__description').length&&jQuery('.GLS-pickup__description').is(':hidden')){\n      jQuery('.GLS-pickup__description').show();\n    }\n    localStorage.setItem('GLSPointId', pickup.PointId);\n    localStorage.setItem('GLSPointLabel', pickup.Information.Name);\n\n    /** What view are we on ? **/\n    let eFieldInfo=jQuery(\"#sw-map-selected-point\");\n    if(this.selectedDisplayOption==1){\n      eFieldInfo=jQuery(\"#sw-list-points\");\n    }\n    /* Validate if this point requires aditional info that's not present fail here */\n    if(typeof pickup.MapFieldsSelect!='undefined'&&pickup.MapFieldsSelect.length > 0){\n      let extrasValid=true;\n      eFieldInfo.find('.GLS_mapfields' + pickup.PointId).each((idx, elem)=> {\n        let eExtra=jQuery(elem);\n        if(!eExtra.val()){\n          alert(jQuery(jQuery('.GLS_mapfieldslabel' + pickup.PointId).get(idx)).text() + ': ' + this.options.labels.mapfieldmandatory);\n          extrasValid=false;\n        }\n      });\n      if(!extrasValid){\n        console.log(\"point selection widget is not valid, ignoring\");\n        return false;\n      }\n    }\n    console.log(jQuery(\".GLS-pickup__description\"));\n    jQuery(\".GLS-pickup__description\").html(pickup.Information.Name + \" \" + pickup.Information.Address);\n    const pickupPoint={\n      id_carrier: this.carrier_id,\n      pickup_id: this.selectedPoint.PointId,\n      pickup_label: (this.selectedPoint.Information.Name ? this.selectedPoint.Information.Name + '<br/>':'') + this.selectedPoint.Information.Address,\n      action: 'GLS_save_pickup'\n    };\n\n    /*Is there extra info we want to append? */\n    eFieldInfo.find(\".GLS_mapfields\" + this.selectedPoint.PointId).each(function (idx, elem){\n      let fieldid=jQuery(elem).attr('data-id');\n      let fieldvalue=jQuery(elem).val();\n      pickupPoint['OptionFields'].push({\n        Id: fieldid,\n        Value: fieldvalue\n      });\n      localStorage.setItem(fieldid + 'val', fieldvalue);\n    });\n    if(typeof this.options.ajax_url=='undefined'){\n      console.log(\"Ovdeeee\");\n      this.options.onPointSelected(pickup, '');\n    }else{\n      this.platform.setPickupPoint(pickup);\n    }\n    this.closeMap();\n    jQuery(\"#myModal\").hide();\n    jQuery('#place_order').prop('disabled', false);\n    jQuery('#pickupText').hide();\n    return true;\n  }\n  /**\n   *  A Point was selected\n   *  @param idx - integer the selected index\n   **/\n  selectPointFromList(idx){\n    if(idx > this.pickupPoints.length||idx < 0){\n      console.log(\"pointSelected invalid widget index \" + idx, 1);\n      return;\n    }\n    this.selectPoint(this.pickupPoints[idx]);\n  }\n  /***\n   * Select the display option\n   * @param idx - int -  0: map, 1: list\n   */\n  selectDisplayOption(idx){\n    console.log(\"SELECTDISPOPTION\");\n    console.log(idx);\n    let eoptions=jQuery(\".sw-display-option, .sw-tab\");\n    this.selectedDisplayOption=idx;\n    eoptions.removeClass('selected');\n    jQuery(eoptions.get(idx)).addClass('selected');\n    jQuery(jQuery(\".sw-tab\").get(idx)).addClass('selected');\n    if(idx==0&&typeof this.mapinterface!='undefined'&&this.mapinterface.pickupPoints.length > 0){\n      this.mapinterface.fitBounds();\n    }\n  }\n  /**\n   * Reset the labels initially sent with options\n   */\n  setLabels(labels){\n    this.options.labels=labels;\n  }\n  setWeekdayNames(weekdaynames){\n    this.weekdaynames=weekdaynames;\n  }\n  setCarrierId(carrier_id){\n    console.log(\"Setcarrierid\");\n    console.log(carrier_id);\n    this.carrier_id=carrier_id;\n    console.log(this.mapinterface);\n    this.mapinterface.setCarrierId(carrier_id);\n  }\n  /**\n   * @param address - object in the same format as we send to the API\n   *\n   **/\n  setAddress(address){\n    if(!address.Streetname1||!address.Name){\n      console.log(\"invalid address widget \");\n      return;\n    }\n    this.options.address=address;\n    localStorage.setItem('GLSAddress', JSON.stringify(address));\n  }\n  /**\n   * Called when load scripts ends we must grant that jquery exists\n   */\n  scriptsLoaded(){\n    this.eSearchStatus=jQuery(\"#search-status\");\n    this.addMapHtml();\n    if(this.options.gmapskey){\n      this.mapinterface=new GLS_gmaps(this.options, this);\n    }else{\n      this.mapinterface=new GLSOpenMap(this.options, this);\n    }\n    this.mapinterface.initMap();\n    this.mapinterface.addMapMoveListener(mapcenter=> {\n      return this.mapMoved(mapcenter);\n    });\n  }\n  updateList(points){\n    jQuery(\"#sw-list-points\").html('');\n    let parent=jQuery(\"#sw-list-points\");\n    for (let i=0; i < points.length; ++i){\n      this.addPointInfo(points[i], 0, '', parent);\n    }\n  }\n  disableButton(){\n    jQuery('.wc-block-components-checkout-place-order-button').prop('disabled', true);\n\n    // Add CSS styles for the disabled state\n    jQuery('.wc-block-components-checkout-place-order-button').css({\n      'background-color': 'grey',\n      'cursor': 'not-allowed',\n      'opacity': '0.5' // Optional: to give it a more disabled look\n    });\n  }\n  enableButton(){\n    jQuery('.wc-block-components-checkout-place-order-button').prop('disabled', false);\n\n    // Reset CSS styles for the enabled state\n    jQuery('.wc-block-components-checkout-place-order-button').css({\n      'background-color': 'black',\n      'cursor': 'pointer',\n      'opacity': '1' // Reset opacity to make it fully visible\n    });\n  }\n  getShippingMethodChenge(){\n    jQuery(document).ready(()=> {\n      jQuery(\"#GLS_pickup_button\").remove();\n      var checkVisibility=setInterval(()=> {\n        var inputElement=jQuery(\"input[name='radio-control-0']\");\n        if(inputElement.is(':visible')){\n          // The input element is visible, you can proceed with your script\n          clearInterval(checkVisibility); //\n          inputElement.on('change', ()=> {\n            console.log(\"Shipping method changed222222222222222\");\n            let aria=jQuery(\"input[name='radio-control-0']:checked\").attr('aria-describedby');\n            let regex=/shipping_GLS_[0-9]+:[0-9]+/;\n\n            // Find the match using the regular expression\n            let match=aria.match(regex);\n            if(match==null){\n              return;\n            }\n            let req={\n              'action': 'GLS_selected_carrier_from_list',\n              'selected_carrier_code': match[0]\n            };\n            jQuery.getJSON(this.options.ajax_url, req, data=> {\n              console.log(\"Vrati ga kralju\");\n              console.log(data);\n              this.carrier_id=data.carrier_id;\n              window.carrier_id=data.carrier_id;\n              console.log(123);\n              jQuery(\"#GLS_pickup_button\").remove();\n\n              // If not visible, add the button back\n              let inputElement=jQuery(\".wc-block-components-shipping-rates-control__package\");\n\n              // ##DJDJ Ovdeee isto trazi po variabli GLS_choose_pickup_location ako se pokvari nesto. Proveriti sutra;\n              let button=jQuery(\"<button class='button alt GLS-pick-location' type='button' id='GLS_pickup_button' onClick='GLS.getPickupLocations(event)'>\" + GLS_choose_pickup_location + \"</button>\");\n              inputElement[0].append(button[0]); // Adjust the target container if necessary\n            });\n          });\n        }\n      });\n    });\n  }\n  getNotBlockFormChange(){\n    jQuery('form[name=\"checkout\"] input').change(function (){\n      // var fieldName=jQuery(this).attr('name');\n      var platform=new Woocommerce();\n      this.options.address=platform.getShippingData();\n      console.log(this.options.address);\n      console.log(\"Form changed\");\n    });\n  }\n  getWorkingDays(workingHours){\n    if(!workingHours){\n      return '';\n    }\n    const dayGroups=[];\n    let htmlHours='';\n    for (let day=0; day < 7; day++){\n      if(workingHours[day]){\n        const hourString=this.formatWorkingHours(workingHours[day]);\n        const lastGroup=dayGroups[dayGroups.length - 1];\n        if(lastGroup&&lastGroup.hours===hourString&&lastGroup.end + 1===day){\n          lastGroup.end=day;\n        }else{\n          dayGroups.push({\n            start: day,\n            end: day,\n            hours: hourString\n          });\n        }\n      }\n    }\n    dayGroups.forEach(group=> {\n      /** Valid hour intervals must contain at least one number **/\n      if(group.hours.match(/\\d+/)!==null){\n        const dayRange=group.start===group.end ? this.getDayName(group.start):`${this.getDayName(group.start)} - ${this.getDayName(group.end)}`;\n        htmlHours +=`<div class=\"sw-point-info-day\" style=\"margin-bottom: -10px\"><label>${dayRange}</label>: ${group.hours}</div>`;\n      }\n    });\n    return htmlHours;\n  }\n  formatWorkingHours(hourIntervals){\n    return hourIntervals.map(hour=> {\n      return hour.OpenTime&&hour.CloseTime ? `${hour.OpenTime} - ${hour.CloseTime}`:'';\n    }).filter(Boolean).join(\" | \");\n  }\n  getDayName(day){\n    return this.weekdaynames[day];\n  }\n}\n/* harmony default export */ const GLS_widget=(GLSWidget);\n;// CONCATENATED MODULE: ./shiptmize.js\n\n\n\n\n/** \n * Class GLS depends on jQuery. \n * Check if we are meant to append a map \n * \n * Platform dependent functions marked with   * @platformDependent \n */\nclass GLS {\n  constructor(ajax_url){\n    console.log(\"GLSCONSTRUCT\");\n    this.markers=[]; //pickup {lat, lng} \n    this.isMapLoaded=false;\n    this.gmaps_key=typeof GLS_maps_key=='undefined' ? '':GLS_maps_key;\n    this.openMapMarkerIcons={};\n    this.ajax_url=ajax_url; // platform dependent \n\n    this.platform=new Woocommerce(this.ajax_url);\n    this.platform.isCheckout();\n    this.init();\n  }\n  init(){\n    console.log(\"Entered init\");\n    this.GLSWidget=new GLS_widget({\n      \"host\": 'https://GLS.me',\n      \"address\": this.platform.getShippingData().Address,\n      \"labels\": {},\n      \"mapParentContainer\": 'body',\n      \"buttonParentContainer\": 'body',\n      \"buttonClass\": '',\n      \"ajax_url\": this.ajax_url,\n      \"carrierId\": this.platform.getShippingData().CarrierId,\n      \"onPointSelected\": ()=> {},\n      \"gmapskey\": typeof GLS_maps_key=='undefined' ? '':GLS_maps_key\n    });\n    this.GLSWidget.init();\n    console.log(\"Finished init\");\n  }\n  getPickupLocations(evt){\n    this.GLSWidget.openMap();\n  }\n}\njQuery(function (){\n  if(typeof woocommerce_params!='undefined'){\n    window.GLS=new GLS(woocommerce_params.ajax_url);\n  }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBQyxNQUFNO01BQzlCLGFBQWEsRUFBRSxFQUFFO01BQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMxQyxRQUFRO01BQ3pCLFdBQVcsRUFBRSxJQUFJLENBQUNzUSxRQUFRLENBQUN2UCxlQUFlLENBQUMsQ0FBQyxDQUFDMmdCLFNBQVM7TUFDdEQsaUJBQWlCLEVBQUVuQyxDQUFBLEtBQU0sQ0FBQyxDQUFDO01BQzNCLFVBQVUsRUFBRSxPQUFPaUMsbUJBQW9CLElBQUksV0FBVyxHQUFJLEVBQUUsR0FBR0E7SUFDbkUsQ0FBQyxDQUFDO0lBQ0YsSUFBSSxDQUFDdlUsZ0JBQWdCLENBQUNrSixJQUFJLENBQUMsQ0FBQztJQUM1QmpXLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLGVBQWUsQ0FBQztFQUNoQztFQUVBd2hCLGtCQUFrQkEsQ0FBQ3RHLEdBQUcsRUFBRTtJQUNwQixJQUFJLENBQUNwTyxnQkFBZ0IsQ0FBQ3FSLE9BQU8sQ0FBQyxDQUFDO0VBQ25DO0FBRUo7QUFFQWxlLE1BQU0sQ0FBQyxZQUFXO0VBQ2QsSUFBRyxPQUFPd2hCLGtCQUFtQixJQUFJLFdBQVcsRUFBQztJQUN6Q2xpQixNQUFNLENBQUM0RCxVQUFVLEdBQUcsSUFBSStkLFVBQVUsQ0FBQ08sa0JBQWtCLENBQUM1aEIsUUFBUSxDQUFDO0VBQ25FO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL2pzL3NoaXB0aW1pemUtdXRpbHMuanM/MDBkNCIsIndlYnBhY2s6Ly9zaGlwdGltaXplLy4vanMvc2hpcHRpbWl6ZS13b28tY29tbWVyY2UuanM/MmNmOSIsIndlYnBhY2s6Ly9zaGlwdGltaXplLy4vanMvc2hpcHRpbWl6ZS1vcGVuLW1hcC5qcz84OWMxIiwid2VicGFjazovL3NoaXB0aW1pemUvLi9qcy9zaGlwdGltaXplLWdtYXBzLmpzPzBiZjEiLCJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL2pzL3NoaXB0aW1pemUtd2lkZ2V0LmpzP2RkOWEiLCJ3ZWJwYWNrOi8vc2hpcHRpbWl6ZS8uL3NoaXB0bWl6ZS5qcz82OWM3Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2UgY2FuIHVzZSBmb3IgcGxhdGZvcm0gaW5kZXBlbmRlbnQgc3R1ZmYgXG4gKi9cbmNsYXNzIFNoaXB0aW1pemVVdGlscyB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcblxuICAgIH1cblxuXG4gICAgLyoqIFxuICAgICAqIEluamVjdCBTY3JpcHQgaW50byB0aGUgcGFnZSBcbiAgICAgKiBAcGFyYW0gc3RyaW5nIHNyYyBcbiAgICAgKi9cbiAgICBpbmplY3RFeHRlcm5hbFNjcmlwdChzcmMpIHtcbiAgICAgICAgbGV0IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICBzLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpO1xuICAgIH1cblxuXG4gICAgLyoqIFxuICAgICAqIEluamVjdCBhIHNjcmlwdCBzdHJpbmcgXG4gICAgICovXG4gICAgaW5qZWN0U2NyaXB0KGNvbnRlbnRzKSB7XG4gICAgICAgIGxldCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgZS52YWx1ZSA9IGNvbnRlbnRzO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xuICAgIH1cblxuICAgIC8qKiBcbiAgICAgKiBSZW1vdmVzIGFsbCBub3QgbnVtZXJpYyBjaGFycyBmcm9tIHRoZSBzdHJpbmcgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RyaW5nIHN0cmluZyAtIHRoZSBpbnB1dCBzdHJpbmcgXG4gICAgICogQHJldHVybiB0aGUgc3RyaW5nIHdpdGhvdXQgY2hhcnMgdGhhdCBhcmUgbm90IG51bWJlcnMgXG4gICAgICovXG4gICAgcmVtb3ZlTm9uTnVtZXJpYyhzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXEQvZywgJycpO1xuICAgIH1cblxuICAgIC8qKiBcbiAgICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gdXJsIGV4aXN0cyBhbmQgaXMgdmFsaWRcbiAgICAgKiBXZSB1c2UgdGhpcyB0byBjaGVjayBpZiB0aGUgY2FycmllciBpY29uIGV4aXN0cyBnaXZlbiBcbiAgICAgKiBhIHVybCBwYXRoIGFuZCB0aGUgbmFtaW5nIGNvbnZlbnRpb24ge2NhcnJpZXJfaWR9LnN2ZyBcbiAgICAgKiBNYWtlIHN1cmUgdGhlIGNvcnJlY3QgcHJvdG9jb2wgaXMgYXBwZW5kZWQgdG8gdGhlIHVybCBodHRwICE9IGh0dHBzIFxuICAgICAqIFxuICAgICAqIEByZXR1cm4gdHJ1ZSBpdCB0aGUgdXJsIGV4aXN0cyBhbmQgaXMgdmFsaWQgXG4gICAgICovIFxuICAgIGlzVXJsVmFsaWQodXJsKSB7XG4gICAgICAgIHZhciBodHRwID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIGh0dHAub3BlbignSEVBRCcsIHVybCwgZmFsc2UpO1xuICAgICAgICBodHRwLnNlbmQoKTtcbiAgICAgICAgcmV0dXJuIGh0dHAuc3RhdHVzID09IDIwMDtcbiAgICB9XG5cbiAgICAvKiogXG4gICAgICogT3BlbiBhIG5ldyB3aW5kb3cgd2l0aCB0aGUgcHJvdmlkZWQgVVJMIFxuICAgICAqIEBzdHJpbmcgdXJsIFxuICAgICAqIEByZXR1cm4gYm9vbCBpZiB0aGUgd2luZG93IHdhcyBvcGVuZWQsIGZhbHNlIGlmIHBvcHVwIGJsb2NrZXIgZW5hYmxlZCBcbiAgICAgKi8gIFxuICAgIG9wZW5OZXdXaW5kb3codXJsLCBvcHRpb25zKXtcbiAgICAgICAgbGV0IG5ld1dpbiA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycsIG9wdGlvbnMpOyBcbiAgICAgICAgbGV0IGJsb2NrZWQgPSAhbmV3V2luIHx8IG5ld1dpbi5jbG9zZWQgfHwgdHlwZW9mIG5ld1dpbi5jbG9zZWQ9PSd1bmRlZmluZWQnOyBcblxuICAgICAgICByZXR1cm4gIWJsb2NrZWQ7IFxuICAgIH1cbn1cblxuXG5sZXQgdXRpbHMgPSBuZXcgU2hpcHRpbWl6ZVV0aWxzKCk7XG5leHBvcnQgZGVmYXVsdCB1dGlsczsiLCJpbXBvcnQgVXRpbHMgZnJvbSAnLi9zaGlwdGltaXplLXV0aWxzLmpzJzsgXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvb2NvbW1lcmNlIHtcblxuICAgIGNvbnN0cnVjdG9yKGFqYXhfdXJsID0gXCJcIikge1xuICAgICAgICB0aGlzLmFqYXhfdXJsID0gYWpheF91cmw7XG4gICAgfVxuXG4gICAgLyoqIFxuICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIHRoZSBjaGVja291dCBwYWdlIFxuICAgICAqL1xuICAgIGlzQ2hlY2tvdXQoKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQ2hlY2tvdXRcIik7XG4gICAgICAgIHJldHVybiBqUXVlcnkoXCJib2R5XCIpLmhhc0NsYXNzKCd3b29jb21tZXJjZS1jaGVja291dCcpO1xuICAgIH1cblxuICAgIC8qIFxuICAgICAqIElmIHRoZXJlIGlzIG9ubHkgb25lIG1ldGhvZCBhdmFpbGFibGUgd29vIHdpbGwgdXNlIGEgaGlkZGVuIGZpZWxkIGZvciB0aGUgc2VsZWN0ZWQgY2FycmllciBcbiAgICAgKiAgKyBHZW5lcmljIE1ldGhvZHMgZG8gbm90IGhhdmUgYW4gaW5zdGFuY2UgaWQgXG4gICAgICovIFxuICAgIGdldFNoaXBwaW5nTWV0aG9kSWQoKXtcblxuICAgICAgICBsZXQgZUNoZWNrYm94ID0galF1ZXJ5KFwiaW5wdXRbbmFtZT0nc2hpcHBpbmdfbWV0aG9kWzBdJ106Y2hlY2tlZFwiKTtcbiAgICAgICAgbGV0IGVIaWRkZW4gPSBqUXVlcnkoXCJpbnB1dFtuYW1lPSdzaGlwcGluZ19tZXRob2RbMF0nXVwiKTtcblxuICAgICAgIC8vIGVDaGVja2JveGVzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgLy8gICAgIGNvbnNvbGUubG9nKFwiQ2Fvb29vb1wiKVxuICAgICAgIC8vIH0pO1xuICAgICAgICBsZXQgc2hpcHBpbmdNZXRob2QgPSAgZUNoZWNrYm94Lmxlbmd0aCA+IDAgPyBlQ2hlY2tib3gudmFsKCkgOiBlSGlkZGVuLnZhbCgpIDtcblxuXG4gICAgICAgIGlmICggc2hpcHBpbmdNZXRob2QuaW5kZXhPZignOicpID4gMCApe1xuICAgICAgICAgICAgdmFyIG1ldGhvZF9wYXJ0cyA9IHNoaXBwaW5nTWV0aG9kLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICByZXR1cm4gVXRpbHMucmVtb3ZlTm9uTnVtZXJpYyhtZXRob2RfcGFydHNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBzaGlwcGluZ01ldGhvZDtcbiAgICAgICAgfSBcbiAgICB9XG5cbiAgICAvKiogXG4gICAgICogV29yZHByZXNzIHdvbid0IHNlbmQgc2Vzc2lvbiBjb29raWVzIHRvIHdwLWFkbWluIGFuZCB0aGUgc2Vzc2lvbiBoYW5kbGluZyBpbiB3b29jb21tZXJjZSBpcyBzbyBwb29ybHkgZG9jdW1lbnRlZCB3ZSBhcmUgYmV0dGVyIG9mZiBcbiAgICAgKiBleHRyYWN0aW5nIG5lY2Vzc2FyeSBpbmZvIGNsaWVudCBzaWRlIG91ciBzZWx2ZXMuIFdlJ3JlIGVtdWxhdGluZyB0aGVpciBjaGVja291dC5qcyBcbiAgICAgKiBAcmV0dXJuIGFuIG9iamVjdCBjb250YWluaW5nIGFkZHJlc3MgcGFydHMgXG4gICAgICovXG4gICAgZ2V0U2hpcHBpbmdEYXRhKCkge1xuXG4gICAgICAgIC8vICMjREpESiBWZXJvdmF0bm8gc2FtbyBvdmRlIHRyZWJhIGRhIHNlIGl6bWVuaSBpIHBvdnVrdSBwb2RhY2kgc2EgcHJhdmloIGlkamV2YSB6YSBpbnB1dCB0ZXh0XG4gICAgICAgIHZhciBjb3VudHJ5ID0galF1ZXJ5KCcjYmlsbGluZ19jb3VudHJ5JykudmFsKCksXG4gICAgICAgICAgICBzdGF0ZSA9IGpRdWVyeSgnI2JpbGxpbmdfc3RhdGUnKS52YWwoKSxcbiAgICAgICAgICAgIHBvc3Rjb2RlID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX3Bvc3Rjb2RlJykudmFsKCksXG4gICAgICAgICAgICBjaXR5ID0galF1ZXJ5KCcjYmlsbGluZ19jaXR5JykudmFsKCksXG4gICAgICAgICAgICBhZGRyZXNzID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMScpLnZhbCgpLFxuICAgICAgICAgICAgYWRkcmVzc18yID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMicpLnZhbCgpLFxuICAgICAgICAgICAgc19jb3VudHJ5ID0gY291bnRyeSxcbiAgICAgICAgICAgIHNfc3RhdGUgPSBzdGF0ZSxcbiAgICAgICAgICAgIHNfcG9zdGNvZGUgPSBwb3N0Y29kZSxcbiAgICAgICAgICAgIHNfY2l0eSA9IGNpdHksXG4gICAgICAgICAgICBzX2FkZHJlc3MgPSBhZGRyZXNzLFxuICAgICAgICAgICAgc19hZGRyZXNzXzIgPSBhZGRyZXNzXzI7XG5cblxuICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcC10by1kaWZmZXJlbnQtYWRkcmVzcycpLmZpbmQoJ2lucHV0JykuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIHNfY291bnRyeSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NvdW50cnknKS52YWwoKTtcbiAgICAgICAgICAgIHNfc3RhdGUgPSBqUXVlcnkoJyNzaGlwcGluZ19zdGF0ZScpLnZhbCgpO1xuICAgICAgICAgICAgc19wb3N0Y29kZSA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfcG9zdGNvZGUnKS52YWwoKTtcbiAgICAgICAgICAgIHNfY2l0eSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NpdHknKS52YWwoKTtcbiAgICAgICAgICAgIHNfYWRkcmVzcyA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18xJykudmFsKCk7XG4gICAgICAgICAgICBzX2FkZHJlc3NfMiA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18yJykudmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc19jb3VudHJ5ID09IFwiXCIpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDT1VOVFJZIEVNUFRZXCIpO1xuICAgICAgICAgICAgalF1ZXJ5KCdpbnB1dFthcmlhLWxhYmVsKj1cIkNvdW50cnkvUmVnaW9uXCJdJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBzX2NvdW50cnkgPSBqUXVlcnkodGhpcykudmFsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKHNfY291bnRyeSA9PSBcIlwiKXtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ09VTlRSWSBFTVBUWSBBR0FJTlwiKTtcbiAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nLWNvdW50cnkgb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpXG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyA9IHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogc19hZGRyZXNzLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTJcIjogc19hZGRyZXNzXzIsXG4gICAgICAgICAgICAgICAgXCJIb3VzZU51bWJlclwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIk51bWJlckV4dGVuc2lvblwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIlBvc3RhbENvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcInNfcG9zdGNvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcIkNpdHlcIjogc19jaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBzX2NvdW50cnksXG4gICAgICAgICAgICAgICAgXCJTdGF0ZVwiOiBzX3N0YXRlLFxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9zdF9kYXRhOiBqUXVlcnkoJ2Zvcm0uY2hlY2tvdXQnKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIFwiQ2FycmllcklkXCI6IGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCgpXG4gICAgICAgIH07XG5cbiBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogc19hZGRyZXNzLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTJcIjogc19hZGRyZXNzXzIsXG4gICAgICAgICAgICAgICAgXCJIb3VzZU51bWJlclwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIk51bWJlckV4dGVuc2lvblwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIlBvc3RhbENvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcInNfcG9zdGNvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcIkNpdHlcIjogc19jaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBzX2NvdW50cnksXG4gICAgICAgICAgICAgICAgXCJTdGF0ZVwiOiBzX3N0YXRlLFxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9zdF9kYXRhOiBqUXVlcnkoJ2Zvcm0uY2hlY2tvdXQnKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIFwiQ2FycmllcklkXCI6IGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCgpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIFxuICAgICAqIFdlIG11c3QgcnVuIHRoaXMgb25sb2FkIFxuICAgICAqIEFuZCBvbiBtZXRob2QgY2hhbmdlIFxuICAgICAqIGJlY2F1c2UgcGVvcGxlIG1heSBuZXZlciBjaGFuZ2UgdGhlIGNhcnJpZXIgb3Igc2VsZWN0IGEgcGlja3VwIHBvaW50IFxuICAgICAqLyBcbiAgICBzZXRDYXJyaWVyKGNhcnJpZXJfaWQpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNldCBjYXJyaWVyIGlkXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhjYXJyaWVyX2lkKTtcbiAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0gdHlwZW9mKGNhcnJpZXJfaWQpICE9ICd1bmRlZmluZWQnID8gY2Fycmllcl9pZCA6IHRoaXMuZ2V0U2hpcHBpbmdNZXRob2RJZCgpOyAgXG4gICAgICAgIGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCh0aGlzLmNhcnJpZXJfaWQpO1xuICAgIH1cblxuICAgIC8qKiBcbiAgICAgKiBAcGFyYW0gUGlja3VwIHBpY2t1cCBcbiAgICAgKi9cbiAgICBzZXRQaWNrdXBQb2ludChwaWNrdXApIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTRVQgUElDS1VQIFBPSU5UIEAjQCNcIilcbiAgICAgICAgY29uc29sZS5sb2cocGlja3VwKTtcbiAgICAgICAgbGV0IHBpY2t1cF9sYWJlbCA9ICBwaWNrdXAuSW5mb3JtYXRpb24uTmFtZSArIFwiIFwiICsgcGlja3VwLkluZm9ybWF0aW9uLkFkZHJlc3M7XG5cbiAgICAgICAgbGV0IHJlcSA9IHtcbiAgICAgICAgICAgICdhY3Rpb24nOiAnc2hpcHRpbWl6ZV9zZXRfcGlja3VwX3BvaW50JyxcbiAgICAgICAgICAgICdzaGlwcGluZ19waWNrdXBfbGFiZWwnOnBpY2t1cF9sYWJlbCxcbiAgICAgICAgICAgICdzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZCc6IGpRdWVyeSgnLnNoaXB0aW1pemVfbWFwZmllbGRzJyArIHBpY2t1cC5Qb2ludElkKS52YWwoKSxcbiAgICAgICAgICAgICdzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nOiBwaWNrdXBfbGFiZWwsXG4gICAgICAgICAgICAnc2hpcHBpbmdfcGlja3VwX2lkJyA6IHBpY2t1cC5Qb2ludElkLFxuICAgICAgICAgICAgJ3NoaXBwaW5nX2NhcnJpZXJfaWQnIDogd2luZG93LmNhcnJpZXJfaWRcbiAgICAgICAgfTtcblxuICAgICAgICBqUXVlcnkuZ2V0SlNPTih0aGlzLmFqYXhfdXJsLCByZXEgLCAgKGRhdGEpICA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVzcGVvb29vbyBzYW0gemVtb1wiKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB9KS5mYWlsKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmF0YWwgZXJyb3Igd2lkZ2V0IHJlcXVlc3RpbmcgcG9pbnRzIGRvIHdlIGhhdmUgYW4gQVBJIGJ1Zz9cIixlcnIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gIyNESkRKIE92ZGVlZVxuICAgICAgICAvLyBqUXVlcnkoXCIjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uXCIpLmh0bWwoXCJTZWxlY2V0ZCBwaWNrdXBcIiArIFwiIDogXCIgK3BpY2t1cF9sYWJlbCk7XG4gICAgICAgIGpRdWVyeShcIiNzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb25cIikuaHRtbChzaGlwdGltaXplX3NlbGVjdCArIFwiIDogXCIgK3BpY2t1cF9sYWJlbCk7XG4gICAgICAgIGpRdWVyeShcIiNzaGlwcGluZ19waWNrdXBfaWRcIikudmFsKHBpY2t1cC5Qb2ludElkKTtcbiAgICAgICAgalF1ZXJ5KFwiI3NoaXBwaW5nX3BpY2t1cF9sYWJlbFwiKS52YWwocGlja3VwX2xhYmVsKTsgXG5cbiAgICAgICAgalF1ZXJ5KFwiI3NoaXB0aW1pemVwaWNrdXBcIikudmFsKHBpY2t1cC5Qb2ludElkKTsgXG5cbiAgICAgICAgLy8gSXMgdGhlcmUgZXh0cmEgaW5mbyA/IFxuICAgICAgICBpZiAoIGpRdWVyeSgnLnNoaXB0aW1pemVfbWFwZmllbGRzJyArIHBpY2t1cC5Qb2ludElkKS5sZW5ndGggPiAwICkgIHtcbiAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9leHRlbmRlZCcpLnZhbChqUXVlcnkoJy5zaGlwdGltaXplX21hcGZpZWxkcycgKyBwaWNrdXAuUG9pbnRJZCkudmFsKCkpOyBcbiAgICAgICAgfSBcbiAgICB9XG59IiwiaW1wb3J0IFV0aWxzIGZyb20gJy4vc2hpcHRpbWl6ZS11dGlscy5qcyc7XG5pbXBvcnQgTCBmcm9tICcuL2xlYWZsZXQtMS40LjAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGlwdGltaXplT3Blbk1hcCB7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBzaGlwdGltaXplKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJPUEVOTUFQQ09OU1RSVUNUMjIyMlwiKTtcblxuICAgICAgICB0aGlzLnNoaXB0aW1pemUgPSBzaGlwdGltaXplO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm1hcCA9IG51bGw7XG4gICAgICAgIHRoaXMuaG9zdCA9IG9wdGlvbnMuaG9zdCB8fCAnaHR0cHM6Ly9teS5zaGlwdGltaXplLm1lJztcbiAgICAgICAgdGhpcy5pY29uX2ZvbGRlciA9IHR5cGVvZiAoc2hpcHRpbWl6ZV9pY29uX2ZvbGRlcikgIT09ICd1bmRlZmluZWQnID8gc2hpcHRpbWl6ZV9pY29uX2ZvbGRlciA6ICcnO1xuICAgICAgICB0aGlzLm1hcFdyYXBwZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnN0eWxlUGF0aCA9IG9wdGlvbnMuc3R5bGVQYXRoIHx8IHRoaXMuaG9zdCArICcvc2hvcHN5c3RlbXMvdjIvYXNzZXRzL3NoaXB0aW1pemV3aWRnZXQuY3NzJztcbiAgICAgICAgdGhpcy5tYXJrZXJzID0gW107XG4gICAgICAgIHRoaXMucGlja3VwUG9pbnRzID0gW107XG4gICAgICAgIHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZyA9IHtcbiAgICAgICAgICAgIDMwIDoge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjonc3ZnJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFN0YXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb25TaXplOiBbMzIsMzJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgNjggOiB7XG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOidzdmcnLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvblNpemU6IFs1Nyw5Ml1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA3MToge1xuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjonc3ZnJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFN0YXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGljb25TaXplOiBbNTcsOTJdXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludElkeCA9IG51bGw7XG4gICAgICAgIHRoaXMubW92ZUxpc3RlbmVycyA9IFtdO1xuICAgICAgICB0aGlzLmlzTW92aW5nID0gZmFsc2U7IC8qIFRoZSBtYXAgaXMgbG9hZGluZyBwb2ludHMgKi9cbiAgICAgICAgdGhpcy5pc1VzZXJNb3ZpbmcgPSBmYWxzZTsgLyogVGhlIHVzZXIgaXMgbW92aW5nIHRoZSBtYXAgKi9cbiAgICAgICAgdGhpcy5ib3VuZHMgPSBudWxsO1xuXG4gICAgfVxuXG4gICAgc2V0Q2FycmllcklkKGNhcnJpZXJfaWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJPUEVOTUFQQ0FSUklFUklEXCIpXG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGNhcnJpZXJfaWQ7XG4gICAgICAgIHRoaXMuY3VycmVudF9pY29uID0gdGhpcy5nZXRDYXJyaWVySWNvbk9mVHlwZSh0aGlzLmNhcnJpZXJfaWQpXG4gICAgfTtcblxuICAgIHNlbGVjdFBvaW50KGlkeCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNlbGVjdCBwb2ludFwiKVxuICAgICAgICBjb25zb2xlLmxvZyhpZHgpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFBvaW50SWR4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t0aGlzLnNlbGVjdGVkUG9pbnRJZHhdLnNldEljb24odGhpcy5nZXRDYXJyaWVySWNvbk9mVHlwZSh0aGlzLmNhcnJpZXJfaWQsIHRoaXMucGlja3VwUG9pbnRzW3RoaXMuc2VsZWN0ZWRQb2ludElkeF0uVHlwZSwwKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnRJZHggPSBpZHg7XG4gICAgICAgIHRoaXMubWFya2Vyc1tpZHhdLnNldEljb24odGhpcy5nZXRDYXJyaWVySWNvbk9mVHlwZSh0aGlzLmNhcnJpZXJfaWQsIHRoaXMucGlja3VwUG9pbnRzW2lkeF0uVHlwZSwxKSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0cmluZyBpbWFnZVVybCAtIGZ1bGwgdXJsIHRvIHRoZSBpY29uXG4gICAgICogQHJldHVybiBMLmljb24gb2JqZWN0XG4gICAgICovXG4gICAgY3JlYXRlSWNvbihpbWFnZVVybCkge1xuXG4gICAgICAgIGxldCBpY29uU2l6ZSA9IHR5cGVvZih0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXSkgIT0gXCJ1bmRlZmluZWRcIiA/IHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1t0aGlzLmNhcnJpZXJfaWRdLmljb25TaXplIDogNTA7XG4gICAgICAgIHJldHVybiBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogaW1hZ2VVcmwsXG4gICAgICAgICAgICBpY29uU2l6ZTogW2ljb25TaXplLCBpY29uU2l6ZV0sIC8qIHNpemUgb2YgdGhlIGljb24gKi9cbiAgICAgICAgICAgIGljb25BbmNob3I6IFtpY29uU2l6ZSAvIDIsIGljb25TaXplXSwgLyogcG9pbnQgb2YgdGhlIGljb24gd2hpY2ggd2lsbCBjb3JyZXNwb25kIHRvIG1hcmtlcidzIGxvY2F0aW9uICovXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWy0xICogaWNvblNpemUgLyAyLCAtMSAqIGljb25TaXplIC8gMl0gLyogcG9pbnQgZnJvbSB3aGljaCB0aGUgcG9wdXAgc2hvdWxkIG9wZW4gcmVsYXRpdmUgdG8gdGhlIGljb25BbmNob3IgKi9cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBzZXRab29tID0gZnVuY3Rpb24gKHpvb20pIHtcbiAgICAgICAgdGhpcy5tYXAuc2V0Wm9vbSh6b29tKTtcbiAgICB9XG5cbiAgICBpc01hcE1vdmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNNb3ZpbmcgfHwgdGhpcy5pc1VzZXJNb3Zpbmc7XG4gICAgfTtcblxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGRlY2ltYWwgbGF0XG4gICAgICogQHBhcmFtIGRlY2ltYWwgbG5nXG4gICAgICovXG4gICAgY2VudGVyTWFwKGxhdCwgbG5nKSB7XG5cbiAgICAgICAgbGV0IGxhdGxuZyA9IEwubGF0TG5nKGxhdCwgbG5nKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSBzY3JpcHQgaGFzIG5vdCBiZWVuIGxvYWRlZCAsIGxvYWQgaXQuXG4gICAgICogV2UgdXNlIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB3ZSBvbmx5IHdhbnQgdG8gbG9hZCB0aGUgc2NyaXB0IHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBidXR0b25cbiAgICAgKi9cbiAgICAvLyAjI0RKREogUHJvdmVyaSByYWRpIGxpIGJleiBvdm9nYVxuICAgIGdyYW50UmVhZHkoKSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU2NyaXB0TG9hZGVkKSB7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZFNjcmlwdCgpO1xuXG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8vICMjREpESiBCcG9zdCBzdHVmZlxuICAgIGdlb2NvZGVCcG9zdCAocXVlcnlwYXJ0cywgZmNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQlBPU1RHRU9DT0RFXCIpO1xuICAgICAgICB0aGlzLl9nZW9jb2RlKHF1ZXJ5cGFydHMuYWRkcmVzcywgZmNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgX2dlb2NvZGUgKHF1ZXJ5cGFydHMsIGZjYWxsYmFjaykge1xuXG4gICAgICAgIGpRdWVyeS5nZXRKU09OKCdodHRwczovL2Jwb3N0ZGV2LnNoaXB0aW1pemUubWUvc2hvcHN5c3RlbXMvdjIvc2hvcGlmeS9icG9zdGdlb2NvZGU/c2VhcmNoVGV4dD0nICsgcXVlcnlwYXJ0cywge30sIGZ1bmN0aW9uKHJlc3ApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzcG9uc2UpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgICAgIGlmIChyZXNwLnJlc3BvbnNlICYmIHJlc3AucmVzcG9uc2UudG9wU3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygxKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwKTtcbiAgICAgICAgICAgICAgICBsZXQgcGxhY2VzID0gcmVzcC5yZXNwb25zZS50b3BTdWdnZXN0aW9ucztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAvLyAjI0RKREogVnJhdGkgb3ZvIGtha28gamUgYmlsbyBtb3pkYT9cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlc1tpXS5hZGRyZXNzLnNlYXJjaEJhclN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiAoaW5kZXggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzcGxheV9uYW1lXCI6IHBsYWNlc1tpXS5hZGRyZXNzLnNlYXJjaEJhclN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXR5OiBwbGFjZXNbaV0uYWRkcmVzcy5tdW5pY2lwYWxpdHlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudHJ5OiAnYmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3N0YWxDb2RlOiBwbGFjZXNbaV0uYWRkcmVzcy5wb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjI0RKREogT3ZvIGlzdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWV0bmFtZTE6IHBsYWNlc1tpXS5hZGRyZXNzLnNlYXJjaEJhclN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0XCI6IHBsYWNlc1tpXS5hZGRyZXNzLmxhdGl0dWRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibG5nXCI6IHBsYWNlc1tpXS5hZGRyZXNzLmxvbmdpdHVkZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmV6dWx0YXRpXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG5cbiAgICAgICAgICAgIGZjYWxsYmFjayAmJiBmY2FsbGJhY2socmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cblxuICAgIC8vICMjREpESiBTaGlwdGltaXplIHBhcnRcbiAgICBnZW9jb2RlIChxdWVyeXBhcnRzLCBmY2FsbGJhY2spIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJHRU9DT0RFIEZVTkNUSU9OXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhxdWVyeXBhcnRzKTtcbiAgICAgICAgbGV0IHF1ZXJ5dmFsID0gcXVlcnlwYXJ0cy5hZGRyZXNzO1xuICAgICAgICBsZXQgcXVlcnkgPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGNvdW50cnkgID0gcXVlcnlwYXJ0cy5jb3VudHJ5ID8gcXVlcnlwYXJ0cy5jb3VudHJ5LnRvTG93ZXJDYXNlKCkgOiBudWxsO1xuXG4gICAgICAgIGlmKHF1ZXJ5dmFsLm1hdGNoKC9eKFswLTlcXC1dKykkLykpIHtcbiAgICAgICAgICAgIGlmIChxdWVyeXBhcnRzLmNvdW50cnkgPT0gJ1BvcnR1Z2FsJyAmJiB0eXBlb2YobWlzc2luZ1ppcFBUKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8qIElzIHRoaXMgYSBwb3N0YWwgY29kZSB3ZSBrbm93IGlzIG5vdCBnZW9jb2RhYmxlIGluIG5vbWluYXRpbT8gKi9cbiAgICAgICAgICAgICAgICBsZXQgemlwNGRpZyA9IHF1ZXJ5dmFsLnN1YnN0cmluZygwLDQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGk9MDsgaTxtaXNzaW5nWmlwUFQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYobWlzc2luZ1ppcFBUW2ldLnppcGNvZGUgPT0gemlwNGRpZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNwbGF5X25hbWVcIjogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhdFwiOiBtaXNzaW5nWmlwUFRbaV0ubGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibG9uXCI6IG1pc3NpbmdaaXBQVFtpXS5sbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmNhbGxiYWNrKFt0aGlzLnF1ZXJ5UmVzdWx0c10pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkgPSAncG9zdGFsY29kZT0nICsgcXVlcnl2YWwgKyAnJmNvdW50cnk9JyArIGNvdW50cnk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY291bnRyeSkge1xuICAgICAgICAgICAgcXVlcnkgPSAncT0nICsgcXVlcnl2YWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2cocXVlcnkpO1xuXG4gICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeS1yZXN1bHRzXCIpLmh0bWwoJzxkaXYgY2xhc3M9XCJzdy1sb2FkZXJcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj4nKTtcbiAgICAgICAgalF1ZXJ5LmdldEpTT04oXCJodHRwczovL25vbWluYXRpbS5vcGVuc3RyZWV0bWFwLm9yZy9zZWFyY2g/Zm9ybWF0PWpzb24mYWRkcmVzc2RldGFpbHM9MSZcIiArIHF1ZXJ5LCAocmVzKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlenVsdGF0XCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgIGlmIChyZXMubGVuZ3RoID09IDAgJiYgIHF1ZXJ5dmFsLm1hdGNoKC9eKFswLTlcXC1dKykkLykgJiYgKGNvdW50cnkudG9VcHBlckNhc2UoKSA9PSAnUFQnIHx8IGNvdW50cnkudG9Mb3dlckNhc2UoKSA9PSAncG9ydHVnYWwnKSkge1xuICAgICAgICAgICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeVwiKS52YWwocXVlcnl2YWwuc3Vic3RyaW5nKDAsNCkpO1xuICAgICAgICAgICAgICAgLy8gIyNESkRKIFRoaXMgaXMgbWlzc2luZ1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VvY29kZVF1ZXJ5KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJURVNUVEVTVE9WREVcIik7XG4gICAgICAgICAgICBmb3IgKGxldCBpPTA7IGkgPCByZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9WQUogUkVTUE9OU0VcIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzW2ldKTtcbiAgICAgICAgICAgICAgICBjb25zdCB3YW50ZWQgPSByZXNbaV0uYWRkcmVzcy5wb3N0Y29kZSB8fCByZXNbaV0uYWRkcmVzcy5jaXR5IHx8IHJlc1tpXS5hZGRyZXNzLmNvdW50eTtcblxuICAgICAgICAgICAgICAgIGlmICh3YW50ZWQgJiYgalF1ZXJ5KCcjc2hpcHBpbmctY291bnRyeSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKSAhPSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkoJyNzaGlwcGluZy1jb3VudHJ5IG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLnRvTG93ZXJDYXNlKCkgPT09IHJlc1tpXS5hZGRyZXNzLmNvdW50cnlfY29kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIldhbnRlZCBhbmQgdmFsIG5vdCBudWxsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGlzcGxheWVkUmVzdWx0cyhyZXNbaV0scXVlcnlwYXJ0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZih3YW50ZWQgJiYgalF1ZXJ5KCcjc2hpcHBpbmctY291bnRyeSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKSA9PSBcIlwiKXtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJXYW50ZWQgYW5kIHZhbCBudWxsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hEaXNwbGF5ZWRSZXN1bHRzKHJlc1tpXSxxdWVyeXBhcnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZjYWxsYmFjayk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnF1ZXJ5UmVzdWx0cyk7XG5cbiAgICAgICAgICAgIGZjYWxsYmFjayAmJiBmY2FsbGJhY2sodGhpcy5xdWVyeVJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHVzaERpc3BsYXllZFJlc3VsdHMocmVzLHF1ZXJ5cGFydHMpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIklGIFdBTlRFRFwiKTtcbiAgICAgICAgbGV0IG5vbUFkZHIgPSAgcmVzO1xuICAgICAgICBjb25zdCBzdHJlZXQgPSB0eXBlb2Yobm9tQWRkci5hZGRyZXNzLnJvYWQpICE9ICd1bmRlZmluZWQnID8gbm9tQWRkci5hZGRyZXNzLnJvYWQgOiBub21BZGRyLmRpc3BsYXlfbmFtZTtcblxuICAgICAgICBsZXQgZGlzcGxheV9uYW1lID0gKHN0cmVldD8gc3RyZWV0IDogJycpICsgJyAnICsgKG5vbUFkZHIuYWRkcmVzcy5wb3N0Y29kZSA/IG5vbUFkZHIuYWRkcmVzcy5wb3N0Y29kZSA6ICcnKTtcblxuICAgICAgICBpZiAodHlwZW9mKG5vbUFkZHIuYWRkcmVzcy5jaXR5KSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSU1BIEdSQURcIilcbiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSArPSAgJyAnICsgbm9tQWRkci5hZGRyZXNzLmNpdHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2Yobm9tQWRkci5hZGRyZXNzLnJlZ2lvbikgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIklNQSBSRUdJT05cIilcbiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSArPSAnICcgKyBub21BZGRyLmFkZHJlc3MucmVnaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vbUFkZHIuYWRkcmVzcy5jb3VudHkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSU1BIENPVU5UWVwiKVxuICAgICAgICAgICAgZGlzcGxheV9uYW1lICs9ICcgJyArIG5vbUFkZHIuYWRkcmVzcy5jb3VudHk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlwYXJ0cy5jb3VudHJ5LnRvTG93ZXJDYXNlKCkgIT09IG5vbUFkZHIuYWRkcmVzcy5jb3VudHJ5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGRpc3BsYXlfbmFtZSArPSBcIiBcIiArIG5vbUFkZHIuYWRkcmVzcy5jb3VudHJ5X2NvZGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgIFwiZGlzcGxheV9uYW1lXCI6IGRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgQ2l0eTogbm9tQWRkci5hZGRyZXNzLmNpdHksXG4gICAgICAgICAgICAgICAgQ291bnRyeTogbm9tQWRkci5hZGRyZXNzLmNvdW50cnlfY29kZSxcbiAgICAgICAgICAgICAgICBQb3N0YWxDb2RlOiBub21BZGRyLmFkZHJlc3MucG9zdGNvZGUsXG4gICAgICAgICAgICAgICAgU3RyZWV0bmFtZTE6IHN0cmVldCxcbiAgICAgICAgICAgICAgICBTdGF0ZTogbm9tQWRkci5hZGRyZXNzLnJlZ2lvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibGF0XCI6IG5vbUFkZHIubGF0LFxuICAgICAgICAgICAgXCJsbmdcIjpub21BZGRyLmxvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZl9jYWxsYmFjayB3aGF0IGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCByZXNvbHZlc1xuICAgICAqIEBwYXJhbSBjaXR5IC0gY2l0eSBuYW1lXG4gICAgICogQHBhcmFtIGNvdW50cnkgLSBjb3VudHJ5IGluIGlzbzIgdXBwZXJjYXNlXG4gICAgICogQHBhcmFtIHBvc3RhbGNvZGUgLSB0aGUgcG9zdGFsIGNvZGVcbiAgICAgKiBAcGFyYW0gc3RyZWV0bmFtZSAtIHRoZSBzdHJlZXRuYW1lXG4gICAgICovXG4gICAgZ2VvY29kZUFkZHJlc3MoZl9jYWxsYmFjaywgY2l0eSwgY291bnRyeSwgcG9zdGFsY29kZSwgc3RyZWV0bmFtZSkge1xuXG4gICAgICAgIHZhciBxdWVyeVN0cmluZyA9IFwiaHR0cHM6Ly9ub21pbmF0aW0ub3BlbnN0cmVldG1hcC5vcmcvc2VhcmNoP2Zvcm1hdD1qc29uJmFkZHJlc3NkZXRhaWxzPTFcIiArXG4gICAgICAgICAgICBcIiZjaXR5PVwiICsgY2l0eSArXG4gICAgICAgICAgICBcIiZjb3VudHJ5PVwiICsgY291bnRyeTtcblxuICAgICAgICBpZiAodHlwZW9mIChwb3N0YWxjb2RlKSAhPT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICAgICAgaWYgKGNvdW50cnkgPT0gJ1BUJyB8fCBjb3VudHJ5ID09ICdQb3J0dWdhbCcpIHtcblxuICAgICAgICAgICAgICAgIHBvc3RhbGNvZGUgPSBwb3N0YWxjb2RlLnN1YnN0cigwLCA0KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gXCImcG9zdGFsY29kZT1cIiArIHBvc3RhbGNvZGU7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgKHN0cmVldG5hbWUpICE9PSAndW5kZWZpbmVkJykge1xuXG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBcIiZzdHJlZXQ9XCIgKyBzdHJlZXRuYW1lO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mKGJ0b2EpICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YodGhpcy5hZGRyZXNzX2NhY2hlW2J0b2EocXVlcnlTdHJpbmcpXSkgIT09ICd1bmRlZmluZWQnKSB7XG5cbiAgICAgICAgICAgIGZfY2FsbGJhY2sodGhpcy5hZGRyZXNzX2NhY2hlW2J0b2EocXVlcnlTdHJpbmcpXSk7XG5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcblxuICAgICAgICAgICAgalF1ZXJ5LmdldEpTT04ocXVlcnlTdHJpbmcsIHt9LCAocmVzcG9uc2UpID0+ICB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZ2VvY29kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgJ2lzbzInOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2xhdCc6ICcnLFxuICAgICAgICAgICAgICAgICAgICAnbG5nJzogJydcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYXRpb24gPSByZXNwb25zZVswXTtcblxuICAgICAgICAgICAgICAgICAgICBnZW9jb2RlLmlzbzIgPSBsb2NhdGlvbi5hZGRyZXNzLmNvdW50cnlfY29kZTtcblxuICAgICAgICAgICAgICAgICAgICBnZW9jb2RlLmxhdCA9IGxvY2F0aW9uLmxhdDtcbiAgICAgICAgICAgICAgICAgICAgZ2VvY29kZS5sbmcgPSBsb2NhdGlvbi5sb247XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3NfY2FjaGVbYnRvYShxdWVyeVN0cmluZyldID0gZ2VvY29kZTtcbiAgICAgICAgICAgICAgICBmX2NhbGxiYWNrKGdlb2NvZGUpO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICB9O1xuXG4gICAgLy8gIyNESkRKIEJwb3N0XG4gICAgZ2VvY29kZUFkZHJlc3NQYXJ0c0Jwb3N0IChmY2FsbGJhY2ssIGNpdHksIGNvdW50cnksIHBvc3RhbGNvZGUsIHN0cmVldG5hbWUpIHtcbiAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQWRkcmVzcyBwYXJ0cyBicG9zdFwiKTtcblxuICAgICAgICBpZiAodHlwZW9mKHN0cmVldG5hbWUpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBlbmNvZGVVUkkoc3RyZWV0bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mKHBvc3RhbGNvZGUpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSBcIixcIiArIHBvc3RhbGNvZGU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nZW9jb2RlKHF1ZXJ5U3RyaW5nLCBmdW5jdGlvbihyZXN1bHRzKSB7XG4gICAgICAgICAgICBsZXQgbGF0bG4gPSB7IGxhdDowLCBsbmc6MH07XG4gICAgICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGF0bG4gPSB7bGF0OiByZXN1bHRzWzBdLmxhdGl0dWRlLCBsbmc6IHJlc3VsdHNbMF0ubG9uZ2l0dWRlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmY2FsbGJhY2sgJiYgZmNhbGxiYWNrKGxhdGxuKTtcbiAgICAgICAgfSk7XG5cbiAgICB9O1xuXG4gICAgLy8gIyNESkRKIFNoaXB0aW1pemUgY29kZVxuICAgIGdlb2NvZGVBZGRyZXNzUGFydHMgKGZfY2FsbGJhY2ssIGNpdHksIGNvdW50cnksIHBvc3RhbGNvZGUsIHN0cmVldG5hbWUpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBRERSRVNTUEFSVFMgTUlDT1wiKTtcbiAgICAgICAgY29uc29sZS5sb2coY2l0eSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNvdW50cnkpO1xuICAgICAgICBjb25zb2xlLmxvZyhwb3N0YWxjb2RlKTtcbiAgICAgICAgY29uc29sZS5sb2coc3RyZWV0bmFtZSk7XG4gICAgICAgIHZhciBxdWVyeVN0cmluZyA9IFwiaHR0cHM6Ly9ub21pbmF0aW0ub3BlbnN0cmVldG1hcC5vcmcvc2VhcmNoP2Zvcm1hdD1qc29uJmFkZHJlc3NkZXRhaWxzPTFcIiArXG4gICAgICAgICAgICBcIiZjaXR5PVwiICsgY2l0eSArXG4gICAgICAgICAgICBcIiZjb3VudHJ5X2NvZGU9XCIgKyBjb3VudHJ5O1xuXG4gICAgICAgIGlmICh0eXBlb2YgKHBvc3RhbGNvZGUpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAoY291bnRyeSA9PSAnUFQnIHx8IGNvdW50cnkgPT0gJ1BvcnR1Z2FsJykge1xuICAgICAgICAgICAgICAgIHBvc3RhbGNvZGUgPSBwb3N0YWxjb2RlLnN1YnN0cigwLCA0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IFwiJnBvc3RhbGNvZGU9XCIgKyBwb3N0YWxjb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiAoc3RyZWV0bmFtZSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IFwiJnN0cmVldD1cIiArIGVuY29kZVVSSShzdHJlZXRuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGpRdWVyeS5nZXRKU09OKHF1ZXJ5U3RyaW5nLCB7fSwgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBsZXQgZ2VvY29kZSA9IHtcbiAgICAgICAgICAgICAgICAnaXNvMic6ICcnLFxuICAgICAgICAgICAgICAgICdsYXQnOiAnJyxcbiAgICAgICAgICAgICAgICAnbG5nJzogJydcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2VbMF07XG5cbiAgICAgICAgICAgICAgICBnZW9jb2RlLmlzbzIgPSBsb2NhdGlvbi5hZGRyZXNzLmNvdW50cnlfY29kZTtcblxuICAgICAgICAgICAgICAgIGdlb2NvZGUubGF0ID0gbG9jYXRpb24ubGF0O1xuICAgICAgICAgICAgICAgIGdlb2NvZGUubG5nID0gbG9jYXRpb24ubG9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImdlb2NvZGUgIFwiICsgIHJlc3BvbnNlLmxlbmd0aCAgKyAncmVzdWx0cycpO1xuICAgICAgICAgICAgaWYoZ2VvY29kZS5sYW4pIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInJldHVybmluZyBcIiAsIGdlb2NvZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZl9jYWxsYmFjayhnZW9jb2RlKTtcblxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbG9hZFNjcmlwdCgpIHtcblxuICAgICAgICBVdGlscy5pbmplY3RFeHRlcm5hbFNjcmlwdChTSElQVElNSVpFX1BMVUdJTl9VUkwgKyBcInZpZXdzL2pzL2xlYWZsZXQtMS40LjAuanNcIik7XG4gICAgICAgIHRoaXMuaXNTY3JpcHRMb2FkZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMZWFmbGV0IGRvZXMgbm90IHJlY2VpdmUgYSBjYWxsYmFjayBzbyB3ZSB3YWl0IGhlcmUgZm9yIHRoZSBzY3JpcHQgdG8gYmUgbG9hZGVkXG4gICAgICovXG4gICAgaW5pdE1hcCgpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIkxvYWQgbWFwXCIpO1xuICAgICAgICAvLyB0aGlzLm1hcFdyYXBwZXIgPSBqUXVlcnkodGhpcy5vcHRpb25zLm1hcFBhcmVudENvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubWFwV3JhcHBlciA9IGpRdWVyeShcImJvZHlcIik7XG5cbiAgICAgICAgaWYgKHRoaXMubWFwV3JhcHBlci5oYXNDbGFzcygnbGVhZmxldC1jb250YWluZXInKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgd2FzIGFscmVhZHkgbG9hZGVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLmljb25fc2VsZWN0ZWQgPSB0aGlzLmNyZWF0ZUljb24odGhpcy5pY29uX2ZvbGRlciArICdzZWxlY3RlZC5wbmcnKTtcbiAgICAgICAgdGhpcy5pY29uX2RlZmF1bHQgPSB0aGlzLmNyZWF0ZUljb24odGhpcy5pY29uX2ZvbGRlciArICdkZWZhdWx0LnBuZycpO1xuXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50X2ljb24pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudF9pY29uID0gdGhpcy5pY29uX2RlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcCA9IG5ldyBMLm1hcCgnc3ctbWFwJywge1xuICAgICAgICAgICAgXCJ6b29tXCI6IDE2LFxuICAgICAgICAgICAgXCJjZW50ZXJcIjogWzUxLjUwNSwgLTAuMDldLFxuICAgICAgICB9KTtcblxuICAgICAgICBMLnRpbGVMYXllcignaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLCB7XG4gICAgICAgICAgICBcImF0dHJpYnV0aW9uXCI6ICcmY29weTsgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm9wZW5zdHJlZXRtYXAub3JnL2NvcHlyaWdodFwiPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycydcbiAgICAgICAgfSlcbiAgICAgICAgLmFkZFRvKHRoaXMubWFwKTtcblxuICAgICAgICB0aGlzLm9wdGlvbnMub25tYXByZWFkeSAmJiB0aGlzLm9wdGlvbnMub25tYXByZWFkeSgpO1xuXG4gICAgICAgIHRoaXMubWFwLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGpRdWVyeShcIi5zdy1tYXAtc2VsZWN0ZWQtcG9pbnRcIikuaHRtbChcIlwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYXAub24oJ21vdmVlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzSW5Cb3VuZHMoY2VudGVyLmxhdCwgY2VudGVyLmxuZykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVFbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbW92ZUVuZCgpIHtcbiAgICAgICAgaWYgKCB0aGlzLmlzTWFwTW92aW5nKCkgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzVXNlck1vdmluZyA9IHRydWU7XG4gICAgICAgIGxldCBtYXBDZW50ZXIgPSB0aGlzLm1hcC5nZXRDZW50ZXIoKTtcblxuICAgICAgICBmb3IobGV0IGk9MDsgdGhpcy5tb3ZlTGlzdGVuZXJzICYmIGkgPCB0aGlzLm1vdmVMaXN0ZW5lcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubW92ZUxpc3RlbmVyc1tpXShtYXBDZW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJNT1ZFIExJU1RFTkVSUyBFTkRFRFwiKTtcbiAgICAgICAgdGhpcy5pc1VzZXJNb3ZpbmcgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgYWRkTWFwTW92ZUxpc3RlbmVyKGZjYWxsYmFjaykge1xuICAgICAgICB0aGlzLm1vdmVMaXN0ZW5lcnMucHVzaChmY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGdldENlbnRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwLmdldENlbnRlcigpO1xuICAgIH07XG5cbiAgICBpc0luQm91bmRzIChsYXQsIGxuZykge1xuICAgICAgICBpZiAoIXRoaXMuYm91bmRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5MYXQgPSBsYXQgPiB0aGlzLmJvdW5kcy5ib3R0b21MZWZ0LmxhdCAmJiBsYXQgPCB0aGlzLmJvdW5kcy50b3BSaWdodC5sYXQ7XG4gICAgICAgIGxldCBlYXN0Qm91bmQgPSBsbmcgPCB0aGlzLmJvdW5kcy50b3BSaWdodC5sbmc7XG4gICAgICAgIGxldCB3ZXN0Qm91bmQgPSBsbmcgPiB0aGlzLmJvdW5kcy5ib3R0b21MZWZ0LmxuZztcbiAgICAgICAgbGV0IGluTG5nO1xuXG4gICAgICAgIGlmICh0aGlzLmJvdW5kcy50b3BSaWdodC5sbmcgPCB0aGlzLmJvdW5kcy5ib3R0b21MZWZ0LmxuZykge1xuICAgICAgICAgICAgaW5MbmcgPSBlYXN0Qm91bmQgfHwgd2VzdEJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5MbmcgPSBlYXN0Qm91bmQgJiYgd2VzdEJvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluTG5nICYmIGluTGF0O1xuICAgIH07XG4gICAgY2xlYXJNYXJrZXJzKCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNsZWFyIG1hcmtlcnNcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWFwKTtcblxuICAgICAgICB0aGlzLmJvdW5kcyA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludElkeCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMubWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFya2Vycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKHRoaXMubWFya2Vyc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXJrZXJzID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzTW92aW5nKSB7XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXRNaW5ab29tKDApO1xuICAgICAgICB9XG5cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEFkZCB0aGUgbWFya2VycyB0byBtYXBcbiAgICAgKiBAcGFyYW0gYXJyYXkgcGlja3VwUG9pbnRzIC0gYW4gYXJyYXkgb2YgcGlja3VwUG9pbnRzXG4gICAgICogQHBhcmFtIGZ1bmN0aW9uIGNhbGxiYWNrXG4gICAgICovXG4gICAgYWRkTWFya2VycyhwaWNrdXBQb2ludHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQUREIE1BUktFUlMgMjMyMzIzXCIpO1xuICAgICAgICB0aGlzLmlzTW92aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waWNrdXBQb2ludHMgPSBwaWNrdXBQb2ludHM7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBwaWNrdXBQb2ludHMubGVuZ3RoOyArK3gpIHtcbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t4XSA9IHRoaXMuZ2V0TWFya2VyKHBpY2t1cFBvaW50c1t4XSk7XG4gICAgICAgICAgICAvKiAgICB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUgdmFsdWVzIGZvciBsYXQsbG5nIHdlIGhhdmUgYXJlIHJvdW5kZWQsIHNvIHRoZXkgd2lsbCBub3QgbWF0Y2ggdGhlIG9uZXMgcmV0dXJuZWQgYnkgZ29vZ2xlICovXG4gICAgICAgICAgICB0aGlzLnBpY2t1cFBvaW50c1t4XS5tYXJrZXIgPSB0aGlzLm1hcmtlcnNbeF07XG5cbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t4XS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoY2FsbGJhY2spID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpdEJvdW5kcygpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR290b3YgZml0IGJvdW5kc1wiKTtcbiAgICB9XG5cbiAgICByZXNldE1hcmtlcihtYXJrZXIpIHtcblxuICAgICAgICBtYXJrZXIuc2V0SWNvbih0aGlzLmljb25fZGVmYXVsdCk7XG5cbiAgICB9XG5cbiAgICBzZWxlY3RNYXJrZXIobWFya2VyKSB7XG5cbiAgICAgICAgbWFya2VyLnNldEljb24odGhpcy5pY29uX3NlbGVjdGVkKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkanVzdCB0aGUgem9vbSBpbiB0aGUgbWFwIHRvIGRpc3BsYXkgYWxsIHRoZSBtYXJrZXJzXG4gICAgICogVGhlcmUncyBhIGZpdCBib3VuZHMgdGhhdCByZWNlaXZlcyAyIGNvcm5lcnMsIGJ1dCBjYWxjdWxhdGluZyB0aGVtIGlzIHVwIHRvIHVzLlxuICAgICAqIGNvcm5lcnM6IHRvcCBsZWZ0LCBib3R0b20gcmlnaHRcbiAgICAgKiB0aGVuIHdlIGNlbnRlciB0aGUgbWFwIGF0IHRoZSBjZW50ZXIgb2YgdGhlIHNxdWFyZVxuICAgICAqL1xuICAgIGZpdEJvdW5kcyA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBqUXVlcnkoJ2h0bWwsYm9keScpXG4gICAgICAgICAgICAuc2Nyb2xsVG9wKDApO1xuICAgICAgICB0aGlzLm1hcC5pbnZhbGlkYXRlU2l6ZSgpO1xuXG4gICAgICAgIC8qdGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBtYXAgY2VudGVyKi9cbiAgICAgICAgdGhpcy5pc01vdmluZyA9IHRydWU7XG4gICAgICAgIGxldCBib3R0b21MZWZ0ID0gW3BhcnNlRmxvYXQodGhpcy5waWNrdXBQb2ludHNbMF0uTGF0KSwgcGFyc2VGbG9hdCh0aGlzLnBpY2t1cFBvaW50c1swXS5Mb25nKV07XG4gICAgICAgIGxldCB0b3BSaWdodCA9IFtwYXJzZUZsb2F0KHRoaXMucGlja3VwUG9pbnRzWzBdLkxhdCksIHBhcnNlRmxvYXQodGhpcy5waWNrdXBQb2ludHNbMF0uTG9uZyldO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5waWNrdXBQb2ludHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBsYXQgPSBwYXJzZUZsb2F0KHRoaXMucGlja3VwUG9pbnRzW2ldLkxhdCk7XG4gICAgICAgICAgICBsZXQgbG5nID0gcGFyc2VGbG9hdCh0aGlzLnBpY2t1cFBvaW50c1tpXS5Mb25nKTtcblxuICAgICAgICAgICAgaWYgKGxhdCA8IGJvdHRvbUxlZnRbMF0pIHtcbiAgICAgICAgICAgICAgICBib3R0b21MZWZ0WzBdID0gbGF0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGF0ID4gdG9wUmlnaHRbMF0pIHtcbiAgICAgICAgICAgICAgICB0b3BSaWdodFswXSA9IGxhdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxuZyA+IHRvcFJpZ2h0WzFdKSB7XG4gICAgICAgICAgICAgICAgdG9wUmlnaHRbMV0gPSBsbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsbmcgPCBib3R0b21MZWZ0WzFdKSB7XG4gICAgICAgICAgICAgICAgYm90dG9tTGVmdFsxXSA9IGxuZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgbGV0IGNlbnRlclggPSBib3R0b21MZWZ0WzBdICsgKHRvcFJpZ2h0WzBdIC0gYm90dG9tTGVmdFswXSkgLyAyO1xuICAgICAgICBsZXQgY2VudGVyWSA9IGJvdHRvbUxlZnRbMV0gKyAodG9wUmlnaHRbMV0gLSBib3R0b21MZWZ0WzFdKSAvIDI7XG4gICAgICAgIHRoaXMuY2VudGVyID0gW2NlbnRlclgsIGNlbnRlclldO1xuXG4gICAgICAgIHRoaXMuY2VudGVyTWFwKGNlbnRlclgsY2VudGVyWSk7XG5cbiAgICAgICAgdGhpcy5tYXAuZml0Qm91bmRzKFtcbiAgICAgICAgICAgIGJvdHRvbUxlZnQsXG4gICAgICAgICAgICB0b3BSaWdodFxuICAgICAgICBdKTtcblxuICAgICAgICB0aGlzLmJvdW5kcyA9IHtcbiAgICAgICAgICAgIFwiYm90dG9tTGVmdFwiOiB7IGxhdDogYm90dG9tTGVmdFswXSwgbG5nOiBib3R0b21MZWZ0WzFdIH0sXG4gICAgICAgICAgICBcInRvcFJpZ2h0XCI6IHsgbGF0OiB0b3BSaWdodFswXSwgbG5nOiB0b3BSaWdodFsxXSB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLyogR3JhbnQgY2hhbmdlcyBhcmUgYXBwbGllZCBiZWZvcmUgd2Ugc3RhdGUgd2UncmUgbm8gbG9uZ2VyIG1vdmluZyB0aGUgbWFwIGFyb3VuZCB2aWEganMgKi9cbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdmluZyA9IGZhbHNlO1xuXG5cbiAgICAgICAgICAgIGxldCB6b29tID0gMTA7XG4gICAgICAgICAgICBpZih6b29tICA+IDE2IHx8IHpvb20gPCAxMCkge1xuICAgICAgICAgICAgICAgIHpvb20gPSAgMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1hcC5zZXRNaW5ab29tKHpvb20pO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIm1hcCB6b29tIGlzIFwiICwgem9vbSk7XG5cbiAgICAgICAgfSwxMDAwKTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuXG4gICAgZ2V0SWNvbihwaWNrdXBQb2ludCkge1xuICAgICAgICByZXR1cm4gcGlja3VwUG9pbnQuVHlwZSA+IDAgPyB0aGlzLmdldENhcnJpZXJJY29uT2ZUeXBlKHRoaXMuY2Fycmllcl9pZCwgcGlja3VwUG9pbnQuVHlwZSkgOiB0aGlzLmN1cnJlbnRfaWNvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBtYXJrZXIgZm9yIHRoZSBvcGVuTGF5ZXJzXG4gICAgICogSWNvbkFuY2hvcjogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBcInRpcFwiIG9mIHRoZSBpY29uIChyZWxhdGl2ZSB0byBpdHMgdG9wIGxlZnQgY29ybmVyKS5cbiAgICAgKiBUaGUgaWNvbiB3aWxsIGJlIGFsaWduZWQgc28gdGhhdCB0aGlzIHBvaW50IGlzIGF0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAgICogQ2VudGVyZWQgYnkgZGVmYXVsdCBpZiBzaXplIGlzIHNwZWNpZmllZCwgYWxzbyBjYW4gYmUgc2V0IGluIENTUyB3aXRoIG5lZ2F0aXZlIG1hcmdpbnMuXG4gICAgICovXG4gICAgZ2V0TWFya2VyKHBpY2t1cFBvaW50KSB7XG5cbiAgICAgICAgbGV0IG1hcmtlciA9IEwubWFya2VyKFtwaWNrdXBQb2ludC5MYXQsIHBpY2t1cFBvaW50LkxvbmddLCB7XG4gICAgICAgICAgICBcImljb25cIjogdGhpcy5nZXRJY29uKHBpY2t1cFBvaW50KSxcbiAgICAgICAgICAgIFwidGl0bGVcIjogcGlja3VwUG9pbnQuSW5mb3JtYXRpb24uTmFtZSArIFwiXFxuXCIgKyBwaWNrdXBQb2ludC5JbmZvcm1hdGlvbi5BZGRyZXNzXG4gICAgICAgIH0pO1xuICAgICAgICBtYXJrZXIuYWRkVG8odGhpcy5tYXApO1xuICAgICAgICByZXR1cm4gbWFya2VyO1xuICAgIH1cblxuXG4gICAgZ2V0Q2Fycmllckljb25PZlR5cGUoY2Fycmllcl9pZCx0eXBlLHNlbGVjdGVkKXtcbiAgICAgICAgdmFyIGFsbG93ZWRUeXBlcyA9IFsxLDIsNCwxNiw5OTBdO1xuICAgICAgICBsZXQgY2Fycmllcl9pY29uX3VybDtcblxuICAgICAgICBsZXQgZmlsZV9leHRlbnNpb24gPSAnLicgKyAoIHR5cGVvZih0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbY2Fycmllcl9pZF0pICE9ICd1bmRlZmluZWQnID8gdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW2NhcnJpZXJfaWRdLmV4dGVuc2lvbiA6IFwicG5nXCIgKTtcbiAgICAgICAgbGV0IHNlbGVjdGVkZXh0ZW5zaW9uID0gdHlwZW9mKHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1tjYXJyaWVyX2lkXSkgIT0gJ3VuZGVmaW5lZCcgICYmIHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1tjYXJyaWVyX2lkXS5zZWxlY3RlZFN0YXRlICAmJiBzZWxlY3RlZD8gJ19zJyA6ICcnO1xuICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgIXNlbGVjdGVkZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pY29uX3NlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgICYmIGFsbG93ZWRUeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICAgICAgY2Fycmllcl9pY29uX3VybCA9IHRoaXMuaWNvbl9mb2xkZXIgKyAnJyArIGNhcnJpZXJfaWQgKyAnXycgKyB0eXBlICsgc2VsZWN0ZWRleHRlbnNpb24gKyBmaWxlX2V4dGVuc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNhcnJpZXJfaWNvbl91cmwgPSB0aGlzLmljb25fZm9sZGVyICsgY2Fycmllcl9pZCArICBzZWxlY3RlZGV4dGVuc2lvbiArIGZpbGVfZXh0ZW5zaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlSWNvbihjYXJyaWVyX2ljb25fdXJsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHdlIGhhdmUgYW4gaWNvbiBmb3IgdGhpcyBjYXJyaWVyLlxuICAgICAqIElmIHllcyB0aGVuIGNoYW5nZSB0aGUgY2FycmllciBpY29uXG4gICAgICogSWYgbm90IHRoZW4gdXNlIHRoZSBkZWZhdWx0IGljb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbnQgY2Fycmllcl9pZCAtIHRoZSBjYXJyaWVyIGlkXG4gICAgICovXG4gICAgc2V0Q2Fycmllckljb24oY2Fycmllcl9pZCkge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiU2V0Q2Fycmllckljb25cIilcblxuICAgICAgICBpZiAodHlwZW9mIChMKSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldENhcnJpZXJJY29uKGNhcnJpZXJfaWQpO1xuXG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0gY2Fycmllcl9pZDtcbiAgICAgICAgbGV0IGNhcnJpZXJfaWNvbl91cmwgPSB0aGlzLmljb25fZm9sZGVyICsgJycgKyBjYXJyaWVyX2lkICsgJy5wbmcnO1xuICAgICAgICBpZih0eXBlb2YodGhpcy5jYWNoZV9pY29uX3ZhbGlkW2NhcnJpZXJfaWNvbl91cmxdKSA9PT0gJ3VuZGVmaW5lZCcpIHtcblxuICAgICAgICAgICAgdGhpcy5jYWNoZV9pY29uX3ZhbGlkW2NhcnJpZXJfaWNvbl91cmxdID0gVXRpbHMuY2Fycmllckljb25FeGlzdHMoY2Fycmllcl9pZCwgJycsIHRoaXMuaWNvbl9mb2xkZXIpO1xuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50X2ljb24gPSB0aGlzLmNhY2hlX2ljb25fdmFsaWRbY2Fycmllcl9pY29uX3VybF0gPyB0aGlzLmNyZWF0ZUljb24oY2Fycmllcl9pY29uX3VybCkgOiB0aGlzLmljb25fZGVmYXVsdDtcblxuICAgIH1cblxuXG5cbn0iLCJpbXBvcnQgU2hpcHRpbWl6ZVdpZGdldCBmcm9tIFwiLi9zaGlwdGltaXplLXdpZGdldFwiO1xuY2xhc3MgU2hpcHRpbWl6ZUdtYXBzIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW50ZXJlZFwiKTtcbiAgICAgICAgdGhpcy5pc1NjcmlwdExvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1hcmtlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5tYXAgPSBudWxsO1xuICAgICAgICB0aGlzLnBpY2t1cFBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmhvc3QgPSBvcHRpb25zLmhvc3Q7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiSWNvbiBmb2xkZXJcIilcbiAgICAgICAgY29uc29sZS5sb2coc2hpcHRpbWl6ZV9pY29uX2ZvbGRlcik7XG4gICAgICAgIHRoaXMuaWNvbl9mb2xkZXIgPSB0eXBlb2YgKHNoaXB0aW1pemVfaWNvbl9mb2xkZXIpICE9PSAndW5kZWZpbmVkJyA/IHNoaXB0aW1pemVfaWNvbl9mb2xkZXIgOiAnJztcbiAgICAgICAgdGhpcy5pY29uX3NlbGVjdGVkID0gdGhpcy5pY29uX2ZvbGRlciArICdzZWxlY3RlZC5wbmcnO1xuICAgICAgICB0aGlzLmljb25fZGVmYXVsdCA9IHRoaXMuaWNvbl9mb2xkZXIgKyAnZGVmYXVsdC5wbmcnO1xuICAgICAgICB0aGlzLmN1cnJlbnRfaWNvbiA9IHRoaXMuaWNvbl9kZWZhdWx0O1xuICAgICAgICB0aGlzLm1vdmVMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0gbnVsbDtcbiAgICAgICAgdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnID0ge1xuICAgICAgICAgICAgMzA6IHtcbiAgICAgICAgICAgICAgICBleHRlbnNpb246ICdzdmcnLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU3RhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvblNpemU6IDk4XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zaGlwdGltaXplV2lkZ2V0ID0gbmV3IFNoaXB0aW1pemVXaWRnZXQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaW5pdE1hcChjYXJyaWVyX2lkLCBmX2NhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGNhcnJpZXJfaWQ7XG4gICAgICAgIGxldCBtZSA9IHRoaXM7XG5cbiAgICAgICAgdGhpcy5sb2FkU2NyaXB0KFwiaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzP2tleT1cIiArIHRoaXMub3B0aW9ucy5nbWFwc2tleSArIFwiJmNhbGxiYWNrPVwiLCAgKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJVU0FPIFUgSUZcIik7XG4gICAgICAgICAgICBtZS5pc1NjcmlwdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICBmX2NhbGxiYWNrICYmIGZfY2FsbGJhY2soKTtcbiAgICAgICAgICAgIHRoaXMubG9hZE1hcCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcIkluaXRtYXAgTmlqZSB1c2FvIHUgaWZcIik7XG5cbiAgICB9O1xuXG4gICAgbG9hZFNjcmlwdCh1cmwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICBzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XG5cbiAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlKSB7IC8qSUUgKi9cbiAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09ICdsb2FkZWQnIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09ICdjb21wbGV0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjcmlwdC5zcmMgPSB1cmw7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH07XG5cbiAgICBhZGRNYXJrZXJzKHBpY2t1cFBvaW50cywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5waWNrdXBQb2ludHMgPSBwaWNrdXBQb2ludHM7XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBwaWNrdXBQb2ludHMubGVuZ3RoOyArK3gpIHtcbiAgICAgICAgICAgIHRoaXMubWFya2Vyc1t4XSA9IHRoaXMuZ2V0TWFya2VyKHBpY2t1cFBvaW50c1t4XSk7XG4gICAgICAgICAgICBwaWNrdXBQb2ludHNbeF0ubWFya2VyID0gdGhpcy5tYXJrZXJzW3hdO1xuXG4gICAgICAgICAgICB0aGlzLm1hcmtlcnNbeF0uYWRkTGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGNhbGxiYWNrKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZml0Qm91bmRzKCk7XG4gICAgfTtcblxuICAgIGFkZE1hcE1vdmVMaXN0ZW5lcihmY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5tb3ZlTGlzdGVuZXJzLnB1c2goZmNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgY2VudGVyTWFwKGxhdCwgbG5nKSB7XG4gICAgICAgIHRoaXMubWFwLnNldENlbnRlcihuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdCwgbG5nKSk7XG4gICAgfTtcblxuICAgIGNsZWFyTWFya2VycygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWFya2Vycy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya2Vyc1tpXS5zZXRNYXAobnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubWFya2VycyA9IFtdO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZpdEJvdW5kcygpIHtcbiAgICAgICAgdmFyIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLm1hcmtlcnMubGVuZ3RoOyArK3gpIHtcbiAgICAgICAgICAgIGJvdW5kcy5leHRlbmQodGhpcy5tYXJrZXJzW3hdLmdldFBvc2l0aW9uKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFwLmZpdEJvdW5kcyhib3VuZHMpO1xuICAgICAgICB0aGlzLmJvdW5kcyA9IHRoaXMubWFwLmdldEJvdW5kcygpO1xuICAgIH07XG5cbiAgICBnZXRNYXJrZXIocGlja3VwUG9pbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJHRVRNQVJLRVJcIilcbiAgICAgICAgbGV0IHVybCA9IHRoaXMuZ2V0Q2Fycmllckljb25VcmwocGlja3VwUG9pbnQuVHlwZSwgMCk7XG4gICAgICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgICAgICAgcG9zaXRpb246IG5ldyBnb29nbGUubWFwcy5MYXRMbmcocGlja3VwUG9pbnQuTGF0LCBwaWNrdXBQb2ludC5Mb25nKSxcbiAgICAgICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgICAgICBpY29uOiB7XG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vICMjREpESiBBa28gbmlzdGEgb2RyYWRpIGthbyBpIHUgb3BlbiBtYXBcbiAgICAgICAgY29uc29sZS5sb2coXCJQUkUgSUZcIik7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1t0aGlzLmNhcnJpZXJfaWRdKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJJRiBHRVQgTUFSS0VSXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2ljb25fY29uZmlnKVxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0uaWNvblNpemUpXG4gICAgICAgICAgICBvcHRpb25zLmljb24uc2l6ZSA9IG5ldyBnb29nbGUubWFwcy5TaXplKHRoaXMuY2Fycmllcl9pY29uX2NvbmZpZ1t0aGlzLmNhcnJpZXJfaWRdLmljb25TaXplLCB0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXS5pY29uU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVMU0UgR0VUIE1BUktFUlwiKTtcbiAgICAgICAgICAgIG9wdGlvbnMuaWNvbi5zY2FsZWRTaXplID0gbmV3IGdvb2dsZS5tYXBzLlNpemUoNTAsIDUwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUE9TTEUgSUZcIik7XG4gICAgICAgIGxldCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiBtYXJrZXI7XG4gICAgfTtcblxuICAgIGlzTWFwTW92aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01vdmluZyB8fCB0aGlzLmlzVXNlck1vdmluZztcbiAgICB9O1xuXG4gICAgYXN5bmMgbW92ZUVuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNYXBNb3ZpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1VzZXJNb3ZpbmcgPSB0cnVlO1xuICAgICAgICBsZXQgbWFwQ2VudGVyID0gdGhpcy5tYXAuZ2V0Q2VudGVyKCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IHRoaXMubW92ZUxpc3RlbmVycyAmJiBpIDwgdGhpcy5tb3ZlTGlzdGVuZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1vdmVMaXN0ZW5lcnNbaV0oeyBcImxhdFwiOiBtYXBDZW50ZXIubGF0KCksIFwibG5nXCI6IG1hcENlbnRlci5sbmcoKSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTU9WRSBMSVNURU5FUlMgRU5ERURcIik7XG4gICAgICAgIHRoaXMuaXNVc2VyTW92aW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIGxvYWRNYXAoKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJMT0FETUFQXCIpO1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdy1tYXBcIiksIHtcbiAgICAgICAgICAgIGNlbnRlcjogeyBsYXQ6IC0zNC4zOTcsIGxuZzogMTUwLjY0NCB9LFxuICAgICAgICAgICAgem9vbTogMTYsXG4gICAgICAgICAgICBtYXBUeXBlQ29udHJvbDogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tYXAuYWRkTGlzdGVuZXIoJ2NlbnRlcl9jaGFuZ2VkJywgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNlbnRlciA9IHRoaXMubWFwLmdldENlbnRlcigpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5ib3VuZHMgJiYgIXRoaXMuYm91bmRzLmNvbnRhaW5zKGNlbnRlcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVFbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdlb2NvZGUocXVlcnlwYXJ0cywgZl9jYWxsYmFjaykge1xuICAgICAgICBpZiAodHlwZW9mIChnb29nbGUpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5nZW9jb2RlKHNoaXBwaW5nRGF0YSwgZl9jYWxsYmFjayk7IH0sIDIwMCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFyTWFya2VycygpO1xuICAgICAgICBsZXQgZ2VvY29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcbiAgICAgICAgbGV0IG1lID0gdGhpcztcblxuICAgICAgICBjb25zb2xlLmxvZygnZ2VvY29kaW5nICcsIHF1ZXJ5cGFydHMpO1xuXG4gICAgICAgIGxldCBxdWVyeSA9IFwiY29tcG9uZW50cz1jb3VudHJ5OlwiICsgcXVlcnlwYXJ0cy5jb3VudHJ5O1xuICAgICAgICBpZiAocXVlcnlwYXJ0cy5hZGRyZXNzICYmIHF1ZXJ5cGFydHMuYWRkcmVzcy5tYXRjaCgvXihbMC05XFwtXSspJC8pKSB7XG4gICAgICAgICAgICBpZiAocXVlcnlwYXJ0cy5jb3VudHJ5LnRvVXBwZXJDYXNlKCkgPT0gJ1BUJyAmJiB0eXBlb2YgKG1pc3NpbmdaaXBQVCkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgemlwNGRpZyA9IHF1ZXJ5cGFydHMuYWRkcmVzcy5zdWJzdHJpbmcoMCwgNCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nWmlwUFQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pc3NpbmdaaXBQVFtpXS56aXBjb2RlID09IHppcDRkaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBxdWVyeVJlc3VsdHMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfbmFtZTogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXQ6IG1pc3NpbmdaaXBQVFtpXS5sYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uOiBtaXNzaW5nWmlwUFRbaV0ubG5nXG4gICAgICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmX2NhbGxiYWNrKHF1ZXJ5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocXVlcnlwYXJ0cy5jb21wb25lbnRzKSB7XG4gICAgICAgICAgICBxdWVyeSArPSAnfCcgKyBxdWVyeXBhcnRzLmNvbXBvbmVudHM7XG4gICAgICAgIH0gZWxzZSBpZiAocXVlcnlwYXJ0cy5hZGRyZXNzLm1hdGNoKC9eWzAtOV0vKSkge1xuICAgICAgICAgICAgcXVlcnkgKz0gJ3xwb3N0YWxfY29kZTonICsgcXVlcnlwYXJ0cy5hZGRyZXNzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnkgKz0gJyZhZGRyZXNzPScgKyBxdWVyeXBhcnRzLmFkZHJlc3M7XG4gICAgICAgIH1cblxuICAgICAgICBqUXVlcnkuZ2V0KCdodHRwczovL21hcHMuZ29vZ2xlLmNvbS9tYXBzL2FwaS9nZW9jb2RlL2pzb24/c2Vuc29yPWZhbHNlJmtleT0nICsgdGhpcy5vcHRpb25zLmdtYXBza2V5ICsgJyYnICsgcXVlcnksIGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSByZXNwb25zZS5yZXN1bHRzO1xuICAgICAgICAgICAgbGV0IHN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICAgICAgICBsZXQgZ2VvY29kZSA9IHsgaXNvMjogJycsIGxhdDogJycsIGxuZzogJycgfTtcblxuICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAnT0snKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0dlb2NvZGUgd2FzIG5vdCBzdWNjZXNzZnVsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbjogJyArIHN0YXR1cywgcmVzcG9uc2UuZXJyb3JfbXNnKTtcbiAgICAgICAgICAgICAgICBmX2NhbGxiYWNrKGdlb2NvZGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBsYWNlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgZ2VvY29kZSA9IHJlc3VsdHNbaV07XG4gICAgICAgICAgICAgICAgbGV0IGRpc3BsYXlfbmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBnZW9jb2RlLmFkZHJlc3NfY29tcG9uZW50cyAmJiBqIDwgZ2VvY29kZS5hZGRyZXNzX2NvbXBvbmVudHMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9uYW1lICs9IChkaXNwbGF5X25hbWUgPyAnLCAnIDogJycpICsgZ2VvY29kZS5hZGRyZXNzX2NvbXBvbmVudHNbal0ubG9uZ19uYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwbGFjZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGlzbzI6IG1lLmdldENvdW50cnlDb2RlRnJvbVJlc3VsdChnZW9jb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYXQ6IGdlb2NvZGUuZ2VvbWV0cnkubG9jYXRpb24ubGF0LFxuICAgICAgICAgICAgICAgICAgICBsbmc6IGdlb2NvZGUuZ2VvbWV0cnkubG9jYXRpb24ubG5nXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZfY2FsbGJhY2socGxhY2VzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdldENvdW50cnlDb2RlRnJvbVJlc3VsdChnZW9jb2RlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgKGdlb2NvZGUuYWRkcmVzc19jb21wb25lbnRzKSA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb21wb25lbnRzID0gZ2VvY29kZS5hZGRyZXNzX2NvbXBvbmVudHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbGV0IHR5cGVzID0gY29tcG9uZW50c1tpXS50eXBlcztcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0eXBlcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlc1tqXSA9PSAnY291bnRyeScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHNbaV0uc2hvcnRfbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBnZW9jb2RlQWRkcmVzc1BhcnRzKGZfY2FsbGJhY2ssIGNpdHksIGNvdW50cnksIHBvc3RhbGNvZGUsIHN0cmVldG5hbWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiAocG9zdGFsY29kZSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChjb3VudHJ5ID09ICdQVCcgfHwgY291bnRyeSA9PSAnUG9ydHVnYWwnKSB7XG4gICAgICAgICAgICAgICAgcG9zdGFsY29kZSA9IHBvc3RhbGNvZGUuc3Vic3RyKDAsIDQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbXBvbmVudHMgPSBcInBvc3RhbF9jb2RlOlwiICsgcG9zdGFsY29kZSArIFwifGxvY2FsaXR5OlwiICsgY2l0eTtcblxuICAgICAgICB0aGlzLmdlb2NvZGUoeyBjb3VudHJ5LCBcImNvbXBvbmVudHNcIjogY29tcG9uZW50cyB9LCAocGxhY2VzKSA9PiB7XG4gICAgICAgICAgICBmX2NhbGxiYWNrKHBsYWNlc1swXSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzZXRDYXJyaWVySWQoY2Fycmllcl9pZCkge1xuICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBjYXJyaWVyX2lkO1xuICAgIH07XG5cbiAgICBzZWxlY3RQb2ludChpZHgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTZWxlY3Rwb2ludFwiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcmtlcnMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGxldCBwb2ludCA9IHRoaXMucGlja3VwUG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocG9pbnQpO1xuICAgICAgICAgICAgbGV0IGljb24gPSB7XG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLmdldENhcnJpZXJJY29uVXJsKHBvaW50LlR5cGUsIGlkeCA9PSBpKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0pICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBpY29uLnNpemUgPSBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSh0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXS5pY29uU2l6ZSwgdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0uaWNvblNpemUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpY29uLnNjYWxlZFNpemUgPSBuZXcgZ29vZ2xlLm1hcHMuU2l6ZSg1MCwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJTZXRJQ09EXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coaWNvbik7XG4gICAgICAgICAgICB0aGlzLm1hcmtlcnNbaV0uc2V0SWNvbihpY29uKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBzZXRDYXJyaWVySWQoY2Fycmllcl9pZCkge1xuICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBjYXJyaWVyX2lkO1xuICAgIH07XG5cbiAgICBnZXRDYXJyaWVySWNvblVybCh0eXBlLCBzZWxlY3RlZCkge1xuICAgICAgICBsZXQgY2Fycmllcl9pY29uX3VybDtcblxuICAgICAgICBsZXQgZmlsZV9leHRlbnNpb24gPSAnLicgKyAodHlwZW9mICh0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXSkgIT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXS5leHRlbnNpb24gOiBcInBuZ1wiKTtcbiAgICAgICAgbGV0IHNlbGVjdGVkZXh0ZW5zaW9uID0gdHlwZW9mICh0aGlzLmNhcnJpZXJfaWNvbl9jb25maWdbdGhpcy5jYXJyaWVyX2lkXSkgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYXJyaWVyX2ljb25fY29uZmlnW3RoaXMuY2Fycmllcl9pZF0uc2VsZWN0ZWRTdGF0ZSAmJiBzZWxlY3RlZFxuICAgICAgICAgICAgPyAnX3MnIDogJyc7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkICYmICFzZWxlY3RlZGV4dGVuc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNvbl9zZWxlY3RlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICYmIHR5cGVvZiAoc2hpcHRpbWl6ZV9jYXJyaWVyX2ltZ3MpICE9ICd1bmRlZmluZWQnICYmIHNoaXB0aW1pemVfY2Fycmllcl9pbWdzLmluZGV4T2YodGhpcy5jYXJyaWVyX2lkICsgXCJfXCIgKyB0eXBlICsgZmlsZV9leHRlbnNpb24pKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImdldENhcnJpZXJJY29uVXJsIDFcIilcbiAgICAgICAgICAgIGNhcnJpZXJfaWNvbl91cmwgPSB0aGlzLmljb25fZm9sZGVyICsgJycgKyB0aGlzLmNhcnJpZXJfaWQgKyAnXycgKyB0eXBlICsgc2VsZWN0ZWRleHRlbnNpb24gKyBmaWxlX2V4dGVuc2lvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0Q2Fycmllckljb25VcmwgMlwiKVxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2lkKTtcbiAgICAgICAgICAgIC8vICMjREpESiBOZSB6bmFtIHphc3RvIGplIHN2ZywgcG9nbGVkYWogZGEgdnJhdGlzIGtha28gamUgYmlsb1xuICAgICAgICAgICAgY2Fycmllcl9pY29uX3VybCA9IHRoaXMuaWNvbl9mb2xkZXIgKyB0aGlzLmNhcnJpZXJfaWQgKyBzZWxlY3RlZGV4dGVuc2lvbiArICcucG5nJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYXJyaWVyX2ljb25fdXJsO1xuICAgIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNoaXB0aW1pemVHbWFwcztcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcm9wLXR5cGVzXG5cbmltcG9ydCBTaGlwdGltaXplT3Blbk1hcDIgZnJvbSBcIi4vc2hpcHRpbWl6ZS1vcGVuLW1hcFwiO1xuaW1wb3J0IFNoaXB0aW1pemVHbWFwcyBmcm9tIFwiLi9zaGlwdGltaXplLWdtYXBzXCI7XG5pbXBvcnQgV29vY29tbWVyY2UgZnJvbSAnLi9zaGlwdGltaXplLXdvby1jb21tZXJjZS5qcydcblxuY2xhc3MgU2hpcHRpbWl6ZVdpZGdldCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLnBpY2t1cFBvaW50cyA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnQgPSBudWxsO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgICAgIHRoaXMubWFya2VycyA9IFtdO1xuICAgICAgICB0aGlzLmhvc3QgPSBvcHRpb25zLmhvc3QgfHwgJ2h0dHBzOi8vc2hpcHRpbWl6ZS5tZSc7XG4gICAgICAgIHRoaXMuZGVidWcgPSBvcHRpb25zLmRlYnVnIHx8IDA7XG5cbiAgICAgICAgdGhpcy5tYXBQYXJlbnRDb250YWluZXIgPSBvcHRpb25zLm1hcFBhcmVudENvbnRhaW5lciB8fCAnYm9keSc7XG4gICAgICAgIHRoaXMuYnV0dG9uUGFyZW50Q29udGFpbmVyID0gb3B0aW9ucy5idXR0b25QYXJlbnRDb250YWluZXIgfHwgJyc7XG4gICAgICAgIHRoaXMuaXNTY3JpcHRMb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idXR0b25DbGFzcyA9IHRoaXMub3B0aW9ucy5idXR0b25fY2xhc3MgfHwgJyc7XG4gICAgICAgIHRoaXMubGFiZWxzID0gdGhpcy5vcHRpb25zLmxhYmVscyB8fCB7fTtcblxuICAgICAgICB0aGlzLnBsYXRmb3JtID0gbmV3IFdvb2NvbW1lcmNlKG9wdGlvbnMuYWpheF91cmwpO1xuICAgICAgICB0aGlzLnRpbWVvdXRLZXlEb3duID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWFyY2hSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkcmVzcyA9IHRoaXMub3B0aW9ucy5hZGRyZXNzIHx8IG51bGw7XG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IHRoaXMub3B0aW9ucy5jYXJyaWVySWQgfHwgMDtcbiAgICAgICAgdGhpcy5sYW5nID0gJ2VuJztcbiAgICAgICAgdGhpcy53ZWVrZGF5bmFtZXMgPSBbc2hpcHRpbWl6ZV9tb25kYXksc2hpcHRpbWl6ZV90dWVzZGF5LCBzaGlwdGltaXplX3dlZG5lc2RheSwgc2hpcHRpbWl6ZV90aHVyc2RheSwgc2hpcHRpbWl6ZV9mcmlkYXksIHNoaXB0aW1pemVfc2F0dXJkYXksIHNoaXB0aW1pemVfc3VuZGF5XTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERpc3BsYXlPcHRpb24gPSAwO1xuICAgICAgICB0aGlzLmNhY2hlUmVzdWx0cyA9IHt9O1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSmVzdGUgY2hlY2tvdXQgaWxpIG5pamVcIik7XG5cblxuXG5cblxuXG4gICAgICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGhhc1J1bkNoZWNrVmlzaWJpbGl0eSA9IGZhbHNlOyAgLy8gRW5zdXJlIHRoZSB2aXNpYmlsaXR5IGNoZWNrIG9ubHkgcnVucyBvbmNlXG4gICAgICAgICAgICBsZXQgaGFzUnVuUGxhY2VPcmRlckNoZWNrID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIHZpc2liaWxpdHkgZm9yIHNoaXBwaW5nIG9wdGlvbnMgKHJ1biBvbmx5IG9uY2UpXG4gICAgICAgICAgICBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0galF1ZXJ5KFwiLndjLWJsb2NrLWNvbXBvbmVudHMtc2hpcHBpbmctcmF0ZXMtY29udHJvbF9fcGFja2FnZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50LmlzKCc6dmlzaWJsZScpICYmICFoYXNSdW5DaGVja1Zpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzUnVuQ2hlY2tWaXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja1Zpc2liaWxpdHkpOyAgLy8gQ2xlYXIgaW50ZXJ2YWwgYWZ0ZXIgZmlyc3Qgc3VjY2Vzc2Z1bCBjaGVja1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT3ZkZWVlZSBzYW1cIik7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZWxlY3RlZFRleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2VsZWN0ZWRUZXh0ID0galF1ZXJ5KFwiZmllbGRzZXQud2MtYmxvY2stY2hlY2tvdXRfX3NoaXBwaW5nLW9wdGlvblwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoXCIud2MtYmxvY2stY29tcG9uZW50cy1yYWRpby1jb250cm9sX19pbnB1dDpjaGVja2VkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2xvc2VzdChcImxhYmVsXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX2xhYmVsXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGV4dCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuc2VsZWN0ZWRUZXh0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlByYXphblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShcImZpZWxkc2V0LndjLWJsb2NrLWNoZWNrb3V0X19zaGlwcGluZy1vcHRpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX29wdGlvbi1sYXlvdXRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZWxlY3RlZFRleHQgPSBqUXVlcnkodGhpcykuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX2xhYmVsXCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0Jsb2NrQ2hlY2tvdXQgPT09IFwiZnVuY3Rpb25cIiAmJiB0aGlzLmlzQmxvY2tDaGVja291dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkQ2FycmllcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGb3JtQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE9uQ2xpY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAgLy8gSW50ZXJ2YWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG5cbiAgICAgICAgICAgIC8vIENoZWNrIHZpc2liaWxpdHkgZm9yIFwiUGxhY2UgT3JkZXJcIiBidXR0b24gKHJ1biBvbmx5IG9uY2UpXG4gICAgICAgICAgICBjb25zdCBwbGFjZU9yZGVyQ2hlY2sgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VPcmRlckJ1dHRvbiA9IGpRdWVyeShcIiNwbGFjZV9vcmRlclwiKTtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VPcmRlckJ1dHRvbi5pcygnOnZpc2libGUnKSAmJiAhaGFzUnVuUGxhY2VPcmRlckNoZWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1J1blBsYWNlT3JkZXJDaGVjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocGxhY2VPcmRlckNoZWNrKTsgIC8vIENsZWFyIGludGVydmFsIGFmdGVyIGZpcnN0IHN1Y2Nlc3NmdWwgY2hlY2tcblxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk92ZGVlZWUgc2FtIHZpc2libGUgY2hlY2tvdXRcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VPcmRlckJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNoaXBwaW5nX3BpY2t1cF9pZCA9IGpRdWVyeShcIiNzaGlwcGluZ19waWNrdXBfaWRcIikudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNsaWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh3aW5kb3cuY2Fycmllcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh3aW5kb3cubWFuZGF0b3J5RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93Lm1hbmRhdG9yeURhdGEgIT09IFwiXCIgJiYgd2luZG93Lm1hbmRhdG9yeURhdGEucGlja3VwTWFuZGF0b3J5ICYmIHNoaXBwaW5nX3BpY2t1cF9pZCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVVNBTyBJRlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAvLyBQcmV2ZW50IGRlZmF1bHQgZm9ybSBzdWJtaXNzaW9uXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb2RhbCBjcmVhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGFsID0galF1ZXJ5KCc8ZGl2PicsIHsgaWQ6ICdteU1vZGFsJywgY3NzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzcGxheSc6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbic6ICdmaXhlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnei1pbmRleCc6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWZ0JzogJzAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3ZlcmZsb3cnOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdyZ2JhKDAsMCwwLDAuNCknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGFsQ29udGVudCA9IGpRdWVyeSgnPGRpdj4nLCB7IGNzczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2ZlZmVmZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luJzogJzE1JSBhdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nJzogJzIwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICcxcHggc29saWQgIzg4OCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgnOiAnODAlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGpRdWVyeSgnPHNwYW4+JywgeyB0ZXh0OiAnw5cnLCBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICcjYWFhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbG9hdCc6ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzI4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnNvcic6ICdwb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0galF1ZXJ5KCc8cD4nLCB7IHRleHQ6IHNoaXB0aW1pemVfbWFuZGF0b3J5X3BvaW50IH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbiA9IGpRdWVyeShcIjxidXR0b24gY2xhc3M9J2J1dHRvbiBhbHQgQnBvc3QtcGljay1sb2NhdGlvbicgaWQ9J0Jwb3N0X3BpY2t1cF9idXR0b24nIHR5cGU9J2J1dHRvbicgb25DbGljaz0nQnBvc3QuZ2V0UGlja3VwTG9jYXRpb25zKGV2ZW50KSc+XCIgKyBCcG9zdF9jaG9vc2VfcGlja3VwX2xvY2F0aW9uICsgXCI8L2J1dHRvbj5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxDb250ZW50LmFwcGVuZChjbG9zZUJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxDb250ZW50LmFwcGVuZChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5hcHBlbmQobW9kYWxDb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJ2JvZHknKS5hcHBlbmQobW9kYWwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdyB0aGUgbW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSBtb2RhbCBoYW5kbGVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlQnV0dG9uLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkod2luZG93KS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KGV2ZW50LnRhcmdldCkuaXMobW9kYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8vIFByZXZlbnQgc3VibWlzc2lvblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAgLy8gSW50ZXJ2YWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZ2V0T25TdWJtaXRCdXR0b25CbG9ja0NsaWNrTm9UaGVtZSgpO1xuICAgICAgICB0aGlzLmdldFRoZW1lU2hpcHBpbmdNZXRob2Qob3B0aW9ucyk7XG5cblxuXG5cbiAgICB9XG5cblxuICAgIGdldFRoZW1lU2hpcHBpbmdNZXRob2Qob3B0aW9ucyl7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJPcHRpb25zXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhvcHRpb25zKTtcblxuICAgICAgICBpZiAoalF1ZXJ5KCcud29vY29tbWVyY2UtY2hlY2tvdXQtcGF5bWVudCcpLmxlbmd0aCA+IDApIHtcblxuICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5hamF4Q29tcGxldGUoKGV2ZW50LCB4aHIsIHNldHRpbmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnVybC5pbmNsdWRlcyhcInVwZGF0ZV9vcmRlcl9yZXZpZXdcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDb21wbGV0ZSByZXF1ZXN0XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBtYWRlIHRvIHdjLWFqYXg9dXBkYXRlX29yZGVyX3JldmlldycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coalF1ZXJ5KCcuQnBvc3QtcGljay1sb2NhdGlvbicpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrZWRSYWRpbyA9IGpRdWVyeSgnI3NoaXBwaW5nX21ldGhvZCBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFzc29jaWF0ZWQgbGFiZWwgdGV4dCBvZiB0aGUgY2hlY2tlZCByYWRpbyBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBjaGVja2VkUmFkaW8uc2libGluZ3MoJ2xhYmVsJykudGV4dCgpLnNwbGl0KCc6JylbMF0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2cgb3IgdXNlIHRoZSBzZWxlY3RlZCBzaGlwcGluZyBtZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBzaGlwcGluZyBtZXRob2Q6ICcgKyBzZWxlY3RlZFRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ID09ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZWxlY3QgdGhlIHBhcmVudCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2Ygc2hpcHBpbmcgbWV0aG9kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaXBwaW5nTWV0aG9kc0xpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2hpcHBpbmdfbWV0aG9kJyk7XG5cbi8vIENoZWNrIGlmIHRoZSBsaXN0IGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGlwcGluZ01ldGhvZHNMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRoZSBsaXN0IGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoaXBwaW5nTWV0aG9kSXRlbXMgPSBzaGlwcGluZ01ldGhvZHNMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggbGlzdCBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nTWV0aG9kSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgPGxhYmVsPiBlbGVtZW50IGluc2lkZSB0aGUgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFiZWxFbGVtZW50ID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdsYWJlbCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFiZWxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgdGV4dCBjb250ZW50IGJlZm9yZSB0aGUgY29sb24gKDopIHRvIGdldCB0aGUgZHluYW1pYyB0aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IGxhYmVsRWxlbWVudC50ZXh0Q29udGVudC50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gbGFiZWxUZXh0LnNwbGl0KCc6JylbMF0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTaGlwcGluZyBNZXRob2QgVGl0bGU6Jywgc2VsZWN0ZWRUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6ICdCcG9zdF9zZWxlY3RlZF9jYXJyaWVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2Fycmllcic6IHNlbGVjdGVkVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEb3NhbyBzaSBkb3ZkZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlcSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5nZXRKU09OKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAnL3dwLWFkbWluL2FkbWluLWFqYXgucGhwPycsIHJlcSAsICAoZGF0YSkgID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhb2Fvb28gbmFzYW9vbzIyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT0gMSApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhb29vb28gc3RhdHVzIDEyM1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucGlja3VwTWFuZGF0b3J5ID09IHRydWUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1hbmRhdG9yeURhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGRhdGEuY2Fycmllcl9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrVmlzaWJpbGl0eSA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRFbGVtZW50ID0galF1ZXJ5KFwiLndvb2NvbW1lcmNlLWNoZWNrb3V0LXBheW1lbnRcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50LmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBlbGVtZW50IGlzIHZpc2libGUsIHlvdSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tWaXNpYmlsaXR5KTsgLy8gU3RvcCBjaGVja2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBZb3VyIGNvZGUgaGVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIklUUyBWSVNJQkxFIDIyMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGxhY2Vfb3JkZXInKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KFwiI3BpY2t1cFRleHRcIikubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGxhY2Vfb3JkZXInKS5hZnRlcignPHAgaWQ9XCJwaWNrdXBUZXh0XCIgc3R5bGU9XCJjb2xvcjpyZWQ7XCI+U2VsZWN0IHBpY2t1cCBwb2ludDwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqUXVlcnkoXCIjcGlja3VwVGV4dFwiKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShcIiNwaWNrdXBUZXh0XCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLkJwb3N0LXBpY2stbG9jYXRpb24nKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTsgLy8gQ2hlY2sgZXZlcnkgMTAwIG1pbGxpc2Vjb25kc1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFbHNlIG5lbWEgcGlja3VwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrLWxvY2F0aW9uJykuaGlkZSgpO1xuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmdfcGlja3VwX2lkJykudmFsKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmdfcGlja3VwX2xhYmVsJykudmFsKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmdfcGlja3VwX2V4dGVuZGVkJykudmFsKCcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBzcGFuIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcuQnBvc3QtcGlja3VwX19kZXNjcmlwdGlvbicpLmhpZGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KCcuQnBvc3QtcGlja3VwX19kZXNjcmlwdGlvbicpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJVc2FvIGlha28gbmVtYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLkJwb3N0LXBpY2t1cF9fZGVzY3JpcHRpb24nKS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BsYWNlX29yZGVyJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BpY2t1cFRleHQnKS5oaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZhaWwoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmF0YWwgZXJyb3Igd2lkZ2V0IHJlcXVlc3RpbmcgcG9pbnRzIGRvIHdlIGhhdmUgYW4gQVBJIGJ1Zz9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIChmdW5jdGlvbihvcGVuKSB7XG4gICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihtZXRob2QsIHVybCwgYXN5bmMsIHVzZXIsIHBhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlcXVlc3QgVVJMIGNvbnRhaW5zICd3Yy1hamF4PXVwZGF0ZV9vcmRlcl9yZXZpZXcnXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignd2MtYWpheD11cGRhdGVfb3JkZXJfcmV2aWV3JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBtYWRlIHRvIHdjLWFqYXg9dXBkYXRlX29yZGVyX3JldmlldycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coalF1ZXJ5KCcuQnBvc3QtcGljay1sb2NhdGlvbicpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrZWRSYWRpbyA9IGpRdWVyeSgnI3NoaXBwaW5nX21ldGhvZCBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFzc29jaWF0ZWQgbGFiZWwgdGV4dCBvZiB0aGUgY2hlY2tlZCByYWRpbyBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBjaGVja2VkUmFkaW8uc2libGluZ3MoJ2xhYmVsJykudGV4dCgpLnNwbGl0KCc6JylbMF0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2cgb3IgdXNlIHRoZSBzZWxlY3RlZCBzaGlwcGluZyBtZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBzaGlwcGluZyBtZXRob2Q6ICcgKyBzZWxlY3RlZFRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVxID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnQnBvc3Rfc2VsZWN0ZWRfY2FycmllcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhcnJpZXInOiBzZWxlY3RlZFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRG9zYW8gc2kgZG92ZGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2V0SlNPTih3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgJy93cC1hZG1pbi9hZG1pbi1hamF4LnBocD8nLCByZXEgLCAgKGRhdGEpICA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW9hb29vIG5hc2Fvb28yMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09IDEgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW9vb29vIHN0YXR1cyAxMjNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnBpY2t1cE1hbmRhdG9yeSA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5tYW5kYXRvcnlEYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jYXJyaWVyX2lkID0gZGF0YS5jYXJyaWVyX2lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0RWxlbWVudCA9IGpRdWVyeShcIi53b29jb21tZXJjZS1jaGVja291dC1wYXltZW50XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW5wdXQgZWxlbWVudCBpcyB2aXNpYmxlLCB5b3UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrVmlzaWJpbGl0eSk7IC8vIFN0b3AgY2hlY2tpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91ciBjb2RlIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJJVFMgVklTSUJMRSAyMjJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BsYWNlX29yZGVyJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeShcIiNwaWNrdXBUZXh0XCIpLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3BsYWNlX29yZGVyJykuYWZ0ZXIoJzxwIGlkPVwicGlja3VwVGV4dFwiIHN0eWxlPVwiY29sb3I6cmVkO1wiPlNlbGVjdCBwaWNrdXAgcG9pbnQ8L3A+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoalF1ZXJ5KFwiI3BpY2t1cFRleHRcIikubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoXCIjcGlja3VwVGV4dFwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrLWxvY2F0aW9uJykuc2hvdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7IC8vIENoZWNrIGV2ZXJ5IDEwMCBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJFbHNlIG5lbWEgcGlja3VwXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrLWxvY2F0aW9uJykuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB2YWx1ZXMgZnJvbSBoaWRkZW4gaW5wdXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9pZCcpLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9sYWJlbCcpLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nX3BpY2t1cF9leHRlbmRlZCcpLnZhbCgnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSB0aGUgc3BhbiBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLkJwb3N0LXBpY2t1cF9fZGVzY3JpcHRpb24nKS5oaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeSgnLkJwb3N0LXBpY2t1cF9fZGVzY3JpcHRpb24nKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVXNhbyBpYWtvIG5lbWFcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJy5CcG9zdC1waWNrdXBfX2Rlc2NyaXB0aW9uJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGxhY2Vfb3JkZXInKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjcGlja3VwVGV4dCcpLmhpZGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuZmFpbCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYXRhbCBlcnJvciB3aWRnZXQgcmVxdWVzdGluZyBwb2ludHMgZG8gd2UgaGF2ZSBhbiBBUEkgYnVnP1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBvcGVuIG1ldGhvZFxuICAgICAgICAgICAgICAgICAgICBvcGVuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEZvcm1DaGFuZ2UoKXtcbiAgICAgICAgalF1ZXJ5KFwiLndjLWJsb2NrLWNoZWNrb3V0X19mb3JtXCIpLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkIHdoZW4gYW55IGZvcm0gZmllbGQgaW5zaWRlIHRoZSBcImNoZWNrb3V0XCIgZm9ybSBpcyBjaGFuZ2VkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZvcm0gY2hhbmdlZCEgYmxvY2sgYmxvY2tcIik7XG4gICAgICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcHBpbmctbG9hZGVyJykubGVuZ3RoIDw9IDApIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRlclRleHQgPSBqUXVlcnkoJzxkaXYgaWQ9XCJzaGlwcGluZy1sb2FkZXJcIj5Mb2FkaW5nIHNoaXBwaW5nIG1ldGhvZCBkYXRhLi4uPC9kaXY+JykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXknOiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICdhbGlnbi1pdGVtcyc6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnLFxuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAnIzMzMycsXG4gICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wJzogJzEwcHgnXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGxvYWRlciB0ZXh0IHRvIHRoZSBib3R0b20gb2YgdGhlICNzaGlwcGluZy1vcHRpb24gZWxlbWVudFxuICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NoaXBwaW5nLW9wdGlvbicpLmFwcGVuZChsb2FkZXJUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uKCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgd2luZG93LnNlbGVjdGVkVGV4dCA9IGpRdWVyeShcImZpZWxkc2V0LndjLWJsb2NrLWNoZWNrb3V0X19zaGlwcGluZy1vcHRpb25cIilcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXCIud2MtYmxvY2stY29tcG9uZW50cy1yYWRpby1jb250cm9sX19pbnB1dDpjaGVja2VkXCIpXG4gICAgICAgICAgICAgICAgICAgIC5jbG9zZXN0KFwibGFiZWxcIilcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXCIud2MtYmxvY2stY29tcG9uZW50cy1yYWRpby1jb250cm9sX19sYWJlbFwiKVxuICAgICAgICAgICAgICAgICAgICAudGV4dCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zZWxlY3RlZFRleHQgPT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUHJhemFuXCIpXG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeShcImZpZWxkc2V0LndjLWJsb2NrLWNoZWNrb3V0X19zaGlwcGluZy1vcHRpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKFwiLndjLWJsb2NrLWNvbXBvbmVudHMtcmFkaW8tY29udHJvbF9fb3B0aW9uLWxheW91dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZWxlY3RlZFRleHQgPSBqUXVlcnkodGhpcykuZmluZChcIi53Yy1ibG9jay1jb21wb25lbnRzLXJhZGlvLWNvbnRyb2xfX2xhYmVsXCIpLnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFlvdSBjYW4gcGVyZm9ybSB5b3VyIGRlc2lyZWQgYWN0aW9ucyBoZXJlXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZENhcnJpZXIoKTtcbiAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVuYWJsZUJ1dHRvbigpO1xuXG4gICAgfVxuXG4gICAgZ2V0T25TdWJtaXRCdXR0b25CbG9ja0NsaWNrTm9UaGVtZSgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTdWJtaXR0ZWQgbm8gdGhlbWVcIik7XG5cbiAgICAgICAgdmFyIGNoZWNrVmlzaWJpbGl0eSA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBpbnB1dEVsZW1lbnQgPSAgalF1ZXJ5KCcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24nKTtcblxuICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBlbGVtZW50IGlzIHZpc2libGUsIHlvdSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgc2NyaXB0XG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja1Zpc2liaWxpdHkpOyAvLyBTdG9wIGNoZWNraW5nXG4gICAgICAgICAgICAgICAgLy8gWW91ciBjb2RlIGhlcmVcblxuICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHBpbmdfcGlja3VwX2lkID0galF1ZXJ5KFwiI3NoaXBwaW5nX3BpY2t1cF9pZFwiKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDbGlja2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjYXJyaWVyX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cod2luZG93Lm1hbmRhdG9yeURhdGEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93Lm1hbmRhdG9yeURhdGEgIT0gXCJcIiAmJiB3aW5kb3cubWFuZGF0b3J5RGF0YS5waWNrdXBNYW5kYXRvcnkgJiYgc2hpcHBpbmdfcGlja3VwX2lkID09IFwiXCIpe1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBqUXVlcnkoJzxkaXY+JywgeyBpZDogJ215TW9kYWwnLCBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc3BsYXknOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbic6ICdmaXhlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6LWluZGV4JzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVmdCc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICcwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoJzogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JzogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3ZlcmZsb3cnOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ3JnYmEoMCwwLDAsMC40KSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbENvbnRlbnQgPSBqUXVlcnkoJzxkaXY+JywgeyBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2ZlZmVmZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4nOiAnMTUlIGF1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZyc6ICcyMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlcic6ICcxcHggc29saWQgIzg4OCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICc4MCUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvc2VCdXR0b24gPSBqUXVlcnkoJzxzcGFuPicsIHsgdGV4dDogJ8OXJywgY3NzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICcjYWFhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zsb2F0JzogJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZSc6ICcyOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3Vyc29yJzogJ3BvaW50ZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZSA9IGpRdWVyeSgnPHA+JywgeyB0ZXh0OiBzaGlwdGltaXplX21hbmRhdG9yeV9wb2ludCB9KTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnV0dG9uID0galF1ZXJ5KFwiPGJ1dHRvbiBjbGFzcz0nYnV0dG9uIGFsdCBzaGlwdGltaXplLXBpY2stbG9jYXRpb24nIGlkPSdzaGlwdGltaXplX3BpY2t1cF9idXR0b24nIHR5cGU9J2J1dHRvbicgb25DbGljaz0nc2hpcHRpbWl6ZS5nZXRQaWNrdXBMb2NhdGlvbnMoZXZlbnQpJz5cIiArIHNoaXB0aW1pemVfY2hvb3NlX3BpY2t1cF9sb2NhdGlvbiArIFwiPC9idXR0b24+XCIpO1xuXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBlbGVtZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWxDb250ZW50LmFwcGVuZChjbG9zZUJ1dHRvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuYXBwZW5kKG1vZGFsQ29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbENvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnYm9keScpLmFwcGVuZChtb2RhbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3cgdGhlIG1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBtb2RhbCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiA8c3Bhbj4gKHgpXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIG1vZGFsIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGFueXdoZXJlIG91dHNpZGUgb2YgdGhlIG1vZGFsIGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeShldmVudC50YXJnZXQpLmlzKG1vZGFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDApOyAvLyBDaGVjayBldmVyeSAxMDAgbWlsbGlzZWNvbmRzXG5cblxuICAgICAgICAvLyBqUXVlcnkoJyNwbGFjZV9vcmRlcicpXG5cblxuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ2Fycmllcigpe1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWRDYXJyaWVyXCIpXG5cbiAgICAgICAgaWYgKGpRdWVyeSgnI3NoaXBwaW5nLWxvYWRlcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHBpbmctbG9hZGVyJykucmVtb3ZlKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKHdpbmRvdy5zZWxlY3RlZFRleHQpO1xuICAgICAgICB3aW5kb3cubWFuZGF0b3J5RGF0YSA9IFwiXCI7XG4gICAgICAgIGpRdWVyeShcIiNzaGlwdGltaXplX3BpY2t1cF9idXR0b25cIikucmVtb3ZlKCk7XG5cbiAgICAgICAgbGV0IHJlcSA9IHtcbiAgICAgICAgICAgICdhY3Rpb24nOiAnc2hpcHRpbWl6ZV9zZWxlY3RlZF9jYXJyaWVyJyxcbiAgICAgICAgICAgICdjYXJyaWVyJzogd2luZG93LnNlbGVjdGVkVGV4dFxuICAgICAgICB9O1xuXG4gICAgICAgIGpRdWVyeS5nZXRKU09OKHRoaXMub3B0aW9ucy5hamF4X3VybCwgcmVxICwgIChkYXRhKSAgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW9hb29vIG5hc2Fvb28yMlwiKTtcblxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQnV0dG9uKCk7XG5cbiAgICAgICAgICAgIGpRdWVyeSgnI3NoaXB0aW1pemUtcGlja3VwX19kZXNjcmlwdGlvbicpLmhpZGUoKTtcblxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLnN0YXR1cyk7XG4gICAgICAgICAgICBpZiAoZGF0YS5zdGF0dXMgPT0gMSApe1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fvb29vbyBzdGF0dXMgMTIzXCIpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnBpY2t1cE1hbmRhdG9yeSA9PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1hbmRhdG9yeURhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgd2luZG93LmNhcnJpZXJfaWQgPSBkYXRhLmNhcnJpZXJfaWQ7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRFbGVtZW50ID0galF1ZXJ5KFwiLndjLWJsb2NrLWNvbXBvbmVudHMtc2hpcHBpbmctcmF0ZXMtY29udHJvbF9fcGFja2FnZVwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpbnB1dCBlbGVtZW50IGlzIHZpc2libGUsIHlvdSBjYW4gcHJvY2VlZCB3aXRoIHlvdXIgc2NyaXB0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja1Zpc2liaWxpdHkpOyAvLyBTdG9wIGNoZWNraW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWW91ciBjb2RlIGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIklUUyBWSVNJQkxFIDIyMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEJsb2NrU2hpcHBpbmdEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcHRpbWl6ZV9waWNrdXBfYnV0dG9uJykubGVuZ3RoIDw9IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk5vIHBpY2t1cCBidXR0b24gb24gcGFnZSBzbyB3ZSBhZGRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b24gPSBqUXVlcnkoXCI8YnV0dG9uIGNsYXNzPSdidXR0b24gYWx0IHNoaXB0aW1pemUtcGljay1sb2NhdGlvbicgdHlwZT0nYnV0dG9uJyBpZD0nc2hpcHRpbWl6ZV9waWNrdXBfYnV0dG9uJyBvbkNsaWNrPSdzaGlwdGltaXplLmdldFBpY2t1cExvY2F0aW9ucyhldmVudCknPlwiKyBzaGlwdGltaXplX2Nob29zZV9waWNrdXBfbG9jYXRpb24gK1wiPC9idXR0b24+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHBpbmdfcGlja3VwX2lkID0galF1ZXJ5KFwiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2hpcHBpbmdfcGlja3VwX2lkJyBpZD0nc2hpcHBpbmdfcGlja3VwX2lkJy8+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHBpbmdfcGlja3VwX2xhYmVsID0galF1ZXJ5KFwiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2hpcHBpbmdfcGlja3VwX2xhYmVsJyBpZD0nc2hpcHBpbmdfcGlja3VwX2xhYmVsJy8+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2hpcHRpbWl6ZV9waWNrdXBfZXh0ZW5kZWQgPSBqUXVlcnkoXCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZCcgaWQ9J3NoaXBwaW5nX3BpY2t1cF9leHRlbmRlZCcvPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNoaXB0aW1pemVfcGlja3VwX2Rlc2NyaXB0aW9uID0galF1ZXJ5KFwiPHNwYW4gY2xhc3NOYW1lPSdzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nIGlkPSdzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nPjwvc3Bhbj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzaGlwcGluZ19jYXJyaWVyX2lkID0galF1ZXJ5KFwiPHRyIHN0eWxlPSdkaXNwbGF5OiBub25lJz48dGQ+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nc2hpcHBpbmdfY2Fycmllcl9pZCcgaWQ9J3NoaXBwaW5nX2NhcnJpZXJfaWQnLz5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYnV0dG9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50WzBdLmFwcGVuZChidXR0b25bMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnRbMF0uYXBwZW5kKHNoaXBwaW5nX3BpY2t1cF9pZFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudFswXS5hcHBlbmQoc2hpcHBpbmdfcGlja3VwX2xhYmVsWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRFbGVtZW50WzBdLmFwcGVuZChzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudFswXS5hcHBlbmQoc2hpcHRpbWl6ZV9waWNrdXBfZGVzY3JpcHRpb25bMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVsZW1lbnRbMF0uYXBwZW5kKHNoaXBwaW5nX2NhcnJpZXJfaWRbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2Uuc2V0Q2FycmllcklkKHRoaXMuY2Fycmllcl9pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcHRpbWl6ZV9waWNrdXBfYnV0dG9uJykuaXMoJzp2aXNpYmxlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0J1dHRvbiBpcyB2aXNpYmxlIHNvIHdlIGNhbiBlbmFibGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29kZSB0byBydW4gYWZ0ZXIgMzAwIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJzQwMCBtaWxsaXNlY29uZHMgaGF2ZSBwYXNzZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24nKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgQ1NTIHN0eWxlcyBmb3IgdGhlIGVuYWJsZWQgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLndjLWJsb2NrLWNvbXBvbmVudHMtY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdibGFjaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnNvcic6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BhY2l0eSc6ICcxJyAgLy8gUmVzZXQgb3BhY2l0eSB0byBtYWtlIGl0IGZ1bGx5IHZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDMwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApOyAvLyBDaGVjayBldmVyeSAxMDAgbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJCVVRUT04gRU5BQkxFRCBHRVQgU0VMRUNURUQgQ0FSUklFUlwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChqUXVlcnkoJyNzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQnV0dG9uKCk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KS5mYWlsKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmF0YWwgZXJyb3Igd2lkZ2V0IHJlcXVlc3RpbmcgcG9pbnRzIGRvIHdlIGhhdmUgYW4gQVBJIGJ1Zz9cIik7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgaXNCbG9ja0NoZWNrb3V0KCl7XG4gICAgICAgIGlmIChqUXVlcnkoXCIud2MtYmxvY2stY2hlY2tvdXRcIikubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0T25DbGljaygpe1xuICAgICAgICBqUXVlcnkoXCIjc3ctcXVlcnktYnRuXCIpLm9uKCdjbGljaycgLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdlb2NvZGVRdWVyeSgpO1xuICAgICAgICB9KVxuXG5cblxuICAgICAgICBqUXVlcnkoJ2Zvcm1bbmFtZT1cImNoZWNrb3V0XCJdJykub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBhbnkgZm9ybSBmaWVsZCBpbnNpZGUgdGhlIFwiY2hlY2tvdXRcIiBmb3JtIGlzIGNoYW5nZWRcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRm9ybSBjaGFuZ2VkIVwiKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybVNoaXBwaW5nRGF0YSgpO1xuICAgICAgICAgICAgLy8gWW91IGNhbiBwZXJmb3JtIHlvdXIgZGVzaXJlZCBhY3Rpb25zIGhlcmVcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBnZXRGb3JtU2hpcHBpbmdEYXRhKCkge1xuXG4gICAgICAgIHZhciBjb3VudHJ5ID0galF1ZXJ5KCcjYmlsbGluZ19jb3VudHJ5JykudmFsKCksXG4gICAgICAgICAgICBzdGF0ZSA9IGpRdWVyeSgnI2JpbGxpbmdfc3RhdGUnKS52YWwoKSxcbiAgICAgICAgICAgIHBvc3Rjb2RlID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX3Bvc3Rjb2RlJykudmFsKCksXG4gICAgICAgICAgICBjaXR5ID0galF1ZXJ5KCcjYmlsbGluZ19jaXR5JykudmFsKCksXG4gICAgICAgICAgICBhZGRyZXNzID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMScpLnZhbCgpLFxuICAgICAgICAgICAgYWRkcmVzc18yID0galF1ZXJ5KCdpbnB1dCNiaWxsaW5nX2FkZHJlc3NfMicpLnZhbCgpLFxuICAgICAgICAgICAgc19jb3VudHJ5ID0gY291bnRyeSxcbiAgICAgICAgICAgIHNfc3RhdGUgPSBzdGF0ZSxcbiAgICAgICAgICAgIHNfcG9zdGNvZGUgPSBwb3N0Y29kZSxcbiAgICAgICAgICAgIHNfY2l0eSA9IGNpdHksXG4gICAgICAgICAgICBzX2FkZHJlc3MgPSBhZGRyZXNzLFxuICAgICAgICAgICAgc19hZGRyZXNzXzIgPSBhZGRyZXNzXzI7XG5cblxuICAgICAgICBpZiAoalF1ZXJ5KCcjc2hpcC10by1kaWZmZXJlbnQtYWRkcmVzcycpLmZpbmQoJ2lucHV0JykuaXMoJzpjaGVja2VkJykpIHtcbiAgICAgICAgICAgIHNfY291bnRyeSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NvdW50cnknKS52YWwoKTtcbiAgICAgICAgICAgIHNfc3RhdGUgPSBqUXVlcnkoJyNzaGlwcGluZ19zdGF0ZScpLnZhbCgpO1xuICAgICAgICAgICAgc19wb3N0Y29kZSA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfcG9zdGNvZGUnKS52YWwoKTtcbiAgICAgICAgICAgIHNfY2l0eSA9IGpRdWVyeSgnI3NoaXBwaW5nX2NpdHknKS52YWwoKTtcbiAgICAgICAgICAgIHNfYWRkcmVzcyA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18xJykudmFsKCk7XG4gICAgICAgICAgICBzX2FkZHJlc3NfMiA9IGpRdWVyeSgnaW5wdXQjc2hpcHBpbmdfYWRkcmVzc18yJykudmFsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBqUXVlcnkoJ2lucHV0W2FyaWEtbGFiZWwqPVwiQ291bnRyeS9SZWdpb25cIl0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHNfY291bnRyeSA9IGpRdWVyeSh0aGlzKS52YWwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyA9IHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogc19hZGRyZXNzLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTJcIjogc19hZGRyZXNzXzIsXG4gICAgICAgICAgICAgICAgXCJIb3VzZU51bWJlclwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIk51bWJlckV4dGVuc2lvblwiOiAnJyxcbiAgICAgICAgICAgICAgICBcIlBvc3RhbENvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcInNfcG9zdGNvZGVcIjogc19wb3N0Y29kZSxcbiAgICAgICAgICAgICAgICBcIkNpdHlcIjogc19jaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBzX2NvdW50cnksXG4gICAgICAgICAgICAgICAgXCJTdGF0ZVwiOiBzX3N0YXRlLFxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9zdF9kYXRhOiBqUXVlcnkoJ2Zvcm0uY2hlY2tvdXQnKS5zZXJpYWxpemUoKSxcbiAgICAgICAgICAgIFwiQ2FycmllcklkXCI6IGpRdWVyeShcIiNzaGlwcGluZ19jYXJyaWVyX2lkXCIpLnZhbCgpXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGRyZXNzID0gd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcy5BZGRyZXNzO1xuICAgIH1cblxuICAgIGdldFNoaXB0aW1pemVJZChtYWdlX2lkKSB7XG4gICAgICAgIHZhciBjYXJyaWVyX2lkID0gbWFnZV9pZC5tYXRjaCgvKFtcXGRdKylfcGlja3VwLyk7XG4gICAgICAgIGlmIChjYXJyaWVyX2lkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjYXJyaWVyX2lkWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBzaGlwdGltaXplX2NhcnJpZXJzLmxlbmd0aDsgKyt4KSB7XG4gICAgICAgICAgICBpZiAoc2hpcHRpbWl6ZV9jYXJyaWVyc1t4XS5DbGFzc05hbWUgPT09IG1hZ2VfaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIChzaGlwdGltaXplX2NhcnJpZXJzW3hdLklkKSA9PSAnb2JqZWN0JyA/IHNoaXB0aW1pemVfY2FycmllcnNbeF0uSWRbJzAnXSA6IHNoaXB0aW1pemVfY2FycmllcnNbeF0uSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQWRkcyB0aGUgbWFwIHRvIHRoZSBwYWdlXG4gICAgKi9cbiAgICBpbml0KCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyAmJiB0aGlzLnNldEFkZHJlc3ModGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICB0aGlzLmxvYWRTY3JpcHRzKCk7XG5cbiAgICAgICAgIXRoaXMub3B0aW9ucy5hZGRyZXNzICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTaGlwdGltaXplQWRkcmVzcycpICYmIHRoaXMuc2V0QWRkcmVzcyhKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTaGlwdGltaXplQWRkcmVzcycpKSk7XG4gICAgfTtcblxuXG4gICAgYWRkUG9pbnRJbmZvKHAsIHNlbGVjdGVkLCBleHRyYV9jbGFzcywgcGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YoZXh0cmFfY2xhc3MpID09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBleHRyYV9jbGFzcyA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9wZW4gPSB0eXBlb2YocC5Xb3JraW5nSG91cnNSYXcpICE9ICd1bmRlZmluZWQnICYmIHAuV29ya2luZ0hvdXJzUmF3ID8gSlNPTi5wYXJzZShwLldvcmtpbmdIb3Vyc1JhdykgOiBbXTtcbiAgICAgICAgbGV0IG9wZW5odG1sID0gJyc7XG4gICAgICAgIGxldCBtMmYgPSAnJztcbiAgICAgICAgbGV0IHdrZCA9ICcnO1xuICAgICAgICBsZXQgbG9jYWwgPSBwLkluZm9ybWF0aW9uLkFkZHJlc3M7XG5cbiAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvIFRvIHJlcGxhY2Ugd2hlbiB3ZSBoYXZlIGFuIGFjdHVhbCBmb3JtYXQgZm9yIGl0ICAqL1xuICAgICAgICBsZXQgb3BlbkhvdXJzID0gW107XG5cbiAgICAgICAgLyogTEVHQUNZIGNvZGUgdGhhdCB3ZSBhcmUgdXNpbmcgdG8gdHJhbnNmb3JtIHRoZSByYXcgZGF0YSBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gd29yayB3aXRoICAtLS0tLS0tLS0tLSAqL1xuICAgICAgICBsZXQgcmVnZXhGb3JtYXREZXYgPSBuZXcgUmVnRXhwKC8oW2EtekEtWjAtOV0rKVxcXyhbYS16QS1aMC05XSspXFxfKFthLXpBLVowLTldKylcXF8oW2EtekEtWjAtOV0rKVxcXyhbYS16QS1aMC05XSspXFxfKFthLXpBLVowLTldKylcXF8oW2EtekEtWjAtOV0rKS8sICdnJyk7XG4gICAgICAgIGxldCByZWdleEZvcm1hdExpdmUgPSBuZXcgUmVnRXhwKC8oW2EtekEtWjAtOV0rKVxcXyhbYS16QS1aMC05XSspXFxfKFthLXpBLVowLTldKylcXF8oW2EtekEtWjAtOV0rKS8sICdnJyk7XG4gICAgICAgIGxldCByZWdleEZvcm1hdCA9IHJlZ2V4Rm9ybWF0TGl2ZTtcbiAgICAgICAgbGV0IHJlZ0RheSA9IDE7IC8qIE1vbmRheSwgVHVlc2RheSAuLiovXG4gICAgICAgIGxldCByZWdPcGVuSWR4ID0gNDsgLyogMSwyLC4uLiAqL1xuICAgICAgICBsZXQgcmVnVHlwZUlkeCA9IDI7IC8qIE9wZW4gfCBjbG9zaW5nICovXG5cblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMob3BlbikubGVuZ3RoID4gMCAmJiBPYmplY3Qua2V5cyhvcGVuKS5zaGlmdCgpLm1hdGNoKHJlZ2V4Rm9ybWF0RGV2KSkge1xuICAgICAgICAgICAgcmVnZXhGb3JtYXQgPSByZWdleEZvcm1hdERldjtcbiAgICAgICAgICAgIHJlZ1R5cGVJZHggPSAzO1xuICAgICAgICAgICAgcmVnT3BlbklkeCA9IDc7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gb3Blbikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gb3BlbltrZXldO1xuXG4gICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKHJlZ2V4Rm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGxldCByZXMgPSByZWdleEZvcm1hdC5leGVjKGtleSk7XG4gICAgICAgICAgICAgICAgbGV0IGRheW5hbWUgPSByZXNbcmVnRGF5XTtcbiAgICAgICAgICAgICAgICBsZXQgb3BlbmlkeCA9IHBhcnNlSW50KHJlc1tyZWdPcGVuSWR4XSkgLSAxO1xuICAgICAgICAgICAgICAgIGxldCBkYXlpZHggPSB0aGlzLndlZWtkYXluYW1lcy5pbmRleE9mKGRheW5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihvcGVuSG91cnNbZGF5aWR4XSkgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgb3BlbkhvdXJzW2RheWlkeF0gPSBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG9wZW5Ib3Vyc1tkYXlpZHhdW29wZW5pZHhdKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBvcGVuSG91cnNbZGF5aWR4XVtvcGVuaWR4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5UaW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlVGltZTogJydcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBvcGVuSG91cnNbZGF5aWR4XVtvcGVuaWR4XVtyZXNbcmVnVHlwZUlkeF0gPT0gJ0Nsb3NpbmcnID8gJ0Nsb3NlVGltZScgOiAnT3BlblRpbWUnXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogTWFrZSBzdXJlIGl0J3Mgc29ydGVkICovXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BlbkhvdXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAvKiBTb21ldGltZXMgaXQncyBjbG9zZWQgb24gbW9uZGF5IG1lYW5pbmcgdGhlcmUncyBub3RoaW5nIGF0IGlkeCAwKi9cbiAgICAgICAgICAgIGlmICh0eXBlb2Yob3BlbkhvdXJzW2ldKSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHNjaGVkdWxlID0gb3BlbkhvdXJzW2ldO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFvcGVuID0gcGFyc2VJbnQoYS5PcGVuVGltZS5zdWJzdHJpbmcoMCwgMikpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm9wZW4gPSBwYXJzZUludChiLk9wZW5UaW1lLnN1YnN0cmluZygwLCAyKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhb3BlbiAtIGJvcGVuO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyogR3JvdXAgZGF0YSBzZXRcbiAgICAgICAgTGFiZWwgY2FuIGJlOlxuICAgICAgICBGaXJzdCBkYXkgLSBsYXN0IGRheSB3aXRoIHNhbWUgc2NoZWR1bGVcbiAgICAgICAgRXZlcnkgZGF5ICovXG5cbiAgICAgICAgb3BlbiA9ICh0eXBlb2YocC5Xb3JraW5nSG91cnMpICE9ICd1bmRlZmluZWQnKSA/IHAuV29ya2luZ0hvdXJzIDogb3BlbkhvdXJzO1xuICAgICAgICAvKiogSXQncyBhIGhhc2gsIG5vdCBhbiBhcnJheSAqKi9cbiAgICAgICAgbGV0IG5kYXlzb3BlbiA9IE9iamVjdC5rZXlzKG9wZW4pLmxlbmd0aDtcbiAgICAgICAgbGV0IGZyb21kYXkgPSB0aGlzLndlZWtkYXluYW1lc1swXTtcbiAgICAgICAgbGV0IHByZXZpb3VzVGltZSA9ICcnO1xuICAgICAgICBsZXQgaG91cnNodG1sID0gJyc7XG4gICAgICAgIGxldCBmcm9tZGF5aWR4ID0gMDtcbiAgICAgICAgbGV0IHRvRGF5ID0gJyc7XG4gICAgICAgIC8qLS0tLS0tLSovXG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgIGxldCBkYXkgPSBvcGVuW2ldO1xuICAgICAgICAgICAgbGV0IGRheWh0bWwgPSAnJztcbiAgICAgICAgICAgIGxldCB0b2RheSA9IHRoaXMud2Vla2RheW5hbWVzW2ldO1xuXG4gICAgICAgICAgICBkYXlodG1sICs9IGA8ZGl2IGNsYXNzPVwic3ctcG9pbnQtaW5mby1kYXlcIj5gO1xuICAgICAgICAgICAgaG91cnNodG1sID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBkYXkgJiYgaiA8IGRheS5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGxldCBob3VycyA9IGRheVtqXTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMuT3BlblRpbWUgPT0gbnVsbCAmJiBob3Vycy5DbG9zZVRpbWUgPT0gJzIzOjU5Jykge1xuICAgICAgICAgICAgICAgICAgICBob3Vyc2h0bWwgKz0gJzI0aCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaG91cnNodG1sICs9IChob3Vyc2h0bWwgPyAnIHwgJyA6ICcnKSArIGA8c3Bhbj4ke2hvdXJzLk9wZW5UaW1lID8gaG91cnMuT3BlblRpbWUgIDogJyd9IC0gJHtob3Vycy5DbG9zZVRpbWUgPyBob3Vycy5DbG9zZVRpbWUgOiAnJ308L3NwYW4+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKiBsYXN0IGRheSBvciBkaWZmZXJlbnQgdGltZSwgcHJpbnQgbGFzdCAqKi9cbiAgICAgICAgICAgIGlmICggcHJldmlvdXNUaW1lICYmIChwcmV2aW91c1RpbWUgIT0gaG91cnNodG1sKSB8fCAoaSA9PSA2KSkge1xuICAgICAgICAgICAgICAgIC8qKiBub3QgYSBsb3Qgb2Ygc2Vuc2UgaW4gbW9uLW1vbiovXG4gICAgICAgICAgICAgICAgbGV0IGlzaW50ZXJ2YWwgPSBpIC0gZnJvbWRheWlkeCA+IDI7XG4gICAgICAgICAgICAgICAgbGV0IGlzbGFzdCA9IGk9PTY7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvRGF5ID0gKGlzbGFzdCAmJiAoaG91cnNodG1sID09IHByZXZpb3VzVGltZSkpID8gdGhpcy53ZWVrZGF5bmFtZXNbaV0gOiB0aGlzLndlZWtkYXluYW1lc1tpLTFdO1xuICAgICAgICAgICAgICAgICAgICBkYXlodG1sICs9IGA8bGFiZWw+JHsoIGlzaW50ZXJ2YWwgJiYgZnJvbWRheSA/IGZyb21kYXkgKyAnIC0gJyA6ICcnICkgKyB0b0RheX06PC9sYWJlbD48c3Bhbj4ke3ByZXZpb3VzVGltZX08L3NwYW4+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICAgICAgb3Blbmh0bWwgKz0gZGF5aHRtbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNsYXN0ICYmIGhvdXJzaHRtbCAmJiAgKGhvdXJzaHRtbCAhPSBwcmV2aW91c1RpbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wZW5odG1sICs9IGA8ZGl2IGNsYXNzPVwic3ctcG9pbnQtaW5mby1kYXlcIj48bGFiZWw+JHt0aGlzLndlZWtkYXluYW1lc1tpXX06PC9sYWJlbD48c3Bhbj4ke2hvdXJzaHRtbH08L3NwYW4+PC9kaXY+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmcm9tZGF5ID0gaSA8IG5kYXlzb3BlbiAtIDEgPyB0aGlzLndlZWtkYXluYW1lc1tpXSA6ICcnO1xuICAgICAgICAgICAgICAgIGZyb21kYXlpZHggPSBpO1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVGltZSA9IGhvdXJzaHRtbDtcblxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzVGltZSA9IGhvdXJzaHRtbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3Blbmh0bWwgJiYgcHJldmlvdXNUaW1lKSB7XG4gICAgICAgICAgICBvcGVuaHRtbCA9IGA8bGFiZWw+JHtmcm9tZGF5fSAtICR7dGhpcy53ZWVrZGF5bmFtZXNbbmRheXNvcGVuIC0gMV19OiA8L2xhYmVsPjxzcGFuPiR7cHJldmlvdXNUaW1lfTwvc3Bhbj48L2Rpdj5gO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogLyBFTkQgTEVHQUNZIGNvZGUgLS0tLS0tLS0tLS0gKi9cblxuICAgICAgICBjb25zb2xlLmxvZyhcIlBvaW50XCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhwKTtcblxuICAgICAgICBsZXQgZVBvaW50SW5mbyA9IGpRdWVyeShgPGRpdiBjbGFzcz1cInN3LXBvaW50LWluZm8gJHtleHRyYV9jbGFzc31cIj5cbiAgPGg0IGNsYXNzPSdzdy1wb2ludC1pbmZvLW5hbWUnPiR7cC5JbmZvcm1hdGlvbi5OYW1lfTwvaDQ+XG4gIDxkaXYgY2xhc3M9J3N3LXBvaW50LWluZm8tYWRkcic+JHtsb2NhbH08L2Rpdj5cbiAgJHtwLkRpc3RhbmNlICE9PSBudWxsID8gYDxkaXYgY2xhc3M9J3N3LXBvaW50LWluZm8tZGlzdGFuY2UnPmAgKyBzaGlwdGltaXplX2Rpc3RhbmNlICsgXCIgXCIgKyBgICR7cC5EaXN0YW5jZX0gYCArIHNoaXB0aW1pemVfbWV0ZXIgKyBcIiBcIiArIGA8L2Rpdj5gIDogJyd9XG4gIDxkaXYgY2xhc3M9J3N3LXBvaW50LWluZm8tb3Blbic+JHt0aGlzLmdldFdvcmtpbmdEYXlzKHAuV29ya2luZ0hvdXJzKX08L2Rpdj5cbjwvZGl2PmApO1xuXG4gICAgICAgIC8qIElzIHRoZXJlIGFkaXRpb25hbCBpbmZvcm1hdGlvbiByZXF1aXJlZD8gICovXG4gICAgICAgIGlmICh0eXBlb2YocC5NYXBGaWVsZHNTZWxlY3QpICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBsZXQgbW9yZUZpZWxkcyA9IHAuTWFwRmllbGRzU2VsZWN0O1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBtb3JlRmllbGRzLmxlbmd0aDsgKytrKSB7XG4gICAgICAgICAgICAgICAgZVBvaW50SW5mby5hcHBlbmQoYDxkaXYgY2xhc3M9XCJzdy1wb2ludC1pbmZvLWFkZGl0aW9uYWxcIj48bGFiZWw+JHttb3JlRmllbGRzW2tdfTwvbGFiZWw+PGlucHV0IGRhdGEtaWQ9XCIke21vcmVGaWVsZHNba119XCIgY2xhc3M9XCJzaGlwdGltaXplX21hcGZpZWxkcyR7cC5Qb2ludElkfVwiIHR5cGU9XCJ0ZXh0XCIgIGlkPVwiJHttb3JlRmllbGRzW2tdfSR7cC5Qb2ludElkfVwiLz48L2Rpdj5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidG4gPSBqUXVlcnkoYDxidXR0b24gY2xhc3M9XCJzdy1wb2ludC1pbmZvLWJ0biAke3NlbGVjdGVkID8gJ3NlbGVjdGVkJyA6ICcnfVwiPiR7c2VsZWN0ZWQgPyBzaGlwdGltaXplX3NlbGVjdGVkIDogc2hpcHRpbWl6ZV9zZWxlY3R9PC9idXR0b24+YCk7XG4gICAgICAgIGJ0bi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBvaW50KHApO1xuICAgICAgICB9KTtcblxuICAgICAgICBlUG9pbnRJbmZvLmFwcGVuZChidG4pO1xuICAgICAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kKGVQb2ludEluZm8pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmQgY3VzdG9tIHN0eWxlXG4gICAgICogQHBhcmFtIHN0cmluZyBjc3MgLSBhIHN0cmluZyB3aXRoIHRoZSBzdHlsZSB0byBpbmplY3RcbiAgICAgKi9cbiAgICBhZGRDdXN0b21TdHlsZShjc3MpIHtcblxuICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgIHN0eWxlLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cbiAgICAgICAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICAgICAgICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9O1xuXG4gICAgYWRkTWFwSHRtbCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBREQgTUFQIEhUTUwgT3B0aW9ucyBhZGRyZXNzXCIpXG5cbiAgICAgICAgbGV0IGFkZHJlc3N0ciA9ICcnO1xuICAgICAgICAvKiBJcmVsYW5kIGRvZXMgbm90IGhhdmUgcG9zdGFsIGNvZGVzICovXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWRkcmVzcy5TdHJlZXRuYW1lMSkge1xuICAgICAgICAgICAgYWRkcmVzc3RyID0gdGhpcy5vcHRpb25zLmFkZHJlc3MuUG9zdGFsQ29kZSA/IHRoaXMub3B0aW9ucy5hZGRyZXNzLlBvc3RhbENvZGUgOiB0aGlzLm9wdGlvbnMuYWRkcmVzcy5TdHJlZXRuYW1lMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWFwaHRtbCA9IGA8ZGl2IGlkPVwic3dcIj5cbiAgICA8ZGl2IGlkPVwic3dfX292ZXJsYXlcIj48L2Rpdj5cbiAgICA8ZGl2IGlkPVwic3dfX2NvbnRhaW5lclwiPlxuICAgICAgPGRpdiBpZD1cInN3LXNlYXJjaFwiPlxuICAgICAgICA8ZGl2IGlkPVwic3ctcXVlcnktd3JhcHBlclwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwic3ctcXVlcnlcIiBwbGFjZWhvbGRlcj1cIiR7YWRkcmVzc3RyfVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cInN3LXF1ZXJ5LXJlc3VsdHNcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cInF1ZXJ5LW9wdGlvbnNcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJzdy1kaXNwbGF5LW9wdGlvbnNcIj5cbiAgICAgIDwvZGl2PiBcbiAgICAgIDxkaXYgaWQ9XCJzdy1tYXAtd3JhcHBlclwiIGNsYXNzPVwic3ctdGFiIHNlbGVjdGVkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJzdy1tYXBcIiBjbGFzcz1cInNoaXB0aW1pemUtcGlja3VwX19tYXBcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBpZD1cInN3LW1hcC1lcnJvclwiPjwvZGl2PiBcbiAgICAgICAgPGRpdiBpZD1cInN3LW1hcC1zZWxlY3RlZC1wb2ludFwiPjwvZGl2PlxuICAgICAgPC9kaXY+ICBcbiAgICAgIDxkaXYgY2xhc3M9J3N3LXRhYic+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgaWQ9XCJzdy1saXN0LXBvaW50c1wiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGlkPVwic3ctbWFwLW1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgIDxkaXYgaWQ9XCJzdy1zZWFyY2gtc3RhdHVzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdy1sb2FkZXJcIj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PGRpdj48L2Rpdj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5gO1xuICAgICAgICBqUXVlcnkodGhpcy5tYXBQYXJlbnRDb250YWluZXIpLmFwcGVuZChtYXBodG1sKTtcbiAgICAgICAgbGV0IGRpc3BsYXlPcHRpb25zID0galF1ZXJ5KFwiI3N3LWRpc3BsYXktb3B0aW9uc1wiKTtcbiAgICAgICAgbGV0IG9wdE1hcCA9IGpRdWVyeShgPHNwYW4gY2xhc3M9J3N3LWRpc3BsYXktb3B0aW9uIHNlbGVjdGVkJz5gK3NoaXB0aW1pemVfbWFwK2A8L3NwYW4+YCk7XG4gICAgICAgIGxldCBvcHRMaXN0ID0galF1ZXJ5KGA8c3BhbiBjbGFzcz0nc3ctZGlzcGxheS1vcHRpb24nXCI+YCtzaGlwdGltaXplX2xpc3QrYDwvc3Bhbj5gKTtcblxuICAgICAgICBvcHRNYXAub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3REaXNwbGF5T3B0aW9uKDApO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0TGlzdC5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERpc3BsYXlPcHRpb24oMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRpc3BsYXlPcHRpb25zLmFwcGVuZChvcHRNYXApO1xuICAgICAgICBkaXNwbGF5T3B0aW9ucy5hcHBlbmQob3B0TGlzdCk7XG5cbiAgICAgICAgbGV0IHF1ZXJ5b3B0ID0galF1ZXJ5KFwiI3N3LXF1ZXJ5LXdyYXBwZXJcIik7XG4gICAgICAgIGxldCBzZWFyY2hidG4gPSBqUXVlcnkoYDxidXR0b24gaWQ9XCJzdy1xdWVyeS1idG5cIlwiPmArc2hpcHRpbWl6ZV9zZWFyY2grYDwvYnV0dG9uPmApO1xuICAgICAgICBxdWVyeW9wdC5hcHBlbmQoc2VhcmNoYnRuKTtcblxuICAgICAgICBzZWFyY2hidG4ub24oJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZW9jb2RlUXVlcnkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHF1ZXJ5aW5wdXQgPSBqUXVlcnkoXCIjc3ctcXVlcnlcIik7XG4gICAgICAgIHF1ZXJ5aW5wdXQub24oJ2tleXVwJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2dC5rZXlDb2RlID09IDEzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW9jb2RlUXVlcnkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50aW1lb3V0S2V5RG93biAmJiBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0S2V5RG93bik7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRLZXlEb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW9jb2RlUXVlcnkoKTtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGpRdWVyeShcIiNzd19fb3ZlcmxheVwiKS5jbGljaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTWFwKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBkZWNpbWFsIGxhdFxuICAgICAqIEBwYXJhbSBkZWNpbWFsIGxuZ1xuICAgICAqL1xuICAgIGNlbnRlck1hcChsYXQsIGxuZykge1xuICAgICAgICB0aGlzLm1hcGludGVyZmFjZS5jZW50ZXJNYXAobGF0LCBsbmcpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBtYXBcbiAgICAgKi9cbiAgICBjbG9zZU1hcCgpIHtcbiAgICAgICAgalF1ZXJ5KFwiI3N3XCIpXG4gICAgICAgICAgICAucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpO1xuICAgICAgICBqUXVlcnkoJ2h0bWwsYm9keScpXG4gICAgICAgICAgICAuc2Nyb2xsVG9wKHRoaXMudXNlclNjcm9sbCk7XG4gICAgfTtcblxuICAgIGRpc3BsYXlNZXNzYWdlKG1zZykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIk1lc3NhZ2UgZGlzcGxheVwiKTtcbiAgICAgICAgY29uc29sZS5sb2cobXNnKTtcbiAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5hZGRDbGFzcyhcIm9wZW5cIik7XG5cbiAgICAgICAgaWYgKG1zZy5JZCA9PSA5OSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIklGIDk5XCIpO1xuICAgICAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5odG1sKHNoaXB0aW1pemVfbm9fcG9pbnRzX2ZvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpRdWVyeSgnI3N3LW1hcC1tZXNzYWdlJykuaHRtbChtc2cpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIERpc3BsYXkgdGhlIHBvc3NpYmxlIG9wdGlvbiB0byB0aGUgdXNlciBpbiBhIGxpc3QgdW5kZXIgdGhlIHNlYXJjaCBpbnB1dFxuICAgICAqL1xuXG4gICAgLy9cbiAgICAvLyAjI0RKREogQnBvc3Qgc3R1ZmZcbiAgICBkaXNwbGF5UGxhY2VzKHBsYWNlcykge1xuICAgICAgICBjb25zb2xlLmxvZygxMSk7XG4gICAgICAgIGpRdWVyeShcIi5zdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCIpLmh0bWwoJycpO1xuXG4gICAgICAgIHRoaXMucXVlcnlSZXN1bHRzID0gcGxhY2VzO1xuICAgICAgICBsZXQgcmVzdWx0c0NvbnRhaW5lciA9IGpRdWVyeShcIiNzdy1xdWVyeS1yZXN1bHRzXCIpO1xuXG4gICAgICAgIC8vICMjREpESiBPdmRlIHZlcm92YXRubyB0cmViYSBpem1lbmEgZGEgc2Ugb2RyYWRpXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGlzcGxheSBwbGFjZXNcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKHBsYWNlcyk7XG5cbiAgICAgICAgbGV0IGh0bWwgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZXMubGVuZ3RoOyArK2kpIHtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbGFjZXNbaV0uYWRkcmVzcy5Qb3N0YWxDb2RlICE9ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZvdW5kIHBsYWNlXCIpXG4gICAgICAgICAgICAgICAgaHRtbCArPSBgPGRpdiBjbGFzcz1cInN3LXF1ZXJ5LXJlc3VsdFwiIGRhdGEtaWR4PVwiJHtpfVwiPiR7cGxhY2VzW2ldLmRpc3BsYXlfbmFtZX08L2Rpdj5gXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWh0bWwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm8gcGxhY2UgZm91bmRcIik7XG4gICAgICAgICAgICBodG1sID0gc2hpcHRpbWl6ZV9ub19yZXN1bHRzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coMjIpO1xuXG4gICAgICAgIHJlc3VsdHNDb250YWluZXIuaHRtbChodG1sKTtcbiAgICAgICAgalF1ZXJ5KFwiLnN3LXF1ZXJ5LXJlc3VsdFwiKS5vbignY2xpY2snLCAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKDMzKTtcblxuICAgICAgICAgICAgbGV0IGlkeCA9IGpRdWVyeShldnQudGFyZ2V0KS5hdHRyKFwiZGF0YS1pZHhcIik7XG5cbiAgICAgICAgICAgIGlmIChwYXJzZUludChpZHgpID09ICdpc05hTicgfHwgaWR4ID4gdGhpcy5xdWVyeVJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJpbnZhbGlkIGlkeCBzZWxlY3RlZDogXCIsIGlkeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGxhY2UgPSB0aGlzLnF1ZXJ5UmVzdWx0c1tpZHhdO1xuXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQgPSBwbGFjZS5sYXQ7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5Mb25nID0gcGxhY2UubG5nO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInNlbGVjdGVkIFwiLCB0aGlzLnF1ZXJ5UmVzdWx0c1tpZHhdKTtcbiAgICAgICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeS1yZXN1bHRzXCIpLmh0bWwoJycpO1xuICAgICAgICAgICAgalF1ZXJ5KFwiI3N3LXF1ZXJ5XCIpLnZhbChwbGFjZS5kaXNwbGF5X25hbWUpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihwbGFjZS5hZGRyZXNzKSAhPSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHByb3AgaW4gcGxhY2UuYWRkcmVzcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2UuYWRkcmVzc1twcm9wXSAmJiAocGxhY2UuYWRkcmVzc1twcm9wXS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3NbcHJvcF0gPSBwbGFjZS5hZGRyZXNzW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuU3RyZWV0bmFtZTEgPSBwbGFjZS5hZGRyZXNzLlN0cmVldG5hbWUxO1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGxhY2UuYWRkcmVzcywgXCJBZGRyZXNzIGlzIG5vdyBcIiwgdGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICAgICAgdGhpcy5mZXRjaFBvaW50cyh0aGlzLm9wdGlvbnMuYWRkcmVzcyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBoYXNoTGF0TG5nKHBvaW50KSB7XG4gICAgICAgIGxldCBsYXRzdHIgPSAocG9pbnQubGF0ICsgJycpLnJlcGxhY2UoJy4nLCAnLScpO1xuICAgICAgICBsZXQgbG5nc3RyID0gKHBvaW50LmxuZyArICcnKS5yZXBsYWNlKCcuJywgJy0nKTtcblxuICAgICAgICByZXR1cm4gJ3InICsgbGF0c3RyICsgJ18nICsgbG5nc3RyO1xuICAgIH07XG5cblxuICAgIGRpc3BsYXlSZXN1bHRzKGRhdGEpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJEaXNwbGF5UG9pbnRzMjIzMjJcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLm1hcGludGVyZmFjZS5jbGVhck1hcmtlcnMoKTtcbiAgICAgICAgalF1ZXJ5KFwiI3N3X19jb250YWluZXJcIikucmVtb3ZlQ2xhc3MoJ3NlYXJjaGluZycpO1xuICAgICAgICB0aGlzLnBpY2t1cFBvaW50c0xvYWRTdG9wKCk7XG4gICAgICAgIGpRdWVyeShcIi5zdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uXCIpLmh0bWwoXCI8ZGl2IGNsYXNzPSdzdy1xdWVyeS1yZXN1bHRzLWRlc2NyaXB0aW9uJz5cIiArIHNoaXB0aW1pemVfdGhlICsgIGRhdGEuQ291bnQgKyBzaGlwdGltaXplX2Nsb3Nlc3QgKyBcIjwvZGl2PlwiKTtcblxuICAgICAgICAvLyAjI0RKREogV1AgZXhjbHVzaXZlIGlzc3VlIGJlY2F1c2Ugb2YgdGhpc1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICB0aGlzLnBpY2t1cFBvaW50cyA9IGRhdGEuUG9pbnQ7XG4gICAgICAgIHRoaXMubWFwQ2hhbmdlZCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVMaXN0KHRoaXMucGlja3VwUG9pbnRzKTtcbiAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuYWRkTWFya2Vycyh0aGlzLnBpY2t1cFBvaW50cywgKGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJBZGRlZCBtYXJrZXJzXCIpXG4gICAgICAgICAgICBsZXQgcGFyZW50ID0galF1ZXJ5KFwiI3N3LW1hcC1zZWxlY3RlZC1wb2ludFwiKTtcbiAgICAgICAgICAgIHBhcmVudC5odG1sKFwiXCIpO1xuICAgICAgICAgICAgdGhpcy5hZGRQb2ludEluZm8odGhpcy5waWNrdXBQb2ludHNbaWR4XSwgMCwgJycsIHBhcmVudCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIHBvaW50IGluZm9cIilcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLnNlbGVjdFBvaW50KGlkeCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkFmdGVyIHNlbGVjdCBwb2ludCBicmVha1wiKVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIH0sIDEwMCk7XG5cbiAgICB9O1xuXG5cbiAgICAvKioqXG4gICAgICogR2V0IFBvaW50cyBmcm9tIHRoZSBBUEkgYW5kIGRpc3BsYXkgdGhlbVxuICAgICAqKi9cbiAgICBmZXRjaFBvaW50cyhhZGRyZXNzLCBmcmVzb2x2ZSkge1xuICAgICAgICAvLyAjI0RKREogQWtvIGplIGJsb2NrIG92byBuZSB0cmViYSwgYWtvIG5pamUgb25kYSB0cmViYVxuICAgICAgICBpZiAoIXRoaXMuaXNCbG9ja0NoZWNrb3V0KCkpe1xuICAgICAgICAgICAgdGhpcy5jYXJyaWVyX2lkID0galF1ZXJ5KCcjc2hpcHBpbmdfY2Fycmllcl9pZCcpLnZhbCgpO1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJyaWVySWQoalF1ZXJ5KCcjc2hpcHBpbmdfY2Fycmllcl9pZCcpLnZhbCgpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzLkNvdW50cnkgPSBqUXVlcnkoJyNzaGlwcGluZy1jb3VudHJ5JykudmFsKCk7XG5cbiAgICAgICAgLy8gIyNESkRKIE92byBkb2xlIHUgZWxzZSBqZSB2aXNhayBpemdsZWRhXG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRDYXJyaWVySWQodGhpcy5jYXJyaWVyX2lkKTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zb2xlLmxvZyhcIkZldGNoUG9pbnRzMjMyMjIyXCIpO1xuICAgICAgICAvLyAjI0RKREogT3ZkZSBzaSBzdGFvLCB0cmViYSBzZSBwcm9zbGVkaXRpIGNhcnJpZXIgaWQgbmVrYWtvXG4gICAgICAgIGNvbnNvbGUubG9nKGFkZHJlc3MpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNhcnJpZXJfaWQpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludCA9IG51bGw7XG5cbiAgICAgICAgalF1ZXJ5KFwiI3N3LW1hcC1zZWxlY3RlZC1wb2ludFwiKS5odG1sKCcnKTtcbiAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgICAgICBqUXVlcnkoXCIuc3ctcXVlcnktcmVzdWx0cy1kZXNjcmlwdGlvblwiKS5odG1sKCcnKTtcblxuICAgICAgICBpZiAoIXRoaXMubWFwaW50ZXJmYWNlLmlzTWFwTW92aW5nKCkpIHtcbiAgICAgICAgICAgIGpRdWVyeShcIiNzd19fY29udGFpbmVyXCIpLmFkZENsYXNzKCdzZWFyY2hpbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuY2FjaGVSZXN1bHRzW3RoaXMuaGFzaExhdExuZyh7XG4gICAgICAgICAgICBsYXQ6IHRoaXMub3B0aW9ucy5hZGRyZXNzLkxhdCxcbiAgICAgICAgICAgIGxuZzogdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZ1xuICAgICAgICB9KV0pICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT1ZERUVFRUVcIik7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlSZXN1bHRzKHRoaXMuY2FjaGVSZXN1bHRzW3RoaXMuaGFzaExhdExuZyh7bGF0OiB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQsIGxuZzogdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZ30pXSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVxID0ge1xuICAgICAgICAgICAgXCJBZGRyZXNzXCI6IGFkZHJlc3MsXG4gICAgICAgICAgICBcIkNhcnJpZXJJZFwiOiB0aGlzLmNhcnJpZXJfaWQsXG4gICAgICAgICAgICAnYWN0aW9uJzogJ3NoaXB0aW1pemVfcGlja3VwX2xvY2F0aW9ucydcbiAgICAgICAgfTtcblxuICAgICAgICBqUXVlcnkuZ2V0SlNPTih0aGlzLm9wdGlvbnMuYWpheF91cmwsIHJlcSAsICAoZGF0YSkgID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2FvYW9vbyBuYXNhb29vXCIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFqYXhfdXJsKTtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmNsZWFyTWFya2VycygpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgICAvKiBXZSBoYXZlIHRoZSBwb2ludHMgcmVtb3ZlIHRoZSBsb2FkZXIgKi9cbiAgICAgICAgICAgIHRoaXMucGlja3VwUG9pbnRzTG9hZFN0b3AoKTtcblxuICAgICAgICAgICAgalF1ZXJ5KFwiI3N3LW1hcC13cmFwcGVyXCIpLnJlbW92ZUNsYXNzKCdsb2FkaW5nJyk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgalF1ZXJ5KFwiI3N3X19jb250YWluZXJcIikucmVtb3ZlQ2xhc3MoJ3NlYXJjaGluZycpO1xuXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGRhdGEuRXJyb3IgJiYgZGF0YS5FcnJvci5JZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TWVzc2FnZShkYXRhLkVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEuUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5Qb2ludC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVSZXN1bHRzW3RoaXMuaGFzaExhdExuZyh7bGF0OiB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQsIGxuZzogdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZ30pXSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVJlc3VsdHMoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5TWVzc2FnZShzaGlwdGltaXplX25vX3BvaW50c19mb3VuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIChmcmVzb2x2ZSkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAvKiBXZSB3YW50IHRvIG1ha2Ugc3VyZSBjaGFuZ2VzIGFyZSBjb21taXRlZCB0byB0aGUgZG9tIGJlZm9yZSB3ZSBkZWNsYXJlIHdlJ3JlIGRvbmUgKi9cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5mYWlsKChlcnIpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheU1lc3NhZ2Uoc2hpcHRpbWl6ZV9ub19wb2ludHNfZm91bmQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGYXRhbCBlcnJvciB3aWRnZXQgcmVxdWVzdGluZyBwb2ludHMgZG8gd2UgaGF2ZSBhbiBBUEkgYnVnP1wiLCBlcnIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGdlb2NvZGVRdWVyeSgpIHtcbiAgICAgICAgalF1ZXJ5KFwiI3N3LXF1ZXJ5LXJlc3VsdHNcIikuaHRtbCgnJyk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJHZW9jb2RlIHF1ZXJ5XCIpO1xuXG4gICAgICAgIGxldCBxdWVyeXZhbCA9IGpRdWVyeShcIiNzdy1xdWVyeVwiKS52YWwoKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhxdWVyeXZhbCk7XG5cbiAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTGF0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZyA9IG51bGw7XG5cbiAgICAgICAgaWYgKHF1ZXJ5dmFsLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiT1ZPVElUUkVCQVwiKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1hcGludGVyZmFjZSk7XG5cblxuICAgICAgICBjb25zb2xlLmxvZyhcIk9WREUgQ09VTlRSWVwiKTtcblxuICAgICAgICBpZiAoalF1ZXJ5KCcjY29tcG9uZW50cy1mb3JtLXRva2VuLWlucHV0LTAnKS5sZW5ndGgpe1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuQ291bnRyeSA9IGpRdWVyeSgnI2NvbXBvbmVudHMtZm9ybS10b2tlbi1pbnB1dC0wJykudmFsKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoalF1ZXJ5KFwiI3NoaXBwaW5nLWNvdW50cnkgb3B0aW9uOnNlbGVjdGVkXCIpLmxlbmd0aCl7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5Db3VudHJ5ID0galF1ZXJ5KFwiI3NoaXBwaW5nLWNvdW50cnkgb3B0aW9uOnNlbGVjdGVkXCIpLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGpRdWVyeSgnI3NoaXBwaW5nLWNvdW50cnknKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hZGRyZXNzLkNvdW50cnkgPSBqUXVlcnkoJyNzaGlwcGluZy1jb3VudHJ5IG9wdGlvbjpzZWxlY3RlZCcpLnRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGpRdWVyeSgnI3NlbGVjdDItYmlsbGluZ19jb3VudHJ5LWNvbnRhaW5lcicpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuQ291bnRyeSA9IGpRdWVyeSgnI3NlbGVjdDItYmlsbGluZ19jb3VudHJ5LWNvbnRhaW5lcicpLnRleHQoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKFNISVBUSU1JWkVfUExVR0lOX1VSTC5pbmNsdWRlcygnQnBvc3QnKSAmJiAodGhpcy5vcHRpb25zLmFkZHJlc3MuQ291bnRyeSA9PSAnQkUnIHx8IHRoaXMub3B0aW9ucy5hZGRyZXNzLkNvdW50cnkgPT0gJ2JlJyB8fCB0aGlzLm9wdGlvbnMuYWRkcmVzcy5Db3VudHJ5ID09ICdCZWxnaXVtJykpe1xuICAgICAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUJwb3N0KHtcbiAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjogcXVlcnl2YWwsXG4gICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6ICdCRSdcbiAgICAgICAgICAgIH0sIChyZXNwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJHZW9jb2RlZWVlXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3ApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVBsYWNlcyhyZXNwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hcGludGVyZmFjZS5nZW9jb2RlKHtcbiAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjogcXVlcnl2YWwsXG4gICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IHRoaXMub3B0aW9ucy5hZGRyZXNzLkNvdW50cnlcbiAgICAgICAgICAgIH0sIChyZXNwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJHZW9jb2RlZWVlXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3ApO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVBsYWNlcyhyZXNwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHNoaXBwaW5nRGF0YSwgdGhlIGFkZHJlc3MgcGFydHNcbiAgICAgKiBAcGFyYW0gZl9jYWxsYmFjayAsIHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYWxsIG1pZ2h0eSBnb29nbGUgcmV0dXJucyBhIHJlc3VsdFxuICAgICAqL1xuICAgIGdlb2NvZGVBZGRyZXNzKGFkZHJlc3MsIGZfY2FsbGJhY2spIHtcbiAgICAgICAgY29uc29sZS5sb2coYWRkcmVzcyk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VPQ09ERUFERFJFU1NcIik7XG4gICAgICAgIGlmIChhZGRyZXNzLmNvdW50cnkgPT0gJ1BvcnR1Z2FsJyAmJiB0eXBlb2YgKG1pc3NpbmdaaXBQVCkgIT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8qIElzIHRoaXMgYSBwb3N0YWwgY29kZSB3ZSBrbm93IGlzIG5vdCBnZW9jb2RhYmxlIGluIG5vbWluYXRpbT8gKi9cbiAgICAgICAgICAgIGxldCB6aXA0ZGlnID0gYWRkcmVzcy5wb3N0Y29kZS5zdWJzdHJpbmcoMCwgNCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pc3NpbmdaaXBQVC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmIChtaXNzaW5nWmlwUFRbaV0uemlwY29kZSA9PSB6aXA0ZGlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHRzID0gW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfbmFtZTogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhdDogbWlzc2luZ1ppcFBUW2ldLmxhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuZzogbWlzc2luZ1ppcFBUW2ldLmxuZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlZXQ6IFwic3RyZWV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdGNvZGU6IGFkZHJlc3MucG9zdGNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2l0eTogbWlzc2luZ1ppcFBUW2ldLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHJ5X2NvZGU6IGFkZHJlc3MuY291bnRyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMucXVlcnlSZXN1bHRzKTtcbiAgICAgICAgICAgICAgICAgICAgZl9jYWxsYmFjayh0aGlzLnF1ZXJ5UmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhcIk5pamUgcmVzZW5vXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1hcGludGVyZmFjZSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJBRFJFU0FcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGFkZHJlc3MpO1xuXG4gICAgICAgIGlmIChTSElQVElNSVpFX1BMVUdJTl9VUkwuaW5jbHVkZXMoJ0Jwb3N0JykgJiYgKGFkZHJlc3MuQ291bnRyeSA9PSAnQkUnIHx8IGFkZHJlc3MuQ291bnRyeSA9PSAnYmUnIHx8IGFkZHJlc3MuQ291bnRyeSA9PSAnQmVsZ2l1bScpKXtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmdlb2NvZGVBZGRyZXNzUGFydHNCcG9zdCggKGdlb2NvZGUpICA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFnZW9jb2RlLmxhdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUFkZHJlc3NQYXJ0c0Jwb3N0KCAoZ2VvY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZl9jYWxsYmFjayhnZW9jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgYWRkcmVzcy5DaXR5LCBhZGRyZXNzLkNvdW50cnkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZfY2FsbGJhY2soZ2VvY29kZSk7XG4gICAgICAgICAgICB9LCBhZGRyZXNzLkNpdHksIGFkZHJlc3MuQ291bnRyeSwgYWRkcmVzcy5Qb3N0YWxDb2RlLCBhZGRyZXNzLlN0cmVldG5hbWUxKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUFkZHJlc3NQYXJ0cyggKGdlb2NvZGUpICA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFnZW9jb2RlLmxhdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBpbnRlcmZhY2UuZ2VvY29kZUFkZHJlc3NQYXJ0cyggKGdlb2NvZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZfY2FsbGJhY2soZ2VvY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sIGFkZHJlc3MuQ2l0eSwgYWRkcmVzcy5Db3VudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmX2NhbGxiYWNrKGdlb2NvZGUpO1xuICAgICAgICAgICAgfSwgYWRkcmVzcy5DaXR5LCBhZGRyZXNzLkNvdW50cnksIGFkZHJlc3MuUG9zdGFsQ29kZSwgYWRkcmVzcy5TdHJlZXRuYW1lMSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgbWFwTW92ZWQobWFwY2VudGVyKSB7XG4gICAgICAgIGpRdWVyeShcIiNzdy1wb2ludC1pbmZvXCIpLmh0bWwoXCJcIik7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcy5MYXQgPSBtYXBjZW50ZXIubGF0O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZyA9IG1hcGNlbnRlci5sbmc7XG4gICAgICAgICAgICB0aGlzLmZldGNoUG9pbnRzKHRoaXMub3B0aW9ucy5hZGRyZXNzLCByZXNvbHZlKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGxvYWRMYWJlbHMoZmNhbGxiYWNrKSB7XG4gICAgICAgIGpRdWVyeS5nZXRKU09OKHRoaXMub3B0aW9ucy5hamF4TG9hZExhYmVscywgKHJlc3ApID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYWJlbHMgPSByZXNwO1xuICAgICAgICAgICAgZmNhbGxiYWNrKHJlc3ApO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZhaWwoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgZmV0Y2hpbmcgd2lkZ2V0IGxhYmVscyBhdCBcIiArIHRoaXMub3B0aW9ucy5hamF4TG9hZExhYmVscywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBsb2FkU2NyaXB0cygpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJMb2FkIHNjcmlwdHMgd2lkZ2V0XCIpO1xuICAgICAgICAvKiBub3QgZGVmaW5lZCBvciB2ZXJzaW9uIDwgMS43IGNvbXBhcmUgb25seSBzdWJ2ZXJzaW9uIGZvciBzaW1wbGljaXR5ICoqL1xuICAgICAgICBpZiAodHlwZW9mIChqUXVlcnkpID09ICd1bmRlZmluZWQnIHx8IChwYXJzZUludChqUXVlcnkuZm4uanF1ZXJ5LnN1YnN0cmluZygyLCAyKSkgPCA3KSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkIHNjcmlwdHMgd2lkZ2V0IGlmXCIpO1xuICAgICAgICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMubG9hZFNjcmlwdCgnaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTMuNy4wLm1pbi5qcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBtZS5zY3JpcHRzTG9hZGVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKG1lLm9wdGlvbnMub25pbml0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1lLm9wdGlvbnMub25pbml0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImpxdWVyeSBpcyB3aWRnZXQgbG9hZGVkIGJvb3RzdHJhcFwiKTtcbiAgICAgICAgICAgIHRoaXMuc2NyaXB0c0xvYWRlZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5vbmluaXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMub25pbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gU3RyaW5nIHVybCAtIHRoZSB1cmwgb2YgdGhlIHNjcmlwdCB0byBsb2FkXG4gICAgICogQHBhcmFtIFN0cmluZyBjYWxsYmFjayAtIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBjYWxsIGFmdGVyIHRoZSBzY3JpcHQgaXMgbG9hZGVkXG4gICAgICovXG4gICAgbG9hZFNjcmlwdCh1cmwsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiTG9hZCBTY3JpcHQgd2lkZ2V0IHNpbmd1bGFyXCIpO1xuICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgc2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xuXG4gICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkgeyAvKklFICovXG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PSAnbG9hZGVkJyB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PSAnY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBjYWxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBzY3JpcHQuc3JjID0gdXJsO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9O1xuXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gc3RyaW5nIHVybFxuICAgICAqL1xuICAgIHN0YXRpYyBsb2FkU3R5bGUodXJsKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJMT0FERERERCBURVNUVFRUVFRUXCIpO1xuICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgIHN0eWxlLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgc3R5bGUuaHJlZiA9IHVybDtcblxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9O1xuXG4gICAgbG9nKG1zZywgZm9yY2UpIHtcbiAgICAgICAgaWYgKCFmb3JjZSAmJiAhdGhpcy5vcHRpb25zLmRlYnVnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBjbGVhciBhbnkgdWkgZWxlbWVudHMgdGhhdCByZXN1bHQgZnJvbSBzZWxlY3Rpb24gYW5kIG90aGVyIHN0YXRlIHZhcmlhYmxlc1xuICAgICAqL1xuICAgIHJlc2V0TWFwRWxlbWVudHMoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludCA9IG51bGw7XG5cbiAgICAgICAgalF1ZXJ5KFwiI3N3LW1hcC1zZWxlY3RlZC1wb2ludFwiKS5odG1sKCcnKTtcbiAgICAgICAgalF1ZXJ5KCcjc3ctbWFwLW1lc3NhZ2UnKS5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgICAgICBqUXVlcnkoXCIuc3ctcXVlcnktcmVzdWx0cy1kZXNjcmlwdGlvblwiKS5odG1sKCcnKTtcbiAgICB9O1xuXG4gICAgb3Blbk1hcCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJPcGVuIG1hcCB3aWRnZXQyMzIyMjIyMjY2NjY2NlwiKTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNCbG9ja0NoZWNrb3V0KCkpe1xuICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gbmV3IFdvb2NvbW1lcmNlKCk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyA9IHBsYXRmb3JtLmdldFNoaXBwaW5nRGF0YSgpLkFkZHJlc3M7XG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jYXJyaWVyX2lkKTtcbiAgICAgICAgdGhpcy51c2VyU2Nyb2xsID0galF1ZXJ5KCdodG1sLGJvZHknKVxuICAgICAgICAgICAgLnNjcm9sbFRvcCgpO1xuXG4gICAgICAgIGpRdWVyeSgnaHRtbCxib2R5JylcbiAgICAgICAgICAgIC5zY3JvbGxUb3AoMCk7XG5cbiAgICAgICAgalF1ZXJ5KFwiI3N3XCIpXG4gICAgICAgICAgICAuYWRkQ2xhc3MoXCJvcGVuXCIpO1xuICAgICAgICBqUXVlcnkoXCIjc3ctbWFwLXdyYXBwZXJcIikuYWRkQ2xhc3MoJ2xvYWRpbmcnKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcIk92ZGVlZSAxXCIpO1xuXG4gICAgICAgIGpRdWVyeShcIiNzdy1xdWVyeVwiKS52YWwodGhpcy5vcHRpb25zLmFkZHJlc3MuU3RyZWV0bmFtZTEpO1xuICAgICAgICB0aGlzLnNlbGVjdERpc3BsYXlPcHRpb24oMCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXCJPdmRlZWUgM1wiKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpXG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hZGRyZXNzLlN0cmVldG5hbWUxKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkltYSB1bGljdVwiKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmFkZHJlc3MubGF0KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOZW1hIGxhdFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlb2NvZGVBZGRyZXNzKHRoaXMub3B0aW9ucy5hZGRyZXNzLCAoZ2VvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiR0VPT09PT09PT1wiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZ2VvKTtcbiAgICAgICAgICAgICAgICAgICAgZ2VvLmxlbmd0aCAmJiAoZ2VvID0gZ2VvWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTGF0ID0gZ2VvLmxhdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmFkZHJlc3MuTG9uZyA9IGdlby5sbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiR0VPQ09ERTIyMlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoUG9pbnRzKHRoaXMub3B0aW9ucy5hZGRyZXNzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOZW1hIHVsaWN1IGkgaWRlIHUgZmV0Y2hcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFBvaW50cyh0aGlzLm9wdGlvbnMuYWRkcmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0U2hpcHBpbmdEYXRhKCl7XG4gICAgICAgIGxldCBzaGlwcGluZ0RhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRCbG9ja1NoaXBwaW5nRGF0YSgpO1xuICAgICAgICBzaGlwcGluZ0RhdGFbXCJBZGRyZXNzXCJdID0gdGhpcy5vcHRpb25zLmFkZHJlc3M7XG4gICAgICAgIC8vIHNoaXBwaW5nRGF0YVtcIkNhcnJpZXJJZFwiXSA9IHRoaXMuY2Fycmllcl9pZDtcbiAgICAgICAgcmV0dXJuIHNoaXBwaW5nRGF0YTtcbiAgICB9XG5cbiAgICBnZXRCbG9ja1NoaXBwaW5nRGF0YSgpe1xuICAgICAgICB2YXIgYWRkcmVzcyA9IGpRdWVyeSgnI3NoaXBwaW5nLWFkZHJlc3NfMScpLnZhbCgpO1xuICAgICAgICB2YXIgYXBhcnRtZW50ID0galF1ZXJ5KCcjc2hpcHBpbmctYWRkcmVzc18yJykudmFsKCk7XG4gICAgICAgIHZhciBjaXR5ID0galF1ZXJ5KCcjc2hpcHBpbmctY2l0eScpLnZhbCgpO1xuICAgICAgICB2YXIgcG9zdGFsQ29kZSA9IGpRdWVyeSgnI3NoaXBwaW5nLXBvc3Rjb2RlJykudmFsKCk7XG5cbiAgICAgICAgLy8gRXh0cmFjdGluZyBDb3VudHJ5XG4gICAgICAgIHZhciBjb3VudHJ5ID0galF1ZXJ5KCcjY29tcG9uZW50cy1mb3JtLXRva2VuLWlucHV0LTAnKS52YWwoKTtcblxuXG4gICAgICAgIGlmIChjb3VudHJ5ID09IFwiXCIpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJDT1VOVFJZIEVNUFRZXCIpO1xuICAgICAgICAgICAgalF1ZXJ5KCdpbnB1dFthcmlhLWxhYmVsKj1cIkNvdW50cnkvUmVnaW9uXCJdJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBjb3VudHJ5ID0galF1ZXJ5KHRoaXMpLnZhbCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1lbHNlIGlmKGNvdW50cnkgPT0gXCJcIil7XG4gICAgICAgICAgICBjb3VudHJ5ID0galF1ZXJ5KCcjc2hpcHBpbmctY291bnRyeSBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQkxPQ0sgU0hJUFBJTkcgREFUQSBPTiBHRVQgQkxPQ0sgU0hJUFBJTkcgREFUQVwiKTtcbiAgICAgICAgY29uc29sZS5sb2coY291bnRyeSk7XG5cbiAgICAgICAgd2luZG93LnNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyA9XG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiQWRkcmVzc1wiOntcbiAgICAgICAgICAgICAgICBcIkxhdFwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiTG9uZ1wiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwiU3RyZWV0bmFtZTFcIjogYWRkcmVzcyxcbiAgICAgICAgICAgICAgICBcIlN0cmVldG5hbWUyXCI6ICcnLFxuICAgICAgICAgICAgICAgIFwiSG91c2VOdW1iZXJcIjogYXBhcnRtZW50LFxuICAgICAgICAgICAgICAgIFwiTnVtYmVyRXh0ZW5zaW9uXCI6ICcnLFxuICAgICAgICAgICAgICAgIFwiUG9zdGFsQ29kZVwiOiBwb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgIFwic19wb3N0Y29kZVwiOiBwb3N0YWxDb2RlLFxuICAgICAgICAgICAgICAgIFwiQ2l0eVwiOiBjaXR5LFxuICAgICAgICAgICAgICAgIFwiQ291bnRyeVwiOiBjb3VudHJ5LFxuICAgICAgICAgICAgICAgIFwiU3RhdGVcIjogJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyA9IHdpbmRvdy5zaGlwdGltaXplX3NoaXBwaW5nX2FkZHJlc3MuQWRkcmVzcztcblxuICAgIH1cblxuICAgIHBpY2t1cFBvaW50c0xvYWRTdG9wKCkge1xuICAgICAgICBqUXVlcnkoXCIjc3ctbWFwLXdyYXBwZXJcIikucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTtcbiAgICAgICAgdGhpcy5zZWFyY2hSdW5uaW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqICBSZXNldHMgdGhlIHNlbGVjdGVkIHBvaW50IHRvIG51bGxcbiAgICAgKiovXG4gICAgcmVzZXRTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQb2ludCA9IG51bGw7XG4gICAgfTtcblxuICAgIHNlbGVjdFBvaW50KHBpY2t1cCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNlbGVjdCBQT0lOVFwiKTtcbiAgICAgICAgY29uc29sZS5sb2cocGlja3VwKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50ID0gcGlja3VwO1xuXG4gICAgICAgIGlmIChqUXVlcnkoJyNzaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5sZW5ndGggJiYgalF1ZXJ5KCcjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uJykuaXMoJzpoaWRkZW4nKSkge1xuICAgICAgICAgICAgalF1ZXJ5KCcjc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uJykuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGpRdWVyeSgnLnNoaXB0aW1pemUtcGlja3VwX19kZXNjcmlwdGlvbicpLmxlbmd0aCAmJiBqUXVlcnkoJy5zaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5pcygnOmhpZGRlbicpKSB7XG4gICAgICAgICAgICBqUXVlcnkoJy5zaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb24nKS5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2hpcHRpbWl6ZVBvaW50SWQnLCBwaWNrdXAuUG9pbnRJZCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTaGlwdGltaXplUG9pbnRMYWJlbCcsIHBpY2t1cC5JbmZvcm1hdGlvbi5OYW1lKTtcblxuICAgICAgICAvKiogV2hhdCB2aWV3IGFyZSB3ZSBvbiA/ICoqL1xuICAgICAgICBsZXQgZUZpZWxkSW5mbyA9IGpRdWVyeShcIiNzdy1tYXAtc2VsZWN0ZWQtcG9pbnRcIik7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGlzcGxheU9wdGlvbiA9PSAxKSB7XG4gICAgICAgICAgICBlRmllbGRJbmZvID0galF1ZXJ5KFwiI3N3LWxpc3QtcG9pbnRzXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8qIFZhbGlkYXRlIGlmIHRoaXMgcG9pbnQgcmVxdWlyZXMgYWRpdGlvbmFsIGluZm8gdGhhdCdzIG5vdCBwcmVzZW50IGZhaWwgaGVyZSAqL1xuICAgICAgICBpZiAodHlwZW9mIChwaWNrdXAuTWFwRmllbGRzU2VsZWN0KSAhPSAndW5kZWZpbmVkJyAmJiBwaWNrdXAuTWFwRmllbGRzU2VsZWN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBleHRyYXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICBlRmllbGRJbmZvLmZpbmQoJy5zaGlwdGltaXplX21hcGZpZWxkcycgKyBwaWNrdXAuUG9pbnRJZCkuZWFjaCgoaWR4LCBlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGVFeHRyYSA9IGpRdWVyeShlbGVtKTtcblxuICAgICAgICAgICAgICAgIGlmICghZUV4dHJhLnZhbCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KGpRdWVyeShqUXVlcnkoJy5zaGlwdGltaXplX21hcGZpZWxkc2xhYmVsJyArIHBpY2t1cC5Qb2ludElkKS5nZXQoaWR4KSkudGV4dCgpICsgJzogJyArIHRoaXMub3B0aW9ucy5sYWJlbHMubWFwZmllbGRtYW5kYXRvcnkpO1xuICAgICAgICAgICAgICAgICAgICBleHRyYXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWV4dHJhc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwb2ludCBzZWxlY3Rpb24gd2lkZ2V0IGlzIG5vdCB2YWxpZCwgaWdub3JpbmdcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coIGpRdWVyeShcIi5zaGlwdGltaXplLXBpY2t1cF9fZGVzY3JpcHRpb25cIikpO1xuICAgICAgICBqUXVlcnkoXCIuc2hpcHRpbWl6ZS1waWNrdXBfX2Rlc2NyaXB0aW9uXCIpXG4gICAgICAgICAgICAuaHRtbChwaWNrdXAuSW5mb3JtYXRpb24uTmFtZSArIFwiIFwiICsgcGlja3VwLkluZm9ybWF0aW9uLkFkZHJlc3MpO1xuXG4gICAgICAgIGNvbnN0IHBpY2t1cFBvaW50ID0ge1xuICAgICAgICAgICAgaWRfY2FycmllcjogdGhpcy5jYXJyaWVyX2lkLFxuICAgICAgICAgICAgcGlja3VwX2lkOiB0aGlzLnNlbGVjdGVkUG9pbnQuUG9pbnRJZCxcbiAgICAgICAgICAgIHBpY2t1cF9sYWJlbDogKHRoaXMuc2VsZWN0ZWRQb2ludC5JbmZvcm1hdGlvbi5OYW1lID8gdGhpcy5zZWxlY3RlZFBvaW50LkluZm9ybWF0aW9uLk5hbWUgKyAnPGJyLz4nIDogJycpICtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUG9pbnQuSW5mb3JtYXRpb24uQWRkcmVzcyxcbiAgICAgICAgICAgIGFjdGlvbjogJ3NoaXB0aW1pemVfc2F2ZV9waWNrdXAnXG4gICAgICAgIH07XG5cbiAgICAgICAgLypJcyB0aGVyZSBleHRyYSBpbmZvIHdlIHdhbnQgdG8gYXBwZW5kPyAqL1xuICAgICAgICBlRmllbGRJbmZvLmZpbmQoXCIuc2hpcHRpbWl6ZV9tYXBmaWVsZHNcIiArIHRoaXMuc2VsZWN0ZWRQb2ludC5Qb2ludElkKS5lYWNoKGZ1bmN0aW9uIChpZHgsIGVsZW0pIHtcbiAgICAgICAgICAgIGxldCBmaWVsZGlkID0galF1ZXJ5KGVsZW0pLmF0dHIoJ2RhdGEtaWQnKTtcbiAgICAgICAgICAgIGxldCBmaWVsZHZhbHVlID0galF1ZXJ5KGVsZW0pLnZhbCgpO1xuICAgICAgICAgICAgcGlja3VwUG9pbnRbJ09wdGlvbkZpZWxkcyddLnB1c2goe0lkOiBmaWVsZGlkLCBWYWx1ZTogZmllbGR2YWx1ZX0pO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oZmllbGRpZCArICd2YWwnLCBmaWVsZHZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5vcHRpb25zLmFqYXhfdXJsKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJPdmRlZWVlXCIpO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLm9uUG9pbnRTZWxlY3RlZChwaWNrdXAsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGxhdGZvcm0uc2V0UGlja3VwUG9pbnQocGlja3VwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2VNYXAoKTtcbiAgICAgICAgalF1ZXJ5KFwiI215TW9kYWxcIikuaGlkZSgpO1xuICAgICAgICBqUXVlcnkoJyNwbGFjZV9vcmRlcicpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpO1xuICAgICAgICBqUXVlcnkoJyNwaWNrdXBUZXh0JykuaGlkZSgpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgQSBQb2ludCB3YXMgc2VsZWN0ZWRcbiAgICAgKiAgQHBhcmFtIGlkeCAtIGludGVnZXIgdGhlIHNlbGVjdGVkIGluZGV4XG4gICAgICoqL1xuICAgIHNlbGVjdFBvaW50RnJvbUxpc3QoaWR4KSB7XG4gICAgICAgIGlmIChpZHggPiB0aGlzLnBpY2t1cFBvaW50cy5sZW5ndGggfHwgaWR4IDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJwb2ludFNlbGVjdGVkIGludmFsaWQgd2lkZ2V0IGluZGV4IFwiICsgaWR4LCAxKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0UG9pbnQodGhpcy5waWNrdXBQb2ludHNbaWR4XSk7XG4gICAgfTtcblxuXG4gICAgLyoqKlxuICAgICAqIFNlbGVjdCB0aGUgZGlzcGxheSBvcHRpb25cbiAgICAgKiBAcGFyYW0gaWR4IC0gaW50IC0gIDA6IG1hcCwgMTogbGlzdFxuICAgICAqL1xuICAgIHNlbGVjdERpc3BsYXlPcHRpb24oaWR4KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0VMRUNURElTUE9QVElPTlwiKTtcbiAgICAgICAgY29uc29sZS5sb2coaWR4KTtcblxuICAgICAgICBsZXQgZW9wdGlvbnMgPSBqUXVlcnkoXCIuc3ctZGlzcGxheS1vcHRpb24sIC5zdy10YWJcIik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5T3B0aW9uID0gaWR4O1xuICAgICAgICBlb3B0aW9ucy5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgalF1ZXJ5KGVvcHRpb25zLmdldChpZHgpKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgalF1ZXJ5KGpRdWVyeShcIi5zdy10YWJcIikuZ2V0KGlkeCkpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG4gICAgICAgIGlmIChpZHggPT0gMCAmJiAgdHlwZW9mICh0aGlzLm1hcGludGVyZmFjZSkgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tYXBpbnRlcmZhY2UucGlja3VwUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmZpdEJvdW5kcygpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlc2V0IHRoZSBsYWJlbHMgaW5pdGlhbGx5IHNlbnQgd2l0aCBvcHRpb25zXG4gICAgICovXG4gICAgc2V0TGFiZWxzKGxhYmVscykge1xuICAgICAgICB0aGlzLm9wdGlvbnMubGFiZWxzID0gbGFiZWxzO1xuICAgIH07XG5cbiAgICBzZXRXZWVrZGF5TmFtZXMod2Vla2RheW5hbWVzKSB7XG4gICAgICAgIHRoaXMud2Vla2RheW5hbWVzID0gd2Vla2RheW5hbWVzO1xuICAgIH07XG5cbiAgICBzZXRDYXJyaWVySWQoY2Fycmllcl9pZCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlNldGNhcnJpZXJpZFwiKTtcbiAgICAgICAgY29uc29sZS5sb2coY2Fycmllcl9pZCk7XG4gICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGNhcnJpZXJfaWQ7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMubWFwaW50ZXJmYWNlKTtcbiAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2Uuc2V0Q2FycmllcklkKGNhcnJpZXJfaWQpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gYWRkcmVzcyAtIG9iamVjdCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgd2Ugc2VuZCB0byB0aGUgQVBJXG4gICAgICpcbiAgICAgKiovXG4gICAgc2V0QWRkcmVzcyhhZGRyZXNzKSB7XG4gICAgICAgIGlmICghYWRkcmVzcy5TdHJlZXRuYW1lMSB8fCAhYWRkcmVzcy5OYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImludmFsaWQgYWRkcmVzcyB3aWRnZXQgXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucy5hZGRyZXNzID0gYWRkcmVzcztcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NoaXB0aW1pemVBZGRyZXNzJywgSlNPTi5zdHJpbmdpZnkoYWRkcmVzcykpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgd2hlbiBsb2FkIHNjcmlwdHMgZW5kcyB3ZSBtdXN0IGdyYW50IHRoYXQganF1ZXJ5IGV4aXN0c1xuICAgICAqL1xuICAgIHNjcmlwdHNMb2FkZWQoKSB7XG4gICAgICAgIHRoaXMuZVNlYXJjaFN0YXR1cyA9IGpRdWVyeShcIiNzZWFyY2gtc3RhdHVzXCIpO1xuICAgICAgICB0aGlzLmFkZE1hcEh0bWwoKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmdtYXBza2V5KSB7XG4gICAgICAgICAgICB0aGlzLm1hcGludGVyZmFjZSA9IG5ldyBTaGlwdGltaXplR21hcHModGhpcy5vcHRpb25zLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWFwaW50ZXJmYWNlID0gbmV3IFNoaXB0aW1pemVPcGVuTWFwMih0aGlzLm9wdGlvbnMsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFwaW50ZXJmYWNlLmluaXRNYXAoKTtcbiAgICAgICAgdGhpcy5tYXBpbnRlcmZhY2UuYWRkTWFwTW92ZUxpc3RlbmVyKChtYXBjZW50ZXIpID0+IHsgcmV0dXJuIHRoaXMubWFwTW92ZWQobWFwY2VudGVyKTsgfSk7XG4gICAgfTtcblxuXG4gICAgdXBkYXRlTGlzdChwb2ludHMpIHtcbiAgICAgICAgalF1ZXJ5KFwiI3N3LWxpc3QtcG9pbnRzXCIpLmh0bWwoJycpO1xuICAgICAgICBsZXQgcGFyZW50ID0galF1ZXJ5KFwiI3N3LWxpc3QtcG9pbnRzXCIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFBvaW50SW5mbyhwb2ludHNbaV0sIDAsICcnLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGlzYWJsZUJ1dHRvbigpe1xuICAgICAgICBqUXVlcnkoJy53Yy1ibG9jay1jb21wb25lbnRzLWNoZWNrb3V0LXBsYWNlLW9yZGVyLWJ1dHRvbicpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG5cbiAgICAgICAgLy8gQWRkIENTUyBzdHlsZXMgZm9yIHRoZSBkaXNhYmxlZCBzdGF0ZVxuICAgICAgICBqUXVlcnkoJy53Yy1ibG9jay1jb21wb25lbnRzLWNoZWNrb3V0LXBsYWNlLW9yZGVyLWJ1dHRvbicpLmNzcyh7XG4gICAgICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdncmV5JyxcbiAgICAgICAgICAgICdjdXJzb3InOiAnbm90LWFsbG93ZWQnLFxuICAgICAgICAgICAgJ29wYWNpdHknOiAnMC41JyAgLy8gT3B0aW9uYWw6IHRvIGdpdmUgaXQgYSBtb3JlIGRpc2FibGVkIGxvb2tcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW5hYmxlQnV0dG9uKCl7XG4gICAgICAgIGpRdWVyeSgnLndjLWJsb2NrLWNvbXBvbmVudHMtY2hlY2tvdXQtcGxhY2Utb3JkZXItYnV0dG9uJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVzZXQgQ1NTIHN0eWxlcyBmb3IgdGhlIGVuYWJsZWQgc3RhdGVcbiAgICAgICAgalF1ZXJ5KCcud2MtYmxvY2stY29tcG9uZW50cy1jaGVja291dC1wbGFjZS1vcmRlci1idXR0b24nKS5jc3Moe1xuICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnYmxhY2snLFxuICAgICAgICAgICAgJ2N1cnNvcic6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICdvcGFjaXR5JzogJzEnICAvLyBSZXNldCBvcGFjaXR5IHRvIG1ha2UgaXQgZnVsbHkgdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0U2hpcHBpbmdNZXRob2RDaGVuZ2UoKSB7XG4gICAgICAgIGpRdWVyeShkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgalF1ZXJ5KFwiI3NoaXB0aW1pemVfcGlja3VwX2J1dHRvblwiKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIHZhciBjaGVja1Zpc2liaWxpdHkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGlucHV0RWxlbWVudCA9ICBqUXVlcnkoXCJpbnB1dFtuYW1lPSdyYWRpby1jb250cm9sLTAnXVwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQuaXMoJzp2aXNpYmxlJykpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW5wdXQgZWxlbWVudCBpcyB2aXNpYmxlLCB5b3UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIHNjcmlwdFxuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGNoZWNrVmlzaWJpbGl0eSk7IC8vXG4gICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudC5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJTaGlwcGluZyBtZXRob2QgY2hhbmdlZDIyMjIyMjIyMjIyMjIyMlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyaWEgPSBqUXVlcnkoXCJpbnB1dFtuYW1lPSdyYWRpby1jb250cm9sLTAnXTpjaGVja2VkXCIpLmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gL3NoaXBwaW5nX3NoaXB0aW1pemVfWzAtOV0rOlswLTldKy87XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIG1hdGNoIHVzaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtYXRjaCA9IGFyaWEubWF0Y2gocmVnZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggPT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVxID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiAnc2hpcHRpbWl6ZV9zZWxlY3RlZF9jYXJyaWVyX2Zyb21fbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdGVkX2NhcnJpZXJfY29kZSc6IG1hdGNoWzBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZ2V0SlNPTih0aGlzLm9wdGlvbnMuYWpheF91cmwsIHJlcSAsICAoZGF0YSkgID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlZyYXRpIGdhIGtyYWxqdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2Fycmllcl9pZCA9IGRhdGEuY2Fycmllcl9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2Fycmllcl9pZCA9IGRhdGEuY2Fycmllcl9pZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKDEyMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KFwiI3NoaXB0aW1pemVfcGlja3VwX2J1dHRvblwiKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5vdCB2aXNpYmxlLCBhZGQgdGhlIGJ1dHRvbiBiYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlucHV0RWxlbWVudCA9IGpRdWVyeShcIi53Yy1ibG9jay1jb21wb25lbnRzLXNoaXBwaW5nLXJhdGVzLWNvbnRyb2xfX3BhY2thZ2VcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjI0RKREogT3ZkZWVlIGlzdG8gdHJhemkgcG8gdmFyaWFibGkgc2hpcHRpbWl6ZV9jaG9vc2VfcGlja3VwX2xvY2F0aW9uIGFrbyBzZSBwb2t2YXJpIG5lc3RvLiBQcm92ZXJpdGkgc3V0cmE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbiA9IGpRdWVyeShcIjxidXR0b24gY2xhc3M9J2J1dHRvbiBhbHQgc2hpcHRpbWl6ZS1waWNrLWxvY2F0aW9uJyB0eXBlPSdidXR0b24nIGlkPSdzaGlwdGltaXplX3BpY2t1cF9idXR0b24nIG9uQ2xpY2s9J3NoaXB0aW1pemUuZ2V0UGlja3VwTG9jYXRpb25zKGV2ZW50KSc+XCIgKyBzaGlwdGltaXplX2Nob29zZV9waWNrdXBfbG9jYXRpb24gKyBcIjwvYnV0dG9uPlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudFswXS5hcHBlbmQoYnV0dG9uWzBdKTsgLy8gQWRqdXN0IHRoZSB0YXJnZXQgY29udGFpbmVyIGlmIG5lY2Vzc2FyeVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXROb3RCbG9ja0Zvcm1DaGFuZ2UoKSB7XG5cbiAgICAgICAgalF1ZXJ5KCdmb3JtW25hbWU9XCJjaGVja291dFwiXSBpbnB1dCcpLmNoYW5nZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIC8vIHZhciBmaWVsZE5hbWUgPSBqUXVlcnkodGhpcykuYXR0cignbmFtZScpO1xuICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gbmV3IFdvb2NvbW1lcmNlKCk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWRkcmVzcyA9IHBsYXRmb3JtLmdldFNoaXBwaW5nRGF0YSgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmFkZHJlc3MpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGb3JtIGNoYW5nZWRcIik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFdvcmtpbmdEYXlzKHdvcmtpbmdIb3Vycykge1xuICAgICAgICBpZiAoIXdvcmtpbmdIb3Vycykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF5R3JvdXBzID0gW107XG4gICAgICAgIGxldCBodG1sSG91cnMgPSAnJztcblxuICAgICAgICBmb3IgKGxldCBkYXkgPSAwOyBkYXkgPCA3OyBkYXkrKykge1xuICAgICAgICAgICAgaWYgKHdvcmtpbmdIb3Vyc1tkYXldKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91clN0cmluZyA9IHRoaXMuZm9ybWF0V29ya2luZ0hvdXJzKHdvcmtpbmdIb3Vyc1tkYXldKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0R3JvdXAgPSBkYXlHcm91cHNbZGF5R3JvdXBzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RHcm91cCAmJiBsYXN0R3JvdXAuaG91cnMgPT09IGhvdXJTdHJpbmcgJiYgbGFzdEdyb3VwLmVuZCArIDEgPT09IGRheSkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0R3JvdXAuZW5kID0gZGF5O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRheUdyb3Vwcy5wdXNoKHsgc3RhcnQ6IGRheSwgZW5kOiBkYXksIGhvdXJzOiBob3VyU3RyaW5nIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIC8qKiBWYWxpZCBob3VyIGludGVydmFscyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG51bWJlciAqKi9cbiAgICAgICAgICAgIGlmIChncm91cC5ob3Vycy5tYXRjaCgvXFxkKy8pICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5UmFuZ2UgPSBncm91cC5zdGFydCA9PT0gZ3JvdXAuZW5kID8gdGhpcy5nZXREYXlOYW1lKGdyb3VwLnN0YXJ0KSA6IGAke3RoaXMuZ2V0RGF5TmFtZShncm91cC5zdGFydCl9IC0gJHt0aGlzLmdldERheU5hbWUoZ3JvdXAuZW5kKX1gO1xuICAgICAgICAgICAgICAgIGh0bWxIb3VycyArPSBgPGRpdiBjbGFzcz1cInN3LXBvaW50LWluZm8tZGF5XCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAtMTBweFwiPjxsYWJlbD4ke2RheVJhbmdlfTwvbGFiZWw+OiAke2dyb3VwLmhvdXJzfTwvZGl2PmA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBodG1sSG91cnM7XG4gICAgfVxuXG4gICAgZm9ybWF0V29ya2luZ0hvdXJzKGhvdXJJbnRlcnZhbHMpIHtcbiAgICAgICAgcmV0dXJuIGhvdXJJbnRlcnZhbHMubWFwKGhvdXIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIuT3BlblRpbWUgJiYgaG91ci5DbG9zZVRpbWUgPyBgJHtob3VyLk9wZW5UaW1lfSAtICR7aG91ci5DbG9zZVRpbWV9YCA6ICcnO1xuICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiB8IFwiKTsgICAgfVxuXG4gICAgZ2V0RGF5TmFtZShkYXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla2RheW5hbWVzW2RheV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaGlwdGltaXplV2lkZ2V0OyIsImltcG9ydCAnLi9zY3NzL3NoaXB0aW1pemUuc2Nzcyc7XG5pbXBvcnQgJy4vY3NzL2xlYWZsZXQuY3NzJztcblxuaW1wb3J0IFdvb0NvbW1lcmNlIGZyb20gJy4vanMvc2hpcHRpbWl6ZS13b28tY29tbWVyY2UuanMnO1xuXG5pbXBvcnQgU2hpcHRpbWl6ZVdpZGdldCBmcm9tIFwiLi9qcy9zaGlwdGltaXplLXdpZGdldFwiO1xuLyoqIFxuICogQ2xhc3MgU2hpcHRpbWl6ZSBkZXBlbmRzIG9uIGpRdWVyeS4gXG4gKiBDaGVjayBpZiB3ZSBhcmUgbWVhbnQgdG8gYXBwZW5kIGEgbWFwIFxuICogXG4gKiBQbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb25zIG1hcmtlZCB3aXRoICAgKiBAcGxhdGZvcm1EZXBlbmRlbnQgXG4gKi9cbmNsYXNzIFNoaXB0aW1pemUge1xuXG4gICAgY29uc3RydWN0b3IoYWpheF91cmwpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJTSElQVElNSVpFQ09OU1RSVUNUXCIpO1xuICAgICAgICB0aGlzLm1hcmtlcnMgPSBbXTsgLy9waWNrdXAge2xhdCwgbG5nfSBcbiAgICAgICAgdGhpcy5pc01hcExvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdtYXBzX2tleSA9IHR5cGVvZihzaGlwdGltaXplX21hcHNfa2V5KSA9PSAndW5kZWZpbmVkJyA/ICAnJyA6IHNoaXB0aW1pemVfbWFwc19rZXkgO1xuICAgICAgICB0aGlzLm9wZW5NYXBNYXJrZXJJY29ucyA9IHt9O1xuICAgICAgICB0aGlzLmFqYXhfdXJsID0gYWpheF91cmw7IC8vIHBsYXRmb3JtIGRlcGVuZGVudCBcblxuICAgICAgICB0aGlzLnBsYXRmb3JtID0gbmV3IFdvb0NvbW1lcmNlKHRoaXMuYWpheF91cmwpO1xuXG4gICAgICAgIHRoaXMucGxhdGZvcm0uaXNDaGVja291dCgpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBpbml0KCl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW50ZXJlZCBpbml0XCIpO1xuICAgICAgICB0aGlzLnNoaXB0aW1pemVXaWRnZXQgPSBuZXcgU2hpcHRpbWl6ZVdpZGdldCh7XG4gICAgICAgICAgICBcImhvc3RcIjogJ2h0dHBzOi8vc2hpcHRpbWl6ZS5tZScsXG4gICAgICAgICAgICBcImFkZHJlc3NcIjogdGhpcy5wbGF0Zm9ybS5nZXRTaGlwcGluZ0RhdGEoKS5BZGRyZXNzLFxuICAgICAgICAgICAgXCJsYWJlbHNcIjp7fSxcbiAgICAgICAgICAgIFwibWFwUGFyZW50Q29udGFpbmVyXCI6J2JvZHknLFxuICAgICAgICAgICAgXCJidXR0b25QYXJlbnRDb250YWluZXJcIjonYm9keScsXG4gICAgICAgICAgICBcImJ1dHRvbkNsYXNzXCI6ICcnLFxuICAgICAgICAgICAgXCJhamF4X3VybFwiOiB0aGlzLmFqYXhfdXJsLFxuICAgICAgICAgICAgXCJjYXJyaWVySWRcIjogdGhpcy5wbGF0Zm9ybS5nZXRTaGlwcGluZ0RhdGEoKS5DYXJyaWVySWQsXG4gICAgICAgICAgICBcIm9uUG9pbnRTZWxlY3RlZFwiOiAoKSA9PiB7fSxcbiAgICAgICAgICAgIFwiZ21hcHNrZXlcIjogdHlwZW9mKHNoaXB0aW1pemVfbWFwc19rZXkpID09ICd1bmRlZmluZWQnID8gICcnIDogc2hpcHRpbWl6ZV9tYXBzX2tleVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zaGlwdGltaXplV2lkZ2V0LmluaXQoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJGaW5pc2hlZCBpbml0XCIpO1xuICAgIH1cblxuICAgIGdldFBpY2t1cExvY2F0aW9ucyhldnQpIHtcbiAgICAgICAgdGhpcy5zaGlwdGltaXplV2lkZ2V0Lm9wZW5NYXAoKTtcbiAgICB9XG5cbn1cblxualF1ZXJ5KGZ1bmN0aW9uKCkge1xuICAgIGlmKHR5cGVvZih3b29jb21tZXJjZV9wYXJhbXMpICE9ICd1bmRlZmluZWQnKXtcbiAgICAgICAgd2luZG93LnNoaXB0aW1pemUgPSBuZXcgU2hpcHRpbWl6ZSh3b29jb21tZXJjZV9wYXJhbXMuYWpheF91cmwpO1xuICAgIH1cbn0pOyJdLCJuYW1lcyI6WyJTaGlwdGltaXplVXRpbHMiLCJjb25zdHJ1Y3RvciIsImluamVjdEV4dGVybmFsU2NyaXB0Iiwic3JjIiwicyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImluamVjdFNjcmlwdCIsImNvbnRlbnRzIiwiZSIsInZhbHVlIiwicmVtb3ZlTm9uTnVtZXJpYyIsInN0cmluZyIsInJlcGxhY2UiLCJpc1VybFZhbGlkIiwidXJsIiwiaHR0cCIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInNlbmQiLCJzdGF0dXMiLCJvcGVuTmV3V2luZG93Iiwib3B0aW9ucyIsIm5ld1dpbiIsIndpbmRvdyIsImJsb2NrZWQiLCJjbG9zZWQiLCJ1dGlscyIsIlV0aWxzIiwiV29vY29tbWVyY2UiLCJhamF4X3VybCIsImlzQ2hlY2tvdXQiLCJjb25zb2xlIiwibG9nIiwialF1ZXJ5IiwiaGFzQ2xhc3MiLCJnZXRTaGlwcGluZ01ldGhvZElkIiwiZUNoZWNrYm94IiwiZUhpZGRlbiIsInNoaXBwaW5nTWV0aG9kIiwibGVuZ3RoIiwidmFsIiwiaW5kZXhPZiIsIm1ldGhvZF9wYXJ0cyIsInNwbGl0IiwiZ2V0U2hpcHBpbmdEYXRhIiwiY291bnRyeSIsInN0YXRlIiwicG9zdGNvZGUiLCJjaXR5IiwiYWRkcmVzcyIsImFkZHJlc3NfMiIsInNfY291bnRyeSIsInNfc3RhdGUiLCJzX3Bvc3Rjb2RlIiwic19jaXR5Iiwic19hZGRyZXNzIiwic19hZGRyZXNzXzIiLCJmaW5kIiwiaXMiLCJlYWNoIiwidGV4dCIsInNoaXB0aW1pemVfc2hpcHBpbmdfYWRkcmVzcyIsInBvc3RfZGF0YSIsInNlcmlhbGl6ZSIsInNldENhcnJpZXIiLCJjYXJyaWVyX2lkIiwic2V0UGlja3VwUG9pbnQiLCJwaWNrdXAiLCJwaWNrdXBfbGFiZWwiLCJJbmZvcm1hdGlvbiIsIk5hbWUiLCJBZGRyZXNzIiwicmVxIiwiUG9pbnRJZCIsImdldEpTT04iLCJkYXRhIiwiZmFpbCIsImVyciIsInJlc3BvbnNlVGV4dCIsImh0bWwiLCJzaGlwdGltaXplX3NlbGVjdCIsIkwiLCJTaGlwdGltaXplT3Blbk1hcCIsInNoaXB0aW1pemUiLCJtYXAiLCJob3N0IiwiaWNvbl9mb2xkZXIiLCJzaGlwdGltaXplX2ljb25fZm9sZGVyIiwibWFwV3JhcHBlciIsInN0eWxlUGF0aCIsIm1hcmtlcnMiLCJwaWNrdXBQb2ludHMiLCJjYXJyaWVyX2ljb25fY29uZmlnIiwiZXh0ZW5zaW9uIiwic2VsZWN0ZWRTdGF0ZSIsImljb25TaXplIiwic2VsZWN0ZWRQb2ludElkeCIsIm1vdmVMaXN0ZW5lcnMiLCJpc01vdmluZyIsImlzVXNlck1vdmluZyIsImJvdW5kcyIsInNldENhcnJpZXJJZCIsImN1cnJlbnRfaWNvbiIsImdldENhcnJpZXJJY29uT2ZUeXBlIiwic2VsZWN0UG9pbnQiLCJpZHgiLCJzZXRJY29uIiwiVHlwZSIsImNyZWF0ZUljb24iLCJpbWFnZVVybCIsImljb24iLCJpY29uVXJsIiwiaWNvbkFuY2hvciIsInBvcHVwQW5jaG9yIiwic2V0Wm9vbSIsInpvb20iLCJpc01hcE1vdmluZyIsImNlbnRlck1hcCIsImxhdCIsImxuZyIsImxhdGxuZyIsImxhdExuZyIsImdyYW50UmVhZHkiLCJpc1NjcmlwdExvYWRlZCIsImxvYWRTY3JpcHQiLCJnZW9jb2RlQnBvc3QiLCJxdWVyeXBhcnRzIiwiZmNhbGxiYWNrIiwiX2dlb2NvZGUiLCJyZXNwIiwicmVzcG9uc2UiLCJyZXN1bHRzIiwiaW5kZXgiLCJ0b3BTdWdnZXN0aW9ucyIsInBsYWNlcyIsImkiLCJzZWFyY2hCYXJTdHJpbmciLCJwdXNoIiwiQ2l0eSIsIm11bmljaXBhbGl0eU5hbWUiLCJDb3VudHJ5IiwiUG9zdGFsQ29kZSIsInBvc3RhbENvZGUiLCJTdHJlZXRuYW1lMSIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiZ2VvY29kZSIsInF1ZXJ5dmFsIiwicXVlcnkiLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoIiwibWlzc2luZ1ppcFBUIiwiemlwNGRpZyIsInN1YnN0cmluZyIsInppcGNvZGUiLCJxdWVyeVJlc3VsdHMiLCJkaXNwbGF5X25hbWUiLCJyZXMiLCJ0b1VwcGVyQ2FzZSIsImdlb2NvZGVRdWVyeSIsIndhbnRlZCIsImNvdW50eSIsImNvdW50cnlfY29kZSIsInB1c2hEaXNwbGF5ZWRSZXN1bHRzIiwibm9tQWRkciIsInN0cmVldCIsInJvYWQiLCJyZWdpb24iLCJTdGF0ZSIsImxvbiIsImdlb2NvZGVBZGRyZXNzIiwiZl9jYWxsYmFjayIsInBvc3RhbGNvZGUiLCJzdHJlZXRuYW1lIiwicXVlcnlTdHJpbmciLCJzdWJzdHIiLCJidG9hIiwiYWRkcmVzc19jYWNoZSIsImxvY2F0aW9uIiwiaXNvMiIsImdlb2NvZGVBZGRyZXNzUGFydHNCcG9zdCIsImVuY29kZVVSSSIsImxhdGxuIiwiZ2VvY29kZUFkZHJlc3NQYXJ0cyIsImxhbiIsIlNISVBUSU1JWkVfUExVR0lOX1VSTCIsImluaXRNYXAiLCJpY29uX3NlbGVjdGVkIiwiaWNvbl9kZWZhdWx0IiwidGlsZUxheWVyIiwiYWRkVG8iLCJvbm1hcHJlYWR5Iiwib24iLCJjZW50ZXIiLCJnZXRDZW50ZXIiLCJpc0luQm91bmRzIiwibW92ZUVuZCIsIm1hcENlbnRlciIsImFkZE1hcE1vdmVMaXN0ZW5lciIsImluTGF0IiwiYm90dG9tTGVmdCIsInRvcFJpZ2h0IiwiZWFzdEJvdW5kIiwid2VzdEJvdW5kIiwiaW5MbmciLCJjbGVhck1hcmtlcnMiLCJyZW1vdmVMYXllciIsInNldE1pblpvb20iLCJhZGRNYXJrZXJzIiwiY2FsbGJhY2siLCJ4IiwiZ2V0TWFya2VyIiwibWFya2VyIiwiZml0Qm91bmRzIiwicmVzZXRNYXJrZXIiLCJzZWxlY3RNYXJrZXIiLCJzY3JvbGxUb3AiLCJpbnZhbGlkYXRlU2l6ZSIsInBhcnNlRmxvYXQiLCJMYXQiLCJMb25nIiwiY2VudGVyWCIsImNlbnRlclkiLCJzZXRUaW1lb3V0IiwiZ2V0SWNvbiIsInBpY2t1cFBvaW50IiwidHlwZSIsInNlbGVjdGVkIiwiYWxsb3dlZFR5cGVzIiwiY2Fycmllcl9pY29uX3VybCIsImZpbGVfZXh0ZW5zaW9uIiwic2VsZWN0ZWRleHRlbnNpb24iLCJpbmNsdWRlcyIsInNldENhcnJpZXJJY29uIiwiY2FjaGVfaWNvbl92YWxpZCIsImNhcnJpZXJJY29uRXhpc3RzIiwiU2hpcHRpbWl6ZVdpZGdldCIsIlNoaXB0aW1pemVHbWFwcyIsInNoaXB0aW1pemVXaWRnZXQiLCJtZSIsImdtYXBza2V5IiwibG9hZE1hcCIsInNjcmlwdCIsInJlYWR5U3RhdGUiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJjYWxiYWNrIiwib25sb2FkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhZGRMaXN0ZW5lciIsInNldENlbnRlciIsImdvb2dsZSIsIm1hcHMiLCJMYXRMbmciLCJzZXRNYXAiLCJMYXRMbmdCb3VuZHMiLCJleHRlbmQiLCJnZXRQb3NpdGlvbiIsImdldEJvdW5kcyIsImdldENhcnJpZXJJY29uVXJsIiwicG9zaXRpb24iLCJzaXplIiwiU2l6ZSIsInNjYWxlZFNpemUiLCJNYXJrZXIiLCJNYXAiLCJnZXRFbGVtZW50QnlJZCIsIm1hcFR5cGVDb250cm9sIiwiY29udGFpbnMiLCJzaGlwcGluZ0RhdGEiLCJnZW9jb2RlciIsIkdlb2NvZGVyIiwiY29tcG9uZW50cyIsImdldCIsImVycm9yX21zZyIsImoiLCJhZGRyZXNzX2NvbXBvbmVudHMiLCJsb25nX25hbWUiLCJnZXRDb3VudHJ5Q29kZUZyb21SZXN1bHQiLCJnZW9tZXRyeSIsInR5cGVzIiwic2hvcnRfbmFtZSIsInBvaW50Iiwic2hpcHRpbWl6ZV9jYXJyaWVyX2ltZ3MiLCJTaGlwdGltaXplT3Blbk1hcDIiLCJzZWxlY3RlZFBvaW50IiwiZGVidWciLCJtYXBQYXJlbnRDb250YWluZXIiLCJidXR0b25QYXJlbnRDb250YWluZXIiLCJidXR0b25DbGFzcyIsImJ1dHRvbl9jbGFzcyIsImxhYmVscyIsInBsYXRmb3JtIiwidGltZW91dEtleURvd24iLCJzZWFyY2hSdW5uaW5nIiwiY2FycmllcklkIiwibGFuZyIsIndlZWtkYXluYW1lcyIsInNoaXB0aW1pemVfbW9uZGF5Iiwic2hpcHRpbWl6ZV90dWVzZGF5Iiwic2hpcHRpbWl6ZV93ZWRuZXNkYXkiLCJzaGlwdGltaXplX3RodXJzZGF5Iiwic2hpcHRpbWl6ZV9mcmlkYXkiLCJzaGlwdGltaXplX3NhdHVyZGF5Iiwic2hpcHRpbWl6ZV9zdW5kYXkiLCJzZWxlY3RlZERpc3BsYXlPcHRpb24iLCJjYWNoZVJlc3VsdHMiLCJyZWFkeSIsImhhc1J1bkNoZWNrVmlzaWJpbGl0eSIsImhhc1J1blBsYWNlT3JkZXJDaGVjayIsImNoZWNrVmlzaWJpbGl0eSIsInNldEludGVydmFsIiwiaW5wdXRFbGVtZW50IiwiY2xlYXJJbnRlcnZhbCIsInNlbGVjdGVkVGV4dCIsImNsb3Nlc3QiLCJpc0Jsb2NrQ2hlY2tvdXQiLCJnZXRTZWxlY3RlZENhcnJpZXIiLCJnZXRGb3JtQ2hhbmdlIiwiZ2V0T25DbGljayIsInBsYWNlT3JkZXJDaGVjayIsInBsYWNlT3JkZXJCdXR0b24iLCJzaGlwcGluZ19waWNrdXBfaWQiLCJtYW5kYXRvcnlEYXRhIiwicGlja3VwTWFuZGF0b3J5IiwicHJldmVudERlZmF1bHQiLCJtb2RhbCIsImlkIiwiY3NzIiwibW9kYWxDb250ZW50IiwiY2xvc2VCdXR0b24iLCJtZXNzYWdlIiwic2hpcHRpbWl6ZV9tYW5kYXRvcnlfcG9pbnQiLCJidXR0b24iLCJCcG9zdF9jaG9vc2VfcGlja3VwX2xvY2F0aW9uIiwiYXBwZW5kIiwic2hvdyIsImhpZGUiLCJldmVudCIsInRhcmdldCIsImdldE9uU3VibWl0QnV0dG9uQmxvY2tDbGlja05vVGhlbWUiLCJnZXRUaGVtZVNoaXBwaW5nTWV0aG9kIiwiYWpheENvbXBsZXRlIiwieGhyIiwic2V0dGluZ3MiLCJjaGVja2VkUmFkaW8iLCJzaWJsaW5ncyIsInRyaW0iLCJzaGlwcGluZ01ldGhvZHNMaXN0IiwicXVlcnlTZWxlY3RvciIsInNoaXBwaW5nTWV0aG9kSXRlbXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsIml0ZW0iLCJsYWJlbEVsZW1lbnQiLCJsYWJlbFRleHQiLCJ0ZXh0Q29udGVudCIsIm9yaWdpbiIsInByb3AiLCJhZnRlciIsInByb3RvdHlwZSIsIm1ldGhvZCIsImFzeW5jIiwidXNlciIsInBhc3MiLCJhcHBseSIsImFyZ3VtZW50cyIsImxvYWRlclRleHQiLCJkaXNhYmxlQnV0dG9uIiwidW5kZWZpbmVkIiwiZW5hYmxlQnV0dG9uIiwic2hpcHRpbWl6ZV9jaG9vc2VfcGlja3VwX2xvY2F0aW9uIiwicmVtb3ZlIiwiZ2V0QmxvY2tTaGlwcGluZ0RhdGEiLCJzaGlwcGluZ19waWNrdXBfbGFiZWwiLCJzaGlwdGltaXplX3BpY2t1cF9leHRlbmRlZCIsInNoaXB0aW1pemVfcGlja3VwX2Rlc2NyaXB0aW9uIiwic2hpcHBpbmdfY2Fycmllcl9pZCIsIm1hcGludGVyZmFjZSIsImdldEZvcm1TaGlwcGluZ0RhdGEiLCJnZXRTaGlwdGltaXplSWQiLCJtYWdlX2lkIiwic2hpcHRpbWl6ZV9jYXJyaWVycyIsIkNsYXNzTmFtZSIsIklkIiwiaW5pdCIsInNldEFkZHJlc3MiLCJsb2FkU2NyaXB0cyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJKU09OIiwicGFyc2UiLCJhZGRQb2ludEluZm8iLCJwIiwiZXh0cmFfY2xhc3MiLCJwYXJlbnRDb250YWluZXIiLCJXb3JraW5nSG91cnNSYXciLCJvcGVuaHRtbCIsIm0yZiIsIndrZCIsImxvY2FsIiwib3BlbkhvdXJzIiwicmVnZXhGb3JtYXREZXYiLCJSZWdFeHAiLCJyZWdleEZvcm1hdExpdmUiLCJyZWdleEZvcm1hdCIsInJlZ0RheSIsInJlZ09wZW5JZHgiLCJyZWdUeXBlSWR4IiwiT2JqZWN0Iiwia2V5cyIsInNoaWZ0Iiwia2V5IiwiZXhlYyIsImRheW5hbWUiLCJvcGVuaWR4IiwicGFyc2VJbnQiLCJkYXlpZHgiLCJPcGVuVGltZSIsIkNsb3NlVGltZSIsInNjaGVkdWxlIiwic29ydCIsImEiLCJiIiwiYW9wZW4iLCJib3BlbiIsIldvcmtpbmdIb3VycyIsIm5kYXlzb3BlbiIsImZyb21kYXkiLCJwcmV2aW91c1RpbWUiLCJob3Vyc2h0bWwiLCJmcm9tZGF5aWR4IiwidG9EYXkiLCJkYXkiLCJkYXlodG1sIiwidG9kYXkiLCJob3VycyIsImlzaW50ZXJ2YWwiLCJpc2xhc3QiLCJlUG9pbnRJbmZvIiwiRGlzdGFuY2UiLCJzaGlwdGltaXplX2Rpc3RhbmNlIiwic2hpcHRpbWl6ZV9tZXRlciIsImdldFdvcmtpbmdEYXlzIiwiTWFwRmllbGRzU2VsZWN0IiwibW9yZUZpZWxkcyIsImsiLCJidG4iLCJzaGlwdGltaXplX3NlbGVjdGVkIiwiYWRkQ3VzdG9tU3R5bGUiLCJzdHlsZSIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJhZGRNYXBIdG1sIiwiYWRkcmVzc3RyIiwibWFwaHRtbCIsImRpc3BsYXlPcHRpb25zIiwib3B0TWFwIiwic2hpcHRpbWl6ZV9tYXAiLCJvcHRMaXN0Iiwic2hpcHRpbWl6ZV9saXN0Iiwic2VsZWN0RGlzcGxheU9wdGlvbiIsInF1ZXJ5b3B0Iiwic2VhcmNoYnRuIiwic2hpcHRpbWl6ZV9zZWFyY2giLCJxdWVyeWlucHV0IiwiZXZ0Iiwia2V5Q29kZSIsImNsZWFyVGltZW91dCIsImNsaWNrIiwiY2xvc2VNYXAiLCJyZW1vdmVDbGFzcyIsInVzZXJTY3JvbGwiLCJkaXNwbGF5TWVzc2FnZSIsIm1zZyIsImFkZENsYXNzIiwic2hpcHRpbWl6ZV9ub19wb2ludHNfZm91bmQiLCJkaXNwbGF5UGxhY2VzIiwicmVzdWx0c0NvbnRhaW5lciIsInNoaXB0aW1pemVfbm9fcmVzdWx0cyIsImF0dHIiLCJwbGFjZSIsImZldGNoUG9pbnRzIiwiaGFzaExhdExuZyIsImxhdHN0ciIsImxuZ3N0ciIsImRpc3BsYXlSZXN1bHRzIiwicGlja3VwUG9pbnRzTG9hZFN0b3AiLCJzaGlwdGltaXplX3RoZSIsIkNvdW50Iiwic2hpcHRpbWl6ZV9jbG9zZXN0IiwiUG9pbnQiLCJtYXBDaGFuZ2VkIiwiRGF0ZSIsIm5vdyIsInVwZGF0ZUxpc3QiLCJwYXJlbnQiLCJmcmVzb2x2ZSIsIkVycm9yIiwibWFwTW92ZWQiLCJtYXBjZW50ZXIiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImxvYWRMYWJlbHMiLCJhamF4TG9hZExhYmVscyIsImZuIiwianF1ZXJ5Iiwic2NyaXB0c0xvYWRlZCIsIm9uaW5pdCIsImxvYWRTdHlsZSIsInJlbCIsImhyZWYiLCJmb3JjZSIsInJlc2V0TWFwRWxlbWVudHMiLCJvcGVuTWFwIiwiZ2VvIiwiYXBhcnRtZW50IiwicmVzZXRTZWxlY3Rpb24iLCJzZXRJdGVtIiwiZUZpZWxkSW5mbyIsImV4dHJhc1ZhbGlkIiwiZWxlbSIsImVFeHRyYSIsImFsZXJ0IiwibWFwZmllbGRtYW5kYXRvcnkiLCJpZF9jYXJyaWVyIiwicGlja3VwX2lkIiwiYWN0aW9uIiwiZmllbGRpZCIsImZpZWxkdmFsdWUiLCJWYWx1ZSIsIm9uUG9pbnRTZWxlY3RlZCIsInNlbGVjdFBvaW50RnJvbUxpc3QiLCJlb3B0aW9ucyIsInNldExhYmVscyIsInNldFdlZWtkYXlOYW1lcyIsInN0cmluZ2lmeSIsImVTZWFyY2hTdGF0dXMiLCJwb2ludHMiLCJnZXRTaGlwcGluZ01ldGhvZENoZW5nZSIsImFyaWEiLCJyZWdleCIsImdldE5vdEJsb2NrRm9ybUNoYW5nZSIsImNoYW5nZSIsIndvcmtpbmdIb3VycyIsImRheUdyb3VwcyIsImh0bWxIb3VycyIsImhvdXJTdHJpbmciLCJmb3JtYXRXb3JraW5nSG91cnMiLCJsYXN0R3JvdXAiLCJlbmQiLCJzdGFydCIsImdyb3VwIiwiZGF5UmFuZ2UiLCJnZXREYXlOYW1lIiwiaG91ckludGVydmFscyIsImhvdXIiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsIldvb0NvbW1lcmNlIiwiU2hpcHRpbWl6ZSIsImlzTWFwTG9hZGVkIiwiZ21hcHNfa2V5Iiwic2hpcHRpbWl6ZV9tYXBzX2tleSIsIm9wZW5NYXBNYXJrZXJJY29ucyIsIkNhcnJpZXJJZCIsImdldFBpY2t1cExvY2F0aW9ucyIsIndvb2NvbW1lcmNlX3BhcmFtcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///610\n")}},__webpack_module_cache__={};function __webpack_require__(Q){var U=__webpack_module_cache__[Q];if(void 0!==U)return U.exports;var F=__webpack_module_cache__[Q]={exports:{}};return __webpack_modules__[Q].call(F.exports,F,F.exports,__webpack_require__),F.exports}__webpack_require__.n=Q=>{var U=Q&&Q.__esModule?()=>Q.default:()=>Q;return __webpack_require__.d(U,{a:U}),U},__webpack_require__.d=(Q,U)=>{for(var F in U)__webpack_require__.o(U,F)&&!__webpack_require__.o(Q,F)&&Object.defineProperty(Q,F,{enumerable:!0,get:U[F]})},__webpack_require__.o=(Q,U)=>Object.prototype.hasOwnProperty.call(Q,U);var __webpack_exports__=__webpack_require__(610)})();
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(window.jQuery)}(function(e){e.fn.numeric=function(t,n){"boolean"==typeof t&&(t={decimal:t,negative:!0,decimalPlaces:-1}),void 0===(t=t||{}).negative&&(t.negative=!0);var i=!1===t.decimal?"":t.decimal||".",r=!0===t.negative,a=void 0===t.decimalPlaces?-1:t.decimalPlaces;return n="function"==typeof n?n:function(){},this.data("numeric.decimal",i).data("numeric.negative",r).data("numeric.callback",n).data("numeric.decimalPlaces",a).keypress(e.fn.numeric.keypress).keyup(e.fn.numeric.keyup).blur(e.fn.numeric.blur)},e.fn.numeric.keypress=function(t){var n=e.data(this,"numeric.decimal"),i=e.data(this,"numeric.negative"),r=e.data(this,"numeric.decimalPlaces"),a=t.charCode?t.charCode:t.keyCode?t.keyCode:0;if(13==a&&"input"==this.nodeName.toLowerCase())return!0;if(13==a)return!1;if(35==t.charCode||36==t.charCode||37==t.charCode)return!1;var c=!1;if(t.ctrlKey&&97==a||t.ctrlKey&&65==a)return!0;if(t.ctrlKey&&120==a||t.ctrlKey&&88==a)return!0;if(t.ctrlKey&&99==a||t.ctrlKey&&67==a)return!0;if(t.ctrlKey&&122==a||t.ctrlKey&&90==a)return!0;if(t.ctrlKey&&118==a||t.ctrlKey&&86==a||t.shiftKey&&45==a)return!0;if(a<48||a>57){var l=e(this).val();if(0!==e.inArray("-",l.split(""))&&i&&45==a&&(0===l.length||0===parseInt(e.fn.getSelectionStart(this),10)))return!0;n&&a==n.charCodeAt(0)&&-1!=e.inArray(n,l.split(""))&&(c=!1),8!=a&&9!=a&&13!=a&&35!=a&&36!=a&&37!=a&&39!=a&&46!=a?c=!1:void 0!==t.charCode&&(t.keyCode==t.which&&0!==t.which?(c=!0,46==t.which&&(c=!1)):0!==t.keyCode&&0===t.charCode&&0===t.which&&(c=!0)),n&&a==n.charCodeAt(0)&&(c=-1==e.inArray(n,l.split("")))}else if(c=!0,n&&r>0){var u=e.fn.getSelectionStart(this),s=e.fn.getSelectionEnd(this),d=e.inArray(n,e(this).val().split(""));u===s&&d>=0&&u>d&&e(this).val().length>d+r&&(c=!1)}return c},e.fn.numeric.keyup=function(t){var n=e(this).val();if(n&&n.length>0){var i=e.fn.getSelectionStart(this),r=e.fn.getSelectionEnd(this),a=e.data(this,"numeric.decimal"),c=e.data(this,"numeric.negative"),l=e.data(this,"numeric.decimalPlaces");""!==a&&null!==a&&(0===(g=e.inArray(a,n.split("")))&&(this.value="0"+n,i++,r++),1==g&&"-"==n.charAt(0)&&(this.value="-0"+n.substring(1),i++,r++),n=this.value);for(var u=[0,1,2,3,4,5,6,7,8,9,"-",a],s=n.length,d=s-1;d>=0;d--){var o=n.charAt(d);0!==d&&"-"==o?n=n.substring(0,d)+n.substring(d+1):0!==d||c||"-"!=o||(n=n.substring(1));for(var f=!1,h=0;h<u.length;h++)if(o==u[h]){f=!0;break}f&&" "!=o||(n=n.substring(0,d)+n.substring(d+1))}var m=e.inArray(a,n.split(""));if(m>0)for(var v=s-1;v>m;v--)n.charAt(v)==a&&(n=n.substring(0,v)+n.substring(v+1));if(a&&l>0){var g=e.inArray(a,n.split(""));g>=0&&(n=n.substring(0,g+l+1),r=Math.min(n.length,r))}this.value=n,e.fn.setSelection(this,[i,r])}},e.fn.numeric.blur=function(){var t=e.data(this,"numeric.decimal"),n=e.data(this,"numeric.callback"),i=e.data(this,"numeric.negative"),r=this.value;""!==r&&(new RegExp("^"+(i?"-?":"")+"\\d+$|^"+(i?"-?":"")+"\\d*"+t+"\\d+$").exec(r)||n.apply(this))},e.fn.removeNumeric=function(){return this.data("numeric.decimal",null).data("numeric.negative",null).data("numeric.callback",null).data("numeric.decimalPlaces",null).unbind("keypress",e.fn.numeric.keypress).unbind("keyup",e.fn.numeric.keyup).unbind("blur",e.fn.numeric.blur)},e.fn.getSelectionStart=function(e){if("number"!==e.type){if(e.createTextRange&&document.selection){var t=document.selection.createRange().duplicate();return t.moveEnd("character",e.value.length),""==t.text?e.value.length:Math.max(0,e.value.lastIndexOf(t.text))}try{return e.selectionStart}catch(e){return 0}}},e.fn.getSelectionEnd=function(e){if("number"!==e.type){if(e.createTextRange&&document.selection){var t=document.selection.createRange().duplicate();return t.moveStart("character",-e.value.length),t.text.length}return e.selectionEnd}},e.fn.setSelection=function(e,t){if("number"==typeof t&&(t=[t,t]),t&&t.constructor==Array&&2==t.length)if("number"===e.type)e.focus();else if(e.createTextRange){var n=e.createTextRange();n.collapse(!0),n.moveStart("character",t[0]),n.moveEnd("character",t[1]-t[0]),n.select()}else{e.focus();try{e.setSelectionRange&&e.setSelectionRange(t[0],t[1])}catch(e){}}}});
var DateFormatter;
(function (){
"use strict";
var _compare, _lpad, _extend, defaultSettings, DAY, HOUR;
DAY=1000 * 60 * 60 * 24;
HOUR=3600;
_compare=function (str1, str2){
return typeof(str1)==='string'&&typeof(str2)==='string'&&str1.toLowerCase()===str2.toLowerCase();
};
_lpad=function (value, length, char){
var chr=char||'0', val=value.toString();
return val.length < length ? _lpad(chr + val, length):val;
};
_extend=function (out){
var i, obj;
out=out||{};
for (i=1; i < arguments.length; i++){
obj=arguments[i];
if(!obj){
continue;
}
for (var key in obj){
if(obj.hasOwnProperty(key)){
if(typeof obj[key]==='object'){
_extend(out[key], obj[key]);
}else{
out[key]=obj[key];
}}
}}
return out;
};
defaultSettings={
dateSettings: {
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
months: [
'January', 'February', 'March', 'April', 'May', 'June', 'July',
'August', 'September', 'October', 'November', 'December'
],
monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
meridiem: ['AM', 'PM'],
ordinal: function (number){
var n=number % 10, suffixes={1: 'st', 2: 'nd', 3: 'rd'};
return Math.floor(number % 100 / 10)===1||!suffixes[n] ? 'th':suffixes[n];
}},
separators: /[ \-+\/\.T:@]/g,
validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,
intParts: /[djwNzmnyYhHgGis]/g,
tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
tzClip: /[^-+\dA-Z]/g
};
DateFormatter=function (options){
var self=this, config=_extend(defaultSettings, options);
self.dateSettings=config.dateSettings;
self.separators=config.separators;
self.validParts=config.validParts;
self.intParts=config.intParts;
self.tzParts=config.tzParts;
self.tzClip=config.tzClip;
};
DateFormatter.prototype={
constructor: DateFormatter,
parseDate: function (vDate, vFormat){
var self=this, vFormatParts, vDateParts, i, vDateFlag=false, vTimeFlag=false, vDatePart, iDatePart,
vSettings=self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,
out={date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};
if(!vDate){
return undefined;
}
if(vDate instanceof Date){
return vDate;
}
if(typeof vDate==='number'){
return new Date(vDate);
}
if(vFormat==='U'){
i=parseInt(vDate);
return i ? new Date(i * 1000):vDate;
}
if(typeof vDate!=='string'){
return '';
}
vFormatParts=vFormat.match(self.validParts);
if(!vFormatParts||vFormatParts.length===0){
throw new Error("Invalid date format definition.");
}
vDateParts=vDate.replace(self.separators, '\0').split('\0');
for (i=0; i < vDateParts.length; i++){
vDatePart=vDateParts[i];
iDatePart=parseInt(vDatePart);
switch (vFormatParts[i]){
case 'y':
case 'Y':
len=vDatePart.length;
if(len===2){
out.year=parseInt((iDatePart < 70 ? '20':'19') + vDatePart);
}else if(len===4){
out.year=iDatePart;
}
vDateFlag=true;
break;
case 'm':
case 'n':
case 'M':
case 'F':
if(isNaN(vDatePart)){
vMonth=vSettings.monthsShort.indexOf(vDatePart);
if(vMonth > -1){
out.month=vMonth + 1;
}
vMonth=vSettings.months.indexOf(vDatePart);
if(vMonth > -1){
out.month=vMonth + 1;
}}else{
if(iDatePart >=1&&iDatePart <=12){
out.month=iDatePart;
}}
vDateFlag=true;
break;
case 'd':
case 'j':
if(iDatePart >=1&&iDatePart <=31){
out.day=iDatePart;
}
vDateFlag=true;
break;
case 'g':
case 'h':
vMeriIndex=(vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :
(vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A'):-1;
mer=vDateParts[vMeriIndex];
if(vMeriIndex > -1){
vMeriOffset=_compare(mer, vSettings.meridiem[0]) ? 0 :
(_compare(mer, vSettings.meridiem[1]) ? 12:-1);
if(iDatePart >=1&&iDatePart <=12&&vMeriOffset > -1){
out.hour=iDatePart + vMeriOffset;
}else if(iDatePart >=0&&iDatePart <=23){
out.hour=iDatePart;
}}else if(iDatePart >=0&&iDatePart <=23){
out.hour=iDatePart;
}
vTimeFlag=true;
break;
case 'G':
case 'H':
if(iDatePart >=0&&iDatePart <=23){
out.hour=iDatePart;
}
vTimeFlag=true;
break;
case 'i':
if(iDatePart >=0&&iDatePart <=59){
out.min=iDatePart;
}
vTimeFlag=true;
break;
case 's':
if(iDatePart >=0&&iDatePart <=59){
out.sec=iDatePart;
}
vTimeFlag=true;
break;
}}
if(vDateFlag===true&&out.year&&out.month&&out.day){
out.date=new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);
}else{
if(vTimeFlag!==true){
return false;
}
out.date=new Date(0, 0, 0, out.hour, out.min, out.sec, 0);
}
return out.date;
},
guessDate: function (vDateStr, vFormat){
if(typeof vDateStr!=='string'){
return vDateStr;
}
var self=this, vParts=vDateStr.replace(self.separators, '\0').split('\0'), vPattern=/^[djmn]/g,
vFormatParts=vFormat.match(self.validParts), vDate=new Date(), vDigit=0, vYear, i, iPart, iSec;
if(!vPattern.test(vFormatParts[0])){
return vDateStr;
}
for (i=0; i < vParts.length; i++){
vDigit=2;
iPart=vParts[i];
iSec=parseInt(iPart.substr(0, 2));
switch (i){
case 0:
if(vFormatParts[0]==='m'||vFormatParts[0]==='n'){
vDate.setMonth(iSec - 1);
}else{
vDate.setDate(iSec);
}
break;
case 1:
if(vFormatParts[0]==='m'||vFormatParts[0]==='n'){
vDate.setDate(iSec);
}else{
vDate.setMonth(iSec - 1);
}
break;
case 2:
vYear=vDate.getFullYear();
if(iPart.length < 4){
vDate.setFullYear(parseInt(vYear.toString().substr(0, 4 - iPart.length) + iPart));
vDigit=iPart.length;
}else{
vDate.setFullYear=parseInt(iPart.substr(0, 4));
vDigit=4;
}
break;
case 3:
vDate.setHours(iSec);
break;
case 4:
vDate.setMinutes(iSec);
break;
case 5:
vDate.setSeconds(iSec);
break;
}
if(iPart.substr(vDigit).length > 0){
vParts.splice(i + 1, 0, iPart.substr(vDigit));
}}
return vDate;
},
parseFormat: function (vChar, vDate){
var self=this, vSettings=self.dateSettings, fmt, backspace=/\\?(.?)/gi, doFormat=function (t, s){
return fmt[t] ? fmt[t]():s;
};
fmt={
d: function (){
return _lpad(fmt.j(), 2);
},
D: function (){
return vSettings.daysShort[fmt.w()];
},
j: function (){
return vDate.getDate();
},
l: function (){
return vSettings.days[fmt.w()];
},
N: function (){
return fmt.w()||7;
},
w: function (){
return vDate.getDay();
},
z: function (){
var a=new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b=new Date(fmt.Y(), 0, 1);
return Math.round((a - b) / DAY);
},
W: function (){
var a=new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b=new Date(a.getFullYear(), 0, 4);
return _lpad(1 + Math.round((a - b) / DAY / 7), 2);
},
F: function (){
return vSettings.months[vDate.getMonth()];
},
m: function (){
return _lpad(fmt.n(), 2);
},
M: function (){
return vSettings.monthsShort[vDate.getMonth()];
},
n: function (){
return vDate.getMonth() + 1;
},
t: function (){
return (new Date(fmt.Y(), fmt.n(), 0)).getDate();
},
L: function (){
var Y=fmt.Y();
return (Y % 4===0&&Y % 100!==0||Y % 400===0) ? 1:0;
},
o: function (){
var n=fmt.n(), W=fmt.W(), Y=fmt.Y();
return Y + (n===12&&W < 9 ? 1:n===1&&W > 9 ? -1:0);
},
Y: function (){
return vDate.getFullYear();
},
y: function (){
return fmt.Y().toString().slice(-2);
},
a: function (){
return fmt.A().toLowerCase();
},
A: function (){
var n=fmt.G() < 12 ? 0:1;
return vSettings.meridiem[n];
},
B: function (){
var H=vDate.getUTCHours() * HOUR, i=vDate.getUTCMinutes() * 60, s=vDate.getUTCSeconds();
return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);
},
g: function (){
return fmt.G() % 12||12;
},
G: function (){
return vDate.getHours();
},
h: function (){
return _lpad(fmt.g(), 2);
},
H: function (){
return _lpad(fmt.G(), 2);
},
i: function (){
return _lpad(vDate.getMinutes(), 2);
},
s: function (){
return _lpad(vDate.getSeconds(), 2);
},
u: function (){
return _lpad(vDate.getMilliseconds() * 1000, 6);
},
e: function (){
var str=/\((.*)\)/.exec(String(vDate))[1];
return str||'Coordinated Universal Time';
},
T: function (){
var str=(String(vDate).match(self.tzParts)||[""]).pop().replace(self.tzClip, "");
return str||'UTC';
},
I: function (){
var a=new Date(fmt.Y(), 0), c=Date.UTC(fmt.Y(), 0),
b=new Date(fmt.Y(), 6), d=Date.UTC(fmt.Y(), 6);
return ((a - c)!==(b - d)) ? 1:0;
},
O: function (){
var tzo=vDate.getTimezoneOffset(), a=Math.abs(tzo);
return (tzo > 0 ? '-':'+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);
},
P: function (){
var O=fmt.O();
return (O.substr(0, 3) + ':' + O.substr(3, 2));
},
Z: function (){
return -vDate.getTimezoneOffset() * 60;
},
c: function (){
return 'Y-m-d\\TH:i:sP'.replace(backspace, doFormat);
},
r: function (){
return 'D, d M Y H:i:s O'.replace(backspace, doFormat);
},
U: function (){
return vDate.getTime() / 1000||0;
}};
return doFormat(vChar, vChar);
},
formatDate: function (vDate, vFormat){
var self=this, i, n, len, str, vChar, vDateStr='';
if(typeof vDate==='string'){
vDate=self.parseDate(vDate, vFormat);
if(vDate===false){
return false;
}}
if(vDate instanceof Date){
len=vFormat.length;
for (i=0; i < len; i++){
vChar=vFormat.charAt(i);
if(vChar==='S'){
continue;
}
str=self.parseFormat(vChar, vDate);
if(i!==(len - 1)&&self.intParts.test(vChar)&&vFormat.charAt(i + 1)==='S'){
n=parseInt(str);
str +=self.dateSettings.ordinal(n);
}
vDateStr +=str;
}
return vDateStr;
}
return '';
}};})();
;(function (factory){
if(typeof define==='function'&&define.amd){
define(['jquery', 'jquery-mousewheel'], factory);
}else if(typeof exports==='object'){
module.exports=factory;
}else{
factory(jQuery);
}}(function ($){
'use strict';
var currentlyScrollingTimeDiv=false;
var default_options={
i18n: {
ar: {
months: [
"كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"
],
dayOfWeekShort: [
"ن", "ث", "ع", "خ", "ج", "س", "ح"
],
dayOfWeek: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"]
},
ro: {
months: [
"Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"
],
dayOfWeekShort: [
"Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"
],
dayOfWeek: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"]
},
id: {
months: [
"Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"
],
dayOfWeekShort: [
"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"
],
dayOfWeek: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"]
},
is: {
months: [
"Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"
],
dayOfWeekShort: [
"Sun", "Mán", "Þrið", "Mið", "Fim", "Fös", "Lau"
],
dayOfWeek: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"]
},
bg: {
months: [
"Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"
],
dayOfWeekShort: [
"Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
],
dayOfWeek: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"]
},
fa: {
months: [
'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'
],
dayOfWeekShort: [
'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'
],
dayOfWeek: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"]
},
ru: {
months: [
'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
],
dayOfWeekShort: [
"Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
],
dayOfWeek: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
},
uk: {
months: [
'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
],
dayOfWeekShort: [
"Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт"
],
dayOfWeek: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"]
},
en: {
months: [
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
],
dayOfWeekShort: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
],
dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
},
el: {
months: [
"Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"
],
dayOfWeekShort: [
"Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"
],
dayOfWeek: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"]
},
de: {
months: [
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
],
dayOfWeekShort: [
"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
],
dayOfWeek: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
},
nl: {
months: [
"januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"
],
dayOfWeekShort: [
"zo", "ma", "di", "wo", "do", "vr", "za"
],
dayOfWeek: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"]
},
tr: {
months: [
"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
],
dayOfWeekShort: [
"Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"
],
dayOfWeek: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"]
},
fr: {
months: [
"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
],
dayOfWeekShort: [
"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
],
dayOfWeek: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
},
es: {
months: [
"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
],
dayOfWeekShort: [
"Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"
],
dayOfWeek: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"]
},
th: {
months: [
'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
],
dayOfWeekShort: [
'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
],
dayOfWeek: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"]
},
pl: {
months: [
"styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"
],
dayOfWeekShort: [
"nd", "pn", "wt", "śr", "cz", "pt", "sb"
],
dayOfWeek: ["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"]
},
pt: {
months: [
"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
],
dayOfWeekShort: [
"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"
],
dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
},
ch: {
months: [
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
],
dayOfWeekShort: [
"日", "一", "二", "三", "四", "五", "六"
]
},
se: {
months: [
"Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September",  "Oktober", "November", "December"
],
dayOfWeekShort: [
"Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
]
},
kr: {
months: [
"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
],
dayOfWeekShort: [
"일", "월", "화", "수", "목", "금", "토"
],
dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
},
it: {
months: [
"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
],
dayOfWeekShort: [
"Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"
],
dayOfWeek: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]
},
da: {
months: [
"January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December"
],
dayOfWeekShort: [
"Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
],
dayOfWeek: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"]
},
no: {
months: [
"Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"
],
dayOfWeekShort: [
"Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
],
dayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']
},
ja: {
months: [
"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
],
dayOfWeekShort: [
"日", "月", "火", "水", "木", "金", "土"
],
dayOfWeek: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"]
},
vi: {
months: [
"Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"
],
dayOfWeekShort: [
"CN", "T2", "T3", "T4", "T5", "T6", "T7"
],
dayOfWeek: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"]
},
sl: {
months: [
"Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"
],
dayOfWeekShort: [
"Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"
],
dayOfWeek: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"]
},
cs: {
months: [
"Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"
],
dayOfWeekShort: [
"Ne", "Po", "Út", "St", "Čt", "Pá", "So"
]
},
hu: {
months: [
"Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"
],
dayOfWeekShort: [
"Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo"
],
dayOfWeek: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
},
az: {
months: [
"Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"
],
dayOfWeekShort: [
"B", "Be", "Ça", "Ç", "Ca", "C", "Ş"
],
dayOfWeek: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"]
},
bs: {
months: [
"Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
],
dayOfWeekShort: [
"Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
],
dayOfWeek: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
},
ca: {
months: [
"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"
],
dayOfWeekShort: [
"Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"
],
dayOfWeek: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"]
},
'en-GB': {
months: [
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
],
dayOfWeekShort: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
],
dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
},
et: { //"Eesti"
months: [
"Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"
],
dayOfWeekShort: [
"P", "E", "T", "K", "N", "R", "L"
],
dayOfWeek: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"]
},
eu: {
months: [
"Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"
],
dayOfWeekShort: [
"Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La."
],
dayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']
},
fi: {
months: [
"Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"
],
dayOfWeekShort: [
"Su", "Ma", "Ti", "Ke", "To", "Pe", "La"
],
dayOfWeek: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"]
},
gl: {
months: [
"Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec"
],
dayOfWeekShort: [
"Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab"
],
dayOfWeek: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"]
},
hr: {
months: [
"Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"
],
dayOfWeekShort: [
"Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
],
dayOfWeek: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
},
ko: {
months: [
"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
],
dayOfWeekShort: [
"일", "월", "화", "수", "목", "금", "토"
],
dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
},
lt: {
months: [
"Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio"
],
dayOfWeekShort: [
"Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš"
],
dayOfWeek: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"]
},
lv: {
months: [
"Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"
],
dayOfWeekShort: [
"Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St"
],
dayOfWeek: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"]
},
mk: {
months: [
"јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"
],
dayOfWeekShort: [
"нед", "пон", "вто", "сре", "чет", "пет", "саб"
],
dayOfWeek: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"]
},
mn: {
months: [
"1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар"
],
dayOfWeekShort: [
"Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням"
],
dayOfWeek: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"]
},
'pt-BR': {
months: [
"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
],
dayOfWeekShort: [
"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"
],
dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
},
sk: {
months: [
"Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"
],
dayOfWeekShort: [
"Ne", "Po", "Ut", "St", "Št", "Pi", "So"
],
dayOfWeek: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"]
},
sq: {
months: [
"Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"
],
dayOfWeekShort: [
"Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"
],
dayOfWeek: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"]
},
'sr-YU': {
months: [
"Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
],
dayOfWeekShort: [
"Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub"
],
dayOfWeek: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"]
},
sr: {
months: [
"јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар"
],
dayOfWeekShort: [
"нед", "пон", "уто", "сре", "чет", "пет", "суб"
],
dayOfWeek: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"]
},
sv: {
months: [
"Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
],
dayOfWeekShort: [
"Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
],
dayOfWeek: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"]
},
'zh-TW': {
months: [
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
],
dayOfWeekShort: [
"日", "一", "二", "三", "四", "五", "六"
],
dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
},
zh: {
months: [
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
],
dayOfWeekShort: [
"日", "一", "二", "三", "四", "五", "六"
],
dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
},
he: {
months: [
'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'
],
dayOfWeekShort: [
'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת'
],
dayOfWeek: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
},
hy: {
months: [
"Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"
],
dayOfWeekShort: [
"Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ"
],
dayOfWeek: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"]
},
kg: {
months: [
'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'
],
dayOfWeekShort: [
"Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише"
],
dayOfWeek: [
"Жекшемб", "Дүйшөмб", "Шейшемб", "Шаршемб", "Бейшемби", "Жума", "Ишенб"
]
},
rm: {
months: [
"Schaner", "Favrer", "Mars", "Avrigl", "Matg", "Zercladur", "Fanadur", "Avust", "Settember", "October", "November", "December"
],
dayOfWeekShort: [
"Du", "Gli", "Ma", "Me", "Gie", "Ve", "So"
],
dayOfWeek: [
"Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda"
]
},
ka: {
months: [
'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'
],
dayOfWeekShort: [
"კვ", "ორშ", "სამშ", "ოთხ", "ხუთ", "პარ", "შაბ"
],
dayOfWeek: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"]
},
},
value: '',
rtl: false,
format:	'Y/m/d H:i',
formatTime:	'H:i',
formatDate:	'Y/m/d',
startDate:	false,
step: 60,
monthChangeSpinner: true,
closeOnDateSelect: false,
closeOnTimeSelect: true,
closeOnWithoutClick: true,
closeOnInputClick: true,
timepicker: true,
datepicker: true,
weeks: false,
defaultTime: false,
defaultDate: false,
minDate: false,
maxDate: false,
minTime: false,
maxTime: false,
disabledMinTime: false,
disabledMaxTime: false,
allowTimes: [],
opened: false,
initTime: true,
inline: false,
theme: '',
onSelectDate: function (){},
onSelectTime: function (){},
onChangeMonth: function (){},
onGetWeekOfYear: function (){},
onChangeYear: function (){},
onChangeDateTime: function (){},
onShow: function (){},
onClose: function (){},
onGenerate: function (){},
withoutCopyright: true,
inverseButton: false,
hours12: false,
next: 'xdsoft_next',
prev:'xdsoft_prev',
dayOfWeekStart: 0,
parentID: 'body',
timeHeightInTimePicker: 25,
timepickerScrollbar: true,
todayButton: true,
prevButton: true,
nextButton: true,
defaultSelect: true,
scrollMonth: true,
scrollTime: true,
scrollInput: true,
lazyInit: false,
mask: false,
validateOnBlur: true,
allowBlank: true,
yearStart: 1950,
yearEnd: 2050,
monthStart: 0,
monthEnd: 11,
style: '',
id: '',
fixed: false,
roundTime: 'round',
className: '',
weekends: [],
highlightedDates: [],
highlightedPeriods: [],
allowDates:[],
allowDateRe:null,
disabledDates:[],
disabledWeekDays: [],
yearOffset: 0,
beforeShowDay: null,
enterLikeTab: true,
showApplyButton: false
};
var dateHelper=null,
globalLocaleDefault='en',
globalLocale='en';
var dateFormatterOptionsDefault={
meridiem: ['AM', 'PM']
};
var initDateFormatter=function(){
var locale=default_options.i18n[globalLocale],
opts={
days: locale.dayOfWeek,
daysShort: locale.dayOfWeekShort,
months: locale.months,
monthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) }),
};
dateHelper=new DateFormatter({
dateSettings: $.extend({}, dateFormatterOptionsDefault, opts)
});
};
$.xdsoft_datetimepicker={
setLocale: function(locale){
var newLocale=default_options.i18n[locale]?locale:globalLocaleDefault;
if(globalLocale!=newLocale){
globalLocale=newLocale;
initDateFormatter();
}},
setDateFormatter: function(dateFormatter){
dateHelper=dateFormatter;
},
RFC_2822: 'D, d M Y H:i:s O',
ATOM: 'Y-m-d\TH:i:sP',
ISO_8601: 'Y-m-d\TH:i:sO',
RFC_822: 'D, d M y H:i:s O',
RFC_850: 'l, d-M-y H:i:s T',
RFC_1036: 'D, d M y H:i:s O',
RFC_1123: 'D, d M Y H:i:s O',
RSS: 'D, d M Y H:i:s O',
W3C: 'Y-m-d\TH:i:sP'
};
initDateFormatter();
if(!window.getComputedStyle){
window.getComputedStyle=function (el, pseudo){
this.el=el;
this.getPropertyValue=function (prop){
var re=/(\-([a-z]){1})/g;
if(prop==='float'){
prop='styleFloat';
}
if(re.test(prop)){
prop=prop.replace(re, function (a, b, c){
return c.toUpperCase();
});
}
return el.currentStyle[prop]||null;
};
return this;
};}
if(!Array.prototype.indexOf){
Array.prototype.indexOf=function (obj, start){
var i, j;
for (i=(start||0), j=this.length; i < j; i +=1){
if(this[i]===obj){ return i; }}
return -1;
};}
Date.prototype.countDaysInMonth=function (){
return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();
};
$.fn.xdsoftScroller=function (percent){
return this.each(function (){
var timeboxparent=$(this),
pointerEventToXY=function (e){
var out={x: 0, y: 0},
touch;
if(e.type==='touchstart'||e.type==='touchmove'||e.type==='touchend'||e.type==='touchcancel'){
touch=e.originalEvent.touches[0]||e.originalEvent.changedTouches[0];
out.x=touch.clientX;
out.y=touch.clientY;
}else if(e.type==='mousedown'||e.type==='mouseup'||e.type==='mousemove'||e.type==='mouseover'||e.type==='mouseout'||e.type==='mouseenter'||e.type==='mouseleave'){
out.x=e.clientX;
out.y=e.clientY;
}
return out;
},
timebox,
parentHeight,
height,
scrollbar,
scroller,
maximumOffset=100,
start=false,
startY=0,
startTop=0,
h1=0,
touchStart=false,
startTopScroll=0,
calcOffset=function (){};
if(percent==='hide'){
timeboxparent.find('.xdsoft_scrollbar').hide();
return;
}
if(!$(this).hasClass('xdsoft_scroller_box')){
timebox=timeboxparent.children().eq(0);
parentHeight=timeboxparent[0].clientHeight;
height=timebox[0].offsetHeight;
scrollbar=$('<div class="xdsoft_scrollbar"></div>');
scroller=$('<div class="xdsoft_scroller"></div>');
scrollbar.append(scroller);
timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
calcOffset=function calcOffset(event){
var offset=pointerEventToXY(event).y - startY + startTopScroll;
if(offset < 0){
offset=0;
}
if(offset + scroller[0].offsetHeight > h1){
offset=h1 - scroller[0].offsetHeight;
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset:0]);
};
scroller
.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event){
if(!parentHeight){
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
}
startY=pointerEventToXY(event).y;
startTopScroll=parseInt(scroller.css('margin-top'), 10);
h1=scrollbar[0].offsetHeight;
if(event.type==='mousedown'||event.type==='touchstart'){
if(document){
$(document.body).addClass('xdsoft_noselect');
}
$([document.body, window]).on('touchend mouseup.xdsoft_scroller', function arguments_callee(){
$([document.body, window]).off('touchend mouseup.xdsoft_scroller', arguments_callee)
.off('mousemove.xdsoft_scroller', calcOffset)
.removeClass('xdsoft_noselect');
});
$(document.body).on('mousemove.xdsoft_scroller', calcOffset);
}else{
touchStart=true;
event.stopPropagation();
event.preventDefault();
}})
.on('touchmove', function (event){
if(touchStart){
event.preventDefault();
calcOffset(event);
}})
.on('touchend touchcancel', function (){
touchStart=false;
startTopScroll=0;
});
timeboxparent
.on('scroll_element.xdsoft_scroller', function (event, percentage){
if(!parentHeight){
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);
}
percentage=percentage > 1 ? 1:(percentage < 0||isNaN(percentage)) ? 0:percentage;
scroller.css('margin-top', maximumOffset * percentage);
setTimeout(function (){
timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));
}, 10);
})
.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll){
var percent, sh;
parentHeight=timeboxparent[0].clientHeight;
height=timebox[0].offsetHeight;
percent=parentHeight / height;
sh=percent * scrollbar[0].offsetHeight;
if(percent > 1){
scroller.hide();
}else{
scroller.show();
scroller.css('height', parseInt(sh > 10 ? sh:10, 10));
maximumOffset=scrollbar[0].offsetHeight - scroller[0].offsetHeight;
if(noTriggerScroll!==true){
timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage||Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);
}}
});
timeboxparent.on('mousewheel', function (event){
var top=Math.abs(parseInt(timebox.css('marginTop'), 10));
top=top - (event.deltaY * 20);
if(top < 0){
top=0;
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);
event.stopPropagation();
return false;
});
timeboxparent.on('touchstart', function (event){
start=pointerEventToXY(event);
startTop=Math.abs(parseInt(timebox.css('marginTop'), 10));
});
timeboxparent.on('touchmove', function (event){
if(start){
event.preventDefault();
var coord=pointerEventToXY(event);
timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);
}});
timeboxparent.on('touchend touchcancel', function (){
start=false;
startTop=0;
});
}
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
});
};
$.fn.xdsoft_datetimepicker=function (opt, opt2){
var result=this,
KEY0=48,
KEY9=57,
_KEY0=96,
_KEY9=105,
CTRLKEY=17,
DEL=46,
ENTER=13,
ESC=27,
BACKSPACE=8,
ARROWLEFT=37,
ARROWUP=38,
ARROWRIGHT=39,
ARROWDOWN=40,
TAB=9,
F5=116,
AKEY=65,
CKEY=67,
VKEY=86,
ZKEY=90,
YKEY=89,
ctrlDown=false,
options=($.isPlainObject(opt)||!opt) ? $.extend(true, {}, default_options, opt):$.extend(true, {}, default_options),
lazyInitTimer=0,
createDateTimePicker,
destroyDateTimePicker,
lazyInit=function (input){
input
.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback(){
if(input.is(':disabled')||input.data('xdsoft_datetimepicker')){
return;
}
clearTimeout(lazyInitTimer);
lazyInitTimer=setTimeout(function (){
if(!input.data('xdsoft_datetimepicker')){
createDateTimePicker(input);
}
input
.off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)
.trigger('open.xdsoft');
}, 100);
});
};
createDateTimePicker=function (input){
var datetimepicker=$('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'),
xdsoft_copyright=$('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
datepicker=$('<div class="xdsoft_datepicker active"></div>'),
month_picker=$('<div class="xdsoft_monthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
'<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
'<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
'<button type="button" class="xdsoft_next"></button></div>'),
calendar=$('<div class="xdsoft_calendar"></div>'),
timepicker=$('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
timeboxparent=timepicker.find('.xdsoft_time_box').eq(0),
timebox=$('<div class="xdsoft_time_variant"></div>'),
applyButton=$('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
monthselect=$('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
yearselect=$('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
triggerAfterOpen=false,
XDSoft_datetime,
xchangeTimer,
timerclick,
current_time_index,
setPos,
timer=0,
_xdsoft_datetime,
forEachAncestorOf,
throttle;
if(options.id){
datetimepicker.attr('id', options.id);
}
if(options.style){
datetimepicker.attr('style', options.style);
}
if(options.weeks){
datetimepicker.addClass('xdsoft_showweeks');
}
if(options.rtl){
datetimepicker.addClass('xdsoft_rtl');
}
datetimepicker.addClass('xdsoft_' + options.theme);
datetimepicker.addClass(options.className);
month_picker
.find('.xdsoft_month span')
.after(monthselect);
month_picker
.find('.xdsoft_year span')
.after(yearselect);
month_picker
.find('.xdsoft_month,.xdsoft_year')
.on('touchstart mousedown.xdsoft', function (event){
var select=$(this).find('.xdsoft_select').eq(0),
val=0,
top=0,
visible=select.is(':visible'),
items,
i;
month_picker
.find('.xdsoft_select')
.hide();
if(_xdsoft_datetime.currentTime){
val=_xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth':'getFullYear']();
}
select[visible ? 'hide':'show']();
for (items=select.find('div.xdsoft_option'), i=0; i < items.length; i +=1){
if(items.eq(i).data('value')===val){
break;
}else{
top +=items[0].offsetHeight;
}}
select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
event.stopPropagation();
return false;
});
month_picker
.find('.xdsoft_select')
.xdsoftScroller()
.on('touchstart mousedown.xdsoft', function (event){
event.stopPropagation();
event.preventDefault();
})
.on('touchstart mousedown.xdsoft', '.xdsoft_option', function (){
if(_xdsoft_datetime.currentTime===undefined||_xdsoft_datetime.currentTime===null){
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
}
var year=_xdsoft_datetime.currentTime.getFullYear();
if(_xdsoft_datetime&&_xdsoft_datetime.currentTime){
_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth':'setFullYear']($(this).data('value'));
}
$(this).parent().parent().hide();
datetimepicker.trigger('xchange.xdsoft');
if(options.onChangeMonth&&$.isFunction(options.onChangeMonth)){
options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
if(year!==_xdsoft_datetime.currentTime.getFullYear()&&$.isFunction(options.onChangeYear)){
options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}});
datetimepicker.getValue=function (){
return _xdsoft_datetime.getCurrentTime();
};
datetimepicker.setOptions=function (_options){
var highlightedDates={};
options=$.extend(true, {}, options, _options);
if(_options.allowTimes&&$.isArray(_options.allowTimes)&&_options.allowTimes.length){
options.allowTimes=$.extend(true, [], _options.allowTimes);
}
if(_options.weekends&&$.isArray(_options.weekends)&&_options.weekends.length){
options.weekends=$.extend(true, [], _options.weekends);
}
if(_options.allowDates&&$.isArray(_options.allowDates)&&_options.allowDates.length){
options.allowDates=$.extend(true, [], _options.allowDates);
}
if(_options.allowDateRe&&Object.prototype.toString.call(_options.allowDateRe)==="[object String]"){
options.allowDateRe=new RegExp(_options.allowDateRe);
}
if(_options.highlightedDates&&$.isArray(_options.highlightedDates)&&_options.highlightedDates.length){
$.each(_options.highlightedDates, function (index, value){
var splitData=$.map(value.split(','), $.trim),
exDesc,
hDate=new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]),
keyDate=dateHelper.formatDate(hDate.date, options.formatDate);
if(highlightedDates[keyDate]!==undefined){
exDesc=highlightedDates[keyDate].desc;
if(exDesc&&exDesc.length&&hDate.desc&&hDate.desc.length){
highlightedDates[keyDate].desc=exDesc + "\n" + hDate.desc;
}}else{
highlightedDates[keyDate]=hDate;
}});
options.highlightedDates=$.extend(true, [], highlightedDates);
}
if(_options.highlightedPeriods&&$.isArray(_options.highlightedPeriods)&&_options.highlightedPeriods.length){
highlightedDates=$.extend(true, [], options.highlightedDates);
$.each(_options.highlightedPeriods, function (index, value){
var dateTest,
dateEnd,
desc,
hDate,
keyDate,
exDesc,
style;
if($.isArray(value)){
dateTest=value[0];
dateEnd=value[1];
desc=value[2];
style=value[3];
}else{
var splitData=$.map(value.split(','), $.trim);
dateTest=dateHelper.parseDate(splitData[0], options.formatDate);
dateEnd=dateHelper.parseDate(splitData[1], options.formatDate);
desc=splitData[2];
style=splitData[3];
}
while (dateTest <=dateEnd){
hDate=new HighlightedDate(dateTest, desc, style);
keyDate=dateHelper.formatDate(dateTest, options.formatDate);
dateTest.setDate(dateTest.getDate() + 1);
if(highlightedDates[keyDate]!==undefined){
exDesc=highlightedDates[keyDate].desc;
if(exDesc&&exDesc.length&&hDate.desc&&hDate.desc.length){
highlightedDates[keyDate].desc=exDesc + "\n" + hDate.desc;
}}else{
highlightedDates[keyDate]=hDate;
}}
});
options.highlightedDates=$.extend(true, [], highlightedDates);
}
if(_options.disabledDates&&$.isArray(_options.disabledDates)&&_options.disabledDates.length){
options.disabledDates=$.extend(true, [], _options.disabledDates);
}
if(_options.disabledWeekDays&&$.isArray(_options.disabledWeekDays)&&_options.disabledWeekDays.length){
options.disabledWeekDays=$.extend(true, [], _options.disabledWeekDays);
}
if((options.open||options.opened)&&(!options.inline)){
input.trigger('open.xdsoft');
}
if(options.inline){
triggerAfterOpen=true;
datetimepicker.addClass('xdsoft_inline');
input.after(datetimepicker).hide();
}
if(options.inverseButton){
options.next='xdsoft_prev';
options.prev='xdsoft_next';
}
if(options.datepicker){
datepicker.addClass('active');
}else{
datepicker.removeClass('active');
}
if(options.timepicker){
timepicker.addClass('active');
}else{
timepicker.removeClass('active');
}
if(options.value){
_xdsoft_datetime.setCurrentTime(options.value);
if(input&&input.val){
input.val(_xdsoft_datetime.str);
}}
if(isNaN(options.dayOfWeekStart)){
options.dayOfWeekStart=0;
}else{
options.dayOfWeekStart=parseInt(options.dayOfWeekStart, 10) % 7;
}
if(!options.timepickerScrollbar){
timeboxparent.xdsoftScroller('hide');
}
if(options.minDate&&/^[\+\-](.*)$/.test(options.minDate)){
options.minDate=dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);
}
if(options.maxDate&&/^[\+\-](.*)$/.test(options.maxDate)){
options.maxDate=dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);
}
applyButton.toggle(options.showApplyButton);
month_picker
.find('.xdsoft_today_button')
.css('visibility', !options.todayButton ? 'hidden':'visible');
month_picker
.find('.' + options.prev)
.css('visibility', !options.prevButton ? 'hidden':'visible');
month_picker
.find('.' + options.next)
.css('visibility', !options.nextButton ? 'hidden':'visible');
setMask(options);
if(options.validateOnBlur){
input
.off('blur.xdsoft')
.on('blur.xdsoft', function (){
if(options.allowBlank&&(!$.trim($(this).val()).length||(typeof options.mask=="string"&&$.trim($(this).val())===options.mask.replace(/[0-9]/g, '_')))){
$(this).val(null);
datetimepicker.data('xdsoft_datetime').empty();
}else{
var d=dateHelper.parseDate($(this).val(), options.format);
if(d){
$(this).val(dateHelper.formatDate(d, options.format));
}else{
var splittedHours=+([$(this).val()[0], $(this).val()[1]].join('')),
splittedMinutes=+([$(this).val()[2], $(this).val()[3]].join(''));
if(!options.datepicker&&options.timepicker&&splittedHours >=0&&splittedHours < 24&&splittedMinutes >=0&&splittedMinutes < 60){
$(this).val([splittedHours, splittedMinutes].map(function (item){
return item > 9 ? item:'0' + item;
}).join(':'));
}else{
$(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));
}}
datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
}
datetimepicker.trigger('changedatetime.xdsoft');
datetimepicker.trigger('close.xdsoft');
});
}
options.dayOfWeekStartPrev=(options.dayOfWeekStart===0) ? 6:options.dayOfWeekStart - 1;
datetimepicker
.trigger('xchange.xdsoft')
.trigger('afterOpen.xdsoft');
};
datetimepicker
.data('options', options)
.on('touchstart mousedown.xdsoft', function (event){
event.stopPropagation();
event.preventDefault();
yearselect.hide();
monthselect.hide();
return false;
});
timeboxparent.append(timebox);
timeboxparent.xdsoftScroller();
datetimepicker.on('afterOpen.xdsoft', function (){
timeboxparent.xdsoftScroller();
});
datetimepicker
.append(datepicker)
.append(timepicker);
if(options.withoutCopyright!==true){
datetimepicker
.append(xdsoft_copyright);
}
datepicker
.append(month_picker)
.append(calendar)
.append(applyButton);
$(options.parentID)
.append(datetimepicker);
XDSoft_datetime=function (){
var _this=this;
_this.now=function (norecursion){
var d=new Date(),
date,
time;
if(!norecursion&&options.defaultDate){
date=_this.strToDateTime(options.defaultDate);
d.setFullYear(date.getFullYear());
d.setMonth(date.getMonth());
d.setDate(date.getDate());
}
if(options.yearOffset){
d.setFullYear(d.getFullYear() + options.yearOffset);
}
if(!norecursion&&options.defaultTime){
time=_this.strtotime(options.defaultTime);
d.setHours(time.getHours());
d.setMinutes(time.getMinutes());
}
return d;
};
_this.isValidDate=function (d){
if(Object.prototype.toString.call(d)!=="[object Date]"){
return false;
}
return !isNaN(d.getTime());
};
_this.setCurrentTime=function (dTime, requireValidDate){
if(typeof dTime==='string'){
_this.currentTime=_this.strToDateTime(dTime);
}
else if(_this.isValidDate(dTime)){
_this.currentTime=dTime;
}
else if(!dTime&&!requireValidDate&&options.allowBlank){
_this.currentTime=null;
}else{
_this.currentTime=_this.now();
}
datetimepicker.trigger('xchange.xdsoft');
};
_this.empty=function (){
_this.currentTime=null;
};
_this.getCurrentTime=function (dTime){
return _this.currentTime;
};
_this.nextMonth=function (){
if(_this.currentTime===undefined||_this.currentTime===null){
_this.currentTime=_this.now();
}
var month=_this.currentTime.getMonth() + 1,
year;
if(month===12){
_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
month=0;
}
year=_this.currentTime.getFullYear();
_this.currentTime.setDate(Math.min(new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
_this.currentTime.getDate()
)
);
_this.currentTime.setMonth(month);
if(options.onChangeMonth&&$.isFunction(options.onChangeMonth)){
options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
if(year!==_this.currentTime.getFullYear()&&$.isFunction(options.onChangeYear)){
options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
datetimepicker.trigger('xchange.xdsoft');
return month;
};
_this.prevMonth=function (){
if(_this.currentTime===undefined||_this.currentTime===null){
_this.currentTime=_this.now();
}
var month=_this.currentTime.getMonth() - 1;
if(month===-1){
_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
month=11;
}
_this.currentTime.setDate(Math.min(new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
_this.currentTime.getDate()
)
);
_this.currentTime.setMonth(month);
if(options.onChangeMonth&&$.isFunction(options.onChangeMonth)){
options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
datetimepicker.trigger('xchange.xdsoft');
return month;
};
_this.getWeekOfYear=function (datetime){
if(options.onGetWeekOfYear&&$.isFunction(options.onGetWeekOfYear)){
var week=options.onGetWeekOfYear.call(datetimepicker, datetime);
if(typeof week!=='undefined'){
return week;
}}
var onejan=new Date(datetime.getFullYear(), 0, 1);
if(onejan.getDay()!=4)
onejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));
return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);
};
_this.strToDateTime=function (sDateTime){
var tmpDate=[], timeOffset, currentTime;
if(sDateTime&&sDateTime instanceof Date&&_this.isValidDate(sDateTime)){
return sDateTime;
}
tmpDate=/^(\+|\-)(.*)$/.exec(sDateTime);
if(tmpDate){
tmpDate[2]=dateHelper.parseDate(tmpDate[2], options.formatDate);
}
if(tmpDate&&tmpDate[2]){
timeOffset=tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
currentTime=new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);
}else{
currentTime=sDateTime ? dateHelper.parseDate(sDateTime, options.format):_this.now();
}
if(!_this.isValidDate(currentTime)){
currentTime=_this.now();
}
return currentTime;
};
_this.strToDate=function (sDate){
if(sDate&&sDate instanceof Date&&_this.isValidDate(sDate)){
return sDate;
}
var currentTime=sDate ? dateHelper.parseDate(sDate, options.formatDate):_this.now(true);
if(!_this.isValidDate(currentTime)){
currentTime=_this.now(true);
}
return currentTime;
};
_this.strtotime=function (sTime){
if(sTime&&sTime instanceof Date&&_this.isValidDate(sTime)){
return sTime;
}
var currentTime=sTime ? dateHelper.parseDate(sTime, options.formatTime):_this.now(true);
if(!_this.isValidDate(currentTime)){
currentTime=_this.now(true);
}
return currentTime;
};
_this.str=function (){
return dateHelper.formatDate(_this.currentTime, options.format);
};
_this.currentTime=this.now();
};
_xdsoft_datetime=new XDSoft_datetime();
applyButton.on('touchend click', function (e){
e.preventDefault();
datetimepicker.data('changed', true);
_xdsoft_datetime.setCurrentTime(getCurrentValue());
input.val(_xdsoft_datetime.str());
datetimepicker.trigger('close.xdsoft');
});
month_picker
.find('.xdsoft_today_button')
.on('touchend mousedown.xdsoft', function (){
datetimepicker.data('changed', true);
_xdsoft_datetime.setCurrentTime(0, true);
datetimepicker.trigger('afterOpen.xdsoft');
}).on('dblclick.xdsoft', function (){
var currentDate=_xdsoft_datetime.getCurrentTime(), minDate, maxDate;
currentDate=new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
minDate=_xdsoft_datetime.strToDate(options.minDate);
minDate=new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
if(currentDate < minDate){
return;
}
maxDate=_xdsoft_datetime.strToDate(options.maxDate);
maxDate=new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
if(currentDate > maxDate){
return;
}
input.val(_xdsoft_datetime.str());
input.trigger('change');
datetimepicker.trigger('close.xdsoft');
});
month_picker
.find('.xdsoft_prev,.xdsoft_next')
.on('touchend mousedown.xdsoft', function (){
var $this=$(this),
timer=0,
stop=false;
(function arguments_callee1(v){
if($this.hasClass(options.next)){
_xdsoft_datetime.nextMonth();
}else if($this.hasClass(options.prev)){
_xdsoft_datetime.prevMonth();
}
if(options.monthChangeSpinner){
if(!stop){
timer=setTimeout(arguments_callee1, v||100);
}}
}(500));
$([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee2(){
clearTimeout(timer);
stop=true;
$([document.body, window]).off('touchend mouseup.xdsoft', arguments_callee2);
});
});
timepicker
.find('.xdsoft_prev,.xdsoft_next')
.on('touchend mousedown.xdsoft', function (){
var $this=$(this),
timer=0,
stop=false,
period=110;
(function arguments_callee4(v){
var pheight=timeboxparent[0].clientHeight,
height=timebox[0].offsetHeight,
top=Math.abs(parseInt(timebox.css('marginTop'), 10));
if($this.hasClass(options.next)&&(height - pheight) - options.timeHeightInTimePicker >=top){
timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');
}else if($this.hasClass(options.prev)&&top - options.timeHeightInTimePicker >=0){
timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox[0].style.marginTop, 10) / (height - pheight))]);
period=(period > 10) ? 10:period - 10;
if(!stop){
timer=setTimeout(arguments_callee4, v||period);
}}(500));
$([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee5(){
clearTimeout(timer);
stop=true;
$([document.body, window])
.off('touchend mouseup.xdsoft', arguments_callee5);
});
});
xchangeTimer=0;
datetimepicker
.on('xchange.xdsoft', function (event){
clearTimeout(xchangeTimer);
xchangeTimer=setTimeout(function (){
if(_xdsoft_datetime.currentTime===undefined||_xdsoft_datetime.currentTime===null){
if(options.allowBlank)
return;
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
}
var table='',
start=new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),
i=0,
j,
today=_xdsoft_datetime.now(),
maxDate=false,
minDate=false,
hDate,
day,
d,
y,
m,
w,
classes=[],
customDateSettings,
newRow=true,
time='',
h='',
line_time,
description;
while (start.getDay()!==options.dayOfWeekStart){
start.setDate(start.getDate() - 1);
}
table +='<table><thead><tr>';
if(options.weeks){
table +='<th></th>';
}
for (j=0; j < 7; j +=1){
table +='<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';
}
table +='</tr></thead>';
table +='<tbody>';
if(options.maxDate!==false){
maxDate=_xdsoft_datetime.strToDate(options.maxDate);
maxDate=new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);
}
if(options.minDate!==false){
minDate=_xdsoft_datetime.strToDate(options.minDate);
minDate=new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
}
while (i < _xdsoft_datetime.currentTime.countDaysInMonth()||start.getDay()!==options.dayOfWeekStart||_xdsoft_datetime.currentTime.getMonth()===start.getMonth()){
classes=[];
i +=1;
day=start.getDay();
d=start.getDate();
y=start.getFullYear();
m=start.getMonth();
w=_xdsoft_datetime.getWeekOfYear(start);
description='';
classes.push('xdsoft_date');
if(options.beforeShowDay&&$.isFunction(options.beforeShowDay.call)){
customDateSettings=options.beforeShowDay.call(datetimepicker, start);
}else{
customDateSettings=null;
}
if(options.allowDateRe&&Object.prototype.toString.call(options.allowDateRe)==="[object RegExp]"){
if(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){
classes.push('xdsoft_disabled');
}}else if(options.allowDates&&options.allowDates.length>0){
if(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate))===-1){
classes.push('xdsoft_disabled');
}}else if((maxDate!==false&&start > maxDate)||(minDate!==false&&start < minDate)||(customDateSettings&&customDateSettings[0]===false)){
classes.push('xdsoft_disabled');
}else if(options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate))!==-1){
classes.push('xdsoft_disabled');
}else if(options.disabledWeekDays.indexOf(day)!==-1){
classes.push('xdsoft_disabled');
}else if(input.is('[readonly]')){
classes.push('xdsoft_disabled');
}
if(customDateSettings&&customDateSettings[1]!==""){
classes.push(customDateSettings[1]);
}
if(_xdsoft_datetime.currentTime.getMonth()!==m){
classes.push('xdsoft_other_month');
}
if((options.defaultSelect||datetimepicker.data('changed'))&&dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate)===dateHelper.formatDate(start, options.formatDate)){
classes.push('xdsoft_current');
}
if(dateHelper.formatDate(today, options.formatDate)===dateHelper.formatDate(start, options.formatDate)){
classes.push('xdsoft_today');
}
if(start.getDay()===0||start.getDay()===6||options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate))!==-1){
classes.push('xdsoft_weekend');
}
if(options.highlightedDates[dateHelper.formatDate(start, options.formatDate)]!==undefined){
hDate=options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];
classes.push(hDate.style===undefined ? 'xdsoft_highlighted_default':hDate.style);
description=hDate.desc===undefined ? '':hDate.desc;
}
if(options.beforeShowDay&&$.isFunction(options.beforeShowDay)){
classes.push(options.beforeShowDay(start));
}
if(newRow){
table +='<tr>';
newRow=false;
if(options.weeks){
table +='<th>' + w + '</th>';
}}
table +='<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '" title="' + description + '">' +
'<div>' + d + '</div>' +
'</td>';
if(start.getDay()===options.dayOfWeekStartPrev){
table +='</tr>';
newRow=true;
}
start.setDate(d + 1);
}
table +='</tbody></table>';
calendar.html(table);
month_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);
month_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());
time='';
h='';
m='';
line_time=function line_time(h, m){
var now=_xdsoft_datetime.now(), optionDateTime, current_time,
isALlowTimesInit=options.allowTimes&&$.isArray(options.allowTimes)&&options.allowTimes.length;
now.setHours(h);
h=parseInt(now.getHours(), 10);
now.setMinutes(m);
m=parseInt(now.getMinutes(), 10);
optionDateTime=new Date(_xdsoft_datetime.currentTime);
optionDateTime.setHours(h);
optionDateTime.setMinutes(m);
classes=[];
if((options.minDateTime!==false&&options.minDateTime > optionDateTime)||(options.maxTime!==false&&_xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime())||(options.minTime!==false&&_xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())){
classes.push('xdsoft_disabled');
}else if((options.minDateTime!==false&&options.minDateTime > optionDateTime)||((options.disabledMinTime!==false&&now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime())&&(options.disabledMaxTime!==false&&now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))){
classes.push('xdsoft_disabled');
}else if(input.is('[readonly]')){
classes.push('xdsoft_disabled');
}
current_time=new Date(_xdsoft_datetime.currentTime);
current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));
if(!isALlowTimesInit){
current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);
}
if((options.initTime||options.defaultSelect||datetimepicker.data('changed'))&&current_time.getHours()===parseInt(h, 10)&&((!isALlowTimesInit&&options.step > 59)||current_time.getMinutes()===parseInt(m, 10))){
if(options.defaultSelect||datetimepicker.data('changed')){
classes.push('xdsoft_current');
}else if(options.initTime){
classes.push('xdsoft_init_time');
}}
if(parseInt(today.getHours(), 10)===parseInt(h, 10)&&parseInt(today.getMinutes(), 10)===parseInt(m, 10)){
classes.push('xdsoft_today');
}
time +='<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + dateHelper.formatDate(now, options.formatTime) + '</div>';
};
if(!options.allowTimes||!$.isArray(options.allowTimes)||!options.allowTimes.length){
for (i=0, j=0; i < (options.hours12 ? 12:24); i +=1){
for (j=0; j < 60; j +=options.step){
h=(i < 10 ? '0':'') + i;
m=(j < 10 ? '0':'') + j;
line_time(h, m);
}}
}else{
for (i=0; i < options.allowTimes.length; i +=1){
h=_xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
m=_xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
line_time(h, m);
}}
timebox.html(time);
opt='';
i=0;
for (i=parseInt(options.yearStart, 10) + options.yearOffset; i <=parseInt(options.yearEnd, 10) + options.yearOffset; i +=1){
opt +='<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear()===i ? 'xdsoft_current':'') + '" data-value="' + i + '">' + i + '</div>';
}
yearselect.children().eq(0)
.html(opt);
for (i=parseInt(options.monthStart, 10), opt=''; i <=parseInt(options.monthEnd, 10); i +=1){
opt +='<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth()===i ? 'xdsoft_current':'') + '" data-value="' + i + '">' + options.i18n[globalLocale].months[i] + '</div>';
}
monthselect.children().eq(0).html(opt);
$(datetimepicker)
.trigger('generate.xdsoft');
}, 10);
event.stopPropagation();
})
.on('afterOpen.xdsoft', function (){
if(options.timepicker){
var classType, pheight, height, top;
if(timebox.find('.xdsoft_current').length){
classType='.xdsoft_current';
}else if(timebox.find('.xdsoft_init_time').length){
classType='.xdsoft_init_time';
}
if(classType){
pheight=timeboxparent[0].clientHeight;
height=timebox[0].offsetHeight;
top=timebox.find(classType).index() * options.timeHeightInTimePicker + 1;
if((height - pheight) < top){
top=height - pheight;
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);
}else{
timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
}}
});
timerclick=0;
calendar
.on('touchend click.xdsoft', 'td', function (xdevent){
xdevent.stopPropagation();
timerclick +=1;
var $this=$(this),
currentTime=_xdsoft_datetime.currentTime;
if(currentTime===undefined||currentTime===null){
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
currentTime=_xdsoft_datetime.currentTime;
}
if($this.hasClass('xdsoft_disabled')){
return false;
}
currentTime.setDate(1);
currentTime.setFullYear($this.data('year'));
currentTime.setMonth($this.data('month'));
currentTime.setDate($this.data('date'));
datetimepicker.trigger('select.xdsoft', [currentTime]);
input.val(_xdsoft_datetime.str());
if(options.onSelectDate&&$.isFunction(options.onSelectDate)){
options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
}
datetimepicker.data('changed', true);
datetimepicker.trigger('xchange.xdsoft');
datetimepicker.trigger('changedatetime.xdsoft');
if((timerclick > 1||(options.closeOnDateSelect===true||(options.closeOnDateSelect===false&&!options.timepicker)))&&!options.inline){
datetimepicker.trigger('close.xdsoft');
}
setTimeout(function (){
timerclick=0;
}, 200);
});
timebox
.on('touchmove', 'div', function (){ currentlyScrollingTimeDiv=true; })
.on('touchend click.xdsoft', 'div', function (xdevent){
xdevent.stopPropagation();
if(currentlyScrollingTimeDiv){
currentlyScrollingTimeDiv=false;
return;
}
var $this=$(this),
currentTime=_xdsoft_datetime.currentTime;
if(currentTime===undefined||currentTime===null){
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
currentTime=_xdsoft_datetime.currentTime;
}
if($this.hasClass('xdsoft_disabled')){
return false;
}
currentTime.setHours($this.data('hour'));
currentTime.setMinutes($this.data('minute'));
datetimepicker.trigger('select.xdsoft', [currentTime]);
datetimepicker.data('input').val(_xdsoft_datetime.str());
if(options.onSelectTime&&$.isFunction(options.onSelectTime)){
options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
}
datetimepicker.data('changed', true);
datetimepicker.trigger('xchange.xdsoft');
datetimepicker.trigger('changedatetime.xdsoft');
if(options.inline!==true&&options.closeOnTimeSelect===true){
datetimepicker.trigger('close.xdsoft');
}});
datepicker
.on('mousewheel.xdsoft', function (event){
if(!options.scrollMonth){
return true;
}
if(event.deltaY < 0){
_xdsoft_datetime.nextMonth();
}else{
_xdsoft_datetime.prevMonth();
}
return false;
});
input
.on('mousewheel.xdsoft', function (event){
if(!options.scrollInput){
return true;
}
if(!options.datepicker&&options.timepicker){
current_time_index=timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index():0;
if(current_time_index + event.deltaY >=0&&current_time_index + event.deltaY < timebox.children().length){
current_time_index +=event.deltaY;
}
if(timebox.children().eq(current_time_index).length){
timebox.children().eq(current_time_index).trigger('mousedown');
}
return false;
}
if(options.datepicker&&!options.timepicker){
datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);
if(input.val){
input.val(_xdsoft_datetime.str());
}
datetimepicker.trigger('changedatetime.xdsoft');
return false;
}});
datetimepicker
.on('changedatetime.xdsoft', function (event){
if(options.onChangeDateTime&&$.isFunction(options.onChangeDateTime)){
var $input=datetimepicker.data('input');
options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);
delete options.value;
$input.trigger('change');
}})
.on('generate.xdsoft', function (){
if(options.onGenerate&&$.isFunction(options.onGenerate)){
options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
if(triggerAfterOpen){
datetimepicker.trigger('afterOpen.xdsoft');
triggerAfterOpen=false;
}})
.on('click.xdsoft', function (xdevent){
xdevent.stopPropagation();
});
current_time_index=0;
forEachAncestorOf=function (node, callback){
do {
node=node.parentNode;
if(callback(node)===false){
break;
}} while (node.nodeName!=='HTML');
};
setPos=function (){
var dateInputOffset,
dateInputElem,
verticalPosition,
left,
position,
datetimepickerElem,
dateInputHasFixedAncestor,
$dateInput,
windowWidth,
verticalAnchorEdge,
datetimepickerCss,
windowHeight,
windowScrollTop;
$dateInput=datetimepicker.data('input');
dateInputOffset=$dateInput.offset();
dateInputElem=$dateInput[0];
verticalAnchorEdge='top';
verticalPosition=(dateInputOffset.top + dateInputElem.offsetHeight) - 1;
left=dateInputOffset.left;
position="absolute";
windowWidth=$(window).width();
windowHeight=$(window).height();
windowScrollTop=$(window).scrollTop();
if((document.documentElement.clientWidth - dateInputOffset.left) < datepicker.parent().outerWidth(true)){
var diff=datepicker.parent().outerWidth(true) - dateInputElem.offsetWidth;
left=left - diff;
}
if($dateInput.parent().css('direction')==='rtl'){
left -=(datetimepicker.outerWidth() - $dateInput.outerWidth());
}
if(options.fixed){
verticalPosition -=windowScrollTop;
left -=$(window).scrollLeft();
position="fixed";
}else{
dateInputHasFixedAncestor=false;
forEachAncestorOf(dateInputElem, function (ancestorNode){
if(window.getComputedStyle(ancestorNode).getPropertyValue('position')==='fixed'){
dateInputHasFixedAncestor=true;
return false;
}});
if(dateInputHasFixedAncestor){
position='fixed';
if(verticalPosition + datetimepicker.outerHeight() > windowHeight + windowScrollTop){
verticalAnchorEdge='bottom';
verticalPosition=(windowHeight + windowScrollTop) - dateInputOffset.top;
}else{
verticalPosition -=windowScrollTop;
}}else{
if(verticalPosition + dateInputElem.offsetHeight > windowHeight + windowScrollTop){
verticalPosition=dateInputOffset.top - dateInputElem.offsetHeight + 1;
}}
if(verticalPosition < 0){
verticalPosition=0;
}
if(left + dateInputElem.offsetWidth > windowWidth){
left=windowWidth - dateInputElem.offsetWidth;
}}
datetimepickerElem=datetimepicker[0];
forEachAncestorOf(datetimepickerElem, function (ancestorNode){
var ancestorNodePosition;
ancestorNodePosition=window.getComputedStyle(ancestorNode).getPropertyValue('position');
if(ancestorNodePosition==='relative'&&windowWidth >=ancestorNode.offsetWidth){
left=left - ((windowWidth - ancestorNode.offsetWidth) / 2);
return false;
}});
datetimepickerCss={
position: position,
left: left,
top: '',
bottom: ''
};
datetimepickerCss[verticalAnchorEdge]=verticalPosition;
datetimepicker.css(datetimepickerCss);
};
datetimepicker
.on('open.xdsoft', function (event){
var onShow=true;
if(options.onShow&&$.isFunction(options.onShow)){
onShow=options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
}
if(onShow!==false){
datetimepicker.show();
setPos();
$(window)
.off('resize.xdsoft', setPos)
.on('resize.xdsoft', setPos);
if(options.closeOnWithoutClick){
$([document.body, window]).on('touchstart mousedown.xdsoft', function arguments_callee6(){
datetimepicker.trigger('close.xdsoft');
$([document.body, window]).off('touchstart mousedown.xdsoft', arguments_callee6);
});
}}
})
.on('close.xdsoft', function (event){
var onClose=true;
month_picker
.find('.xdsoft_month,.xdsoft_year')
.find('.xdsoft_select')
.hide();
if(options.onClose&&$.isFunction(options.onClose)){
onClose=options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
}
if(onClose!==false&&!options.opened&&!options.inline){
datetimepicker.hide();
}
event.stopPropagation();
})
.on('toggle.xdsoft', function (){
if(datetimepicker.is(':visible')){
datetimepicker.trigger('close.xdsoft');
}else{
datetimepicker.trigger('open.xdsoft');
}})
.data('input', input);
timer=0;
datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
datetimepicker.setOptions(options);
function getCurrentValue(){
var ct=false, time;
if(options.startDate){
ct=_xdsoft_datetime.strToDate(options.startDate);
}else{
ct=options.value||((input&&input.val&&input.val()) ? input.val():'');
if(ct){
ct=_xdsoft_datetime.strToDateTime(ct);
}else if(options.defaultDate){
ct=_xdsoft_datetime.strToDateTime(options.defaultDate);
if(options.defaultTime){
time=_xdsoft_datetime.strtotime(options.defaultTime);
ct.setHours(time.getHours());
ct.setMinutes(time.getMinutes());
}}
}
if(ct&&_xdsoft_datetime.isValidDate(ct)){
datetimepicker.data('changed', true);
}else{
ct='';
}
return ct||0;
}
function setMask(options){
var isValidValue=function (mask, value){
var reg=mask
.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
.replace(/_/g, '{digit+}')
.replace(/([0-9]{1})/g, '{digit$1}')
.replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
.replace(/\{digit[\+]\}/g, '[0-9_]{1}');
return (new RegExp(reg)).test(value);
},
getCaretPos=function (input){
try {
if(document.selection&&document.selection.createRange){
var range=document.selection.createRange();
return range.getBookmark().charCodeAt(2) - 2;
}
if(input.setSelectionRange){
return input.selectionStart;
}} catch (e){
return 0;
}},
setCaretPos=function (node, pos){
node=(typeof node==="string"||node instanceof String) ? document.getElementById(node):node;
if(!node){
return false;
}
if(node.createTextRange){
var textRange=node.createTextRange();
textRange.collapse(true);
textRange.moveEnd('character', pos);
textRange.moveStart('character', pos);
textRange.select();
return true;
}
if(node.setSelectionRange){
node.setSelectionRange(pos, pos);
return true;
}
return false;
};
if(options.mask){
input.off('keydown.xdsoft');
}
if(options.mask===true){
if(typeof moment!='undefined'){
options.mask=options.format
.replace(/Y{4}/g, '9999')
.replace(/Y{2}/g, '99')
.replace(/M{2}/g, '19')
.replace(/D{2}/g, '39')
.replace(/H{2}/g, '29')
.replace(/m{2}/g, '59')
.replace(/s{2}/g, '59');
}else{
options.mask=options.format
.replace(/Y/g, '9999')
.replace(/F/g, '9999')
.replace(/m/g, '19')
.replace(/d/g, '39')
.replace(/H/g, '29')
.replace(/i/g, '59')
.replace(/s/g, '59');
}}
if($.type(options.mask)==='string'){
if(!isValidValue(options.mask, input.val())){
input.val(options.mask.replace(/[0-9]/g, '_'));
setCaretPos(input[0], 0);
}
input.on('keydown.xdsoft', function (event){
var val=this.value,
key=event.which,
pos,
digit;
if(((key >=KEY0&&key <=KEY9)||(key >=_KEY0&&key <=_KEY9))||(key===BACKSPACE||key===DEL)){
pos=getCaretPos(this);
digit=(key!==BACKSPACE&&key!==DEL) ? String.fromCharCode((_KEY0 <=key&&key <=_KEY9) ? key - KEY0:key):'_';
if((key===BACKSPACE||key===DEL)&&pos){
pos -=1;
digit='_';
}
while (/[^0-9_]/.test(options.mask.substr(pos, 1))&&pos < options.mask.length&&pos > 0){
pos +=(key===BACKSPACE||key===DEL) ? -1:1;
}
val=val.substr(0, pos) + digit + val.substr(pos + 1);
if($.trim(val)===''){
val=options.mask.replace(/[0-9]/g, '_');
}else{
if(pos===options.mask.length){
event.preventDefault();
return false;
}}
pos +=(key===BACKSPACE||key===DEL) ? 0:1;
while (/[^0-9_]/.test(options.mask.substr(pos, 1))&&pos < options.mask.length&&pos > 0){
pos +=(key===BACKSPACE||key===DEL) ? -1:1;
}
if(isValidValue(options.mask, val)){
this.value=val;
setCaretPos(this, pos);
}else if($.trim(val)===''){
this.value=options.mask.replace(/[0-9]/g, '_');
}else{
input.trigger('error_input.xdsoft');
}}else{
if(([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key)!==-1&&ctrlDown)||[ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key)!==-1){
return true;
}}
event.preventDefault();
return false;
});
}}
_xdsoft_datetime.setCurrentTime(getCurrentValue());
input
.data('xdsoft_datetimepicker', datetimepicker)
.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function (){
if(input.is(':disabled')||(input.data('xdsoft_datetimepicker').is(':visible')&&options.closeOnInputClick)){
return;
}
clearTimeout(timer);
timer=setTimeout(function (){
if(input.is(':disabled')){
return;
}
triggerAfterOpen=true;
_xdsoft_datetime.setCurrentTime(getCurrentValue(), true);
if(options.mask){
setMask(options);
}
datetimepicker.trigger('open.xdsoft');
}, 100);
})
.on('keydown.xdsoft', function (event){
var elementSelector,
key=event.which;
if([ENTER].indexOf(key)!==-1&&options.enterLikeTab){
elementSelector=$("input:visible,textarea:visible,button:visible,a:visible");
datetimepicker.trigger('close.xdsoft');
elementSelector.eq(elementSelector.index(this) + 1).focus();
return false;
}
if([TAB].indexOf(key)!==-1){
datetimepicker.trigger('close.xdsoft');
return true;
}})
.on('blur.xdsoft', function (){
datetimepicker.trigger('close.xdsoft');
});
};
destroyDateTimePicker=function (input){
var datetimepicker=input.data('xdsoft_datetimepicker');
if(datetimepicker){
datetimepicker.data('xdsoft_datetime', null);
datetimepicker.remove();
input
.data('xdsoft_datetimepicker', null)
.off('.xdsoft');
$(window).off('resize.xdsoft');
$([window, document.body]).off('mousedown.xdsoft touchstart');
if(input.unmousewheel){
input.unmousewheel();
}}
};
$(document)
.off('keydown.xdsoftctrl keyup.xdsoftctrl')
.on('keydown.xdsoftctrl', function (e){
if(e.keyCode===CTRLKEY){
ctrlDown=true;
}})
.on('keyup.xdsoftctrl', function (e){
if(e.keyCode===CTRLKEY){
ctrlDown=false;
}});
this.each(function (){
var datetimepicker=$(this).data('xdsoft_datetimepicker'), $input;
if(datetimepicker){
if($.type(opt)==='string'){
switch (opt){
case 'show':
$(this).select().focus();
datetimepicker.trigger('open.xdsoft');
break;
case 'hide':
datetimepicker.trigger('close.xdsoft');
break;
case 'toggle':
datetimepicker.trigger('toggle.xdsoft');
break;
case 'destroy':
destroyDateTimePicker($(this));
break;
case 'reset':
this.value=this.defaultValue;
if(!this.value||!datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))){
datetimepicker.data('changed', false);
}
datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
break;
case 'validate':
$input=datetimepicker.data('input');
$input.trigger('blur.xdsoft');
break;
default:
if(datetimepicker[opt]&&$.isFunction(datetimepicker[opt])){
result=datetimepicker[opt](opt2);
}}
}else{
datetimepicker
.setOptions(opt);
}
return 0;
}
if($.type(opt)!=='string'){
if(!options.lazyInit||options.open||options.inline){
createDateTimePicker($(this));
}else{
lazyInit($(this));
}}
});
return result;
};
$.fn.xdsoft_datetimepicker.defaults=default_options;
function HighlightedDate(date, desc, style){
"use strict";
this.date=date;
this.desc=desc;
this.style=style;
}}));
(function (factory){
if(typeof define==='function'&&define.amd){
define(['jquery'], factory);
}else if(typeof exports==='object'){
module.exports=factory;
}else{
factory(jQuery);
}}(function ($){
var toFix=['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
toBind=('onwheel' in document||document.documentMode >=9) ?
['wheel']:['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
slice=Array.prototype.slice,
nullLowestDeltaTimeout, lowestDelta;
if($.event.fixHooks){
for(var i=toFix.length; i;){
$.event.fixHooks[ toFix[--i] ]=$.event.mouseHooks;
}}
var special=$.event.special.mousewheel={
version: '3.1.12',
setup: function(){
if(this.addEventListener){
for(var i=toBind.length; i;){
this.addEventListener(toBind[--i], handler, false);
}}else{
this.onmousewheel=handler;
}
$.data(this, 'mousewheel-line-height', special.getLineHeight(this));
$.data(this, 'mousewheel-page-height', special.getPageHeight(this));
},
teardown: function(){
if(this.removeEventListener){
for(var i=toBind.length; i;){
this.removeEventListener(toBind[--i], handler, false);
}}else{
this.onmousewheel=null;
}
$.removeData(this, 'mousewheel-line-height');
$.removeData(this, 'mousewheel-page-height');
},
getLineHeight: function(elem){
var $elem=$(elem),
$parent=$elem['offsetParent' in $.fn ? 'offsetParent':'parent']();
if(!$parent.length){
$parent=$('body');
}
return parseInt($parent.css('fontSize'), 10)||parseInt($elem.css('fontSize'), 10)||16;
},
getPageHeight: function(elem){
return $(elem).height();
},
settings: {
adjustOldDeltas: true,
normalizeOffset: true
}};
$.fn.extend({
mousewheel: function(fn){
return fn ? this.bind('mousewheel', fn):this.trigger('mousewheel');
},
unmousewheel: function(fn){
return this.unbind('mousewheel', fn);
}});
function handler(event){
var orgEvent=event||window.event,
args=slice.call(arguments, 1),
delta=0,
deltaX=0,
deltaY=0,
absDelta=0,
offsetX=0,
offsetY=0;
event=$.event.fix(orgEvent);
event.type='mousewheel';
if('detail'      in orgEvent){ deltaY=orgEvent.detail * -1;      }
if('wheelDelta'  in orgEvent){ deltaY=orgEvent.wheelDelta;       }
if('wheelDeltaY' in orgEvent){ deltaY=orgEvent.wheelDeltaY;      }
if('wheelDeltaX' in orgEvent){ deltaX=orgEvent.wheelDeltaX * -1; }
if('axis' in orgEvent&&orgEvent.axis===orgEvent.HORIZONTAL_AXIS){
deltaX=deltaY * -1;
deltaY=0;
}
delta=deltaY===0 ? deltaX:deltaY;
if('deltaY' in orgEvent){
deltaY=orgEvent.deltaY * -1;
delta=deltaY;
}
if('deltaX' in orgEvent){
deltaX=orgEvent.deltaX;
if(deltaY===0){ delta=deltaX * -1; }}
if(deltaY===0&&deltaX===0){ return; }
if(orgEvent.deltaMode===1){
var lineHeight=$.data(this, 'mousewheel-line-height');
delta  *=lineHeight;
deltaY *=lineHeight;
deltaX *=lineHeight;
}else if(orgEvent.deltaMode===2){
var pageHeight=$.data(this, 'mousewheel-page-height');
delta  *=pageHeight;
deltaY *=pageHeight;
deltaX *=pageHeight;
}
absDelta=Math.max(Math.abs(deltaY), Math.abs(deltaX));
if(!lowestDelta||absDelta < lowestDelta){
lowestDelta=absDelta;
if(shouldAdjustOldDeltas(orgEvent, absDelta)){
lowestDelta /=40;
}}
if(shouldAdjustOldDeltas(orgEvent, absDelta)){
delta  /=40;
deltaX /=40;
deltaY /=40;
}
delta=Math[ delta  >=1 ? 'floor':'ceil' ](delta  / lowestDelta);
deltaX=Math[ deltaX >=1 ? 'floor':'ceil' ](deltaX / lowestDelta);
deltaY=Math[ deltaY >=1 ? 'floor':'ceil' ](deltaY / lowestDelta);
if(special.settings.normalizeOffset&&this.getBoundingClientRect){
var boundingRect=this.getBoundingClientRect();
offsetX=event.clientX - boundingRect.left;
offsetY=event.clientY - boundingRect.top;
}
event.deltaX=deltaX;
event.deltaY=deltaY;
event.deltaFactor=lowestDelta;
event.offsetX=offsetX;
event.offsetY=offsetY;
event.deltaMode=0;
args.unshift(event, delta, deltaX, deltaY);
if(nullLowestDeltaTimeout){ clearTimeout(nullLowestDeltaTimeout); }
nullLowestDeltaTimeout=setTimeout(nullLowestDelta, 200);
return ($.event.dispatch||$.event.handle).apply(this, args);
}
function nullLowestDelta(){
lowestDelta=null;
}
function shouldAdjustOldDeltas(orgEvent, absDelta){
return special.settings.adjustOldDeltas&&orgEvent.type==='mousewheel'&&absDelta % 120===0;
}}));
(function (global, factory){
typeof exports==='object'&&typeof module!=='undefined' ? factory(exports, require('jquery'), require('popper.js')) :
typeof define==='function'&&define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
(global=global||self, factory(global.bootstrap={}, global.jQuery, global.Popper));
}(this, (function (exports, $, Popper){ 'use strict';
$=$&&Object.prototype.hasOwnProperty.call($, 'default') ? $['default']:$;
Popper=Popper&&Object.prototype.hasOwnProperty.call(Popper, 'default') ? Popper['default']:Popper;
function _defineProperties(target, props){
for (var i=0; i < props.length; i++){
var descriptor=props[i];
descriptor.enumerable=descriptor.enumerable||false;
descriptor.configurable=true;
if("value" in descriptor) descriptor.writable=true;
Object.defineProperty(target, descriptor.key, descriptor);
}}
function _createClass(Constructor, protoProps, staticProps){
if(protoProps) _defineProperties(Constructor.prototype, protoProps);
if(staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _defineProperty(obj, key, value){
if(key in obj){
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
}else{
obj[key]=value;
}
return obj;
}
function ownKeys(object, enumerableOnly){
var keys=Object.keys(object);
if(Object.getOwnPropertySymbols){
var symbols=Object.getOwnPropertySymbols(object);
if(enumerableOnly) symbols=symbols.filter(function (sym){
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target){
for (var i=1; i < arguments.length; i++){
var source=arguments[i]!=null ? arguments[i]:{};
if(i % 2){
ownKeys(Object(source), true).forEach(function (key){
_defineProperty(target, key, source[key]);
});
}else if(Object.getOwnPropertyDescriptors){
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
}else{
ownKeys(Object(source)).forEach(function (key){
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}}
return target;
}
function _inheritsLoose(subClass, superClass){
subClass.prototype=Object.create(superClass.prototype);
subClass.prototype.constructor=subClass;
subClass.__proto__=superClass;
}
var TRANSITION_END='transitionend';
var MAX_UID=1000000;
var MILLISECONDS_MULTIPLIER=1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj){
if(obj===null||typeof obj==='undefined'){
return "" + obj;
}
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
}
function getSpecialTransitionEndEvent(){
return {
bindType: TRANSITION_END,
delegateType: TRANSITION_END,
handle: function handle(event){
if($(event.target).is(this)){
return event.handleObj.handler.apply(this, arguments);
}
return undefined;
}};}
function transitionEndEmulator(duration){
var _this=this;
var called=false;
$(this).one(Util.TRANSITION_END, function (){
called=true;
});
setTimeout(function (){
if(!called){
Util.triggerTransitionEnd(_this);
}}, duration);
return this;
}
function setTransitionEndSupport(){
$.fn.emulateTransitionEnd=transitionEndEmulator;
$.event.special[Util.TRANSITION_END]=getSpecialTransitionEndEvent();
}
var Util={
TRANSITION_END: 'bsTransitionEnd',
getUID: function getUID(prefix){
do {
prefix +=~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
} while (document.getElementById(prefix));
return prefix;
},
getSelectorFromElement: function getSelectorFromElement(element){
var selector=element.getAttribute('data-target');
if(!selector||selector==='#'){
var hrefAttr=element.getAttribute('href');
selector=hrefAttr&&hrefAttr!=='#' ? hrefAttr.trim():'';
}
try {
return document.querySelector(selector) ? selector:null;
} catch (err){
return null;
}},
getTransitionDurationFromElement: function getTransitionDurationFromElement(element){
if(!element){
return 0;
}
var transitionDuration=$(element).css('transition-duration');
var transitionDelay=$(element).css('transition-delay');
var floatTransitionDuration=parseFloat(transitionDuration);
var floatTransitionDelay=parseFloat(transitionDelay);
if(!floatTransitionDuration&&!floatTransitionDelay){
return 0;
}
transitionDuration=transitionDuration.split(',')[0];
transitionDelay=transitionDelay.split(',')[0];
return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
},
reflow: function reflow(element){
return element.offsetHeight;
},
triggerTransitionEnd: function triggerTransitionEnd(element){
$(element).trigger(TRANSITION_END);
},
supportsTransitionEnd: function supportsTransitionEnd(){
return Boolean(TRANSITION_END);
},
isElement: function isElement(obj){
return (obj[0]||obj).nodeType;
},
typeCheckConfig: function typeCheckConfig(componentName, config, configTypes){
for (var property in configTypes){
if(Object.prototype.hasOwnProperty.call(configTypes, property)){
var expectedTypes=configTypes[property];
var value=config[property];
var valueType=value&&Util.isElement(value) ? 'element':toType(value);
if(!new RegExp(expectedTypes).test(valueType)){
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
}}
}},
findShadowRoot: function findShadowRoot(element){
if(!document.documentElement.attachShadow){
return null;
}
if(typeof element.getRootNode==='function'){
var root=element.getRootNode();
return root instanceof ShadowRoot ? root:null;
}
if(element instanceof ShadowRoot){
return element;
}
if(!element.parentNode){
return null;
}
return Util.findShadowRoot(element.parentNode);
},
jQueryDetection: function jQueryDetection(){
if(typeof $==='undefined'){
throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
}
var version=$.fn.jquery.split(' ')[0].split('.');
var minMajor=1;
var ltMajor=2;
var minMinor=9;
var minPatch=1;
var maxMajor=4;
if(version[0] < ltMajor&&version[1] < minMinor||version[0]===minMajor&&version[1]===minMinor&&version[2] < minPatch||version[0] >=maxMajor){
throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
}}
};
Util.jQueryDetection();
setTransitionEndSupport();
var NAME='alert';
var VERSION='4.5.0';
var DATA_KEY='bs.alert';
var EVENT_KEY="." + DATA_KEY;
var DATA_API_KEY='.data-api';
var JQUERY_NO_CONFLICT=$.fn[NAME];
var SELECTOR_DISMISS='[data-dismiss="alert"]';
var EVENT_CLOSE="close" + EVENT_KEY;
var EVENT_CLOSED="closed" + EVENT_KEY;
var EVENT_CLICK_DATA_API="click" + EVENT_KEY + DATA_API_KEY;
var CLASS_NAME_ALERT='alert';
var CLASS_NAME_FADE='fade';
var CLASS_NAME_SHOW='show';
var Alert=function (){
function Alert(element){
this._element=element;
}
var _proto=Alert.prototype;
_proto.close=function close(element){
var rootElement=this._element;
if(element){
rootElement=this._getRootElement(element);
}
var customEvent=this._triggerCloseEvent(rootElement);
if(customEvent.isDefaultPrevented()){
return;
}
this._removeElement(rootElement);
};
_proto.dispose=function dispose(){
$.removeData(this._element, DATA_KEY);
this._element=null;
}
;
_proto._getRootElement=function _getRootElement(element){
var selector=Util.getSelectorFromElement(element);
var parent=false;
if(selector){
parent=document.querySelector(selector);
}
if(!parent){
parent=$(element).closest("." + CLASS_NAME_ALERT)[0];
}
return parent;
};
_proto._triggerCloseEvent=function _triggerCloseEvent(element){
var closeEvent=$.Event(EVENT_CLOSE);
$(element).trigger(closeEvent);
return closeEvent;
};
_proto._removeElement=function _removeElement(element){
var _this=this;
$(element).removeClass(CLASS_NAME_SHOW);
if(!$(element).hasClass(CLASS_NAME_FADE)){
this._destroyElement(element);
return;
}
var transitionDuration=Util.getTransitionDurationFromElement(element);
$(element).one(Util.TRANSITION_END, function (event){
return _this._destroyElement(element, event);
}).emulateTransitionEnd(transitionDuration);
};
_proto._destroyElement=function _destroyElement(element){
$(element).detach().trigger(EVENT_CLOSED).remove();
}
;
Alert._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var $element=$(this);
var data=$element.data(DATA_KEY);
if(!data){
data=new Alert(this);
$element.data(DATA_KEY, data);
}
if(config==='close'){
data[config](this);
}});
};
Alert._handleDismiss=function _handleDismiss(alertInstance){
return function (event){
if(event){
event.preventDefault();
}
alertInstance.close(this);
};};
_createClass(Alert, null, [{
key: "VERSION",
get: function get(){
return VERSION;
}}]);
return Alert;
}();
$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
$.fn[NAME]=Alert._jQueryInterface;
$.fn[NAME].Constructor=Alert;
$.fn[NAME].noConflict=function (){
$.fn[NAME]=JQUERY_NO_CONFLICT;
return Alert._jQueryInterface;
};
var NAME$1='button';
var VERSION$1='4.5.0';
var DATA_KEY$1='bs.button';
var EVENT_KEY$1="." + DATA_KEY$1;
var DATA_API_KEY$1='.data-api';
var JQUERY_NO_CONFLICT$1=$.fn[NAME$1];
var CLASS_NAME_ACTIVE='active';
var CLASS_NAME_BUTTON='btn';
var CLASS_NAME_FOCUS='focus';
var SELECTOR_DATA_TOGGLE_CARROT='[data-toggle^="button"]';
var SELECTOR_DATA_TOGGLES='[data-toggle="buttons"]';
var SELECTOR_DATA_TOGGLE='[data-toggle="button"]';
var SELECTOR_DATA_TOGGLES_BUTTONS='[data-toggle="buttons"] .btn';
var SELECTOR_INPUT='input:not([type="hidden"])';
var SELECTOR_ACTIVE='.active';
var SELECTOR_BUTTON='.btn';
var EVENT_CLICK_DATA_API$1="click" + EVENT_KEY$1 + DATA_API_KEY$1;
var EVENT_FOCUS_BLUR_DATA_API="focus" + EVENT_KEY$1 + DATA_API_KEY$1 + " " + ("blur" + EVENT_KEY$1 + DATA_API_KEY$1);
var EVENT_LOAD_DATA_API="load" + EVENT_KEY$1 + DATA_API_KEY$1;
var Button=function (){
function Button(element){
this._element=element;
}
var _proto=Button.prototype;
_proto.toggle=function toggle(){
var triggerChangeEvent=true;
var addAriaPressed=true;
var rootElement=$(this._element).closest(SELECTOR_DATA_TOGGLES)[0];
if(rootElement){
var input=this._element.querySelector(SELECTOR_INPUT);
if(input){
if(input.type==='radio'){
if(input.checked&&this._element.classList.contains(CLASS_NAME_ACTIVE)){
triggerChangeEvent=false;
}else{
var activeElement=rootElement.querySelector(SELECTOR_ACTIVE);
if(activeElement){
$(activeElement).removeClass(CLASS_NAME_ACTIVE);
}}
}
if(triggerChangeEvent){
if(input.type==='checkbox'||input.type==='radio'){
input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);
}
$(input).trigger('change');
}
input.focus();
addAriaPressed=false;
}}
if(!(this._element.hasAttribute('disabled')||this._element.classList.contains('disabled'))){
if(addAriaPressed){
this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));
}
if(triggerChangeEvent){
$(this._element).toggleClass(CLASS_NAME_ACTIVE);
}}
};
_proto.dispose=function dispose(){
$.removeData(this._element, DATA_KEY$1);
this._element=null;
}
;
Button._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var data=$(this).data(DATA_KEY$1);
if(!data){
data=new Button(this);
$(this).data(DATA_KEY$1, data);
}
if(config==='toggle'){
data[config]();
}});
};
_createClass(Button, null, [{
key: "VERSION",
get: function get(){
return VERSION$1;
}}]);
return Button;
}();
$(document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event){
var button=event.target;
var initialButton=button;
if(!$(button).hasClass(CLASS_NAME_BUTTON)){
button=$(button).closest(SELECTOR_BUTTON)[0];
}
if(!button||button.hasAttribute('disabled')||button.classList.contains('disabled')){
event.preventDefault();
}else{
var inputBtn=button.querySelector(SELECTOR_INPUT);
if(inputBtn&&(inputBtn.hasAttribute('disabled')||inputBtn.classList.contains('disabled'))){
event.preventDefault();
return;
}
if(initialButton.tagName==='LABEL'&&inputBtn&&inputBtn.type==='checkbox'){
event.preventDefault();
}
Button._jQueryInterface.call($(button), 'toggle');
}}).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event){
var button=$(event.target).closest(SELECTOR_BUTTON)[0];
$(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
});
$(window).on(EVENT_LOAD_DATA_API, function (){
var buttons=[].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
for (var i=0, len=buttons.length; i < len; i++){
var button=buttons[i];
var input=button.querySelector(SELECTOR_INPUT);
if(input.checked||input.hasAttribute('checked')){
button.classList.add(CLASS_NAME_ACTIVE);
}else{
button.classList.remove(CLASS_NAME_ACTIVE);
}}
buttons=[].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));
for (var _i=0, _len=buttons.length; _i < _len; _i++){
var _button=buttons[_i];
if(_button.getAttribute('aria-pressed')==='true'){
_button.classList.add(CLASS_NAME_ACTIVE);
}else{
_button.classList.remove(CLASS_NAME_ACTIVE);
}}
});
$.fn[NAME$1]=Button._jQueryInterface;
$.fn[NAME$1].Constructor=Button;
$.fn[NAME$1].noConflict=function (){
$.fn[NAME$1]=JQUERY_NO_CONFLICT$1;
return Button._jQueryInterface;
};
var NAME$2='carousel';
var VERSION$2='4.5.0';
var DATA_KEY$2='bs.carousel';
var EVENT_KEY$2="." + DATA_KEY$2;
var DATA_API_KEY$2='.data-api';
var JQUERY_NO_CONFLICT$2=$.fn[NAME$2];
var ARROW_LEFT_KEYCODE=37;
var ARROW_RIGHT_KEYCODE=39;
var TOUCHEVENT_COMPAT_WAIT=500;
var SWIPE_THRESHOLD=40;
var Default={
interval: 5000,
keyboard: true,
slide: false,
pause: 'hover',
wrap: true,
touch: true
};
var DefaultType={
interval: '(number|boolean)',
keyboard: 'boolean',
slide: '(boolean|string)',
pause: '(string|boolean)',
wrap: 'boolean',
touch: 'boolean'
};
var DIRECTION_NEXT='next';
var DIRECTION_PREV='prev';
var DIRECTION_LEFT='left';
var DIRECTION_RIGHT='right';
var EVENT_SLIDE="slide" + EVENT_KEY$2;
var EVENT_SLID="slid" + EVENT_KEY$2;
var EVENT_KEYDOWN="keydown" + EVENT_KEY$2;
var EVENT_MOUSEENTER="mouseenter" + EVENT_KEY$2;
var EVENT_MOUSELEAVE="mouseleave" + EVENT_KEY$2;
var EVENT_TOUCHSTART="touchstart" + EVENT_KEY$2;
var EVENT_TOUCHMOVE="touchmove" + EVENT_KEY$2;
var EVENT_TOUCHEND="touchend" + EVENT_KEY$2;
var EVENT_POINTERDOWN="pointerdown" + EVENT_KEY$2;
var EVENT_POINTERUP="pointerup" + EVENT_KEY$2;
var EVENT_DRAG_START="dragstart" + EVENT_KEY$2;
var EVENT_LOAD_DATA_API$1="load" + EVENT_KEY$2 + DATA_API_KEY$2;
var EVENT_CLICK_DATA_API$2="click" + EVENT_KEY$2 + DATA_API_KEY$2;
var CLASS_NAME_CAROUSEL='carousel';
var CLASS_NAME_ACTIVE$1='active';
var CLASS_NAME_SLIDE='slide';
var CLASS_NAME_RIGHT='carousel-item-right';
var CLASS_NAME_LEFT='carousel-item-left';
var CLASS_NAME_NEXT='carousel-item-next';
var CLASS_NAME_PREV='carousel-item-prev';
var CLASS_NAME_POINTER_EVENT='pointer-event';
var SELECTOR_ACTIVE$1='.active';
var SELECTOR_ACTIVE_ITEM='.active.carousel-item';
var SELECTOR_ITEM='.carousel-item';
var SELECTOR_ITEM_IMG='.carousel-item img';
var SELECTOR_NEXT_PREV='.carousel-item-next, .carousel-item-prev';
var SELECTOR_INDICATORS='.carousel-indicators';
var SELECTOR_DATA_SLIDE='[data-slide], [data-slide-to]';
var SELECTOR_DATA_RIDE='[data-ride="carousel"]';
var PointerType={
TOUCH: 'touch',
PEN: 'pen'
};
var Carousel=function (){
function Carousel(element, config){
this._items=null;
this._interval=null;
this._activeElement=null;
this._isPaused=false;
this._isSliding=false;
this.touchTimeout=null;
this.touchStartX=0;
this.touchDeltaX=0;
this._config=this._getConfig(config);
this._element=element;
this._indicatorsElement=this._element.querySelector(SELECTOR_INDICATORS);
this._touchSupported='ontouchstart' in document.documentElement||navigator.maxTouchPoints > 0;
this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent);
this._addEventListeners();
}
var _proto=Carousel.prototype;
_proto.next=function next(){
if(!this._isSliding){
this._slide(DIRECTION_NEXT);
}};
_proto.nextWhenVisible=function nextWhenVisible(){
if(!document.hidden&&$(this._element).is(':visible')&&$(this._element).css('visibility')!=='hidden'){
this.next();
}};
_proto.prev=function prev(){
if(!this._isSliding){
this._slide(DIRECTION_PREV);
}};
_proto.pause=function pause(event){
if(!event){
this._isPaused=true;
}
if(this._element.querySelector(SELECTOR_NEXT_PREV)){
Util.triggerTransitionEnd(this._element);
this.cycle(true);
}
clearInterval(this._interval);
this._interval=null;
};
_proto.cycle=function cycle(event){
if(!event){
this._isPaused=false;
}
if(this._interval){
clearInterval(this._interval);
this._interval=null;
}
if(this._config.interval&&!this._isPaused){
this._interval=setInterval((document.visibilityState ? this.nextWhenVisible:this.next).bind(this), this._config.interval);
}};
_proto.to=function to(index){
var _this=this;
this._activeElement=this._element.querySelector(SELECTOR_ACTIVE_ITEM);
var activeIndex=this._getItemIndex(this._activeElement);
if(index > this._items.length - 1||index < 0){
return;
}
if(this._isSliding){
$(this._element).one(EVENT_SLID, function (){
return _this.to(index);
});
return;
}
if(activeIndex===index){
this.pause();
this.cycle();
return;
}
var direction=index > activeIndex ? DIRECTION_NEXT:DIRECTION_PREV;
this._slide(direction, this._items[index]);
};
_proto.dispose=function dispose(){
$(this._element).off(EVENT_KEY$2);
$.removeData(this._element, DATA_KEY$2);
this._items=null;
this._config=null;
this._element=null;
this._interval=null;
this._isPaused=null;
this._isSliding=null;
this._activeElement=null;
this._indicatorsElement=null;
}
;
_proto._getConfig=function _getConfig(config){
config=_objectSpread2(_objectSpread2({}, Default), config);
Util.typeCheckConfig(NAME$2, config, DefaultType);
return config;
};
_proto._handleSwipe=function _handleSwipe(){
var absDeltax=Math.abs(this.touchDeltaX);
if(absDeltax <=SWIPE_THRESHOLD){
return;
}
var direction=absDeltax / this.touchDeltaX;
this.touchDeltaX=0;
if(direction > 0){
this.prev();
}
if(direction < 0){
this.next();
}};
_proto._addEventListeners=function _addEventListeners(){
var _this2=this;
if(this._config.keyboard){
$(this._element).on(EVENT_KEYDOWN, function (event){
return _this2._keydown(event);
});
}
if(this._config.pause==='hover'){
$(this._element).on(EVENT_MOUSEENTER, function (event){
return _this2.pause(event);
}).on(EVENT_MOUSELEAVE, function (event){
return _this2.cycle(event);
});
}
if(this._config.touch){
this._addTouchEventListeners();
}};
_proto._addTouchEventListeners=function _addTouchEventListeners(){
var _this3=this;
if(!this._touchSupported){
return;
}
var start=function start(event){
if(_this3._pointerEvent&&PointerType[event.originalEvent.pointerType.toUpperCase()]){
_this3.touchStartX=event.originalEvent.clientX;
}else if(!_this3._pointerEvent){
_this3.touchStartX=event.originalEvent.touches[0].clientX;
}};
var move=function move(event){
if(event.originalEvent.touches&&event.originalEvent.touches.length > 1){
_this3.touchDeltaX=0;
}else{
_this3.touchDeltaX=event.originalEvent.touches[0].clientX - _this3.touchStartX;
}};
var end=function end(event){
if(_this3._pointerEvent&&PointerType[event.originalEvent.pointerType.toUpperCase()]){
_this3.touchDeltaX=event.originalEvent.clientX - _this3.touchStartX;
}
_this3._handleSwipe();
if(_this3._config.pause==='hover'){
_this3.pause();
if(_this3.touchTimeout){
clearTimeout(_this3.touchTimeout);
}
_this3.touchTimeout=setTimeout(function (event){
return _this3.cycle(event);
}, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
}};
$(this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e){
return e.preventDefault();
});
if(this._pointerEvent){
$(this._element).on(EVENT_POINTERDOWN, function (event){
return start(event);
});
$(this._element).on(EVENT_POINTERUP, function (event){
return end(event);
});
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
}else{
$(this._element).on(EVENT_TOUCHSTART, function (event){
return start(event);
});
$(this._element).on(EVENT_TOUCHMOVE, function (event){
return move(event);
});
$(this._element).on(EVENT_TOUCHEND, function (event){
return end(event);
});
}};
_proto._keydown=function _keydown(event){
if(/input|textarea/i.test(event.target.tagName)){
return;
}
switch (event.which){
case ARROW_LEFT_KEYCODE:
event.preventDefault();
this.prev();
break;
case ARROW_RIGHT_KEYCODE:
event.preventDefault();
this.next();
break;
}};
_proto._getItemIndex=function _getItemIndex(element){
this._items=element&&element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)):[];
return this._items.indexOf(element);
};
_proto._getItemByDirection=function _getItemByDirection(direction, activeElement){
var isNextDirection=direction===DIRECTION_NEXT;
var isPrevDirection=direction===DIRECTION_PREV;
var activeIndex=this._getItemIndex(activeElement);
var lastItemIndex=this._items.length - 1;
var isGoingToWrap=isPrevDirection&&activeIndex===0||isNextDirection&&activeIndex===lastItemIndex;
if(isGoingToWrap&&!this._config.wrap){
return activeElement;
}
var delta=direction===DIRECTION_PREV ? -1:1;
var itemIndex=(activeIndex + delta) % this._items.length;
return itemIndex===-1 ? this._items[this._items.length - 1]:this._items[itemIndex];
};
_proto._triggerSlideEvent=function _triggerSlideEvent(relatedTarget, eventDirectionName){
var targetIndex=this._getItemIndex(relatedTarget);
var fromIndex=this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
var slideEvent=$.Event(EVENT_SLIDE, {
relatedTarget: relatedTarget,
direction: eventDirectionName,
from: fromIndex,
to: targetIndex
});
$(this._element).trigger(slideEvent);
return slideEvent;
};
_proto._setActiveIndicatorElement=function _setActiveIndicatorElement(element){
if(this._indicatorsElement){
var indicators=[].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
$(indicators).removeClass(CLASS_NAME_ACTIVE$1);
var nextIndicator=this._indicatorsElement.children[this._getItemIndex(element)];
if(nextIndicator){
$(nextIndicator).addClass(CLASS_NAME_ACTIVE$1);
}}
};
_proto._slide=function _slide(direction, element){
var _this4=this;
var activeElement=this._element.querySelector(SELECTOR_ACTIVE_ITEM);
var activeElementIndex=this._getItemIndex(activeElement);
var nextElement=element||activeElement&&this._getItemByDirection(direction, activeElement);
var nextElementIndex=this._getItemIndex(nextElement);
var isCycling=Boolean(this._interval);
var directionalClassName;
var orderClassName;
var eventDirectionName;
if(direction===DIRECTION_NEXT){
directionalClassName=CLASS_NAME_LEFT;
orderClassName=CLASS_NAME_NEXT;
eventDirectionName=DIRECTION_LEFT;
}else{
directionalClassName=CLASS_NAME_RIGHT;
orderClassName=CLASS_NAME_PREV;
eventDirectionName=DIRECTION_RIGHT;
}
if(nextElement&&$(nextElement).hasClass(CLASS_NAME_ACTIVE$1)){
this._isSliding=false;
return;
}
var slideEvent=this._triggerSlideEvent(nextElement, eventDirectionName);
if(slideEvent.isDefaultPrevented()){
return;
}
if(!activeElement||!nextElement){
return;
}
this._isSliding=true;
if(isCycling){
this.pause();
}
this._setActiveIndicatorElement(nextElement);
var slidEvent=$.Event(EVENT_SLID, {
relatedTarget: nextElement,
direction: eventDirectionName,
from: activeElementIndex,
to: nextElementIndex
});
if($(this._element).hasClass(CLASS_NAME_SLIDE)){
$(nextElement).addClass(orderClassName);
Util.reflow(nextElement);
$(activeElement).addClass(directionalClassName);
$(nextElement).addClass(directionalClassName);
var nextElementInterval=parseInt(nextElement.getAttribute('data-interval'), 10);
if(nextElementInterval){
this._config.defaultInterval=this._config.defaultInterval||this._config.interval;
this._config.interval=nextElementInterval;
}else{
this._config.interval=this._config.defaultInterval||this._config.interval;
}
var transitionDuration=Util.getTransitionDurationFromElement(activeElement);
$(activeElement).one(Util.TRANSITION_END, function (){
$(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$1);
$(activeElement).removeClass(CLASS_NAME_ACTIVE$1 + " " + orderClassName + " " + directionalClassName);
_this4._isSliding=false;
setTimeout(function (){
return $(_this4._element).trigger(slidEvent);
}, 0);
}).emulateTransitionEnd(transitionDuration);
}else{
$(activeElement).removeClass(CLASS_NAME_ACTIVE$1);
$(nextElement).addClass(CLASS_NAME_ACTIVE$1);
this._isSliding=false;
$(this._element).trigger(slidEvent);
}
if(isCycling){
this.cycle();
}}
;
Carousel._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var data=$(this).data(DATA_KEY$2);
var _config=_objectSpread2(_objectSpread2({}, Default), $(this).data());
if(typeof config==='object'){
_config=_objectSpread2(_objectSpread2({}, _config), config);
}
var action=typeof config==='string' ? config:_config.slide;
if(!data){
data=new Carousel(this, _config);
$(this).data(DATA_KEY$2, data);
}
if(typeof config==='number'){
data.to(config);
}else if(typeof action==='string'){
if(typeof data[action]==='undefined'){
throw new TypeError("No method named \"" + action + "\"");
}
data[action]();
}else if(_config.interval&&_config.ride){
data.pause();
data.cycle();
}});
};
Carousel._dataApiClickHandler=function _dataApiClickHandler(event){
var selector=Util.getSelectorFromElement(this);
if(!selector){
return;
}
var target=$(selector)[0];
if(!target||!$(target).hasClass(CLASS_NAME_CAROUSEL)){
return;
}
var config=_objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
var slideIndex=this.getAttribute('data-slide-to');
if(slideIndex){
config.interval=false;
}
Carousel._jQueryInterface.call($(target), config);
if(slideIndex){
$(target).data(DATA_KEY$2).to(slideIndex);
}
event.preventDefault();
};
_createClass(Carousel, null, [{
key: "VERSION",
get: function get(){
return VERSION$2;
}}, {
key: "Default",
get: function get(){
return Default;
}}]);
return Carousel;
}();
$(document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
$(window).on(EVENT_LOAD_DATA_API$1, function (){
var carousels=[].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
for (var i=0, len=carousels.length; i < len; i++){
var $carousel=$(carousels[i]);
Carousel._jQueryInterface.call($carousel, $carousel.data());
}});
$.fn[NAME$2]=Carousel._jQueryInterface;
$.fn[NAME$2].Constructor=Carousel;
$.fn[NAME$2].noConflict=function (){
$.fn[NAME$2]=JQUERY_NO_CONFLICT$2;
return Carousel._jQueryInterface;
};
var NAME$3='collapse';
var VERSION$3='4.5.0';
var DATA_KEY$3='bs.collapse';
var EVENT_KEY$3="." + DATA_KEY$3;
var DATA_API_KEY$3='.data-api';
var JQUERY_NO_CONFLICT$3=$.fn[NAME$3];
var Default$1={
toggle: true,
parent: ''
};
var DefaultType$1={
toggle: 'boolean',
parent: '(string|element)'
};
var EVENT_SHOW="show" + EVENT_KEY$3;
var EVENT_SHOWN="shown" + EVENT_KEY$3;
var EVENT_HIDE="hide" + EVENT_KEY$3;
var EVENT_HIDDEN="hidden" + EVENT_KEY$3;
var EVENT_CLICK_DATA_API$3="click" + EVENT_KEY$3 + DATA_API_KEY$3;
var CLASS_NAME_SHOW$1='show';
var CLASS_NAME_COLLAPSE='collapse';
var CLASS_NAME_COLLAPSING='collapsing';
var CLASS_NAME_COLLAPSED='collapsed';
var DIMENSION_WIDTH='width';
var DIMENSION_HEIGHT='height';
var SELECTOR_ACTIVES='.show, .collapsing';
var SELECTOR_DATA_TOGGLE$1='[data-toggle="collapse"]';
var Collapse=function (){
function Collapse(element, config){
this._isTransitioning=false;
this._element=element;
this._config=this._getConfig(config);
this._triggerArray=[].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
var toggleList=[].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));
for (var i=0, len=toggleList.length; i < len; i++){
var elem=toggleList[i];
var selector=Util.getSelectorFromElement(elem);
var filterElement=[].slice.call(document.querySelectorAll(selector)).filter(function (foundElem){
return foundElem===element;
});
if(selector!==null&&filterElement.length > 0){
this._selector=selector;
this._triggerArray.push(elem);
}}
this._parent=this._config.parent ? this._getParent():null;
if(!this._config.parent){
this._addAriaAndCollapsedClass(this._element, this._triggerArray);
}
if(this._config.toggle){
this.toggle();
}}
var _proto=Collapse.prototype;
_proto.toggle=function toggle(){
if($(this._element).hasClass(CLASS_NAME_SHOW$1)){
this.hide();
}else{
this.show();
}};
_proto.show=function show(){
var _this=this;
if(this._isTransitioning||$(this._element).hasClass(CLASS_NAME_SHOW$1)){
return;
}
var actives;
var activesData;
if(this._parent){
actives=[].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem){
if(typeof _this._config.parent==='string'){
return elem.getAttribute('data-parent')===_this._config.parent;
}
return elem.classList.contains(CLASS_NAME_COLLAPSE);
});
if(actives.length===0){
actives=null;
}}
if(actives){
activesData=$(actives).not(this._selector).data(DATA_KEY$3);
if(activesData&&activesData._isTransitioning){
return;
}}
var startEvent=$.Event(EVENT_SHOW);
$(this._element).trigger(startEvent);
if(startEvent.isDefaultPrevented()){
return;
}
if(actives){
Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
if(!activesData){
$(actives).data(DATA_KEY$3, null);
}}
var dimension=this._getDimension();
$(this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
this._element.style[dimension]=0;
if(this._triggerArray.length){
$(this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
}
this.setTransitioning(true);
var complete=function complete(){
$(_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
_this._element.style[dimension]='';
_this.setTransitioning(false);
$(_this._element).trigger(EVENT_SHOWN);
};
var capitalizedDimension=dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize="scroll" + capitalizedDimension;
var transitionDuration=Util.getTransitionDurationFromElement(this._element);
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
this._element.style[dimension]=this._element[scrollSize] + "px";
};
_proto.hide=function hide(){
var _this2=this;
if(this._isTransitioning||!$(this._element).hasClass(CLASS_NAME_SHOW$1)){
return;
}
var startEvent=$.Event(EVENT_HIDE);
$(this._element).trigger(startEvent);
if(startEvent.isDefaultPrevented()){
return;
}
var dimension=this._getDimension();
this._element.style[dimension]=this._element.getBoundingClientRect()[dimension] + "px";
Util.reflow(this._element);
$(this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$1);
var triggerArrayLength=this._triggerArray.length;
if(triggerArrayLength > 0){
for (var i=0; i < triggerArrayLength; i++){
var trigger=this._triggerArray[i];
var selector=Util.getSelectorFromElement(trigger);
if(selector!==null){
var $elem=$([].slice.call(document.querySelectorAll(selector)));
if(!$elem.hasClass(CLASS_NAME_SHOW$1)){
$(trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
}}
}}
this.setTransitioning(true);
var complete=function complete(){
_this2.setTransitioning(false);
$(_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);
};
this._element.style[dimension]='';
var transitionDuration=Util.getTransitionDurationFromElement(this._element);
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
};
_proto.setTransitioning=function setTransitioning(isTransitioning){
this._isTransitioning=isTransitioning;
};
_proto.dispose=function dispose(){
$.removeData(this._element, DATA_KEY$3);
this._config=null;
this._parent=null;
this._element=null;
this._triggerArray=null;
this._isTransitioning=null;
}
;
_proto._getConfig=function _getConfig(config){
config=_objectSpread2(_objectSpread2({}, Default$1), config);
config.toggle=Boolean(config.toggle);
Util.typeCheckConfig(NAME$3, config, DefaultType$1);
return config;
};
_proto._getDimension=function _getDimension(){
var hasWidth=$(this._element).hasClass(DIMENSION_WIDTH);
return hasWidth ? DIMENSION_WIDTH:DIMENSION_HEIGHT;
};
_proto._getParent=function _getParent(){
var _this3=this;
var parent;
if(Util.isElement(this._config.parent)){
parent=this._config.parent;
if(typeof this._config.parent.jquery!=='undefined'){
parent=this._config.parent[0];
}}else{
parent=document.querySelector(this._config.parent);
}
var selector="[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
var children=[].slice.call(parent.querySelectorAll(selector));
$(children).each(function (i, element){
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
});
return parent;
};
_proto._addAriaAndCollapsedClass=function _addAriaAndCollapsedClass(element, triggerArray){
var isOpen=$(element).hasClass(CLASS_NAME_SHOW$1);
if(triggerArray.length){
$(triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
}}
;
Collapse._getTargetFromElement=function _getTargetFromElement(element){
var selector=Util.getSelectorFromElement(element);
return selector ? document.querySelector(selector):null;
};
Collapse._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var $this=$(this);
var data=$this.data(DATA_KEY$3);
var _config=_objectSpread2(_objectSpread2(_objectSpread2({}, Default$1), $this.data()), typeof config==='object'&&config ? config:{});
if(!data&&_config.toggle&&typeof config==='string'&&/show|hide/.test(config)){
_config.toggle=false;
}
if(!data){
data=new Collapse(this, _config);
$this.data(DATA_KEY$3, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}});
};
_createClass(Collapse, null, [{
key: "VERSION",
get: function get(){
return VERSION$3;
}}, {
key: "Default",
get: function get(){
return Default$1;
}}]);
return Collapse;
}();
$(document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event){
if(event.currentTarget.tagName==='A'){
event.preventDefault();
}
var $trigger=$(this);
var selector=Util.getSelectorFromElement(this);
var selectors=[].slice.call(document.querySelectorAll(selector));
$(selectors).each(function (){
var $target=$(this);
var data=$target.data(DATA_KEY$3);
var config=data ? 'toggle':$trigger.data();
Collapse._jQueryInterface.call($target, config);
});
});
$.fn[NAME$3]=Collapse._jQueryInterface;
$.fn[NAME$3].Constructor=Collapse;
$.fn[NAME$3].noConflict=function (){
$.fn[NAME$3]=JQUERY_NO_CONFLICT$3;
return Collapse._jQueryInterface;
};
var NAME$4='dropdown';
var VERSION$4='4.5.0';
var DATA_KEY$4='bs.dropdown';
var EVENT_KEY$4="." + DATA_KEY$4;
var DATA_API_KEY$4='.data-api';
var JQUERY_NO_CONFLICT$4=$.fn[NAME$4];
var ESCAPE_KEYCODE=27;
var SPACE_KEYCODE=32;
var TAB_KEYCODE=9;
var ARROW_UP_KEYCODE=38;
var ARROW_DOWN_KEYCODE=40;
var RIGHT_MOUSE_BUTTON_WHICH=3;
var REGEXP_KEYDOWN=new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE);
var EVENT_HIDE$1="hide" + EVENT_KEY$4;
var EVENT_HIDDEN$1="hidden" + EVENT_KEY$4;
var EVENT_SHOW$1="show" + EVENT_KEY$4;
var EVENT_SHOWN$1="shown" + EVENT_KEY$4;
var EVENT_CLICK="click" + EVENT_KEY$4;
var EVENT_CLICK_DATA_API$4="click" + EVENT_KEY$4 + DATA_API_KEY$4;
var EVENT_KEYDOWN_DATA_API="keydown" + EVENT_KEY$4 + DATA_API_KEY$4;
var EVENT_KEYUP_DATA_API="keyup" + EVENT_KEY$4 + DATA_API_KEY$4;
var CLASS_NAME_DISABLED='disabled';
var CLASS_NAME_SHOW$2='show';
var CLASS_NAME_DROPUP='dropup';
var CLASS_NAME_DROPRIGHT='dropright';
var CLASS_NAME_DROPLEFT='dropleft';
var CLASS_NAME_MENURIGHT='dropdown-menu-right';
var CLASS_NAME_POSITION_STATIC='position-static';
var SELECTOR_DATA_TOGGLE$2='[data-toggle="dropdown"]';
var SELECTOR_FORM_CHILD='.dropdown form';
var SELECTOR_MENU='.dropdown-menu';
var SELECTOR_NAVBAR_NAV='.navbar-nav';
var SELECTOR_VISIBLE_ITEMS='.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
var PLACEMENT_TOP='top-start';
var PLACEMENT_TOPEND='top-end';
var PLACEMENT_BOTTOM='bottom-start';
var PLACEMENT_BOTTOMEND='bottom-end';
var PLACEMENT_RIGHT='right-start';
var PLACEMENT_LEFT='left-start';
var Default$2={
offset: 0,
flip: true,
boundary: 'scrollParent',
reference: 'toggle',
display: 'dynamic',
popperConfig: null
};
var DefaultType$2={
offset: '(number|string|function)',
flip: 'boolean',
boundary: '(string|element)',
reference: '(string|element)',
display: 'string',
popperConfig: '(null|object)'
};
var Dropdown=function (){
function Dropdown(element, config){
this._element=element;
this._popper=null;
this._config=this._getConfig(config);
this._menu=this._getMenuElement();
this._inNavbar=this._detectNavbar();
this._addEventListeners();
}
var _proto=Dropdown.prototype;
_proto.toggle=function toggle(){
if(this._element.disabled||$(this._element).hasClass(CLASS_NAME_DISABLED)){
return;
}
var isActive=$(this._menu).hasClass(CLASS_NAME_SHOW$2);
Dropdown._clearMenus();
if(isActive){
return;
}
this.show(true);
};
_proto.show=function show(usePopper){
if(usePopper===void 0){
usePopper=false;
}
if(this._element.disabled||$(this._element).hasClass(CLASS_NAME_DISABLED)||$(this._menu).hasClass(CLASS_NAME_SHOW$2)){
return;
}
var relatedTarget={
relatedTarget: this._element
};
var showEvent=$.Event(EVENT_SHOW$1, relatedTarget);
var parent=Dropdown._getParentFromElement(this._element);
$(parent).trigger(showEvent);
if(showEvent.isDefaultPrevented()){
return;
}
if(!this._inNavbar&&usePopper){
if(typeof Popper==='undefined'){
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)');
}
var referenceElement=this._element;
if(this._config.reference==='parent'){
referenceElement=parent;
}else if(Util.isElement(this._config.reference)){
referenceElement=this._config.reference;
if(typeof this._config.reference.jquery!=='undefined'){
referenceElement=this._config.reference[0];
}}
if(this._config.boundary!=='scrollParent'){
$(parent).addClass(CLASS_NAME_POSITION_STATIC);
}
this._popper=new Popper(referenceElement, this._menu, this._getPopperConfig());
}
if('ontouchstart' in document.documentElement&&$(parent).closest(SELECTOR_NAVBAR_NAV).length===0){
$(document.body).children().on('mouseover', null, $.noop);
}
this._element.focus();
this._element.setAttribute('aria-expanded', true);
$(this._menu).toggleClass(CLASS_NAME_SHOW$2);
$(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_SHOWN$1, relatedTarget));
};
_proto.hide=function hide(){
if(this._element.disabled||$(this._element).hasClass(CLASS_NAME_DISABLED)||!$(this._menu).hasClass(CLASS_NAME_SHOW$2)){
return;
}
var relatedTarget={
relatedTarget: this._element
};
var hideEvent=$.Event(EVENT_HIDE$1, relatedTarget);
var parent=Dropdown._getParentFromElement(this._element);
$(parent).trigger(hideEvent);
if(hideEvent.isDefaultPrevented()){
return;
}
if(this._popper){
this._popper.destroy();
}
$(this._menu).toggleClass(CLASS_NAME_SHOW$2);
$(parent).toggleClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
};
_proto.dispose=function dispose(){
$.removeData(this._element, DATA_KEY$4);
$(this._element).off(EVENT_KEY$4);
this._element=null;
this._menu=null;
if(this._popper!==null){
this._popper.destroy();
this._popper=null;
}};
_proto.update=function update(){
this._inNavbar=this._detectNavbar();
if(this._popper!==null){
this._popper.scheduleUpdate();
}}
;
_proto._addEventListeners=function _addEventListeners(){
var _this=this;
$(this._element).on(EVENT_CLICK, function (event){
event.preventDefault();
event.stopPropagation();
_this.toggle();
});
};
_proto._getConfig=function _getConfig(config){
config=_objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), $(this._element).data()), config);
Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
return config;
};
_proto._getMenuElement=function _getMenuElement(){
if(!this._menu){
var parent=Dropdown._getParentFromElement(this._element);
if(parent){
this._menu=parent.querySelector(SELECTOR_MENU);
}}
return this._menu;
};
_proto._getPlacement=function _getPlacement(){
var $parentDropdown=$(this._element.parentNode);
var placement=PLACEMENT_BOTTOM;
if($parentDropdown.hasClass(CLASS_NAME_DROPUP)){
placement=$(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND:PLACEMENT_TOP;
}else if($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)){
placement=PLACEMENT_RIGHT;
}else if($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)){
placement=PLACEMENT_LEFT;
}else if($(this._menu).hasClass(CLASS_NAME_MENURIGHT)){
placement=PLACEMENT_BOTTOMEND;
}
return placement;
};
_proto._detectNavbar=function _detectNavbar(){
return $(this._element).closest('.navbar').length > 0;
};
_proto._getOffset=function _getOffset(){
var _this2=this;
var offset={};
if(typeof this._config.offset==='function'){
offset.fn=function (data){
data.offsets=_objectSpread2(_objectSpread2({}, data.offsets), _this2._config.offset(data.offsets, _this2._element)||{});
return data;
};}else{
offset.offset=this._config.offset;
}
return offset;
};
_proto._getPopperConfig=function _getPopperConfig(){
var popperConfig={
placement: this._getPlacement(),
modifiers: {
offset: this._getOffset(),
flip: {
enabled: this._config.flip
},
preventOverflow: {
boundariesElement: this._config.boundary
}}
};
if(this._config.display==='static'){
popperConfig.modifiers.applyStyle={
enabled: false
};}
return _objectSpread2(_objectSpread2({}, popperConfig), this._config.popperConfig);
}
;
Dropdown._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var data=$(this).data(DATA_KEY$4);
var _config=typeof config==='object' ? config:null;
if(!data){
data=new Dropdown(this, _config);
$(this).data(DATA_KEY$4, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}});
};
Dropdown._clearMenus=function _clearMenus(event){
if(event&&(event.which===RIGHT_MOUSE_BUTTON_WHICH||event.type==='keyup'&&event.which!==TAB_KEYCODE)){
return;
}
var toggles=[].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
for (var i=0, len=toggles.length; i < len; i++){
var parent=Dropdown._getParentFromElement(toggles[i]);
var context=$(toggles[i]).data(DATA_KEY$4);
var relatedTarget={
relatedTarget: toggles[i]
};
if(event&&event.type==='click'){
relatedTarget.clickEvent=event;
}
if(!context){
continue;
}
var dropdownMenu=context._menu;
if(!$(parent).hasClass(CLASS_NAME_SHOW$2)){
continue;
}
if(event&&(event.type==='click'&&/input|textarea/i.test(event.target.tagName)||event.type==='keyup'&&event.which===TAB_KEYCODE)&&$.contains(parent, event.target)){
continue;
}
var hideEvent=$.Event(EVENT_HIDE$1, relatedTarget);
$(parent).trigger(hideEvent);
if(hideEvent.isDefaultPrevented()){
continue;
}
if('ontouchstart' in document.documentElement){
$(document.body).children().off('mouseover', null, $.noop);
}
toggles[i].setAttribute('aria-expanded', 'false');
if(context._popper){
context._popper.destroy();
}
$(dropdownMenu).removeClass(CLASS_NAME_SHOW$2);
$(parent).removeClass(CLASS_NAME_SHOW$2).trigger($.Event(EVENT_HIDDEN$1, relatedTarget));
}};
Dropdown._getParentFromElement=function _getParentFromElement(element){
var parent;
var selector=Util.getSelectorFromElement(element);
if(selector){
parent=document.querySelector(selector);
}
return parent||element.parentNode;
}
;
Dropdown._dataApiKeydownHandler=function _dataApiKeydownHandler(event){
if(/input|textarea/i.test(event.target.tagName) ? event.which===SPACE_KEYCODE||event.which!==ESCAPE_KEYCODE&&(event.which!==ARROW_DOWN_KEYCODE&&event.which!==ARROW_UP_KEYCODE||$(event.target).closest(SELECTOR_MENU).length):!REGEXP_KEYDOWN.test(event.which)){
return;
}
if(this.disabled||$(this).hasClass(CLASS_NAME_DISABLED)){
return;
}
var parent=Dropdown._getParentFromElement(this);
var isActive=$(parent).hasClass(CLASS_NAME_SHOW$2);
if(!isActive&&event.which===ESCAPE_KEYCODE){
return;
}
event.preventDefault();
event.stopPropagation();
if(!isActive||isActive&&(event.which===ESCAPE_KEYCODE||event.which===SPACE_KEYCODE)){
if(event.which===ESCAPE_KEYCODE){
$(parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
}
$(this).trigger('click');
return;
}
var items=[].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item){
return $(item).is(':visible');
});
if(items.length===0){
return;
}
var index=items.indexOf(event.target);
if(event.which===ARROW_UP_KEYCODE&&index > 0){
index--;
}
if(event.which===ARROW_DOWN_KEYCODE&&index < items.length - 1){
index++;
}
if(index < 0){
index=0;
}
items[index].focus();
};
_createClass(Dropdown, null, [{
key: "VERSION",
get: function get(){
return VERSION$4;
}}, {
key: "Default",
get: function get(){
return Default$2;
}}, {
key: "DefaultType",
get: function get(){
return DefaultType$2;
}}]);
return Dropdown;
}();
$(document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event){
event.preventDefault();
event.stopPropagation();
Dropdown._jQueryInterface.call($(this), 'toggle');
}).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e){
e.stopPropagation();
});
$.fn[NAME$4]=Dropdown._jQueryInterface;
$.fn[NAME$4].Constructor=Dropdown;
$.fn[NAME$4].noConflict=function (){
$.fn[NAME$4]=JQUERY_NO_CONFLICT$4;
return Dropdown._jQueryInterface;
};
var NAME$5='modal';
var VERSION$5='4.5.0';
var DATA_KEY$5='bs.modal';
var EVENT_KEY$5="." + DATA_KEY$5;
var DATA_API_KEY$5='.data-api';
var JQUERY_NO_CONFLICT$5=$.fn[NAME$5];
var ESCAPE_KEYCODE$1=27;
var Default$3={
backdrop: true,
keyboard: true,
focus: true,
show: true
};
var DefaultType$3={
backdrop: '(boolean|string)',
keyboard: 'boolean',
focus: 'boolean',
show: 'boolean'
};
var EVENT_HIDE$2="hide" + EVENT_KEY$5;
var EVENT_HIDE_PREVENTED="hidePrevented" + EVENT_KEY$5;
var EVENT_HIDDEN$2="hidden" + EVENT_KEY$5;
var EVENT_SHOW$2="show" + EVENT_KEY$5;
var EVENT_SHOWN$2="shown" + EVENT_KEY$5;
var EVENT_FOCUSIN="focusin" + EVENT_KEY$5;
var EVENT_RESIZE="resize" + EVENT_KEY$5;
var EVENT_CLICK_DISMISS="click.dismiss" + EVENT_KEY$5;
var EVENT_KEYDOWN_DISMISS="keydown.dismiss" + EVENT_KEY$5;
var EVENT_MOUSEUP_DISMISS="mouseup.dismiss" + EVENT_KEY$5;
var EVENT_MOUSEDOWN_DISMISS="mousedown.dismiss" + EVENT_KEY$5;
var EVENT_CLICK_DATA_API$5="click" + EVENT_KEY$5 + DATA_API_KEY$5;
var CLASS_NAME_SCROLLABLE='modal-dialog-scrollable';
var CLASS_NAME_SCROLLBAR_MEASURER='modal-scrollbar-measure';
var CLASS_NAME_BACKDROP='modal-backdrop';
var CLASS_NAME_OPEN='modal-open';
var CLASS_NAME_FADE$1='fade';
var CLASS_NAME_SHOW$3='show';
var CLASS_NAME_STATIC='modal-static';
var SELECTOR_DIALOG='.modal-dialog';
var SELECTOR_MODAL_BODY='.modal-body';
var SELECTOR_DATA_TOGGLE$3='[data-toggle="modal"]';
var SELECTOR_DATA_DISMISS='[data-dismiss="modal"]';
var SELECTOR_FIXED_CONTENT='.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
var SELECTOR_STICKY_CONTENT='.sticky-top';
var Modal=function (){
function Modal(element, config){
this._config=this._getConfig(config);
this._element=element;
this._dialog=element.querySelector(SELECTOR_DIALOG);
this._backdrop=null;
this._isShown=false;
this._isBodyOverflowing=false;
this._ignoreBackdropClick=false;
this._isTransitioning=false;
this._scrollbarWidth=0;
}
var _proto=Modal.prototype;
_proto.toggle=function toggle(relatedTarget){
return this._isShown ? this.hide():this.show(relatedTarget);
};
_proto.show=function show(relatedTarget){
var _this=this;
if(this._isShown||this._isTransitioning){
return;
}
if($(this._element).hasClass(CLASS_NAME_FADE$1)){
this._isTransitioning=true;
}
var showEvent=$.Event(EVENT_SHOW$2, {
relatedTarget: relatedTarget
});
$(this._element).trigger(showEvent);
if(this._isShown||showEvent.isDefaultPrevented()){
return;
}
this._isShown=true;
this._checkScrollbar();
this._setScrollbar();
this._adjustDialog();
this._setEscapeEvent();
this._setResizeEvent();
$(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event){
return _this.hide(event);
});
$(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function (){
$(_this._element).one(EVENT_MOUSEUP_DISMISS, function (event){
if($(event.target).is(_this._element)){
_this._ignoreBackdropClick=true;
}});
});
this._showBackdrop(function (){
return _this._showElement(relatedTarget);
});
};
_proto.hide=function hide(event){
var _this2=this;
if(event){
event.preventDefault();
}
if(!this._isShown||this._isTransitioning){
return;
}
var hideEvent=$.Event(EVENT_HIDE$2);
$(this._element).trigger(hideEvent);
if(!this._isShown||hideEvent.isDefaultPrevented()){
return;
}
this._isShown=false;
var transition=$(this._element).hasClass(CLASS_NAME_FADE$1);
if(transition){
this._isTransitioning=true;
}
this._setEscapeEvent();
this._setResizeEvent();
$(document).off(EVENT_FOCUSIN);
$(this._element).removeClass(CLASS_NAME_SHOW$3);
$(this._element).off(EVENT_CLICK_DISMISS);
$(this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
if(transition){
var transitionDuration=Util.getTransitionDurationFromElement(this._element);
$(this._element).one(Util.TRANSITION_END, function (event){
return _this2._hideModal(event);
}).emulateTransitionEnd(transitionDuration);
}else{
this._hideModal();
}};
_proto.dispose=function dispose(){
[window, this._element, this._dialog].forEach(function (htmlElement){
return $(htmlElement).off(EVENT_KEY$5);
});
$(document).off(EVENT_FOCUSIN);
$.removeData(this._element, DATA_KEY$5);
this._config=null;
this._element=null;
this._dialog=null;
this._backdrop=null;
this._isShown=null;
this._isBodyOverflowing=null;
this._ignoreBackdropClick=null;
this._isTransitioning=null;
this._scrollbarWidth=null;
};
_proto.handleUpdate=function handleUpdate(){
this._adjustDialog();
}
;
_proto._getConfig=function _getConfig(config){
config=_objectSpread2(_objectSpread2({}, Default$3), config);
Util.typeCheckConfig(NAME$5, config, DefaultType$3);
return config;
};
_proto._triggerBackdropTransition=function _triggerBackdropTransition(){
var _this3=this;
if(this._config.backdrop==='static'){
var hideEventPrevented=$.Event(EVENT_HIDE_PREVENTED);
$(this._element).trigger(hideEventPrevented);
if(hideEventPrevented.defaultPrevented){
return;
}
this._element.classList.add(CLASS_NAME_STATIC);
var modalTransitionDuration=Util.getTransitionDurationFromElement(this._element);
$(this._element).one(Util.TRANSITION_END, function (){
_this3._element.classList.remove(CLASS_NAME_STATIC);
}).emulateTransitionEnd(modalTransitionDuration);
this._element.focus();
}else{
this.hide();
}};
_proto._showElement=function _showElement(relatedTarget){
var _this4=this;
var transition=$(this._element).hasClass(CLASS_NAME_FADE$1);
var modalBody=this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY):null;
if(!this._element.parentNode||this._element.parentNode.nodeType!==Node.ELEMENT_NODE){
document.body.appendChild(this._element);
}
this._element.style.display='block';
this._element.removeAttribute('aria-hidden');
this._element.setAttribute('aria-modal', true);
if($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE)&&modalBody){
modalBody.scrollTop=0;
}else{
this._element.scrollTop=0;
}
if(transition){
Util.reflow(this._element);
}
$(this._element).addClass(CLASS_NAME_SHOW$3);
if(this._config.focus){
this._enforceFocus();
}
var shownEvent=$.Event(EVENT_SHOWN$2, {
relatedTarget: relatedTarget
});
var transitionComplete=function transitionComplete(){
if(_this4._config.focus){
_this4._element.focus();
}
_this4._isTransitioning=false;
$(_this4._element).trigger(shownEvent);
};
if(transition){
var transitionDuration=Util.getTransitionDurationFromElement(this._dialog);
$(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
}else{
transitionComplete();
}};
_proto._enforceFocus=function _enforceFocus(){
var _this5=this;
$(document).off(EVENT_FOCUSIN)
.on(EVENT_FOCUSIN, function (event){
if(document!==event.target&&_this5._element!==event.target&&$(_this5._element).has(event.target).length===0){
_this5._element.focus();
}});
};
_proto._setEscapeEvent=function _setEscapeEvent(){
var _this6=this;
if(this._isShown){
$(this._element).on(EVENT_KEYDOWN_DISMISS, function (event){
if(_this6._config.keyboard&&event.which===ESCAPE_KEYCODE$1){
event.preventDefault();
_this6.hide();
}else if(!_this6._config.keyboard&&event.which===ESCAPE_KEYCODE$1){
_this6._triggerBackdropTransition();
}});
}else if(!this._isShown){
$(this._element).off(EVENT_KEYDOWN_DISMISS);
}};
_proto._setResizeEvent=function _setResizeEvent(){
var _this7=this;
if(this._isShown){
$(window).on(EVENT_RESIZE, function (event){
return _this7.handleUpdate(event);
});
}else{
$(window).off(EVENT_RESIZE);
}};
_proto._hideModal=function _hideModal(){
var _this8=this;
this._element.style.display='none';
this._element.setAttribute('aria-hidden', true);
this._element.removeAttribute('aria-modal');
this._isTransitioning=false;
this._showBackdrop(function (){
$(document.body).removeClass(CLASS_NAME_OPEN);
_this8._resetAdjustments();
_this8._resetScrollbar();
$(_this8._element).trigger(EVENT_HIDDEN$2);
});
};
_proto._removeBackdrop=function _removeBackdrop(){
if(this._backdrop){
$(this._backdrop).remove();
this._backdrop=null;
}};
_proto._showBackdrop=function _showBackdrop(callback){
var _this9=this;
var animate=$(this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1:'';
if(this._isShown&&this._config.backdrop){
this._backdrop=document.createElement('div');
this._backdrop.className=CLASS_NAME_BACKDROP;
if(animate){
this._backdrop.classList.add(animate);
}
$(this._backdrop).appendTo(document.body);
$(this._element).on(EVENT_CLICK_DISMISS, function (event){
if(_this9._ignoreBackdropClick){
_this9._ignoreBackdropClick=false;
return;
}
if(event.target!==event.currentTarget){
return;
}
_this9._triggerBackdropTransition();
});
if(animate){
Util.reflow(this._backdrop);
}
$(this._backdrop).addClass(CLASS_NAME_SHOW$3);
if(!callback){
return;
}
if(!animate){
callback();
return;
}
var backdropTransitionDuration=Util.getTransitionDurationFromElement(this._backdrop);
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
}else if(!this._isShown&&this._backdrop){
$(this._backdrop).removeClass(CLASS_NAME_SHOW$3);
var callbackRemove=function callbackRemove(){
_this9._removeBackdrop();
if(callback){
callback();
}};
if($(this._element).hasClass(CLASS_NAME_FADE$1)){
var _backdropTransitionDuration=Util.getTransitionDurationFromElement(this._backdrop);
$(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
}else{
callbackRemove();
}}else if(callback){
callback();
}}
;
_proto._adjustDialog=function _adjustDialog(){
var isModalOverflowing=this._element.scrollHeight > document.documentElement.clientHeight;
if(!this._isBodyOverflowing&&isModalOverflowing){
this._element.style.paddingLeft=this._scrollbarWidth + "px";
}
if(this._isBodyOverflowing&&!isModalOverflowing){
this._element.style.paddingRight=this._scrollbarWidth + "px";
}};
_proto._resetAdjustments=function _resetAdjustments(){
this._element.style.paddingLeft='';
this._element.style.paddingRight='';
};
_proto._checkScrollbar=function _checkScrollbar(){
var rect=document.body.getBoundingClientRect();
this._isBodyOverflowing=Math.round(rect.left + rect.right) < window.innerWidth;
this._scrollbarWidth=this._getScrollbarWidth();
};
_proto._setScrollbar=function _setScrollbar(){
var _this10=this;
if(this._isBodyOverflowing){
var fixedContent=[].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
var stickyContent=[].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT));
$(fixedContent).each(function (index, element){
var actualPadding=element.style.paddingRight;
var calculatedPadding=$(element).css('padding-right');
$(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
});
$(stickyContent).each(function (index, element){
var actualMargin=element.style.marginRight;
var calculatedMargin=$(element).css('margin-right');
$(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
});
var actualPadding=document.body.style.paddingRight;
var calculatedPadding=$(document.body).css('padding-right');
$(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
}
$(document.body).addClass(CLASS_NAME_OPEN);
};
_proto._resetScrollbar=function _resetScrollbar(){
var fixedContent=[].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
$(fixedContent).each(function (index, element){
var padding=$(element).data('padding-right');
$(element).removeData('padding-right');
element.style.paddingRight=padding ? padding:'';
});
var elements=[].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
$(elements).each(function (index, element){
var margin=$(element).data('margin-right');
if(typeof margin!=='undefined'){
$(element).css('margin-right', margin).removeData('margin-right');
}});
var padding=$(document.body).data('padding-right');
$(document.body).removeData('padding-right');
document.body.style.paddingRight=padding ? padding:'';
};
_proto._getScrollbarWidth=function _getScrollbarWidth(){
var scrollDiv=document.createElement('div');
scrollDiv.className=CLASS_NAME_SCROLLBAR_MEASURER;
document.body.appendChild(scrollDiv);
var scrollbarWidth=scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
}
;
Modal._jQueryInterface=function _jQueryInterface(config, relatedTarget){
return this.each(function (){
var data=$(this).data(DATA_KEY$5);
var _config=_objectSpread2(_objectSpread2(_objectSpread2({}, Default$3), $(this).data()), typeof config==='object'&&config ? config:{});
if(!data){
data=new Modal(this, _config);
$(this).data(DATA_KEY$5, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config](relatedTarget);
}else if(_config.show){
data.show(relatedTarget);
}});
};
_createClass(Modal, null, [{
key: "VERSION",
get: function get(){
return VERSION$5;
}}, {
key: "Default",
get: function get(){
return Default$3;
}}]);
return Modal;
}();
$(document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event){
var _this11=this;
var target;
var selector=Util.getSelectorFromElement(this);
if(selector){
target=document.querySelector(selector);
}
var config=$(target).data(DATA_KEY$5) ? 'toggle':_objectSpread2(_objectSpread2({}, $(target).data()), $(this).data());
if(this.tagName==='A'||this.tagName==='AREA'){
event.preventDefault();
}
var $target=$(target).one(EVENT_SHOW$2, function (showEvent){
if(showEvent.isDefaultPrevented()){
return;
}
$target.one(EVENT_HIDDEN$2, function (){
if($(_this11).is(':visible')){
_this11.focus();
}});
});
Modal._jQueryInterface.call($(target), config, this);
});
$.fn[NAME$5]=Modal._jQueryInterface;
$.fn[NAME$5].Constructor=Modal;
$.fn[NAME$5].noConflict=function (){
$.fn[NAME$5]=JQUERY_NO_CONFLICT$5;
return Modal._jQueryInterface;
};
var uriAttrs=['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN=/^aria-[\w-]*$/i;
var DefaultWhitelist={
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
};
var SAFE_URL_PATTERN=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;
var DATA_URL_PATTERN=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
function allowedAttribute(attr, allowedAttributeList){
var attrName=attr.nodeName.toLowerCase();
if(allowedAttributeList.indexOf(attrName)!==-1){
if(uriAttrs.indexOf(attrName)!==-1){
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN)||attr.nodeValue.match(DATA_URL_PATTERN));
}
return true;
}
var regExp=allowedAttributeList.filter(function (attrRegex){
return attrRegex instanceof RegExp;
});
for (var i=0, len=regExp.length; i < len; i++){
if(attrName.match(regExp[i])){
return true;
}}
return false;
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn){
if(unsafeHtml.length===0){
return unsafeHtml;
}
if(sanitizeFn&&typeof sanitizeFn==='function'){
return sanitizeFn(unsafeHtml);
}
var domParser=new window.DOMParser();
var createdDocument=domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys=Object.keys(whiteList);
var elements=[].slice.call(createdDocument.body.querySelectorAll('*'));
var _loop=function _loop(i, len){
var el=elements[i];
var elName=el.nodeName.toLowerCase();
if(whitelistKeys.indexOf(el.nodeName.toLowerCase())===-1){
el.parentNode.removeChild(el);
return "continue";
}
var attributeList=[].slice.call(el.attributes);
var whitelistedAttributes=[].concat(whiteList['*']||[], whiteList[elName]||[]);
attributeList.forEach(function (attr){
if(!allowedAttribute(attr, whitelistedAttributes)){
el.removeAttribute(attr.nodeName);
}});
};
for (var i=0, len=elements.length; i < len; i++){
var _ret=_loop(i);
if(_ret==="continue") continue;
}
return createdDocument.body.innerHTML;
}
var NAME$6='tooltip';
var VERSION$6='4.5.0';
var DATA_KEY$6='bs.tooltip';
var EVENT_KEY$6="." + DATA_KEY$6;
var JQUERY_NO_CONFLICT$6=$.fn[NAME$6];
var CLASS_PREFIX='bs-tooltip';
var BSCLS_PREFIX_REGEX=new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DISALLOWED_ATTRIBUTES=['sanitize', 'whiteList', 'sanitizeFn'];
var DefaultType$4={
animation: 'boolean',
template: 'string',
title: '(string|element|function)',
trigger: 'string',
delay: '(number|object)',
html: 'boolean',
selector: '(string|boolean)',
placement: '(string|function)',
offset: '(number|string|function)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)',
boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object',
popperConfig: '(null|object)'
};
var AttachmentMap={
AUTO: 'auto',
TOP: 'top',
RIGHT: 'right',
BOTTOM: 'bottom',
LEFT: 'left'
};
var Default$4={
animation: true,
template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
trigger: 'hover focus',
title: '',
delay: 0,
html: false,
selector: false,
placement: 'top',
offset: 0,
container: false,
fallbackPlacement: 'flip',
boundary: 'scrollParent',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist,
popperConfig: null
};
var HOVER_STATE_SHOW='show';
var HOVER_STATE_OUT='out';
var Event={
HIDE: "hide" + EVENT_KEY$6,
HIDDEN: "hidden" + EVENT_KEY$6,
SHOW: "show" + EVENT_KEY$6,
SHOWN: "shown" + EVENT_KEY$6,
INSERTED: "inserted" + EVENT_KEY$6,
CLICK: "click" + EVENT_KEY$6,
FOCUSIN: "focusin" + EVENT_KEY$6,
FOCUSOUT: "focusout" + EVENT_KEY$6,
MOUSEENTER: "mouseenter" + EVENT_KEY$6,
MOUSELEAVE: "mouseleave" + EVENT_KEY$6
};
var CLASS_NAME_FADE$2='fade';
var CLASS_NAME_SHOW$4='show';
var SELECTOR_TOOLTIP_INNER='.tooltip-inner';
var SELECTOR_ARROW='.arrow';
var TRIGGER_HOVER='hover';
var TRIGGER_FOCUS='focus';
var TRIGGER_CLICK='click';
var TRIGGER_MANUAL='manual';
var Tooltip=function (){
function Tooltip(element, config){
if(typeof Popper==='undefined'){
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
}
this._isEnabled=true;
this._timeout=0;
this._hoverState='';
this._activeTrigger={};
this._popper=null;
this.element=element;
this.config=this._getConfig(config);
this.tip=null;
this._setListeners();
}
var _proto=Tooltip.prototype;
_proto.enable=function enable(){
this._isEnabled=true;
};
_proto.disable=function disable(){
this._isEnabled=false;
};
_proto.toggleEnabled=function toggleEnabled(){
this._isEnabled = !this._isEnabled;
};
_proto.toggle=function toggle(event){
if(!this._isEnabled){
return;
}
if(event){
var dataKey=this.constructor.DATA_KEY;
var context=$(event.currentTarget).data(dataKey);
if(!context){
context=new this.constructor(event.currentTarget, this._getDelegateConfig());
$(event.currentTarget).data(dataKey, context);
}
context._activeTrigger.click = !context._activeTrigger.click;
if(context._isWithActiveTrigger()){
context._enter(null, context);
}else{
context._leave(null, context);
}}else{
if($(this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)){
this._leave(null, this);
return;
}
this._enter(null, this);
}};
_proto.dispose=function dispose(){
clearTimeout(this._timeout);
$.removeData(this.element, this.constructor.DATA_KEY);
$(this.element).off(this.constructor.EVENT_KEY);
$(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
if(this.tip){
$(this.tip).remove();
}
this._isEnabled=null;
this._timeout=null;
this._hoverState=null;
this._activeTrigger=null;
if(this._popper){
this._popper.destroy();
}
this._popper=null;
this.element=null;
this.config=null;
this.tip=null;
};
_proto.show=function show(){
var _this=this;
if($(this.element).css('display')==='none'){
throw new Error('Please use show on visible elements');
}
var showEvent=$.Event(this.constructor.Event.SHOW);
if(this.isWithContent()&&this._isEnabled){
$(this.element).trigger(showEvent);
var shadowRoot=Util.findShadowRoot(this.element);
var isInTheDom=$.contains(shadowRoot!==null ? shadowRoot:this.element.ownerDocument.documentElement, this.element);
if(showEvent.isDefaultPrevented()||!isInTheDom){
return;
}
var tip=this.getTipElement();
var tipId=Util.getUID(this.constructor.NAME);
tip.setAttribute('id', tipId);
this.element.setAttribute('aria-describedby', tipId);
this.setContent();
if(this.config.animation){
$(tip).addClass(CLASS_NAME_FADE$2);
}
var placement=typeof this.config.placement==='function' ? this.config.placement.call(this, tip, this.element):this.config.placement;
var attachment=this._getAttachment(placement);
this.addAttachmentClass(attachment);
var container=this._getContainer();
$(tip).data(this.constructor.DATA_KEY, this);
if(!$.contains(this.element.ownerDocument.documentElement, this.tip)){
$(tip).appendTo(container);
}
$(this.element).trigger(this.constructor.Event.INSERTED);
this._popper=new Popper(this.element, tip, this._getPopperConfig(attachment));
$(tip).addClass(CLASS_NAME_SHOW$4);
if('ontouchstart' in document.documentElement){
$(document.body).children().on('mouseover', null, $.noop);
}
var complete=function complete(){
if(_this.config.animation){
_this._fixTransition();
}
var prevHoverState=_this._hoverState;
_this._hoverState=null;
$(_this.element).trigger(_this.constructor.Event.SHOWN);
if(prevHoverState===HOVER_STATE_OUT){
_this._leave(null, _this);
}};
if($(this.tip).hasClass(CLASS_NAME_FADE$2)){
var transitionDuration=Util.getTransitionDurationFromElement(this.tip);
$(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
}else{
complete();
}}
};
_proto.hide=function hide(callback){
var _this2=this;
var tip=this.getTipElement();
var hideEvent=$.Event(this.constructor.Event.HIDE);
var complete=function complete(){
if(_this2._hoverState!==HOVER_STATE_SHOW&&tip.parentNode){
tip.parentNode.removeChild(tip);
}
_this2._cleanTipClass();
_this2.element.removeAttribute('aria-describedby');
$(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
if(_this2._popper!==null){
_this2._popper.destroy();
}
if(callback){
callback();
}};
$(this.element).trigger(hideEvent);
if(hideEvent.isDefaultPrevented()){
return;
}
$(tip).removeClass(CLASS_NAME_SHOW$4);
if('ontouchstart' in document.documentElement){
$(document.body).children().off('mouseover', null, $.noop);
}
this._activeTrigger[TRIGGER_CLICK]=false;
this._activeTrigger[TRIGGER_FOCUS]=false;
this._activeTrigger[TRIGGER_HOVER]=false;
if($(this.tip).hasClass(CLASS_NAME_FADE$2)){
var transitionDuration=Util.getTransitionDurationFromElement(tip);
$(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
}else{
complete();
}
this._hoverState='';
};
_proto.update=function update(){
if(this._popper!==null){
this._popper.scheduleUpdate();
}}
;
_proto.isWithContent=function isWithContent(){
return Boolean(this.getTitle());
};
_proto.addAttachmentClass=function addAttachmentClass(attachment){
$(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
};
_proto.getTipElement=function getTipElement(){
this.tip=this.tip||$(this.config.template)[0];
return this.tip;
};
_proto.setContent=function setContent(){
var tip=this.getTipElement();
this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
$(tip).removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$4);
};
_proto.setElementContent=function setElementContent($element, content){
if(typeof content==='object'&&(content.nodeType||content.jquery)){
if(this.config.html){
if(!$(content).parent().is($element)){
$element.empty().append(content);
}}else{
$element.text($(content).text());
}
return;
}
if(this.config.html){
if(this.config.sanitize){
content=sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
$element.html(content);
}else{
$element.text(content);
}};
_proto.getTitle=function getTitle(){
var title=this.element.getAttribute('data-original-title');
if(!title){
title=typeof this.config.title==='function' ? this.config.title.call(this.element):this.config.title;
}
return title;
}
;
_proto._getPopperConfig=function _getPopperConfig(attachment){
var _this3=this;
var defaultBsConfig={
placement: attachment,
modifiers: {
offset: this._getOffset(),
flip: {
behavior: this.config.fallbackPlacement
},
arrow: {
element: SELECTOR_ARROW
},
preventOverflow: {
boundariesElement: this.config.boundary
}},
onCreate: function onCreate(data){
if(data.originalPlacement!==data.placement){
_this3._handlePopperPlacementChange(data);
}},
onUpdate: function onUpdate(data){
return _this3._handlePopperPlacementChange(data);
}};
return _objectSpread2(_objectSpread2({}, defaultBsConfig), this.config.popperConfig);
};
_proto._getOffset=function _getOffset(){
var _this4=this;
var offset={};
if(typeof this.config.offset==='function'){
offset.fn=function (data){
data.offsets=_objectSpread2(_objectSpread2({}, data.offsets), _this4.config.offset(data.offsets, _this4.element)||{});
return data;
};}else{
offset.offset=this.config.offset;
}
return offset;
};
_proto._getContainer=function _getContainer(){
if(this.config.container===false){
return document.body;
}
if(Util.isElement(this.config.container)){
return $(this.config.container);
}
return $(document).find(this.config.container);
};
_proto._getAttachment=function _getAttachment(placement){
return AttachmentMap[placement.toUpperCase()];
};
_proto._setListeners=function _setListeners(){
var _this5=this;
var triggers=this.config.trigger.split(' ');
triggers.forEach(function (trigger){
if(trigger==='click'){
$(_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event){
return _this5.toggle(event);
});
}else if(trigger!==TRIGGER_MANUAL){
var eventIn=trigger===TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER:_this5.constructor.Event.FOCUSIN;
var eventOut=trigger===TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE:_this5.constructor.Event.FOCUSOUT;
$(_this5.element).on(eventIn, _this5.config.selector, function (event){
return _this5._enter(event);
}).on(eventOut, _this5.config.selector, function (event){
return _this5._leave(event);
});
}});
this._hideModalHandler=function (){
if(_this5.element){
_this5.hide();
}};
$(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
if(this.config.selector){
this.config=_objectSpread2(_objectSpread2({}, this.config), {}, {
trigger: 'manual',
selector: ''
});
}else{
this._fixTitle();
}};
_proto._fixTitle=function _fixTitle(){
var titleType=typeof this.element.getAttribute('data-original-title');
if(this.element.getAttribute('title')||titleType!=='string'){
this.element.setAttribute('data-original-title', this.element.getAttribute('title')||'');
this.element.setAttribute('title', '');
}};
_proto._enter=function _enter(event, context){
var dataKey=this.constructor.DATA_KEY;
context=context||$(event.currentTarget).data(dataKey);
if(!context){
context=new this.constructor(event.currentTarget, this._getDelegateConfig());
$(event.currentTarget).data(dataKey, context);
}
if(event){
context._activeTrigger[event.type==='focusin' ? TRIGGER_FOCUS:TRIGGER_HOVER]=true;
}
if($(context.getTipElement()).hasClass(CLASS_NAME_SHOW$4)||context._hoverState===HOVER_STATE_SHOW){
context._hoverState=HOVER_STATE_SHOW;
return;
}
clearTimeout(context._timeout);
context._hoverState=HOVER_STATE_SHOW;
if(!context.config.delay||!context.config.delay.show){
context.show();
return;
}
context._timeout=setTimeout(function (){
if(context._hoverState===HOVER_STATE_SHOW){
context.show();
}}, context.config.delay.show);
};
_proto._leave=function _leave(event, context){
var dataKey=this.constructor.DATA_KEY;
context=context||$(event.currentTarget).data(dataKey);
if(!context){
context=new this.constructor(event.currentTarget, this._getDelegateConfig());
$(event.currentTarget).data(dataKey, context);
}
if(event){
context._activeTrigger[event.type==='focusout' ? TRIGGER_FOCUS:TRIGGER_HOVER]=false;
}
if(context._isWithActiveTrigger()){
return;
}
clearTimeout(context._timeout);
context._hoverState=HOVER_STATE_OUT;
if(!context.config.delay||!context.config.delay.hide){
context.hide();
return;
}
context._timeout=setTimeout(function (){
if(context._hoverState===HOVER_STATE_OUT){
context.hide();
}}, context.config.delay.hide);
};
_proto._isWithActiveTrigger=function _isWithActiveTrigger(){
for (var trigger in this._activeTrigger){
if(this._activeTrigger[trigger]){
return true;
}}
return false;
};
_proto._getConfig=function _getConfig(config){
var dataAttributes=$(this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr){
if(DISALLOWED_ATTRIBUTES.indexOf(dataAttr)!==-1){
delete dataAttributes[dataAttr];
}});
config=_objectSpread2(_objectSpread2(_objectSpread2({}, this.constructor.Default), dataAttributes), typeof config==='object'&&config ? config:{});
if(typeof config.delay==='number'){
config.delay={
show: config.delay,
hide: config.delay
};}
if(typeof config.title==='number'){
config.title=config.title.toString();
}
if(typeof config.content==='number'){
config.content=config.content.toString();
}
Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
if(config.sanitize){
config.template=sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
}
return config;
};
_proto._getDelegateConfig=function _getDelegateConfig(){
var config={};
if(this.config){
for (var key in this.config){
if(this.constructor.Default[key]!==this.config[key]){
config[key]=this.config[key];
}}
}
return config;
};
_proto._cleanTipClass=function _cleanTipClass(){
var $tip=$(this.getTipElement());
var tabClass=$tip.attr('class').match(BSCLS_PREFIX_REGEX);
if(tabClass!==null&&tabClass.length){
$tip.removeClass(tabClass.join(''));
}};
_proto._handlePopperPlacementChange=function _handlePopperPlacementChange(popperData){
this.tip=popperData.instance.popper;
this._cleanTipClass();
this.addAttachmentClass(this._getAttachment(popperData.placement));
};
_proto._fixTransition=function _fixTransition(){
var tip=this.getTipElement();
var initConfigAnimation=this.config.animation;
if(tip.getAttribute('x-placement')!==null){
return;
}
$(tip).removeClass(CLASS_NAME_FADE$2);
this.config.animation=false;
this.hide();
this.show();
this.config.animation=initConfigAnimation;
}
;
Tooltip._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var data=$(this).data(DATA_KEY$6);
var _config=typeof config==='object'&&config;
if(!data&&/dispose|hide/.test(config)){
return;
}
if(!data){
data=new Tooltip(this, _config);
$(this).data(DATA_KEY$6, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}});
};
_createClass(Tooltip, null, [{
key: "VERSION",
get: function get(){
return VERSION$6;
}}, {
key: "Default",
get: function get(){
return Default$4;
}}, {
key: "NAME",
get: function get(){
return NAME$6;
}}, {
key: "DATA_KEY",
get: function get(){
return DATA_KEY$6;
}}, {
key: "Event",
get: function get(){
return Event;
}}, {
key: "EVENT_KEY",
get: function get(){
return EVENT_KEY$6;
}}, {
key: "DefaultType",
get: function get(){
return DefaultType$4;
}}]);
return Tooltip;
}();
$.fn[NAME$6]=Tooltip._jQueryInterface;
$.fn[NAME$6].Constructor=Tooltip;
$.fn[NAME$6].noConflict=function (){
$.fn[NAME$6]=JQUERY_NO_CONFLICT$6;
return Tooltip._jQueryInterface;
};
var NAME$7='popover';
var VERSION$7='4.5.0';
var DATA_KEY$7='bs.popover';
var EVENT_KEY$7="." + DATA_KEY$7;
var JQUERY_NO_CONFLICT$7=$.fn[NAME$7];
var CLASS_PREFIX$1='bs-popover';
var BSCLS_PREFIX_REGEX$1=new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
var Default$5=_objectSpread2(_objectSpread2({}, Tooltip.Default), {}, {
placement: 'right',
trigger: 'click',
content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
});
var DefaultType$5=_objectSpread2(_objectSpread2({}, Tooltip.DefaultType), {}, {
content: '(string|element|function)'
});
var CLASS_NAME_FADE$3='fade';
var CLASS_NAME_SHOW$5='show';
var SELECTOR_TITLE='.popover-header';
var SELECTOR_CONTENT='.popover-body';
var Event$1={
HIDE: "hide" + EVENT_KEY$7,
HIDDEN: "hidden" + EVENT_KEY$7,
SHOW: "show" + EVENT_KEY$7,
SHOWN: "shown" + EVENT_KEY$7,
INSERTED: "inserted" + EVENT_KEY$7,
CLICK: "click" + EVENT_KEY$7,
FOCUSIN: "focusin" + EVENT_KEY$7,
FOCUSOUT: "focusout" + EVENT_KEY$7,
MOUSEENTER: "mouseenter" + EVENT_KEY$7,
MOUSELEAVE: "mouseleave" + EVENT_KEY$7
};
var Popover=function (_Tooltip){
_inheritsLoose(Popover, _Tooltip);
function Popover(){
return _Tooltip.apply(this, arguments)||this;
}
var _proto=Popover.prototype;
_proto.isWithContent=function isWithContent(){
return this.getTitle()||this._getContent();
};
_proto.addAttachmentClass=function addAttachmentClass(attachment){
$(this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
};
_proto.getTipElement=function getTipElement(){
this.tip=this.tip||$(this.config.template)[0];
return this.tip;
};
_proto.setContent=function setContent(){
var $tip=$(this.getTipElement());
this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
var content=this._getContent();
if(typeof content==='function'){
content=content.call(this.element);
}
this.setElementContent($tip.find(SELECTOR_CONTENT), content);
$tip.removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$5);
}
;
_proto._getContent=function _getContent(){
return this.element.getAttribute('data-content')||this.config.content;
};
_proto._cleanTipClass=function _cleanTipClass(){
var $tip=$(this.getTipElement());
var tabClass=$tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
if(tabClass!==null&&tabClass.length > 0){
$tip.removeClass(tabClass.join(''));
}}
;
Popover._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var data=$(this).data(DATA_KEY$7);
var _config=typeof config==='object' ? config:null;
if(!data&&/dispose|hide/.test(config)){
return;
}
if(!data){
data=new Popover(this, _config);
$(this).data(DATA_KEY$7, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}});
};
_createClass(Popover, null, [{
key: "VERSION",
get: function get(){
return VERSION$7;
}}, {
key: "Default",
get: function get(){
return Default$5;
}}, {
key: "NAME",
get: function get(){
return NAME$7;
}}, {
key: "DATA_KEY",
get: function get(){
return DATA_KEY$7;
}}, {
key: "Event",
get: function get(){
return Event$1;
}}, {
key: "EVENT_KEY",
get: function get(){
return EVENT_KEY$7;
}}, {
key: "DefaultType",
get: function get(){
return DefaultType$5;
}}]);
return Popover;
}(Tooltip);
$.fn[NAME$7]=Popover._jQueryInterface;
$.fn[NAME$7].Constructor=Popover;
$.fn[NAME$7].noConflict=function (){
$.fn[NAME$7]=JQUERY_NO_CONFLICT$7;
return Popover._jQueryInterface;
};
var NAME$8='scrollspy';
var VERSION$8='4.5.0';
var DATA_KEY$8='bs.scrollspy';
var EVENT_KEY$8="." + DATA_KEY$8;
var DATA_API_KEY$6='.data-api';
var JQUERY_NO_CONFLICT$8=$.fn[NAME$8];
var Default$6={
offset: 10,
method: 'auto',
target: ''
};
var DefaultType$6={
offset: 'number',
method: 'string',
target: '(string|element)'
};
var EVENT_ACTIVATE="activate" + EVENT_KEY$8;
var EVENT_SCROLL="scroll" + EVENT_KEY$8;
var EVENT_LOAD_DATA_API$2="load" + EVENT_KEY$8 + DATA_API_KEY$6;
var CLASS_NAME_DROPDOWN_ITEM='dropdown-item';
var CLASS_NAME_ACTIVE$2='active';
var SELECTOR_DATA_SPY='[data-spy="scroll"]';
var SELECTOR_NAV_LIST_GROUP='.nav, .list-group';
var SELECTOR_NAV_LINKS='.nav-link';
var SELECTOR_NAV_ITEMS='.nav-item';
var SELECTOR_LIST_ITEMS='.list-group-item';
var SELECTOR_DROPDOWN='.dropdown';
var SELECTOR_DROPDOWN_ITEMS='.dropdown-item';
var SELECTOR_DROPDOWN_TOGGLE='.dropdown-toggle';
var METHOD_OFFSET='offset';
var METHOD_POSITION='position';
var ScrollSpy=function (){
function ScrollSpy(element, config){
var _this=this;
this._element=element;
this._scrollElement=element.tagName==='BODY' ? window:element;
this._config=this._getConfig(config);
this._selector=this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
this._offsets=[];
this._targets=[];
this._activeTarget=null;
this._scrollHeight=0;
$(this._scrollElement).on(EVENT_SCROLL, function (event){
return _this._process(event);
});
this.refresh();
this._process();
}
var _proto=ScrollSpy.prototype;
_proto.refresh=function refresh(){
var _this2=this;
var autoMethod=this._scrollElement===this._scrollElement.window ? METHOD_OFFSET:METHOD_POSITION;
var offsetMethod=this._config.method==='auto' ? autoMethod:this._config.method;
var offsetBase=offsetMethod===METHOD_POSITION ? this._getScrollTop():0;
this._offsets=[];
this._targets=[];
this._scrollHeight=this._getScrollHeight();
var targets=[].slice.call(document.querySelectorAll(this._selector));
targets.map(function (element){
var target;
var targetSelector=Util.getSelectorFromElement(element);
if(targetSelector){
target=document.querySelector(targetSelector);
}
if(target){
var targetBCR=target.getBoundingClientRect();
if(targetBCR.width||targetBCR.height){
return [$(target)[offsetMethod]().top + offsetBase, targetSelector];
}}
return null;
}).filter(function (item){
return item;
}).sort(function (a, b){
return a[0] - b[0];
}).forEach(function (item){
_this2._offsets.push(item[0]);
_this2._targets.push(item[1]);
});
};
_proto.dispose=function dispose(){
$.removeData(this._element, DATA_KEY$8);
$(this._scrollElement).off(EVENT_KEY$8);
this._element=null;
this._scrollElement=null;
this._config=null;
this._selector=null;
this._offsets=null;
this._targets=null;
this._activeTarget=null;
this._scrollHeight=null;
}
;
_proto._getConfig=function _getConfig(config){
config=_objectSpread2(_objectSpread2({}, Default$6), typeof config==='object'&&config ? config:{});
if(typeof config.target!=='string'&&Util.isElement(config.target)){
var id=$(config.target).attr('id');
if(!id){
id=Util.getUID(NAME$8);
$(config.target).attr('id', id);
}
config.target="#" + id;
}
Util.typeCheckConfig(NAME$8, config, DefaultType$6);
return config;
};
_proto._getScrollTop=function _getScrollTop(){
return this._scrollElement===window ? this._scrollElement.pageYOffset:this._scrollElement.scrollTop;
};
_proto._getScrollHeight=function _getScrollHeight(){
return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
};
_proto._getOffsetHeight=function _getOffsetHeight(){
return this._scrollElement===window ? window.innerHeight:this._scrollElement.getBoundingClientRect().height;
};
_proto._process=function _process(){
var scrollTop=this._getScrollTop() + this._config.offset;
var scrollHeight=this._getScrollHeight();
var maxScroll=this._config.offset + scrollHeight - this._getOffsetHeight();
if(this._scrollHeight!==scrollHeight){
this.refresh();
}
if(scrollTop >=maxScroll){
var target=this._targets[this._targets.length - 1];
if(this._activeTarget!==target){
this._activate(target);
}
return;
}
if(this._activeTarget&&scrollTop < this._offsets[0]&&this._offsets[0] > 0){
this._activeTarget=null;
this._clear();
return;
}
for (var i=this._offsets.length; i--;){
var isActiveTarget=this._activeTarget!==this._targets[i]&&scrollTop >=this._offsets[i]&&(typeof this._offsets[i + 1]==='undefined'||scrollTop < this._offsets[i + 1]);
if(isActiveTarget){
this._activate(this._targets[i]);
}}
};
_proto._activate=function _activate(target){
this._activeTarget=target;
this._clear();
var queries=this._selector.split(',').map(function (selector){
return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
});
var $link=$([].slice.call(document.querySelectorAll(queries.join(','))));
if($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)){
$link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);
$link.addClass(CLASS_NAME_ACTIVE$2);
}else{
$link.addClass(CLASS_NAME_ACTIVE$2);
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2);
$link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);
}
$(this._scrollElement).trigger(EVENT_ACTIVATE, {
relatedTarget: target
});
};
_proto._clear=function _clear(){
[].slice.call(document.querySelectorAll(this._selector)).filter(function (node){
return node.classList.contains(CLASS_NAME_ACTIVE$2);
}).forEach(function (node){
return node.classList.remove(CLASS_NAME_ACTIVE$2);
});
}
;
ScrollSpy._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var data=$(this).data(DATA_KEY$8);
var _config=typeof config==='object'&&config;
if(!data){
data=new ScrollSpy(this, _config);
$(this).data(DATA_KEY$8, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}});
};
_createClass(ScrollSpy, null, [{
key: "VERSION",
get: function get(){
return VERSION$8;
}}, {
key: "Default",
get: function get(){
return Default$6;
}}]);
return ScrollSpy;
}();
$(window).on(EVENT_LOAD_DATA_API$2, function (){
var scrollSpys=[].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
var scrollSpysLength=scrollSpys.length;
for (var i=scrollSpysLength; i--;){
var $spy=$(scrollSpys[i]);
ScrollSpy._jQueryInterface.call($spy, $spy.data());
}});
$.fn[NAME$8]=ScrollSpy._jQueryInterface;
$.fn[NAME$8].Constructor=ScrollSpy;
$.fn[NAME$8].noConflict=function (){
$.fn[NAME$8]=JQUERY_NO_CONFLICT$8;
return ScrollSpy._jQueryInterface;
};
var NAME$9='tab';
var VERSION$9='4.5.0';
var DATA_KEY$9='bs.tab';
var EVENT_KEY$9="." + DATA_KEY$9;
var DATA_API_KEY$7='.data-api';
var JQUERY_NO_CONFLICT$9=$.fn[NAME$9];
var EVENT_HIDE$3="hide" + EVENT_KEY$9;
var EVENT_HIDDEN$3="hidden" + EVENT_KEY$9;
var EVENT_SHOW$3="show" + EVENT_KEY$9;
var EVENT_SHOWN$3="shown" + EVENT_KEY$9;
var EVENT_CLICK_DATA_API$6="click" + EVENT_KEY$9 + DATA_API_KEY$7;
var CLASS_NAME_DROPDOWN_MENU='dropdown-menu';
var CLASS_NAME_ACTIVE$3='active';
var CLASS_NAME_DISABLED$1='disabled';
var CLASS_NAME_FADE$4='fade';
var CLASS_NAME_SHOW$6='show';
var SELECTOR_DROPDOWN$1='.dropdown';
var SELECTOR_NAV_LIST_GROUP$1='.nav, .list-group';
var SELECTOR_ACTIVE$2='.active';
var SELECTOR_ACTIVE_UL='> li > .active';
var SELECTOR_DATA_TOGGLE$4='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
var SELECTOR_DROPDOWN_TOGGLE$1='.dropdown-toggle';
var SELECTOR_DROPDOWN_ACTIVE_CHILD='> .dropdown-menu .active';
var Tab=function (){
function Tab(element){
this._element=element;
}
var _proto=Tab.prototype;
_proto.show=function show(){
var _this=this;
if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&$(this._element).hasClass(CLASS_NAME_ACTIVE$3)||$(this._element).hasClass(CLASS_NAME_DISABLED$1)){
return;
}
var target;
var previous;
var listElement=$(this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];
var selector=Util.getSelectorFromElement(this._element);
if(listElement){
var itemSelector=listElement.nodeName==='UL'||listElement.nodeName==='OL' ? SELECTOR_ACTIVE_UL:SELECTOR_ACTIVE$2;
previous=$.makeArray($(listElement).find(itemSelector));
previous=previous[previous.length - 1];
}
var hideEvent=$.Event(EVENT_HIDE$3, {
relatedTarget: this._element
});
var showEvent=$.Event(EVENT_SHOW$3, {
relatedTarget: previous
});
if(previous){
$(previous).trigger(hideEvent);
}
$(this._element).trigger(showEvent);
if(showEvent.isDefaultPrevented()||hideEvent.isDefaultPrevented()){
return;
}
if(selector){
target=document.querySelector(selector);
}
this._activate(this._element, listElement);
var complete=function complete(){
var hiddenEvent=$.Event(EVENT_HIDDEN$3, {
relatedTarget: _this._element
});
var shownEvent=$.Event(EVENT_SHOWN$3, {
relatedTarget: previous
});
$(previous).trigger(hiddenEvent);
$(_this._element).trigger(shownEvent);
};
if(target){
this._activate(target, target.parentNode, complete);
}else{
complete();
}};
_proto.dispose=function dispose(){
$.removeData(this._element, DATA_KEY$9);
this._element=null;
}
;
_proto._activate=function _activate(element, container, callback){
var _this2=this;
var activeElements=container&&(container.nodeName==='UL'||container.nodeName==='OL') ? $(container).find(SELECTOR_ACTIVE_UL):$(container).children(SELECTOR_ACTIVE$2);
var active=activeElements[0];
var isTransitioning=callback&&active&&$(active).hasClass(CLASS_NAME_FADE$4);
var complete=function complete(){
return _this2._transitionComplete(element, active, callback);
};
if(active&&isTransitioning){
var transitionDuration=Util.getTransitionDurationFromElement(active);
$(active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
}else{
complete();
}};
_proto._transitionComplete=function _transitionComplete(element, active, callback){
if(active){
$(active).removeClass(CLASS_NAME_ACTIVE$3);
var dropdownChild=$(active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
if(dropdownChild){
$(dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);
}
if(active.getAttribute('role')==='tab'){
active.setAttribute('aria-selected', false);
}}
$(element).addClass(CLASS_NAME_ACTIVE$3);
if(element.getAttribute('role')==='tab'){
element.setAttribute('aria-selected', true);
}
Util.reflow(element);
if(element.classList.contains(CLASS_NAME_FADE$4)){
element.classList.add(CLASS_NAME_SHOW$6);
}
if(element.parentNode&&$(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)){
var dropdownElement=$(element).closest(SELECTOR_DROPDOWN$1)[0];
if(dropdownElement){
var dropdownToggleList=[].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));
$(dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);
}
element.setAttribute('aria-expanded', true);
}
if(callback){
callback();
}}
;
Tab._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var $this=$(this);
var data=$this.data(DATA_KEY$9);
if(!data){
data=new Tab(this);
$this.data(DATA_KEY$9, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config]();
}});
};
_createClass(Tab, null, [{
key: "VERSION",
get: function get(){
return VERSION$9;
}}]);
return Tab;
}();
$(document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event){
event.preventDefault();
Tab._jQueryInterface.call($(this), 'show');
});
$.fn[NAME$9]=Tab._jQueryInterface;
$.fn[NAME$9].Constructor=Tab;
$.fn[NAME$9].noConflict=function (){
$.fn[NAME$9]=JQUERY_NO_CONFLICT$9;
return Tab._jQueryInterface;
};
var NAME$a='toast';
var VERSION$a='4.5.0';
var DATA_KEY$a='bs.toast';
var EVENT_KEY$a="." + DATA_KEY$a;
var JQUERY_NO_CONFLICT$a=$.fn[NAME$a];
var EVENT_CLICK_DISMISS$1="click.dismiss" + EVENT_KEY$a;
var EVENT_HIDE$4="hide" + EVENT_KEY$a;
var EVENT_HIDDEN$4="hidden" + EVENT_KEY$a;
var EVENT_SHOW$4="show" + EVENT_KEY$a;
var EVENT_SHOWN$4="shown" + EVENT_KEY$a;
var CLASS_NAME_FADE$5='fade';
var CLASS_NAME_HIDE='hide';
var CLASS_NAME_SHOW$7='show';
var CLASS_NAME_SHOWING='showing';
var DefaultType$7={
animation: 'boolean',
autohide: 'boolean',
delay: 'number'
};
var Default$7={
animation: true,
autohide: true,
delay: 500
};
var SELECTOR_DATA_DISMISS$1='[data-dismiss="toast"]';
var Toast=function (){
function Toast(element, config){
this._element=element;
this._config=this._getConfig(config);
this._timeout=null;
this._setListeners();
}
var _proto=Toast.prototype;
_proto.show=function show(){
var _this=this;
var showEvent=$.Event(EVENT_SHOW$4);
$(this._element).trigger(showEvent);
if(showEvent.isDefaultPrevented()){
return;
}
if(this._config.animation){
this._element.classList.add(CLASS_NAME_FADE$5);
}
var complete=function complete(){
_this._element.classList.remove(CLASS_NAME_SHOWING);
_this._element.classList.add(CLASS_NAME_SHOW$7);
$(_this._element).trigger(EVENT_SHOWN$4);
if(_this._config.autohide){
_this._timeout=setTimeout(function (){
_this.hide();
}, _this._config.delay);
}};
this._element.classList.remove(CLASS_NAME_HIDE);
Util.reflow(this._element);
this._element.classList.add(CLASS_NAME_SHOWING);
if(this._config.animation){
var transitionDuration=Util.getTransitionDurationFromElement(this._element);
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
}else{
complete();
}};
_proto.hide=function hide(){
if(!this._element.classList.contains(CLASS_NAME_SHOW$7)){
return;
}
var hideEvent=$.Event(EVENT_HIDE$4);
$(this._element).trigger(hideEvent);
if(hideEvent.isDefaultPrevented()){
return;
}
this._close();
};
_proto.dispose=function dispose(){
clearTimeout(this._timeout);
this._timeout=null;
if(this._element.classList.contains(CLASS_NAME_SHOW$7)){
this._element.classList.remove(CLASS_NAME_SHOW$7);
}
$(this._element).off(EVENT_CLICK_DISMISS$1);
$.removeData(this._element, DATA_KEY$a);
this._element=null;
this._config=null;
}
;
_proto._getConfig=function _getConfig(config){
config=_objectSpread2(_objectSpread2(_objectSpread2({}, Default$7), $(this._element).data()), typeof config==='object'&&config ? config:{});
Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);
return config;
};
_proto._setListeners=function _setListeners(){
var _this2=this;
$(this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (){
return _this2.hide();
});
};
_proto._close=function _close(){
var _this3=this;
var complete=function complete(){
_this3._element.classList.add(CLASS_NAME_HIDE);
$(_this3._element).trigger(EVENT_HIDDEN$4);
};
this._element.classList.remove(CLASS_NAME_SHOW$7);
if(this._config.animation){
var transitionDuration=Util.getTransitionDurationFromElement(this._element);
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
}else{
complete();
}}
;
Toast._jQueryInterface=function _jQueryInterface(config){
return this.each(function (){
var $element=$(this);
var data=$element.data(DATA_KEY$a);
var _config=typeof config==='object'&&config;
if(!data){
data=new Toast(this, _config);
$element.data(DATA_KEY$a, data);
}
if(typeof config==='string'){
if(typeof data[config]==='undefined'){
throw new TypeError("No method named \"" + config + "\"");
}
data[config](this);
}});
};
_createClass(Toast, null, [{
key: "VERSION",
get: function get(){
return VERSION$a;
}}, {
key: "DefaultType",
get: function get(){
return DefaultType$7;
}}, {
key: "Default",
get: function get(){
return Default$7;
}}]);
return Toast;
}();
$.fn[NAME$a]=Toast._jQueryInterface;
$.fn[NAME$a].Constructor=Toast;
$.fn[NAME$a].noConflict=function (){
$.fn[NAME$a]=JQUERY_NO_CONFLICT$a;
return Toast._jQueryInterface;
};
exports.Alert=Alert;
exports.Button=Button;
exports.Carousel=Carousel;
exports.Collapse=Collapse;
exports.Dropdown=Dropdown;
exports.Modal=Modal;
exports.Popover=Popover;
exports.Scrollspy=ScrollSpy;
exports.Tab=Tab;
exports.Toast=Toast;
exports.Tooltip=Tooltip;
exports.Util=Util;
Object.defineProperty(exports, '__esModule', { value: true });
})));
if(typeof Object.create!=='function'){
Object.create=function(obj){
function F(){};
F.prototype=obj;
return new F();
};}
(function($, window, document, undefined){
var ElevateZoom={
init: function(options, elem){
var self=this;
self.elem=elem;
self.$elem=$(elem);
self.imageSrc=self.$elem.data("zoom-image") ? self.$elem.data("zoom-image"):self.$elem.attr("src");
self.options=$.extend({}, $.fn.elevateZoom.options, options);
if(self.options.tint){
self.options.lensColour="none",
self.options.lensOpacity="1"
}
if(self.options.zoomType=="inner"){self.options.showLens=false;}
self.$elem.parent().removeAttr('title').removeAttr('alt');
self.zoomImage=self.imageSrc;
self.refresh(1);
$('#'+self.options.gallery + ' a').click(function(e){
if(self.options.galleryActiveClass){
$('#'+self.options.gallery + ' a').removeClass(self.options.galleryActiveClass);
$(this).addClass(self.options.galleryActiveClass);
}
e.preventDefault();
if($(this).data("zoom-image")){self.zoomImagePre=$(this).data("zoom-image")}else{self.zoomImagePre=$(this).data("image");}
self.swaptheimage($(this).data("image"), self.zoomImagePre);
return false;
});
},
refresh: function(length){
var self=this;
setTimeout(function(){
self.fetch(self.imageSrc);
}, length||self.options.refresh);
},
fetch: function(imgsrc){
var self=this;
var newImg=new Image();
newImg.onload=function(){
self.largeWidth=newImg.width;
self.largeHeight=newImg.height;
self.startZoom();
self.currentImage=self.imageSrc;
self.options.onZoomedImageLoaded(self.$elem);
}
newImg.src=imgsrc;
return;
},
startZoom: function(){
var self=this;
self.nzWidth=self.$elem.width();
self.nzHeight=self.$elem.height();
self.isWindowActive=false;
self.isLensActive=false;
self.isTintActive=false;
self.overWindow=false;
if(self.options.imageCrossfade){
self.zoomWrap=self.$elem.wrap('<div style="height:'+self.nzHeight+'px;width:'+self.nzWidth+'px;" class="zoomWrapper" />');
self.$elem.css('position', 'absolute');
}
self.zoomLock=1;
self.scrollingLock=false;
self.changeBgSize=false;
self.currentZoomLevel=self.options.zoomLevel;
self.nzOffset=self.$elem.offset();
self.widthRatio=(self.largeWidth/self.currentZoomLevel) / self.nzWidth;
self.heightRatio=(self.largeHeight/self.currentZoomLevel) / self.nzHeight;
if(self.options.zoomType=="window"){
self.zoomWindowStyle="overflow: hidden;"
+ "background-position: 0px 0px;text-align:center;"
+ "background-color: " + String(self.options.zoomWindowBgColour)
+ ";width: " + String(self.options.zoomWindowWidth) + "px;"
+ "height: " + String(self.options.zoomWindowHeight)
+ "px;float: left;"
+ "background-size: "+ self.largeWidth/self.currentZoomLevel+ "px " +self.largeHeight/self.currentZoomLevel + "px;"
+ "display: none;z-index:100;"
+ "border: " + String(self.options.borderSize)
+ "px solid " + self.options.borderColour
+ ";background-repeat: no-repeat;"
+ "position: absolute;";
}
if(self.options.zoomType=="inner"){
var borderWidth=self.$elem.css("border-left-width");
self.zoomWindowStyle="overflow: hidden;"
+ "margin-left: " + String(borderWidth) + ";"
+ "margin-top: " + String(borderWidth) + ";"
+ "background-position: 0px 0px;"
+ "width: " + String(self.nzWidth) + "px;"
+ "height: " + String(self.nzHeight) + "px;"
+ "px;float: left;"
+ "display: none;"
+ "cursor:"+(self.options.cursor)+";"
+ "px solid " + self.options.borderColour
+ ";background-repeat: no-repeat;"
+ "position: absolute;";
}
if(self.options.zoomType=="window"){
if(self.nzHeight < self.options.zoomWindowWidth/self.widthRatio){
lensHeight=self.nzHeight;
}else{
lensHeight=String((self.options.zoomWindowHeight/self.heightRatio))
}
if(self.largeWidth < self.options.zoomWindowWidth){
lensWidth=self.nzWidth;
}else{
lensWidth=(self.options.zoomWindowWidth/self.widthRatio);
}
self.lensStyle="background-position: 0px 0px;width: " + String((self.options.zoomWindowWidth)/self.widthRatio) + "px;height: " + String((self.options.zoomWindowHeight)/self.heightRatio)
+ "px;float: right;display: none;"
+ "overflow: hidden;"
+ "z-index: 999;"
+ "-webkit-transform: translateZ(0);"
+ "opacity:"+(self.options.lensOpacity)+";filter: alpha(opacity="+(self.options.lensOpacity*100)+"); zoom:1;"
+ "width:"+lensWidth+"px;"
+ "height:"+lensHeight+"px;"
+ "background-color:"+(self.options.lensColour)+";"
+ "cursor:"+(self.options.cursor)+";"
+ "border: "+(self.options.lensBorderSize)+"px" +
" solid "+(self.options.lensBorderColour)+";background-repeat: no-repeat;position: absolute;";
}
self.tintStyle="display: block;"
+ "position: absolute;"
+ "background-color: "+self.options.tintColour+";"
+ "filter:alpha(opacity=0);"
+ "opacity: 0;"
+ "width: " + self.nzWidth + "px;"
+ "height: " + self.nzHeight + "px;"
;
self.lensRound='';
if(self.options.zoomType=="lens"){
self.lensStyle="background-position: 0px 0px;"
+ "float: left;display: none;"
+ "border: " + String(self.options.borderSize) + "px solid " + self.options.borderColour+";"
+ "width:"+ String(self.options.lensSize) +"px;"
+ "height:"+ String(self.options.lensSize)+"px;"
+ "background-repeat: no-repeat;position: absolute;";
}
if(self.options.lensShape=="round"){
self.lensRound="border-top-left-radius: " + String(self.options.lensSize / 2 + self.options.borderSize) + "px;"
+ "border-top-right-radius: " + String(self.options.lensSize / 2 + self.options.borderSize) + "px;"
+ "border-bottom-left-radius: " + String(self.options.lensSize / 2 + self.options.borderSize) + "px;"
+ "border-bottom-right-radius: " + String(self.options.lensSize / 2 + self.options.borderSize) + "px;";
}
self.zoomContainer=$('<div class="zoomContainer" style="-webkit-transform: translateZ(0);position:absolute;left:'+self.nzOffset.left+'px;top:'+self.nzOffset.top+'px;height:'+self.nzHeight+'px;width:'+self.nzWidth+'px;"></div>');
$('body').append(self.zoomContainer);
if(self.options.containLensZoom&&self.options.zoomType=="lens"){
self.zoomContainer.css("overflow", "hidden");
}
if(self.options.zoomType!="inner"){
self.zoomLens=$("<div class='zoomLens' style='" + self.lensStyle + self.lensRound +"'>&nbsp;</div>")
.appendTo(self.zoomContainer)
.click(function (){
self.$elem.trigger('click');
});
if(self.options.tint){
self.tintContainer=$('<div/>').addClass('tintContainer');
self.zoomTint=$("<div class='zoomTint' style='"+self.tintStyle+"'></div>");
self.zoomLens.wrap(self.tintContainer);
self.zoomTintcss=self.zoomLens.after(self.zoomTint);
self.zoomTintImage=$('<img style="position: absolute; left: 0px; top: 0px; max-width: none; width: '+self.nzWidth+'px; height: '+self.nzHeight+'px;" src="'+self.imageSrc+'">')
.appendTo(self.zoomLens)
.click(function (){
self.$elem.trigger('click');
});
}}
if(isNaN(self.options.zoomWindowPosition)){
self.zoomWindow=$("<div style='z-index:999;left:"+(self.windowOffsetLeft)+"px;top:"+(self.windowOffsetTop)+"px;" + self.zoomWindowStyle + "' class='zoomWindow'>&nbsp;</div>")
.appendTo('body')
.click(function (){
self.$elem.trigger('click');
});
}else{
self.zoomWindow=$("<div style='z-index:999;left:"+(self.windowOffsetLeft)+"px;top:"+(self.windowOffsetTop)+"px;" + self.zoomWindowStyle + "' class='zoomWindow'>&nbsp;</div>")
.appendTo(self.zoomContainer)
.click(function (){
self.$elem.trigger('click');
});
}
self.zoomWindowContainer=$('<div/>').addClass('zoomWindowContainer').css("width",self.options.zoomWindowWidth);
self.zoomWindow.wrap(self.zoomWindowContainer);
if(self.options.zoomType=="lens"){
self.zoomLens.css({ backgroundImage: "url('" + self.imageSrc + "')" });
}
if(self.options.zoomType=="window"){
self.zoomWindow.css({ backgroundImage: "url('" + self.imageSrc + "')" });
}
if(self.options.zoomType=="inner"){
self.zoomWindow.css({ backgroundImage: "url('" + self.imageSrc + "')" });
}
self.$elem.bind('touchmove', function(e){
e.preventDefault();
var touch=e.originalEvent.touches[0]||e.originalEvent.changedTouches[0];
self.setPosition(touch);
});
self.zoomContainer.bind('touchmove', function(e){
if(self.options.zoomType=="inner"){
self.showHideWindow("show");
}
e.preventDefault();
var touch=e.originalEvent.touches[0]||e.originalEvent.changedTouches[0];
self.setPosition(touch);
});
self.zoomContainer.bind('touchend', function(e){
self.showHideWindow("hide");
if(self.options.showLens){self.showHideLens("hide");}
if(self.options.tint&&self.options.zoomType!="inner"){self.showHideTint("hide");}});
self.$elem.bind('touchend', function(e){
self.showHideWindow("hide");
if(self.options.showLens){self.showHideLens("hide");}
if(self.options.tint&&self.options.zoomType!="inner"){self.showHideTint("hide");}});
if(self.options.showLens){
self.zoomLens.bind('touchmove', function(e){
e.preventDefault();
var touch=e.originalEvent.touches[0]||e.originalEvent.changedTouches[0];
self.setPosition(touch);
});
self.zoomLens.bind('touchend', function(e){
self.showHideWindow("hide");
if(self.options.showLens){self.showHideLens("hide");}
if(self.options.tint&&self.options.zoomType!="inner"){self.showHideTint("hide");}});
}
self.$elem.bind('mousemove', function(e){
if(self.overWindow==false){self.setElements("show");}
if(self.lastX!==e.clientX||self.lastY!==e.clientY){
self.setPosition(e);
self.currentLoc=e;
}
self.lastX=e.clientX;
self.lastY=e.clientY;
});
self.zoomContainer.bind('mousemove', function(e){
if(self.overWindow==false){self.setElements("show");}
if(self.lastX!==e.clientX||self.lastY!==e.clientY){
self.setPosition(e);
self.currentLoc=e;
}
self.lastX=e.clientX;
self.lastY=e.clientY;
});
if(self.options.zoomType!="inner"){
self.zoomLens.bind('mousemove', function(e){
if(self.lastX!==e.clientX||self.lastY!==e.clientY){
self.setPosition(e);
self.currentLoc=e;
}
self.lastX=e.clientX;
self.lastY=e.clientY;
});
}
if(self.options.tint&&self.options.zoomType!="inner"){
self.zoomTint.bind('mousemove', function(e){
if(self.lastX!==e.clientX||self.lastY!==e.clientY){
self.setPosition(e);
self.currentLoc=e;
}
self.lastX=e.clientX;
self.lastY=e.clientY;
});
}
if(self.options.zoomType=="inner"){
self.zoomWindow.bind('mousemove', function(e){
if(self.lastX!==e.clientX||self.lastY!==e.clientY){
self.setPosition(e);
self.currentLoc=e;
}
self.lastX=e.clientX;
self.lastY=e.clientY;
});
}
self.zoomContainer.add(self.$elem).mouseenter(function(){
if(self.overWindow==false){self.setElements("show");}}).mouseleave(function(){
if(!self.scrollLock){
self.setElements("hide");
self.options.onDestroy(self.$elem);
}});
if(self.options.zoomType!="inner"){
self.zoomWindow.mouseenter(function(){
self.overWindow=true;
self.setElements("hide");
}).mouseleave(function(){
self.overWindow=false;
});
}
if(self.options.zoomLevel!=1){
}
if(self.options.minZoomLevel){
self.minZoomLevel=self.options.minZoomLevel;
}else{
self.minZoomLevel=self.options.scrollZoomIncrement * 2;
}
if(self.options.scrollZoom){
self.zoomContainer.add(self.$elem).bind('mousewheel DOMMouseScroll MozMousePixelScroll', function(e){
self.scrollLock=true;
clearTimeout($.data(this, 'timer'));
$.data(this, 'timer', setTimeout(function(){
self.scrollLock=false;
}, 250));
var theEvent=e.originalEvent.wheelDelta||e.originalEvent.detail*-1
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
if(theEvent /120 > 0){
if(self.currentZoomLevel >=self.minZoomLevel){
self.changeZoomLevel(self.currentZoomLevel-self.options.scrollZoomIncrement);
}}else{
if(self.options.maxZoomLevel){
if(self.currentZoomLevel <=self.options.maxZoomLevel){
self.changeZoomLevel(parseFloat(self.currentZoomLevel)+self.options.scrollZoomIncrement);
}}else{
self.changeZoomLevel(parseFloat(self.currentZoomLevel)+self.options.scrollZoomIncrement);
}}
return false;
});
}},
setElements: function(type){
var self=this;
if(!self.options.zoomEnabled){return false;}
if(type=="show"){
if(self.isWindowSet){
if(self.options.zoomType=="inner"){self.showHideWindow("show");}
if(self.options.zoomType=="window"){self.showHideWindow("show");}
if(self.options.showLens){self.showHideLens("show");}
if(self.options.tint&&self.options.zoomType!="inner"){self.showHideTint("show");
}}
}
if(type=="hide"){
if(self.options.zoomType=="window"){self.showHideWindow("hide");}
if(!self.options.tint){self.showHideWindow("hide");}
if(self.options.showLens){self.showHideLens("hide");}
if(self.options.tint){	self.showHideTint("hide");}}
},
setPosition: function(e){
var self=this;
if(!self.options.zoomEnabled){return false;}
self.nzHeight=self.$elem.height();
self.nzWidth=self.$elem.width();
self.nzOffset=self.$elem.offset();
if(self.options.tint&&self.options.zoomType!="inner"){
self.zoomTint.css({ top: 0});
self.zoomTint.css({ left: 0});
}
if(self.options.responsive&&!self.options.scrollZoom){
if(self.options.showLens){
if(self.nzHeight < self.options.zoomWindowWidth/self.widthRatio){
lensHeight=self.nzHeight;
}else{
lensHeight=String((self.options.zoomWindowHeight/self.heightRatio))
}
if(self.largeWidth < self.options.zoomWindowWidth){
lensWidth=self.nzWidth;
}else{
lensWidth=(self.options.zoomWindowWidth/self.widthRatio);
}
self.widthRatio=self.largeWidth / self.nzWidth;
self.heightRatio=self.largeHeight / self.nzHeight;
if(self.options.zoomType!="lens"){
if(self.nzHeight < self.options.zoomWindowWidth/self.widthRatio){
lensHeight=self.nzHeight;
}else{
lensHeight=String((self.options.zoomWindowHeight/self.heightRatio))
}
if(self.nzWidth < self.options.zoomWindowHeight/self.heightRatio){
lensWidth=self.nzWidth;
}else{
lensWidth=String((self.options.zoomWindowWidth/self.widthRatio));
}
self.zoomLens.css('width', lensWidth);
self.zoomLens.css('height', lensHeight);
if(self.options.tint){
self.zoomTintImage.css('width', self.nzWidth);
self.zoomTintImage.css('height', self.nzHeight);
}}
if(self.options.zoomType=="lens"){
self.zoomLens.css({ width: String(self.options.lensSize) + 'px', height: String(self.options.lensSize) + 'px' })
}}
}
self.zoomContainer.css({ top: self.nzOffset.top});
self.zoomContainer.css({ left: self.nzOffset.left});
self.mouseLeft=parseInt(e.pageX - self.nzOffset.left);
self.mouseTop=parseInt(e.pageY - self.nzOffset.top);
if(self.options.zoomType=="window"){
self.Etoppos=(self.mouseTop < (self.zoomLens.height()/2));
self.Eboppos=(self.mouseTop > self.nzHeight - (self.zoomLens.height()/2)-(self.options.lensBorderSize*2));
self.Eloppos=(self.mouseLeft < 0+((self.zoomLens.width()/2)));
self.Eroppos=(self.mouseLeft > (self.nzWidth - (self.zoomLens.width()/2)-(self.options.lensBorderSize*2)));
}
if(self.options.zoomType=="inner"){
self.Etoppos=(self.mouseTop < ((self.nzHeight/2)/self.heightRatio));
self.Eboppos=(self.mouseTop > (self.nzHeight - ((self.nzHeight/2)/self.heightRatio)));
self.Eloppos=(self.mouseLeft < 0+(((self.nzWidth/2)/self.widthRatio)));
self.Eroppos=(self.mouseLeft > (self.nzWidth - (self.nzWidth/2)/self.widthRatio-(self.options.lensBorderSize*2)));
}
if(self.mouseLeft < 0||self.mouseTop < 0||self.mouseLeft > self.nzWidth||self.mouseTop > self.nzHeight){
self.setElements("hide");
return;
}else{
if(self.options.showLens){
self.lensLeftPos=String(Math.floor(self.mouseLeft - self.zoomLens.width() / 2));
self.lensTopPos=String(Math.floor(self.mouseTop - self.zoomLens.height() / 2));
}
if(self.Etoppos){
self.lensTopPos=0;
}
if(self.Eloppos){
self.windowLeftPos=0;
self.lensLeftPos=0;
self.tintpos=0;
}
if(self.options.zoomType=="window"){
if(self.Eboppos){
self.lensTopPos=Math.max((self.nzHeight)-self.zoomLens.height()-(self.options.lensBorderSize*2), 0);
}
if(self.Eroppos){
self.lensLeftPos=(self.nzWidth-(self.zoomLens.width())-(self.options.lensBorderSize*2));
}}
if(self.options.zoomType=="inner"){
if(self.Eboppos){
self.lensTopPos=Math.max(((self.nzHeight)-(self.options.lensBorderSize*2)), 0);
}
if(self.Eroppos){
self.lensLeftPos=(self.nzWidth-(self.nzWidth)-(self.options.lensBorderSize*2));
}}
if(self.options.zoomType=="lens"){
self.windowLeftPos=String(((e.pageX - self.nzOffset.left) * self.widthRatio - self.zoomLens.width() / 2) * (-1));
self.windowTopPos=String(((e.pageY - self.nzOffset.top) * self.heightRatio - self.zoomLens.height() / 2) * (-1));
self.zoomLens.css({ backgroundPosition: self.windowLeftPos + 'px ' + self.windowTopPos + 'px' });
if(self.changeBgSize){
if(self.nzHeight>self.nzWidth){
if(self.options.zoomType=="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}else{
if(self.options.zoomType=="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvaluewidth + 'px' });
}
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvaluewidth + 'px' });
}
self.changeBgSize=false;
}
self.setWindowPostition(e);
}
if(self.options.tint&&self.options.zoomType!="inner"){
self.setTintPosition(e);
}
if(self.options.zoomType=="window"){
self.setWindowPostition(e);
}
if(self.options.zoomType=="inner"){
self.setWindowPostition(e);
}
if(self.options.showLens){
if(self.fullwidth&&self.options.zoomType!="lens"){
self.lensLeftPos=0;
}
self.zoomLens.css({ left: self.lensLeftPos + 'px', top: self.lensTopPos + 'px' })
}}
},
showHideWindow: function(change){
var self=this;
if(change=="show"){
if(!self.isWindowActive){
if(self.options.zoomWindowFadeIn){
self.zoomWindow.stop(true, true, false).fadeIn(self.options.zoomWindowFadeIn);
}else{self.zoomWindow.show();}
self.isWindowActive=true;
}}
if(change=="hide"){
if(self.isWindowActive){
if(self.options.zoomWindowFadeOut){
self.zoomWindow.stop(true, true).fadeOut(self.options.zoomWindowFadeOut, function (){
if(self.loop){
clearInterval(self.loop);
self.loop=false;
}});
}else{self.zoomWindow.hide();}
self.isWindowActive=false;
}}
},
showHideLens: function(change){
var self=this;
if(change=="show"){
if(!self.isLensActive){
if(self.options.lensFadeIn){
self.zoomLens.stop(true, true, false).fadeIn(self.options.lensFadeIn);
}else{self.zoomLens.show();}
self.isLensActive=true;
}}
if(change=="hide"){
if(self.isLensActive){
if(self.options.lensFadeOut){
self.zoomLens.stop(true, true).fadeOut(self.options.lensFadeOut);
}else{self.zoomLens.hide();}
self.isLensActive=false;
}}
},
showHideTint: function(change){
var self=this;
if(change=="show"){
if(!self.isTintActive){
if(self.options.zoomTintFadeIn){
self.zoomTint.css({opacity:self.options.tintOpacity}).animate().stop(true, true).fadeIn("slow");
}else{
self.zoomTint.css({opacity:self.options.tintOpacity}).animate();
self.zoomTint.show();
}
self.isTintActive=true;
}}
if(change=="hide"){
if(self.isTintActive){
if(self.options.zoomTintFadeOut){
self.zoomTint.stop(true, true).fadeOut(self.options.zoomTintFadeOut);
}else{self.zoomTint.hide();}
self.isTintActive=false;
}}
},
setLensPostition: function(e){
},
setWindowPostition: function(e){
var self=this;
if(!isNaN(self.options.zoomWindowPosition)){
switch (self.options.zoomWindowPosition){
case 1:
self.windowOffsetTop=(self.options.zoomWindowOffety);
self.windowOffsetLeft=(+self.nzWidth);
break;
case 2:
if(self.options.zoomWindowHeight > self.nzHeight){
self.windowOffsetTop=((self.options.zoomWindowHeight/2)-(self.nzHeight/2))*(-1);
self.windowOffsetLeft=(self.nzWidth);
}else{
}
break;
case 3:
self.windowOffsetTop=(self.nzHeight - self.zoomWindow.height() - (self.options.borderSize*2));
self.windowOffsetLeft=(self.nzWidth);
break;
case 4:
self.windowOffsetTop=(self.nzHeight);
self.windowOffsetLeft=(self.nzWidth);
break;
case 5:
self.windowOffsetTop=(self.nzHeight);
self.windowOffsetLeft=(self.nzWidth-self.zoomWindow.width()-(self.options.borderSize*2));
break;
case 6:
if(self.options.zoomWindowHeight > self.nzHeight){
self.windowOffsetTop=(self.nzHeight);
self.windowOffsetLeft=((self.options.zoomWindowWidth/2)-(self.nzWidth/2)+(self.options.borderSize*2))*(-1);
}else{
}
break;
case 7:
self.windowOffsetTop=(self.nzHeight);
self.windowOffsetLeft=0;
break;
case 8:
self.windowOffsetTop=(self.nzHeight);
self.windowOffsetLeft=(self.zoomWindow.width()+(self.options.borderSize*2))* (-1);
break;
case 9:
self.windowOffsetTop=(self.nzHeight - self.zoomWindow.height() - (self.options.borderSize*2));
self.windowOffsetLeft=(self.zoomWindow.width()+(self.options.borderSize*2))* (-1);
break;
case 10:
if(self.options.zoomWindowHeight > self.nzHeight){
self.windowOffsetTop=((self.options.zoomWindowHeight/2)-(self.nzHeight/2))*(-1);
self.windowOffsetLeft=(self.zoomWindow.width()+(self.options.borderSize*2))* (-1);
}else{
}
break;
case 11:
self.windowOffsetTop=(self.options.zoomWindowOffety);
self.windowOffsetLeft=(self.zoomWindow.width()+(self.options.borderSize*2))* (-1);
break;
case 12:
self.windowOffsetTop=(self.zoomWindow.height()+(self.options.borderSize*2))*(-1);
self.windowOffsetLeft=(self.zoomWindow.width()+(self.options.borderSize*2))* (-1);
break;
case 13:
self.windowOffsetTop=(self.zoomWindow.height()+(self.options.borderSize*2))*(-1);
self.windowOffsetLeft=(0);
break;
case 14:
if(self.options.zoomWindowHeight > self.nzHeight){
self.windowOffsetTop=(self.zoomWindow.height()+(self.options.borderSize*2))*(-1);
self.windowOffsetLeft=((self.options.zoomWindowWidth/2)-(self.nzWidth/2)+(self.options.borderSize*2))*(-1);
}else{
}
break;
case 15:
self.windowOffsetTop=(self.zoomWindow.height()+(self.options.borderSize*2))*(-1);
self.windowOffsetLeft=(self.nzWidth-self.zoomWindow.width()-(self.options.borderSize*2));
break;
case 16:
self.windowOffsetTop=(self.zoomWindow.height()+(self.options.borderSize*2))*(-1);
self.windowOffsetLeft=(self.nzWidth);
break;
default:
self.windowOffsetTop=(self.options.zoomWindowOffety);
self.windowOffsetLeft=(self.nzWidth);
}}else{
self.externalContainer=$('#'+self.options.zoomWindowPosition);
self.externalContainerWidth=self.externalContainer.width();
self.externalContainerHeight=self.externalContainer.height();
self.externalContainerOffset=self.externalContainer.offset();
self.windowOffsetTop=self.externalContainerOffset.top;
self.windowOffsetLeft=self.externalContainerOffset.left;
}
self.isWindowSet=true;
self.windowOffsetTop=self.windowOffsetTop + self.options.zoomWindowOffety;
self.windowOffsetLeft=self.windowOffsetLeft + self.options.zoomWindowOffetx;
self.zoomWindow.css({ top: self.windowOffsetTop});
self.zoomWindow.css({ left: self.windowOffsetLeft});
if(self.options.zoomType=="inner"){
self.zoomWindow.css({ top: 0});
self.zoomWindow.css({ left: 0});
}
self.windowLeftPos=String(((e.pageX - self.nzOffset.left) * self.widthRatio - self.zoomWindow.width() / 2) * (-1));
self.windowTopPos=String(((e.pageY - self.nzOffset.top) * self.heightRatio - self.zoomWindow.height() / 2) * (-1));
if(self.Etoppos){self.windowTopPos=0;}
if(self.Eloppos){self.windowLeftPos=0;}
if(self.Eboppos){self.windowTopPos=(self.largeHeight/self.currentZoomLevel-self.zoomWindow.height())*(-1);  }
if(self.Eroppos){self.windowLeftPos=((self.largeWidth/self.currentZoomLevel-self.zoomWindow.width())*(-1));}
if(self.fullheight){
self.windowTopPos=0;
}
if(self.fullwidth){
self.windowLeftPos=0;
}
if(self.options.zoomType=="window"||self.options.zoomType=="inner"){
if(self.zoomLock==1){
if(self.widthRatio <=1){
self.windowLeftPos=0;
}
if(self.heightRatio <=1){
self.windowTopPos=0;
}}
if(self.options.zoomType=="window"){
if(self.largeHeight < self.options.zoomWindowHeight){
self.windowTopPos=0;
}
if(self.largeWidth < self.options.zoomWindowWidth){
self.windowLeftPos=0;
}}
if(self.options.easing){
if(!self.xp){self.xp=0;}
if(!self.yp){self.yp=0;}
if(!self.loop){
self.loop=setInterval(function(){
self.xp +=(self.windowLeftPos  - self.xp) / self.options.easingAmount;
self.yp +=(self.windowTopPos  - self.yp) / self.options.easingAmount;
if(self.scrollingLock){
clearInterval(self.loop);
self.xp=self.windowLeftPos;
self.yp=self.windowTopPos
self.xp=((e.pageX - self.nzOffset.left) * self.widthRatio - self.zoomWindow.width() / 2) * (-1);
self.yp=(((e.pageY - self.nzOffset.top) * self.heightRatio - self.zoomWindow.height() / 2) * (-1));
if(self.changeBgSize){
if(self.nzHeight>self.nzWidth){
if(self.options.zoomType=="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}else{
if(self.options.zoomType!="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvaluewidth + 'px' });
}
/*
if(!self.bgxp){self.bgxp=self.largeWidth/self.newvalue;}
if(!self.bgyp){self.bgyp=self.largeHeight/self.newvalue ;}
if(!self.bgloop){
self.bgloop=setInterval(function(){
self.bgxp +=(self.largeWidth/self.newvalue  - self.bgxp) / self.options.easingAmount;
self.bgyp +=(self.largeHeight/self.newvalue  - self.bgyp) / self.options.easingAmount;
self.zoomWindow.css({ "background-size": self.bgxp + 'px ' + self.bgyp + 'px' });
}, 16);
}
*/
self.changeBgSize=false;
}
self.zoomWindow.css({ backgroundPosition: self.windowLeftPos + 'px ' + self.windowTopPos + 'px' });
self.scrollingLock=false;
self.loop=false;
}
else if(Math.round(Math.abs(self.xp - self.windowLeftPos) + Math.abs(self.yp - self.windowTopPos)) < 1){
clearInterval(self.loop);
self.zoomWindow.css({ backgroundPosition: self.windowLeftPos + 'px ' + self.windowTopPos + 'px' });
self.loop=false;
}else{
if(self.changeBgSize){
if(self.nzHeight>self.nzWidth){
if(self.options.zoomType=="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}else{
if(self.options.zoomType!="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvaluewidth + 'px' });
}
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvaluewidth + 'px' });
}
self.changeBgSize=false;
}
self.zoomWindow.css({ backgroundPosition: self.xp + 'px ' + self.yp + 'px' });
}}, 16);
}}else{
if(self.changeBgSize){
if(self.nzHeight>self.nzWidth){
if(self.options.zoomType=="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}else{
if(self.options.zoomType=="lens"){
self.zoomLens.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvaluewidth + 'px' });
}
if((self.largeHeight/self.newvaluewidth) < self.options.zoomWindowHeight){
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvaluewidth + 'px ' + self.largeHeight/self.newvaluewidth + 'px' });
}else{
self.zoomWindow.css({ "background-size": self.largeWidth/self.newvalueheight + 'px ' + self.largeHeight/self.newvalueheight + 'px' });
}}
self.changeBgSize=false;
}
self.zoomWindow.css({ backgroundPosition: self.windowLeftPos + 'px ' + self.windowTopPos + 'px' });
}}
},
setTintPosition: function(e){
var self=this;
self.nzOffset=self.$elem.offset();
self.tintpos=String(((e.pageX - self.nzOffset.left)-(self.zoomLens.width() / 2)) * (-1));
self.tintposy=String(((e.pageY - self.nzOffset.top) - self.zoomLens.height() / 2) * (-1));
if(self.Etoppos){
self.tintposy=0;
}
if(self.Eloppos){
self.tintpos=0;
}
if(self.Eboppos){
self.tintposy=(self.nzHeight-self.zoomLens.height()-(self.options.lensBorderSize*2))*(-1);
}
if(self.Eroppos){
self.tintpos=((self.nzWidth-self.zoomLens.width()-(self.options.lensBorderSize*2))*(-1));
}
if(self.options.tint){
if(self.fullheight){
self.tintposy=0;
}
if(self.fullwidth){
self.tintpos=0;
}
self.zoomTintImage.css({'left': self.tintpos+'px'});
self.zoomTintImage.css({'top': self.tintposy+'px'});
}},
swaptheimage: function(smallimage, largeimage){
var self=this;
var newImg=new Image();
if(self.options.loadingIcon){
self.spinner=$('<div style="background: url(\''+self.options.loadingIcon+'\') no-repeat center;height:'+self.nzHeight+'px;width:'+self.nzWidth+'px;z-index: 2000;position: absolute; background-position: center center;"></div>');
self.$elem.after(self.spinner);
}
self.options.onImageSwap(self.$elem);
newImg.onload=function(){
self.largeWidth=newImg.width;
self.largeHeight=newImg.height;
self.zoomImage=largeimage;
self.zoomWindow.css({ "background-size": self.largeWidth + 'px ' + self.largeHeight + 'px' });
self.swapAction(smallimage, largeimage);
return;
}
newImg.src=largeimage;
},
swapAction: function(smallimage, largeimage){
var self=this;
var newImg2=new Image();
newImg2.onload=function(){
self.nzHeight=newImg2.height;
self.nzWidth=newImg2.width;
self.options.onImageSwapComplete(self.$elem);
self.doneCallback();
return;
}
newImg2.src=smallimage;
self.currentZoomLevel=self.options.zoomLevel;
self.options.maxZoomLevel=false;
if(self.options.zoomType=="lens"){
self.zoomLens.css({ backgroundImage: "url('" + largeimage + "')" });
}
if(self.options.zoomType=="window"){
self.zoomWindow.css({ backgroundImage: "url('" + largeimage + "')" });
}
if(self.options.zoomType=="inner"){
self.zoomWindow.css({ backgroundImage: "url('" + largeimage + "')" });
}
self.currentImage=largeimage;
if(self.options.imageCrossfade){
var oldImg=self.$elem;
var newImg=oldImg.clone();
self.$elem.attr("src",smallimage)
self.$elem.after(newImg);
newImg.stop(true).fadeOut(self.options.imageCrossfade, function(){
$(this).remove();
});
self.$elem.width("auto").removeAttr("width");
self.$elem.height("auto").removeAttr("height");
oldImg.fadeIn(self.options.imageCrossfade);
if(self.options.tint&&self.options.zoomType!="inner"){
var oldImgTint=self.zoomTintImage;
var newImgTint=oldImgTint.clone();
self.zoomTintImage.attr("src",largeimage)
self.zoomTintImage.after(newImgTint);
newImgTint.stop(true).fadeOut(self.options.imageCrossfade, function(){
$(this).remove();
});
oldImgTint.fadeIn(self.options.imageCrossfade);
self.zoomTint.css({ height: self.$elem.height()});
self.zoomTint.css({ width: self.$elem.width()});
}
self.zoomContainer.css("height", self.$elem.height());
self.zoomContainer.css("width", self.$elem.width());
if(self.options.zoomType=="inner"){
if(!self.options.constrainType){
self.zoomWrap.parent().css("height", self.$elem.height());
self.zoomWrap.parent().css("width", self.$elem.width());
self.zoomWindow.css("height", self.$elem.height());
self.zoomWindow.css("width", self.$elem.width());
}}
if(self.options.imageCrossfade){
self.zoomWrap.css("height", self.$elem.height());
self.zoomWrap.css("width", self.$elem.width());
}}else{
self.$elem.attr("src",smallimage);
if(self.options.tint){
self.zoomTintImage.attr("src",largeimage);
self.zoomTintImage.attr("height",self.$elem.height());
self.zoomTintImage.css({ height: self.$elem.height()});
self.zoomTint.css({ height: self.$elem.height()});
}
self.zoomContainer.css("height", self.$elem.height());
self.zoomContainer.css("width", self.$elem.width());
if(self.options.imageCrossfade){
self.zoomWrap.css("height", self.$elem.height());
self.zoomWrap.css("width", self.$elem.width());
}}
if(self.options.constrainType){
if(self.options.constrainType=="height"){
self.zoomContainer.css("height", self.options.constrainSize);
self.zoomContainer.css("width", "auto");
if(self.options.imageCrossfade){
self.zoomWrap.css("height", self.options.constrainSize);
self.zoomWrap.css("width", "auto");
self.constwidth=self.zoomWrap.width();
}else{
self.$elem.css("height", self.options.constrainSize);
self.$elem.css("width", "auto");
self.constwidth=self.$elem.width();
}
if(self.options.zoomType=="inner"){
self.zoomWrap.parent().css("height", self.options.constrainSize);
self.zoomWrap.parent().css("width", self.constwidth);
self.zoomWindow.css("height", self.options.constrainSize);
self.zoomWindow.css("width", self.constwidth);
}
if(self.options.tint){
self.tintContainer.css("height", self.options.constrainSize);
self.tintContainer.css("width", self.constwidth);
self.zoomTint.css("height", self.options.constrainSize);
self.zoomTint.css("width", self.constwidth);
self.zoomTintImage.css("height", self.options.constrainSize);
self.zoomTintImage.css("width", self.constwidth);
}}
if(self.options.constrainType=="width"){
self.zoomContainer.css("height", "auto");
self.zoomContainer.css("width", self.options.constrainSize);
if(self.options.imageCrossfade){
self.zoomWrap.css("height", "auto");
self.zoomWrap.css("width", self.options.constrainSize);
self.constheight=self.zoomWrap.height();
}else{
self.$elem.css("height", "auto");
self.$elem.css("width", self.options.constrainSize);
self.constheight=self.$elem.height();
}
if(self.options.zoomType=="inner"){
self.zoomWrap.parent().css("height", self.constheight);
self.zoomWrap.parent().css("width", self.options.constrainSize);
self.zoomWindow.css("height", self.constheight);
self.zoomWindow.css("width", self.options.constrainSize);
}
if(self.options.tint){
self.tintContainer.css("height", self.constheight);
self.tintContainer.css("width", self.options.constrainSize);
self.zoomTint.css("height", self.constheight);
self.zoomTint.css("width", self.options.constrainSize);
self.zoomTintImage.css("height", self.constheight);
self.zoomTintImage.css("width", self.options.constrainSize);
}}
}},
doneCallback: function(){
var self=this;
if(self.options.loadingIcon){
self.spinner.hide();
}
self.nzOffset=self.$elem.offset();
self.nzWidth=self.$elem.width();
self.nzHeight=self.$elem.height();
self.currentZoomLevel=self.options.zoomLevel;
self.widthRatio=self.largeWidth / self.nzWidth;
self.heightRatio=self.largeHeight / self.nzHeight;
if(self.options.zoomType=="window"){
if(self.nzHeight < self.options.zoomWindowWidth/self.widthRatio){
lensHeight=self.nzHeight;
}else{
lensHeight=String((self.options.zoomWindowHeight/self.heightRatio))
}
if(self.options.zoomWindowWidth < self.options.zoomWindowWidth){
lensWidth=self.nzWidth;
}else{
lensWidth=(self.options.zoomWindowWidth/self.widthRatio);
}
if(self.zoomLens){
self.zoomLens.css('width', lensWidth);
self.zoomLens.css('height', lensHeight);
}}
},
getCurrentImage: function(){
var self=this;
return self.zoomImage;
},
getGalleryList: function(){
var self=this;
self.gallerylist=[];
if(self.options.gallery){
$('#'+self.options.gallery + ' a').each(function(){
var img_src='';
if($(this).data("zoom-image")){
img_src=$(this).data("zoom-image");
}
else if($(this).data("image")){
img_src=$(this).data("image");
}
if(img_src==self.zoomImage){
self.gallerylist.unshift({
href: ''+img_src+'',
title: $(this).find('img').attr("title")
});
}else{
self.gallerylist.push({
href: ''+img_src+'',
title: $(this).find('img').attr("title")
});
}});
}else{
self.gallerylist.push({
href: ''+self.zoomImage+'',
title: $(this).find('img').attr("title")
});
}
return self.gallerylist;
},
changeZoomLevel: function(value){
var self=this;
self.scrollingLock=true;
self.newvalue=parseFloat(value).toFixed(2);
newvalue=parseFloat(value).toFixed(2);
maxheightnewvalue=self.largeHeight/((self.options.zoomWindowHeight / self.nzHeight) * self.nzHeight);
maxwidthtnewvalue=self.largeWidth/((self.options.zoomWindowWidth / self.nzWidth) * self.nzWidth);
if(self.options.zoomType!="inner"){
if(maxheightnewvalue <=newvalue){
self.heightRatio=(self.largeHeight/maxheightnewvalue) / self.nzHeight;
self.newvalueheight=maxheightnewvalue;
self.fullheight=true;
}else{
self.heightRatio=(self.largeHeight/newvalue) / self.nzHeight;
self.newvalueheight=newvalue;
self.fullheight=false;
}
if(maxwidthtnewvalue <=newvalue){
self.widthRatio=(self.largeWidth/maxwidthtnewvalue) / self.nzWidth;
self.newvaluewidth=maxwidthtnewvalue;
self.fullwidth=true;
}else{
self.widthRatio=(self.largeWidth/newvalue) / self.nzWidth;
self.newvaluewidth=newvalue;
self.fullwidth=false;
}
if(self.options.zoomType=="lens"){
if(maxheightnewvalue <=newvalue){
self.fullwidth=true;
self.newvaluewidth=maxheightnewvalue;
}else{
self.widthRatio=(self.largeWidth/newvalue) / self.nzWidth;
self.newvaluewidth=newvalue;
self.fullwidth=false;
}}}
if(self.options.zoomType=="inner"){
maxheightnewvalue=parseFloat(self.largeHeight/self.nzHeight).toFixed(2);
maxwidthtnewvalue=parseFloat(self.largeWidth/self.nzWidth).toFixed(2);
if(newvalue > maxheightnewvalue){
newvalue=maxheightnewvalue;
}
if(newvalue > maxwidthtnewvalue){
newvalue=maxwidthtnewvalue;
}
if(maxheightnewvalue <=newvalue){
self.heightRatio=(self.largeHeight/newvalue) / self.nzHeight;
if(newvalue > maxheightnewvalue){
self.newvalueheight=maxheightnewvalue;
}else{
self.newvalueheight=newvalue;
}
self.fullheight=true;
}else{
self.heightRatio=(self.largeHeight/newvalue) / self.nzHeight;
if(newvalue > maxheightnewvalue){
self.newvalueheight=maxheightnewvalue;
}else{
self.newvalueheight=newvalue;
}
self.fullheight=false;
}
if(maxwidthtnewvalue <=newvalue){
self.widthRatio=(self.largeWidth/newvalue) / self.nzWidth;
if(newvalue > maxwidthtnewvalue){
self.newvaluewidth=maxwidthtnewvalue;
}else{
self.newvaluewidth=newvalue;
}
self.fullwidth=true;
}else{
self.widthRatio=(self.largeWidth/newvalue) / self.nzWidth;
self.newvaluewidth=newvalue;
self.fullwidth=false;
}}
scrcontinue=false;
if(self.options.zoomType=="inner"){
if(self.nzWidth >=self.nzHeight){
if(self.newvaluewidth <=maxwidthtnewvalue){
scrcontinue=true;
}else{
scrcontinue=false;
self.fullheight=true;
self.fullwidth=true;
}}
if(self.nzHeight > self.nzWidth){
if(self.newvaluewidth <=maxwidthtnewvalue){
scrcontinue=true;
}else{
scrcontinue=false;
self.fullheight=true;
self.fullwidth=true;
}}
}
if(self.options.zoomType!="inner"){
scrcontinue=true;
}
if(scrcontinue){
self.zoomLock=0;
self.changeZoom=true;
if(((self.options.zoomWindowHeight)/self.heightRatio) <=self.nzHeight){
self.currentZoomLevel=self.newvalueheight;
if(self.options.zoomType!="lens"&&self.options.zoomType!="inner"){
self.changeBgSize=true;
self.zoomLens.css({height: String((self.options.zoomWindowHeight)/self.heightRatio) + 'px' })
}
if(self.options.zoomType=="lens"||self.options.zoomType=="inner"){
self.changeBgSize=true;
}}
if((self.options.zoomWindowWidth/self.widthRatio) <=self.nzWidth){
if(self.options.zoomType!="inner"){
if(self.newvaluewidth > self.newvalueheight){
self.currentZoomLevel=self.newvaluewidth;
}}
if(self.options.zoomType!="lens"&&self.options.zoomType!="inner"){
self.changeBgSize=true;
self.zoomLens.css({width: String((self.options.zoomWindowWidth)/self.widthRatio) + 'px' })
}
if(self.options.zoomType=="lens"||self.options.zoomType=="inner"){
self.changeBgSize=true;
}}
if(self.options.zoomType=="inner"){
self.changeBgSize=true;
if(self.nzWidth > self.nzHeight){
self.currentZoomLevel=self.newvaluewidth;
}
if(self.nzHeight > self.nzWidth){
self.currentZoomLevel=self.newvaluewidth;
}}
}
self.setPosition(self.currentLoc);
},
closeAll: function(){
if(self.zoomWindow){self.zoomWindow.hide();}
if(self.zoomLens){self.zoomLens.hide();}
if(self.zoomTint){self.zoomTint.hide();}},
changeState: function(value){
var self=this;
if(value=='enable'){self.options.zoomEnabled=true;}
if(value=='disable'){self.options.zoomEnabled=false;}}
};
$.fn.elevateZoom=function(options){
return this.each(function(){
var elevate=Object.create(ElevateZoom);
elevate.init(options, this);
$.data(this, 'elevateZoom', elevate);
});
};
$.fn.elevateZoom.options={
zoomActivation: "hover",
zoomEnabled: true,
preloading: 1,
zoomLevel: 1,
scrollZoom: false,
scrollZoomIncrement: 0.1,
minZoomLevel: false,
maxZoomLevel: false,
easing: false,
easingAmount: 12,
lensSize: 200,
zoomWindowWidth: 400,
zoomWindowHeight: 400,
zoomWindowOffetx: 0,
zoomWindowOffety: 0,
zoomWindowPosition: 1,
zoomWindowBgColour: "#fff",
lensFadeIn: false,
lensFadeOut: false,
debug: false,
zoomWindowFadeIn: false,
zoomWindowFadeOut: false,
zoomWindowAlwaysShow: false,
zoomTintFadeIn: false,
zoomTintFadeOut: false,
borderSize: 4,
showLens: true,
borderColour: "#888",
lensBorderSize: 1,
lensBorderColour: "#000",
lensShape: "square",
zoomType: "window",
containLensZoom: false,
lensColour: "white",
lensOpacity: 0.4,
lenszoom: false,
tint: false,
tintColour: "#333",
tintOpacity: 0.4,
gallery: false,
galleryActiveClass: "zoomGalleryActive",
imageCrossfade: false,
constrainType: false,
constrainSize: false,
loadingIcon: false, //http://www.example.com/spinner.gif
cursor:"default",
responsive:true,
onComplete: $.noop,
onDestroy: function(){},
onZoomedImageLoaded: function(){},
onImageSwap: $.noop,
onImageSwapComplete: $.noop
};})(jQuery, window, document);
jQuery(document).ready(function($){
AWSIconSelection={
init: function(iconSelectionContainer){
$(document).on("click", ".aws-icon-selection", function(){
var id=$(this).attr('data-field-id');
var value=$(this).attr('data-value');
$(iconSelectionContainer).find("input[type='radio'][name='" + id + "'][value='" + value + "']").prop("checked", true);
$(iconSelectionContainer).find("input[type='radio'][name='" + id + "'][value='" + value + "']").trigger("change");
$(iconSelectionContainer).find("[data-field-id='" + id + "'] .aws-icon-selection-check").hide();
$(iconSelectionContainer).find(".aws-icon-selection[data-field-id='" + id + "']").css({'border':'2px solid #cccccc'});
$(this).find(".aws-icon-selection-check").show();
$(this).css({'border':'2px solid orange'});
$(document).trigger("awsIconSelectionClick", {
'container':    iconSelectionContainer,
'id':           id,
'value':        value,
'element':      $(this)
});
});
AWSIconSelection.selectDefaultIconSelections();
},
selectDefaultIconSelections: function(){
$.each(AWSIconSelection.getCheckedRadioItemsForIconSelection(), function(index, element){
var name=$(this).attr('name');
var value=$(this).val();
$(".aws-icon-selection[data-field-id='" + name + "'][data-value='" + value + "']").trigger('click');
});
},
getCheckedRadioItemsForIconSelection: function(){
return $('.aws-icon-selection-container .aws_price_calc_radio input:checked', '.wpc-product-form');
},
};});
jQuery(document).ready(function($){
AWSImageSelection={
containerSelector: "",
categoryClickClass: ".awspc-images-selection-box",
categoryItemSelector: ".awspc-images-selection-box",
init: function(containerSelector){
this.containerSelector=containerSelector;
$(containerSelector).each(function(){
var index=0;
var container=this;
$(this).find(".awspc-image-selection").each(function(){
var id=$(this).attr('data-id');
if(AWSImageSelection.getCategoryItemsCount(container)!=1){
$(container)
.find(".awspc-image-selection-wrapper[data-id='" + id + "'] .awspc-image-selection-box")
.first()
.remove();
}
if(index!=0){
$(this).hide();
}else{
AWSImageSelection.initCategoryItem(container);
AWSImageSelection.setFirstItemInCategory(container, id);
}
index++;
});
});
$(containerSelector).on("click", AWSImageSelection.categoryClickClass, function(){
var id=$(this).attr('data-id');
var container=$(this).closest(AWSImageSelection.containerSelector);
$(container)
.find(AWSImageSelection.categoryClickClass)
.removeClass('awspc-image-selection-box-active');
$(container).find(".awspc-image-selection-box").
removeClass('awspc-image-selection-box-active');
$(container).find(".awspc-image-selection").hide();
$(".awspc-image-selection[data-id='" + id + "']").show();
AWSImageSelection.setFirstItemInCategory(container, id);
$(".awspc-images-selection-box[data-id='" + id + "'")
.addClass('awspc-image-selection-box-active');
});
$(document).on("click", ".awspc-image-selection-box", function(){
var id=$(this).attr('data-id');
var container=$(this).closest(AWSImageSelection.containerSelector);
AWSImageSelection.selectItemInCategory(container, id, this);
});
$(".awspc-image-selection-box-content img").elevateZoom({tint:true, tintColour:'#F90', tintOpacity:0.5});
},
getCategoryItemsCount: function(container){
var categoryItems=this.getCategoryItems(container);
return $(categoryItems).length;
},
getCategoryItems: function(container){
return $(container).find(this.categoryItemSelector);
},
initCategoryItem: function(container){
var categoryItems=this.getCategoryItems(container);
$(categoryItems).first()
.addClass('awspc-image-selection-box-active');
if(this.getCategoryItemsCount(container)==1){
$(categoryItems).hide();
$(container)
.find(".awspc-image-selection-divisor")
.removeClass("col-xs-9")
.addClass("col-xs-12")
.css({"border": "0px"});
}},
changeRadioItem: function(id, value){
var radio=$(".awspc-field-widget[data-id='" + id + "']")
.find("input[type='radio'][value='" + value + "']");
$(radio).prop("checked", true);
$(radio).trigger("change");
},
setFirstItemInCategory: function(container, id){
$(container)
.find(".awspc-image-selection-wrapper").each(function(index, obj){
var currentId=$(obj).attr("data-id");
if(id!=currentId){
$(obj)
.find(".awspc-field-widget[data-id='" + currentId + "'] input[type='radio']")
.first()
.prop("checked", true);
}});
var firstItemInCategory=$(container)
.find(".awspc-image-selection-wrapper[data-id='" + id + "'] .awspc-image-selection-box")
.first();
var value=$(firstItemInCategory).attr('data-value');
$(firstItemInCategory).addClass('awspc-image-selection-box-active');
this.changeRadioItem(id, value);
},
selectItemInCategory: function(container, id, element){
var value=$(element).attr('data-value');
$(container)
.find(".awspc-image-selection-box")
.removeClass('awspc-image-selection-box-active');
$(element).addClass('awspc-image-selection-box-active');
this.changeRadioItem(id, value);
},
selectDefaultImageSelections: function(container){
$.each(AWSPCStep.getCheckedRadioItemsForImageSelection(container), function(index, element){
var name=$(this).attr('name');
var value=$(this).val();
$(container)
.find(".awspc-image-selection-box[data-id='" + name + "'][data-value='" + value + "']").trigger('click');
});
},
getCheckedRadioItemsForImageSelection: function(container){
return $(container)
.find('.awspc-image-selection .aws_price_calc_radio input:checked', '.wpc-product-form');
},
};});
jQuery(document).ready(function($){
var requestAjaxCalculatePrice;
WooPriceCalculator={
formContainerSelectors:         [],
page:                           null,
waitForCalculation:             false,
asyncAjaxCalculatePrice:        true,
disableAjaxPriceProductPage:    null,
init: function(){
$('.aws_price_calc_upload').find(':file').on('change', function (){
var totalSize=0;
var maxSize=$(this).attr('data-max-size');
var inputFieldId=$(this).attr('id');
for (var i=0; i < $(this).prop('files').length; i++){
totalSize +=$(this).prop('files')[i].size;
}
if(totalSize > maxSize){
$('.awspc-field-widget[data-id='+inputFieldId+']').append("<div id='awspx-field-error-max-size' class=''></div>");
$('#awspx-field-error-max-size').text('Max upload size exceeded !');
$(this).val('');
}else{
$('#awspx-field-error-max-size').remove();
}});
if($('.composite_form').length){
$('.composite_price').ready(function(){
setTimeout(function (){
WooPriceCalculator.calculateProductPrice($('.wpc-product-form'))
}, 10);
});
}
$('.aws_price_calc_upload input').on('change', function (e){
uploadedFileName=$(this).val();
$(this).next().val(uploadedFileName.split('\\').pop());
});
$('.woo-price-calculator-tooltip').tooltipster({
animation: 'fade',
contentAsHTML: true,
multiple: true,
theme: 'tooltipster-shadow',
touchDevices: true,
'maxWidth': 300
});
if($('.wpc-cart-form').length){
$('.wpc-cart-form').each(function(index, element){
$('.wpc-cart-edit', element).click(function(){
var productId=$('.wpc_product_id', element).val();
var simulatorId=$('.wpc_simulator_id', element).val();
var cartItemKey=$(element).attr('data-cart-item-key');
var remodalInst=$('[data-remodal-id="wpc_cart_item_' + cartItemKey + '"]').remodal();
var editButtons=$('[data-remodal-target="wpc_cart_item_' + cartItemKey + '"]');
var data=$(element).find(WooPriceCalculator.getFieldSelector(), element);
var quantity=0;
if(WooPriceCalculator.getTargetEcommerce()=="woocommerce"){
quantity=parseInt($("input[name='cart[" + cartItemKey + "][qty]']").val());
}else if(WooPriceCalculator.getTargetEcommerce()=="hikashop"){
quantity=parseInt($("input[name='item[" + cartItemKey + "]']").val());
}
$('.cart_item .product-price').html(WooPriceCalculator.htmlLoadingImage("awspricecalculator_loading"));
var formData=new FormData();
data.each(function (index){
if($(this).is(':checkbox')){
if($(this).is(':checked')){
formData.append($(this).attr('name'), $(this).val());
}}else if($(this).is(':radio')){
if($(this).is(':checked')){
formData.append($(this).attr('name'), $(this).val());
}}else{
formData.append($(this).attr('name'), $(this).val());
}});
var uploadFiles=$('.aws_price_calc_upload').find(':file');
uploadFiles.each(function (index){
for (var i=0; i < $(this).prop('files').length; i++){
formData.append($(this).attr('name'), $(this).prop('files')[i]);
}})
WooPriceCalculator.ajaxEditCartItem(cartItemKey, productId, simulatorId, quantity, data, formData);
remodalInst.close();
});
});
}
$('.awspc-field-widget').each(function(index, element){
var fieldId=$(element).attr('data-id');
var fieldContainer=$(".awspc-field", element);
if(fieldId==""){
WooPriceCalculator.alertError("Class '.awspc-field-widget' is applied but no 'data-id' has been found");
WooPriceCalculator.alertError("Check also the fields you need in the theme are also selected in the calculator");
WooPriceCalculator.alertError($(element).html());
}
var options=JSON.parse($('#' + fieldId + "_options").val());
var date_format='Y-m-d';
var time_format='H:i:s';
var datetime_format='Y-m-d H:i:s';
if(options['date']){
if(options['date']['date_format']){
date_format=options['date']['date_format'];
}
if(options['date']['time_format']){
time_format=options['date']['time_format'];
}
if(options['date']['datetime_format']){
datetime_format=options['date']['datetime_format'];
}}
$(".aws_price_calc_date input", element).xdsoft_datetimepicker({
timepicker: false,
format: date_format,
lazyInit: true,
validateOnBlur: true,
allowBlank: true,
scrollInput: false,
closeOnDateSelect: true,
});
$(".aws_price_calc_time input", element).xdsoft_datetimepicker({
datepicker: false,
format: time_format,
lazyInit: true,
validateOnBlur: true,
allowBlank: true,
scrollInput: false,
});
$(".aws_price_calc_datetime input", element).xdsoft_datetimepicker({
format: datetime_format,
lazyInit: true,
validateOnBlur: true,
allowBlank: true,
scrollInput: false,
});
$('.awspc-rangeslider').rangeslider({
polyfill: false,
onInit: function(){
var element=(this.$element[0]);
var fieldId=$(element).attr('data-field-id');
var options=JSON.parse($('#' + fieldId + "_options").val());
var identifier=$(this)[0].identifier;
var color="#00FF00";
if(options['numeric']['slider_color']){
color=options['numeric']['slider_color'];
}
$("#" + identifier).find(".rangeslider__fill").css("background-color", "#" + color);
},
onSlide: function(position, value){
var element=(this.$element[0]);
var fieldId=$(element).attr('data-field-id');
$("input[name=" + fieldId + "]").val(value);
},
});
if(fieldContainer.hasClass('aws_price_calc_numeric')){
var field=$('input', fieldContainer);
var decimals=options['numeric']['decimals'];
var decimalSeparator=options['numeric']['decimal_separator'];
if(decimals){
decimals=parseInt(decimals);
}else{
decimals=2;
}
if(decimals==0){
decimalSeparator=false;
}
$(field).numeric({
decimalPlaces:  decimals,
decimal:        decimalSeparator,
});
}});
WooPriceCalculator.initFieldEvents();
setTimeout(function(){
$('.remodal').remodal();
}, 500);
if(WPC_HANDLE_SCRIPT.is_cart==true){
$(document).ajaxComplete(function(event, xhr, settings){
if($('.woocommerce .cart_item').length){
$('.awspc-rangeslider').rangeslider('update', true, false);
$('.remodal').remodal();
}});
}
this.initThirdPartPluginsCompatibility();
},
initThirdPartPluginsCompatibility: function(){
$(".ewc_calc_shipping").click(function(){
$("#calc_shipping_postcode").trigger("blur");
});
},
setAsyncAjaxCalculatePrice: function(asyncAjaxCalculatePrice){
this.asyncAjaxCalculatePrice=asyncAjaxCalculatePrice;
},
setWaitForCalculation: function(waitForCalculation){
this.waitForCalculation=waitForCalculation;
},
getPage: function(){
if(this.page==null){
return WPC_HANDLE_SCRIPT.page_type;
}
return this.page;
},
setPage: function(page){
this.page=page;
},
hideOutputFields: function(){
$('.awspc-output-result-row').hide();
},
showOutputFields: function(){
$('.awspc-output-result-row').show();
},
loadingOutputFields: function(){
$(".awspc-output-result-price-value").html(WooPriceCalculator.htmlLoadingImage("awspricecalculator_loading"));
},
hidePrice: function(cartItemKey){
var priceSelector=WooPriceCalculator.getPriceSelector();
if(cartItemKey!=null){
var cartModalContainer=$('[data-cart-item-key="' + cartItemKey + '"]');
$('.wpc-cart-item-price', cartModalContainer).hide();
$('.wpc-cart-edit', cartModalContainer).prop('disabled', true);
}else{
$(priceSelector).hide();
$('form[name="hikashop_product_form"] .hikashop_product_price_main').hide();
}
WooPriceCalculator.hideOutputFields();
},
showPrice: function(cartItemKey){
var priceSelector=WooPriceCalculator.getPriceSelector();
if(cartItemKey!=null){
var cartModalContainer=$('[data-cart-item-key="' + cartItemKey + '"]');
$('.wpc-cart-item-price', cartModalContainer).show();
$('.wpc-cart-edit', cartModalContainer).prop('disabled', false);
}else{
$(priceSelector).show();
$('form[name="hikashop_product_form"] .hikashop_product_price_main').show();
}
WooPriceCalculator.showOutputFields();
},
setFieldError: function(element, error){
$(element).html(error);
},
alertError: function(message){
if(this.getHideAlertErrors()==false){
alert("AWS Price Calculator Error: " + message);
}},
setDisableAjaxPriceProductPage: function(status){
WooPriceCalculator.disableAjaxPriceProductPage=status;
},
getDisableAjaxPriceProductPage: function(){
var disableAjaxPriceProductPage=WPC_HANDLE_SCRIPT.disable_ajax_price_product_page;
if(WooPriceCalculator.disableAjaxPriceProductPage==null){
return disableAjaxPriceProductPage;
}
return WooPriceCalculator.disableAjaxPriceProductPage;
},
getPriceSelector: function(){
var singleProductAjaxHookClass=WPC_HANDLE_SCRIPT.single_product_ajax_hook_class;
var disableAjaxPriceProductPage=WooPriceCalculator.getDisableAjaxPriceProductPage();
if(disableAjaxPriceProductPage==true){
return null;
}
if(singleProductAjaxHookClass){
if($(singleProductAjaxHookClass).length){
return singleProductAjaxHookClass;
}else{
WooPriceCalculator.alertError("Class not found, see Settings > Single Product Ajax Hook Class");
}}
if($(".composite_form").length){
$(".composite_price").hide();
return '.price';
}
if($(".product .summary .price .woocommerce-Price-amount").length){
return '.product .summary .price .woocommerce-Price-amount';
}
if($(".single-product .product_infos .price .woocommerce-Price-amount").length){
return ".single-product .product_infos .price .woocommerce-Price-amount";
}
if($(".product .summary .price").length){
return '.product .summary .price';
}
if($(".single-product .product_infos .price").length){
return ".single-product .product_infos .price";
}
if($(".wpc-cart-form .price").length){
return '.wpc-cart-form .price';
}
if($(".product .price-box .amount").length){
return '.product .price-box .amount';
}
if($(".product-details .product-item_price .price").length){
return '.product-details .product-item_price .price';
}
if($('form[name="hikashop_product_form"] .hikashop_product_price').length){
return 'form[name="hikashop_product_form"] .hikashop_product_price';
}
if($('.product-main .product-page-price').length){
return '.product-main .product-page-price';
}
WooPriceCalculator.alertError("Unable to select Ajax WooCommerce Price class, read: https://altoswebsolutions.com/documentation/9-the-price-doesn-t-change");
},
getFieldSelector: function(){
return  '.awspc-field input, ' +
'.awspc-field select, ' +
'.awspc-custom-data'
;
},
htmlLoadingImage: function(cssClass){
return "<img class=\"" + cssClass + "\" src=\"" + WPC_HANDLE_SCRIPT.resources_url + "/assets/images/ajax-loader.gif\" />";
},
conditionalLogic: function(logic, cartItemKey){
$.each(logic, function(fieldId, displayField){
var fieldContainer=$('.awspc-field-row[data-field-id="' + fieldId + '"]');
if(displayField==1){
$(fieldContainer).show();
}else{
$(fieldContainer).hide();
}});
},
getFieldContainer: function(fieldId, cartItemKey){
if(cartItemKey!=null){
var cartModalContainer=$('[data-cart-item-key="' + cartItemKey + '"]');
var fieldContainer=$("[data-id='" + fieldId + "']", cartModalContainer);
}else{
var fieldContainer=$("form.cart [data-id='" + fieldId + "'], form[name=\"hikashop_product_form\"] [data-id='" + fieldId + "']");
}
return fieldContainer;
},
decodePrice: function(priceToDecode){
return WooPriceCalculator.decodeHtml(WooPriceCalculator.decodeUtf8(priceToDecode));
},
ajaxCalculatePrice: function(productId, simulatorId, cartItemKey, data, outputEl, formContainer, compositePrice){
WooPriceCalculator.showPrice(cartItemKey);
WooPriceCalculator.loadingOutputFields();
$(document).trigger("awspcAjaxCalculatePrice");
$(outputEl).html(WooPriceCalculator.htmlLoadingImage("awspricecalculator_loading"));
if(formContainer){
$(".awspc-field-error", formContainer).html("");
}else{
$(".awspc-field-error").html("");
}
if(this.waitForCalculation==false){
if(requestAjaxCalculatePrice&&requestAjaxCalculatePrice.readyState!=4){
requestAjaxCalculatePrice.abort();
}}
var calculatePriceUrl=(compositePrice >0) ? WPC_HANDLE_SCRIPT.ajax_url + "&id=" + productId + "&simulatorid=" + simulatorId + "&compositeBasePrice=" + compositePrice:WPC_HANDLE_SCRIPT.ajax_url + "&id=" + productId + "&simulatorid=" + simulatorId;
requestAjaxCalculatePrice=$.ajax({
method: "POST",
async: this.asyncAjaxCalculatePrice,
url: calculatePriceUrl + "&page=" + this.getPage(),
dataType: 'json',
data: data,
success: function(result, status, xhrRequest){
$(document).trigger("awspcAjaxCalculatePriceSuccess", {
'result':           result,
'formContainer':    formContainer,
});
WooPriceCalculator.conditionalLogic(result.conditionalLogic, cartItemKey);
if(result.errorsCount==0){
$.each(result.outputFields, function(fieldId, data){
var fieldName=data.fieldName;
var field=data.field;
var fieldSelector="." + fieldName;
var value=data.value;
$(fieldSelector)
.find(".awspc-output-result-value")
.html(value);
});
$(outputEl).html(WooPriceCalculator.decodePrice(result.price));
$(outputEl).show();
WooPriceCalculator.showOutputFields();
}else{
WooPriceCalculator.hidePrice(cartItemKey);
$.each(result.errors, function(fieldId, fieldErrors){
$.each(fieldErrors, function(index, fieldError){
var error=$(".awspc-field-error", WooPriceCalculator.getFieldContainer(fieldId, cartItemKey));
$(error).html(fieldError);
});
});
}
$('.wpc-product-form').show();
$(document).trigger("awspcAjaxCalculatePriceSuccessEnd", {
'result':           result,
'formContainer':    formContainer,
});
},
error: function(xhrRequest, status, errorMessage){
console.log("AWS Price Calculator Error: " + errorMessage);
}});
},
ajaxAddCartItem: function(productId, calculatorId, quantity, data){
$.ajax({
method: "POST",
async: false,
cache: false,
url: WPC_HANDLE_SCRIPT.ajax_url + "&id=" + productId +
"&simulatorid=" + calculatorId +
"&wpc_action=add_cart_item" +
"&quantity=" + quantity,
data: data,
success: function(result, status, xhrRequest){
$(document).trigger("awspcAjaxAddCartItemSuccess", {
'result':           result,
});
},
error: function(xhrRequest, status, errorMessage){
$(document).trigger("awspcAjaxAddCartItemError", {
'errorMessage':           errorMessage,
});
console.log("Error: " + errorMessage);
}});
},
ajaxEditCartItem: function(cartItemKey, productId, simulatorId, quantity, data, formData){
if(isNaN(quantity)){
quantity=1;
console.log("WPC: No defined quantity, get 1");
}
$.ajax({
method: "POST",
url: WPC_HANDLE_SCRIPT.ajax_url + "&id=" + productId +
"&simulatorid=" + simulatorId +
"&wpc_action=edit_cart_item" +
"&cart_item_key=" + cartItemKey +
"&quantity=" + quantity,
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(result, status, xhrRequest){
location.reload();
},
error: function(xhrRequest, status, errorMessage){
console.log("Error: " + errorMessage);
}});
},
wooCommerceUpdateCart: function(){
$('[name="update_cart"]').trigger('click');
},
calculatePrice: function(element){
$(document).trigger("awspcBeforeCalculatePrice");
if(WPC_HANDLE_SCRIPT.is_cart==true){
if($('.wpc-cart-form').length){
WooPriceCalculator.calculateCartPrice();
}}else{
var formContainerSelector=WooPriceCalculator.getFormContainerSelector();
var formContainer=$(element).closest(".wpc-product-form");
$(document).trigger("awspcBeforeProductCalculatePrice", {
'formContainer':    formContainer,
});
WooPriceCalculator.calculateProductPrice(formContainer);
$(document).trigger("awspcAfterProductCalculatePrice", {
'formContainer':    formContainer,
});
}
$(document).trigger("awspcAfterCalculatePrice");
},
calculateCartPrice: function(){
var element=window.wpcCurrentCartItem;
var productId=$('.wpc_product_id', element).val();
var simulatorId=$('.wpc_simulator_id', element).val();
var data=$(element).find(WooPriceCalculator.getFieldSelector(), element).serialize();
var cartItemKey=$(element).attr('data-cart-item-key');
WooPriceCalculator.ajaxCalculatePrice(productId, simulatorId, cartItemKey, data, $('.price', element).first());
},
getProductIdInProductPage: function(){
return $('.wpc_product_id').val();
},
getCalculatorIdInProductPage: function(){
return $('.wpc_simulator_id').val();
},
getFormDataInProductPage: function(formContainer){
return $(formContainer).find(this.getFieldSelector(), formContainer).serialize();
},
calculateProductPrice: function(formContainer){
var productId=this.getProductIdInProductPage();
var simulatorId=this.getCalculatorIdInProductPage();
var strictPriceSelector=$(formContainer).attr('data-strict-price-selector');
var priceSelector=WooPriceCalculator.getPriceSelector();
if(priceSelector=='.price'){
var jPriceSelector=$(priceSelector).first();
}else if(strictPriceSelector==true){
var jPriceSelector=$(priceSelector, formContainer);
}else{
var jPriceSelector=$(priceSelector)
}
var data=this.getFormDataInProductPage(formContainer);
var compositePrice=priceSelector=='.price' ? parseFloat($('.composite_price').find('.price').find('.woocommerce-Price-amount').text()):0;
WooPriceCalculator.ajaxCalculatePrice(productId, simulatorId, null, data, jPriceSelector, formContainer, compositePrice);
},
addFormContainerSelector: function(selector){
this.formContainerSelectors.push(selector);
},
getFormContainerSelector: function(){
var retSelector=null;
if($("form.cart .wpc-product-form").length){
return "form.cart .wpc-product-form";
}
if($('[name="hikashop_product_form"] .wpc-product-form').length){
return '[name="hikashop_product_form"] .wpc-product-form';
}
$.each(this.formContainerSelectors, function(index, selector){
if($(selector).length){
retSelector=selector;
}});
return retSelector;
},
getTargetEcommerce: function(){
return WPC_HANDLE_SCRIPT.target_ecommerce;
},
encodeUtf8: function(s){
return encodeURIComponent(s);
},
decodeUtf8: function(s){
return decodeURIComponent(s);
},
initFieldEvents: function(){
var timeout=false;
var writingTimeout=250;
if(WPC_HANDLE_SCRIPT.is_cart==true){
$(document).on('opening', '.remodal', function (){
window.wpcCurrentCartItem=$(this);
WooPriceCalculator.calculateCartPrice();
});
}
$(document).on('keyup', '.aws_price_calc_numeric input', function(){
if(timeout){
clearTimeout(timeout);
}
$('input[type=range][data-field-id="' + $(this).attr('name') + '"]').val($(this).val());
$('input[type=range][data-field-id="' + $(this).attr('name') + '"]').rangeslider('update', true, false);
var element=this;
timeout=setTimeout(function (){
WooPriceCalculator.calculatePrice(element);
}, writingTimeout);
});
$(document).on('change', '.aws_price_calc_numeric input[type=range]', function(){
if(timeout){
clearTimeout(timeout);
}
var element=this;
timeout=setTimeout(function (){
WooPriceCalculator.calculatePrice(element);
}, writingTimeout);
});
$(document).on('keyup', '.aws_price_calc_text input', function(){
if(timeout){
clearTimeout(timeout);
}
var element=this;
timeout=setTimeout(function (){
WooPriceCalculator.calculatePrice(element);
}, writingTimeout);
});
$(document).on('change', '.aws_price_calc_date input', function(){
WooPriceCalculator.calculatePrice(this);
});
$(document).on('change', '.aws_price_calc_time input', function(){
WooPriceCalculator.calculatePrice(this);
});
$(document).on('change', '.aws_price_calc_datetime input', function(){
WooPriceCalculator.calculatePrice(this);
});
$(document).on('change', '.aws_price_calc_picklist select', function(){
WooPriceCalculator.calculatePrice(this);
});
$(document).on('change', '.aws_price_calc_radio input', function(){
WooPriceCalculator.calculatePrice(this);
});
$(document).on('change', '.aws_price_calc_checkbox input', function(){
WooPriceCalculator.calculatePrice(this);
});
$(document).on('change', '.aws_price_calc_videolist select', function(e){
allVideos=$('.wpc-product-form video');
for (var i=0; i < allVideos.length; i++){
$(allVideos[i]).hide();
$(allVideos[i]).trigger('pause');
}
if($(this)[0].selectedIndex==0){
}else{
$(this).next().find('video#' + this.value).show();
$(this).next().find('video#' + this.value).trigger('play');
}
WooPriceCalculator.calculatePrice(this);
});
$(document).on('change', '.aws_price_calc_upload input', function(){
WooPriceCalculator.calculatePrice(this);
});
$(document).on('mouseover', '.awspc-modal-imagelist-row', function(){
$('.awspc-modal-imagelist-row').removeClass('awspc-modal-imagelist-hover');
$(this).addClass('awspc-modal-imagelist-hover');
});
$(document).on('click', '.awspc-modal-imagelist-row', function(){
var cartItemKey=$(this).attr('data-cart-item-key');
var imagelistId=$(this).attr('data-imagelist-id');
var label=$(this).attr('data-label');
var itemId=$(this).attr('data-item-id');
var modalSelector=$('[data-remodal-id="awspc_modal_imagelist_' + imagelistId + '"]');
var remodalInst=$(modalSelector).remodal();
var clickedImageSrc=$(this).find('img').attr('src');
var hiddenSelector=$('[data-id="aws_price_calc_' + imagelistId +'"] input[type="hidden"]');
var buttonSelector=$('[data-id="aws_price_calc_' + imagelistId + '"] button');
var textSelector=$(buttonSelector).find('.awspc_modal_imagelist_text');
var imageSelector=$(buttonSelector).find('img');
$(modalSelector).find('.awspc-modal-imagelist-row').removeClass('awspc-modal-imagelist-clicked');
$(textSelector).html(label);
$(imageSelector).attr('src', clickedImageSrc);
$(hiddenSelector).val(itemId);
$(this).removeClass('awspc-modal-imagelist-hover');
$(this).addClass('awspc-modal-imagelist-clicked');
remodalInst.close();
if(cartItemKey){
$('[data-remodal-id="wpc_cart_item_' + cartItemKey + '"]').remodal().open();
}
WooPriceCalculator.calculatePrice(hiddenSelector);
});
},
encodeHtml: function(value){
return $('<div/>').text(value).html();
},
decodeHtml: function(value){
return $('<div/>').html(value).text();
},
getCartUrl: function(){
return WPC_HANDLE_SCRIPT.cart_url;
},
formatNumber: function(number, c, d, t){
var n=number,
c=isNaN(c=Math.abs(c)) ? 2:c,
d=d==undefined ? ".":d,
t=t==undefined ? ",":t,
s=n < 0 ? "-":"",
i=String(parseInt(n=Math.abs(Number(n)||0).toFixed(c))),
j=(j=i.length) > 3 ? j % 3:0;
return s + (j ? i.substr(0, j) + t:"") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2):"");
},
formatPrice: function(price){
var phpPrice=$(".awspc-price-format").val();
var countDecimals=0;
var currency="";
phpPrice=this.decodePrice(phpPrice);
var myRegexp=/([^0-9]*)([9])([\.|,]?)([9]{3})([\.|,]?)([1]*)([^0-9]*)/g;
var match=myRegexp.exec(phpPrice);
var currencyPrefix=match[1];
var thousandSeparator=match[3];
var decimalSeparator=match[5];
var decimals=(match[6].match(/1/g)||[]).length;
var currencySuffix=match[7];
return currencyPrefix +
this.formatNumber(price, decimals, decimalSeparator, thousandSeparator) +
currencySuffix;
},
getHideAlertErrors: function(){
return WPC_HANDLE_SCRIPT.hide_alert_errors;
}};
WooPriceCalculator.init();
});
jQuery(document).ready(function($){
AWSPCStep={
currentStepAccordionId: null,
currentStepAccordion:   null,
scrollToTopMargin:      260,
init: function(){
var loadingImageSrc=WooPriceCalculator.htmlLoadingImage("awspricecalculator_loading");
var errors=true;
this.disableDefaultAjaxPriceProductPage();
WooPriceCalculator.addFormContainerSelector(".awspc-step-container .wpc-product-form");
AWSIconSelection.init(".aws-icon-selection-container");
AWSImageSelection.init(".awspc-step");
$(".awspc-step").first().collapse("show");
$('#awspc_steps_accordion').on('show.bs.collapse', function(e){
var clickOnAccordion=$(e.target);
var clickOnAccordionSelector=$(clickOnAccordion)
.find("[data-panel-title]")
.attr('data-panel-title');
var oldAccordion=$(e.currentTarget);
var oldAccordionSelector=$(oldAccordion)
.find("[data-panel-title]")
.attr('data-panel-title');
var oldAccordionHeading=$(".panel-heading[data-panel-title='" + oldAccordionSelector + "']");
var oldAccordionHeadingTitle=$(oldAccordionHeading).text().trim();
if(oldAccordionSelector!=clickOnAccordionSelector){
if(errors==true){
alert("Please correct the errors on '" + oldAccordionHeadingTitle + "' tab before continue");
return false;
}}
});
$('#awspc_steps_accordion').on('shown.bs.collapse', function(e){
var clickedBtn=$(e.target).data('bs.collapse').$trigger;
var panelTitleId=$(e.target).find(".panel-body").attr('data-panel-title');
var panelTitle=$(this).find(".panel-heading[data-panel-title='" + panelTitleId + "']");
AWSPCStep.currentStepAccordionId=$(e.target).attr('data-step-id');
AWSPCStep.currentStepAccordion=$(e.target);
$(this).find(".accordion-icon")
.addClass("fa-circle-o");
$(this).find(".awspc-step-right-container")
.hide();
$(clickedBtn).find(".accordion-icon").removeClass("fa-circle-o");
$(clickedBtn).find(".accordion-icon").addClass("fa-check-circle-o");
if(errors==false){
$(panelTitle).find(".awspc-step-right-container").show();
}
if(panelTitleId!="#awspc_step_1"){
AWSPCStep.scrollToMe($(panelTitleId), AWSPCStep.scrollToTopMargin);
}});
$(document).on("keyup keydown change", ".awspc-step-quantity", function(event){
});
$(document).on("click", ".awspc-step-place-in-cart", function(event){
AWSPCStep.addToCart();
});
$(document).bind("awspcBeforeProductCalculatePrice", function(ev, args){
var formContainer=args.formContainer;
if(errors==false){
AWSPCStep.showCurrentAccordionPrice();
$(".awspc-step-total-price").html(loadingImageSrc);
}});
$(document).bind("awspcAjaxCalculatePriceSuccess", function(ev, args){
var formContainer=args.formContainer;
if(args.result.errorsCount!=0){
errors=true;
$(".awspc-step-right-container").hide();
$.each(args.result.errors, function(fieldId, fieldErrors){
$.each(fieldErrors, function(index, fieldError){
var error=$("[data-id='" + fieldId + "']", formContainer).find(".awspc-field-error");
$(error).html(fieldError);
});
});
}else{
var price=WooPriceCalculator.decodePrice(args.result.price);
errors=false;
AWSPCStep.showCurrentAccordionPrice();
$(".awspc-step-total-price").html(price);
}});
jQuery(document).bind("awsIconSelectionClick", function(ev){
if(AWSPCStep.getNextStepOnClick()==true){
var nextStepId=AWSPCStep.getNexStepId();
AWSPCStep.goToStepId(nextStepId);
}});
},
getCurrentAccordionId: function(){
return AWSPCStep.currentStepAccordionId;
},
getCurrentAccordion: function(){
return AWSPCStep.currentStepAccordion;
},
scrollToMe: function(el, topMargin){
var x=$(el).offset().top - topMargin;
jQuery('html,body').animate({scrollTop: x}, 400);
},
getQuantity: function(){
if($(".awspc-step-quantity").length){
return $(".awspc-step-quantity").val();
}else{
return 1;
}},
showCurrentAccordionPrice: function(){
$(".accordion-toggle[aria-expanded='true']")
.parent()
.find(".awspc-step-right-container")
.show();
},
disableDefaultAjaxPriceProductPage: function(){
var disableDefaultAjaxPriceProductPage=AWSPCStep.getDisableDefaultAjaxPriceProductPage();
if(disableDefaultAjaxPriceProductPage==="1"){
WooPriceCalculator.setDisableAjaxPriceProductPage(true);
}else if(disableDefaultAjaxPriceProductPage==="0"){
WooPriceCalculator.setDisableAjaxPriceProductPage(false);
}},
getDisableDefaultAjaxPriceProductPage: function(){
return AWSPC_STEP.disable_default_ajax_price_product_page;
},
getNextStepOnClick: function(){
return AWSPC_STEP.next_step_on_click;
},
getStepNameByStepId: function(stepId){
return "#awspc_step_" + stepId;
},
goToStepId: function(stepId){
var goToStepName=AWSPCStep.getStepNameByStepId(stepId);
$(".awspc-step").collapse('hide');
if($(goToStepName).length){
$(goToStepName).collapse('show');
AWSPCStep.scrollToMe($(goToStepName), AWSPCStep.scrollToTopMargin);
}},
getNexStepId: function(){
var currentAccordionId=AWSPCStep.getCurrentAccordionId();
var stepList=AWSPCStep.getStepList();
for(var index=0; index < stepList.length; index++){
if(stepList[index]==currentAccordionId){
return stepList[index+1];
}}
return null;
},
getStepList: function(){
return JSON.parse($("#awspc_step_list").val());
},
addToCart: function(){
var page=WooPriceCalculator.getPage();
var productId=WooPriceCalculator.getProductIdInProductPage();
var calculatorId=WooPriceCalculator.getCalculatorIdInProductPage();
this.isAddToCart=true;
WooPriceCalculator.setPage("add-to-cart");
WooPriceCalculator.setWaitForCalculation(true);
WooPriceCalculator.setAsyncAjaxCalculatePrice(false);
$.each($(".awspc-step-container .wpc-product-form"), function(index, formContainer){
WooPriceCalculator.calculatePrice(formContainer);
});
WooPriceCalculator.setPage(page);
this.isAddToCart=false;
$.each($(".awspc-step-container .wpc-product-form"), function(index, formContainer){
var quantity=AWSPCStep.getQuantity();
var data=WooPriceCalculator.getFormDataInProductPage(formContainer);
WooPriceCalculator.ajaxAddCartItem(productId, calculatorId, quantity, data);
});
window.location.replace(WooPriceCalculator.getCartUrl());
WooPriceCalculator.setWaitForCalculation(false);
WooPriceCalculator.setAsyncAjaxCalculatePrice(true);
},
};
AWSPCStep.init();
});
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(window.jQuery)}(function(e){e.fn.numeric=function(t,n){"boolean"==typeof t&&(t={decimal:t,negative:!0,decimalPlaces:-1}),void 0===(t=t||{}).negative&&(t.negative=!0);var i=!1===t.decimal?"":t.decimal||".",r=!0===t.negative,a=void 0===t.decimalPlaces?-1:t.decimalPlaces;return n="function"==typeof n?n:function(){},this.data("numeric.decimal",i).data("numeric.negative",r).data("numeric.callback",n).data("numeric.decimalPlaces",a).keypress(e.fn.numeric.keypress).keyup(e.fn.numeric.keyup).blur(e.fn.numeric.blur)},e.fn.numeric.keypress=function(t){var n=e.data(this,"numeric.decimal"),i=e.data(this,"numeric.negative"),r=e.data(this,"numeric.decimalPlaces"),a=t.charCode?t.charCode:t.keyCode?t.keyCode:0;if(13==a&&"input"==this.nodeName.toLowerCase())return!0;if(13==a)return!1;if(35==t.charCode||36==t.charCode||37==t.charCode)return!1;var c=!1;if(t.ctrlKey&&97==a||t.ctrlKey&&65==a)return!0;if(t.ctrlKey&&120==a||t.ctrlKey&&88==a)return!0;if(t.ctrlKey&&99==a||t.ctrlKey&&67==a)return!0;if(t.ctrlKey&&122==a||t.ctrlKey&&90==a)return!0;if(t.ctrlKey&&118==a||t.ctrlKey&&86==a||t.shiftKey&&45==a)return!0;if(a<48||a>57){var l=e(this).val();if(0!==e.inArray("-",l.split(""))&&i&&45==a&&(0===l.length||0===parseInt(e.fn.getSelectionStart(this),10)))return!0;n&&a==n.charCodeAt(0)&&-1!=e.inArray(n,l.split(""))&&(c=!1),8!=a&&9!=a&&13!=a&&35!=a&&36!=a&&37!=a&&39!=a&&46!=a?c=!1:void 0!==t.charCode&&(t.keyCode==t.which&&0!==t.which?(c=!0,46==t.which&&(c=!1)):0!==t.keyCode&&0===t.charCode&&0===t.which&&(c=!0)),n&&a==n.charCodeAt(0)&&(c=-1==e.inArray(n,l.split("")))}else if(c=!0,n&&r>0){var u=e.fn.getSelectionStart(this),s=e.fn.getSelectionEnd(this),d=e.inArray(n,e(this).val().split(""));u===s&&d>=0&&u>d&&e(this).val().length>d+r&&(c=!1)}return c},e.fn.numeric.keyup=function(t){var n=e(this).val();if(n&&n.length>0){var i=e.fn.getSelectionStart(this),r=e.fn.getSelectionEnd(this),a=e.data(this,"numeric.decimal"),c=e.data(this,"numeric.negative"),l=e.data(this,"numeric.decimalPlaces");""!==a&&null!==a&&(0===(g=e.inArray(a,n.split("")))&&(this.value="0"+n,i++,r++),1==g&&"-"==n.charAt(0)&&(this.value="-0"+n.substring(1),i++,r++),n=this.value);for(var u=[0,1,2,3,4,5,6,7,8,9,"-",a],s=n.length,d=s-1;d>=0;d--){var o=n.charAt(d);0!==d&&"-"==o?n=n.substring(0,d)+n.substring(d+1):0!==d||c||"-"!=o||(n=n.substring(1));for(var f=!1,h=0;h<u.length;h++)if(o==u[h]){f=!0;break}f&&" "!=o||(n=n.substring(0,d)+n.substring(d+1))}var m=e.inArray(a,n.split(""));if(m>0)for(var v=s-1;v>m;v--)n.charAt(v)==a&&(n=n.substring(0,v)+n.substring(v+1));if(a&&l>0){var g=e.inArray(a,n.split(""));g>=0&&(n=n.substring(0,g+l+1),r=Math.min(n.length,r))}this.value=n,e.fn.setSelection(this,[i,r])}},e.fn.numeric.blur=function(){var t=e.data(this,"numeric.decimal"),n=e.data(this,"numeric.callback"),i=e.data(this,"numeric.negative"),r=this.value;""!==r&&(new RegExp("^"+(i?"-?":"")+"\\d+$|^"+(i?"-?":"")+"\\d*"+t+"\\d+$").exec(r)||n.apply(this))},e.fn.removeNumeric=function(){return this.data("numeric.decimal",null).data("numeric.negative",null).data("numeric.callback",null).data("numeric.decimalPlaces",null).unbind("keypress",e.fn.numeric.keypress).unbind("keyup",e.fn.numeric.keyup).unbind("blur",e.fn.numeric.blur)},e.fn.getSelectionStart=function(e){if("number"!==e.type){if(e.createTextRange&&document.selection){var t=document.selection.createRange().duplicate();return t.moveEnd("character",e.value.length),""==t.text?e.value.length:Math.max(0,e.value.lastIndexOf(t.text))}try{return e.selectionStart}catch(e){return 0}}},e.fn.getSelectionEnd=function(e){if("number"!==e.type){if(e.createTextRange&&document.selection){var t=document.selection.createRange().duplicate();return t.moveStart("character",-e.value.length),t.text.length}return e.selectionEnd}},e.fn.setSelection=function(e,t){if("number"==typeof t&&(t=[t,t]),t&&t.constructor==Array&&2==t.length)if("number"===e.type)e.focus();else if(e.createTextRange){var n=e.createTextRange();n.collapse(!0),n.moveStart("character",t[0]),n.moveEnd("character",t[1]-t[0]),n.select()}else{e.focus();try{e.setSelectionRange&&e.setSelectionRange(t[0],t[1])}catch(e){}}}});
var DateFormatter;
(function (){
"use strict";
var _compare, _lpad, _extend, defaultSettings, DAY, HOUR;
DAY=1000 * 60 * 60 * 24;
HOUR=3600;
_compare=function (str1, str2){
return typeof(str1)==='string'&&typeof(str2)==='string'&&str1.toLowerCase()===str2.toLowerCase();
};
_lpad=function (value, length, char){
var chr=char||'0', val=value.toString();
return val.length < length ? _lpad(chr + val, length):val;
};
_extend=function (out){
var i, obj;
out=out||{};
for (i=1; i < arguments.length; i++){
obj=arguments[i];
if(!obj){
continue;
}
for (var key in obj){
if(obj.hasOwnProperty(key)){
if(typeof obj[key]==='object'){
_extend(out[key], obj[key]);
}else{
out[key]=obj[key];
}}
}}
return out;
};
defaultSettings={
dateSettings: {
days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
months: [
'January', 'February', 'March', 'April', 'May', 'June', 'July',
'August', 'September', 'October', 'November', 'December'
],
monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
meridiem: ['AM', 'PM'],
ordinal: function (number){
var n=number % 10, suffixes={1: 'st', 2: 'nd', 3: 'rd'};
return Math.floor(number % 100 / 10)===1||!suffixes[n] ? 'th':suffixes[n];
}},
separators: /[ \-+\/\.T:@]/g,
validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,
intParts: /[djwNzmnyYhHgGis]/g,
tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
tzClip: /[^-+\dA-Z]/g
};
DateFormatter=function (options){
var self=this, config=_extend(defaultSettings, options);
self.dateSettings=config.dateSettings;
self.separators=config.separators;
self.validParts=config.validParts;
self.intParts=config.intParts;
self.tzParts=config.tzParts;
self.tzClip=config.tzClip;
};
DateFormatter.prototype={
constructor: DateFormatter,
parseDate: function (vDate, vFormat){
var self=this, vFormatParts, vDateParts, i, vDateFlag=false, vTimeFlag=false, vDatePart, iDatePart,
vSettings=self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,
out={date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};
if(!vDate){
return undefined;
}
if(vDate instanceof Date){
return vDate;
}
if(typeof vDate==='number'){
return new Date(vDate);
}
if(vFormat==='U'){
i=parseInt(vDate);
return i ? new Date(i * 1000):vDate;
}
if(typeof vDate!=='string'){
return '';
}
vFormatParts=vFormat.match(self.validParts);
if(!vFormatParts||vFormatParts.length===0){
throw new Error("Invalid date format definition.");
}
vDateParts=vDate.replace(self.separators, '\0').split('\0');
for (i=0; i < vDateParts.length; i++){
vDatePart=vDateParts[i];
iDatePart=parseInt(vDatePart);
switch (vFormatParts[i]){
case 'y':
case 'Y':
len=vDatePart.length;
if(len===2){
out.year=parseInt((iDatePart < 70 ? '20':'19') + vDatePart);
}else if(len===4){
out.year=iDatePart;
}
vDateFlag=true;
break;
case 'm':
case 'n':
case 'M':
case 'F':
if(isNaN(vDatePart)){
vMonth=vSettings.monthsShort.indexOf(vDatePart);
if(vMonth > -1){
out.month=vMonth + 1;
}
vMonth=vSettings.months.indexOf(vDatePart);
if(vMonth > -1){
out.month=vMonth + 1;
}}else{
if(iDatePart >=1&&iDatePart <=12){
out.month=iDatePart;
}}
vDateFlag=true;
break;
case 'd':
case 'j':
if(iDatePart >=1&&iDatePart <=31){
out.day=iDatePart;
}
vDateFlag=true;
break;
case 'g':
case 'h':
vMeriIndex=(vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :
(vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A'):-1;
mer=vDateParts[vMeriIndex];
if(vMeriIndex > -1){
vMeriOffset=_compare(mer, vSettings.meridiem[0]) ? 0 :
(_compare(mer, vSettings.meridiem[1]) ? 12:-1);
if(iDatePart >=1&&iDatePart <=12&&vMeriOffset > -1){
out.hour=iDatePart + vMeriOffset;
}else if(iDatePart >=0&&iDatePart <=23){
out.hour=iDatePart;
}}else if(iDatePart >=0&&iDatePart <=23){
out.hour=iDatePart;
}
vTimeFlag=true;
break;
case 'G':
case 'H':
if(iDatePart >=0&&iDatePart <=23){
out.hour=iDatePart;
}
vTimeFlag=true;
break;
case 'i':
if(iDatePart >=0&&iDatePart <=59){
out.min=iDatePart;
}
vTimeFlag=true;
break;
case 's':
if(iDatePart >=0&&iDatePart <=59){
out.sec=iDatePart;
}
vTimeFlag=true;
break;
}}
if(vDateFlag===true&&out.year&&out.month&&out.day){
out.date=new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);
}else{
if(vTimeFlag!==true){
return false;
}
out.date=new Date(0, 0, 0, out.hour, out.min, out.sec, 0);
}
return out.date;
},
guessDate: function (vDateStr, vFormat){
if(typeof vDateStr!=='string'){
return vDateStr;
}
var self=this, vParts=vDateStr.replace(self.separators, '\0').split('\0'), vPattern=/^[djmn]/g,
vFormatParts=vFormat.match(self.validParts), vDate=new Date(), vDigit=0, vYear, i, iPart, iSec;
if(!vPattern.test(vFormatParts[0])){
return vDateStr;
}
for (i=0; i < vParts.length; i++){
vDigit=2;
iPart=vParts[i];
iSec=parseInt(iPart.substr(0, 2));
switch (i){
case 0:
if(vFormatParts[0]==='m'||vFormatParts[0]==='n'){
vDate.setMonth(iSec - 1);
}else{
vDate.setDate(iSec);
}
break;
case 1:
if(vFormatParts[0]==='m'||vFormatParts[0]==='n'){
vDate.setDate(iSec);
}else{
vDate.setMonth(iSec - 1);
}
break;
case 2:
vYear=vDate.getFullYear();
if(iPart.length < 4){
vDate.setFullYear(parseInt(vYear.toString().substr(0, 4 - iPart.length) + iPart));
vDigit=iPart.length;
}else{
vDate.setFullYear=parseInt(iPart.substr(0, 4));
vDigit=4;
}
break;
case 3:
vDate.setHours(iSec);
break;
case 4:
vDate.setMinutes(iSec);
break;
case 5:
vDate.setSeconds(iSec);
break;
}
if(iPart.substr(vDigit).length > 0){
vParts.splice(i + 1, 0, iPart.substr(vDigit));
}}
return vDate;
},
parseFormat: function (vChar, vDate){
var self=this, vSettings=self.dateSettings, fmt, backspace=/\\?(.?)/gi, doFormat=function (t, s){
return fmt[t] ? fmt[t]():s;
};
fmt={
d: function (){
return _lpad(fmt.j(), 2);
},
D: function (){
return vSettings.daysShort[fmt.w()];
},
j: function (){
return vDate.getDate();
},
l: function (){
return vSettings.days[fmt.w()];
},
N: function (){
return fmt.w()||7;
},
w: function (){
return vDate.getDay();
},
z: function (){
var a=new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b=new Date(fmt.Y(), 0, 1);
return Math.round((a - b) / DAY);
},
W: function (){
var a=new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b=new Date(a.getFullYear(), 0, 4);
return _lpad(1 + Math.round((a - b) / DAY / 7), 2);
},
F: function (){
return vSettings.months[vDate.getMonth()];
},
m: function (){
return _lpad(fmt.n(), 2);
},
M: function (){
return vSettings.monthsShort[vDate.getMonth()];
},
n: function (){
return vDate.getMonth() + 1;
},
t: function (){
return (new Date(fmt.Y(), fmt.n(), 0)).getDate();
},
L: function (){
var Y=fmt.Y();
return (Y % 4===0&&Y % 100!==0||Y % 400===0) ? 1:0;
},
o: function (){
var n=fmt.n(), W=fmt.W(), Y=fmt.Y();
return Y + (n===12&&W < 9 ? 1:n===1&&W > 9 ? -1:0);
},
Y: function (){
return vDate.getFullYear();
},
y: function (){
return fmt.Y().toString().slice(-2);
},
a: function (){
return fmt.A().toLowerCase();
},
A: function (){
var n=fmt.G() < 12 ? 0:1;
return vSettings.meridiem[n];
},
B: function (){
var H=vDate.getUTCHours() * HOUR, i=vDate.getUTCMinutes() * 60, s=vDate.getUTCSeconds();
return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);
},
g: function (){
return fmt.G() % 12||12;
},
G: function (){
return vDate.getHours();
},
h: function (){
return _lpad(fmt.g(), 2);
},
H: function (){
return _lpad(fmt.G(), 2);
},
i: function (){
return _lpad(vDate.getMinutes(), 2);
},
s: function (){
return _lpad(vDate.getSeconds(), 2);
},
u: function (){
return _lpad(vDate.getMilliseconds() * 1000, 6);
},
e: function (){
var str=/\((.*)\)/.exec(String(vDate))[1];
return str||'Coordinated Universal Time';
},
T: function (){
var str=(String(vDate).match(self.tzParts)||[""]).pop().replace(self.tzClip, "");
return str||'UTC';
},
I: function (){
var a=new Date(fmt.Y(), 0), c=Date.UTC(fmt.Y(), 0),
b=new Date(fmt.Y(), 6), d=Date.UTC(fmt.Y(), 6);
return ((a - c)!==(b - d)) ? 1:0;
},
O: function (){
var tzo=vDate.getTimezoneOffset(), a=Math.abs(tzo);
return (tzo > 0 ? '-':'+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);
},
P: function (){
var O=fmt.O();
return (O.substr(0, 3) + ':' + O.substr(3, 2));
},
Z: function (){
return -vDate.getTimezoneOffset() * 60;
},
c: function (){
return 'Y-m-d\\TH:i:sP'.replace(backspace, doFormat);
},
r: function (){
return 'D, d M Y H:i:s O'.replace(backspace, doFormat);
},
U: function (){
return vDate.getTime() / 1000||0;
}};
return doFormat(vChar, vChar);
},
formatDate: function (vDate, vFormat){
var self=this, i, n, len, str, vChar, vDateStr='';
if(typeof vDate==='string'){
vDate=self.parseDate(vDate, vFormat);
if(vDate===false){
return false;
}}
if(vDate instanceof Date){
len=vFormat.length;
for (i=0; i < len; i++){
vChar=vFormat.charAt(i);
if(vChar==='S'){
continue;
}
str=self.parseFormat(vChar, vDate);
if(i!==(len - 1)&&self.intParts.test(vChar)&&vFormat.charAt(i + 1)==='S'){
n=parseInt(str);
str +=self.dateSettings.ordinal(n);
}
vDateStr +=str;
}
return vDateStr;
}
return '';
}};})();
;(function (factory){
if(typeof define==='function'&&define.amd){
define(['jquery', 'jquery-mousewheel'], factory);
}else if(typeof exports==='object'){
module.exports=factory;
}else{
factory(jQuery);
}}(function ($){
'use strict';
var currentlyScrollingTimeDiv=false;
var default_options={
i18n: {
ar: {
months: [
"كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"
],
dayOfWeekShort: [
"ن", "ث", "ع", "خ", "ج", "س", "ح"
],
dayOfWeek: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"]
},
ro: {
months: [
"Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"
],
dayOfWeekShort: [
"Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"
],
dayOfWeek: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"]
},
id: {
months: [
"Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"
],
dayOfWeekShort: [
"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"
],
dayOfWeek: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"]
},
is: {
months: [
"Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"
],
dayOfWeekShort: [
"Sun", "Mán", "Þrið", "Mið", "Fim", "Fös", "Lau"
],
dayOfWeek: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"]
},
bg: {
months: [
"Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"
],
dayOfWeekShort: [
"Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
],
dayOfWeek: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"]
},
fa: {
months: [
'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'
],
dayOfWeekShort: [
'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'
],
dayOfWeek: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"]
},
ru: {
months: [
'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
],
dayOfWeekShort: [
"Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
],
dayOfWeek: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
},
uk: {
months: [
'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
],
dayOfWeekShort: [
"Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт"
],
dayOfWeek: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"]
},
en: {
months: [
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
],
dayOfWeekShort: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
],
dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
},
el: {
months: [
"Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"
],
dayOfWeekShort: [
"Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"
],
dayOfWeek: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"]
},
de: {
months: [
'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
],
dayOfWeekShort: [
"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
],
dayOfWeek: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
},
nl: {
months: [
"januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"
],
dayOfWeekShort: [
"zo", "ma", "di", "wo", "do", "vr", "za"
],
dayOfWeek: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"]
},
tr: {
months: [
"Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
],
dayOfWeekShort: [
"Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"
],
dayOfWeek: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"]
},
fr: {
months: [
"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
],
dayOfWeekShort: [
"Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
],
dayOfWeek: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
},
es: {
months: [
"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
],
dayOfWeekShort: [
"Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"
],
dayOfWeek: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"]
},
th: {
months: [
'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
],
dayOfWeekShort: [
'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
],
dayOfWeek: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"]
},
pl: {
months: [
"styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"
],
dayOfWeekShort: [
"nd", "pn", "wt", "śr", "cz", "pt", "sb"
],
dayOfWeek: ["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"]
},
pt: {
months: [
"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
],
dayOfWeekShort: [
"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"
],
dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
},
ch: {
months: [
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
],
dayOfWeekShort: [
"日", "一", "二", "三", "四", "五", "六"
]
},
se: {
months: [
"Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September",  "Oktober", "November", "December"
],
dayOfWeekShort: [
"Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
]
},
kr: {
months: [
"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
],
dayOfWeekShort: [
"일", "월", "화", "수", "목", "금", "토"
],
dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
},
it: {
months: [
"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
],
dayOfWeekShort: [
"Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"
],
dayOfWeek: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]
},
da: {
months: [
"January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December"
],
dayOfWeekShort: [
"Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
],
dayOfWeek: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"]
},
no: {
months: [
"Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"
],
dayOfWeekShort: [
"Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
],
dayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']
},
ja: {
months: [
"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
],
dayOfWeekShort: [
"日", "月", "火", "水", "木", "金", "土"
],
dayOfWeek: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"]
},
vi: {
months: [
"Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"
],
dayOfWeekShort: [
"CN", "T2", "T3", "T4", "T5", "T6", "T7"
],
dayOfWeek: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"]
},
sl: {
months: [
"Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"
],
dayOfWeekShort: [
"Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"
],
dayOfWeek: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"]
},
cs: {
months: [
"Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"
],
dayOfWeekShort: [
"Ne", "Po", "Út", "St", "Čt", "Pá", "So"
]
},
hu: {
months: [
"Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"
],
dayOfWeekShort: [
"Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo"
],
dayOfWeek: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
},
az: {
months: [
"Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"
],
dayOfWeekShort: [
"B", "Be", "Ça", "Ç", "Ca", "C", "Ş"
],
dayOfWeek: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"]
},
bs: {
months: [
"Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
],
dayOfWeekShort: [
"Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
],
dayOfWeek: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
},
ca: {
months: [
"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"
],
dayOfWeekShort: [
"Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"
],
dayOfWeek: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"]
},
'en-GB': {
months: [
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
],
dayOfWeekShort: [
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
],
dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
},
et: { //"Eesti"
months: [
"Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"
],
dayOfWeekShort: [
"P", "E", "T", "K", "N", "R", "L"
],
dayOfWeek: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"]
},
eu: {
months: [
"Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"
],
dayOfWeekShort: [
"Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La."
],
dayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']
},
fi: {
months: [
"Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"
],
dayOfWeekShort: [
"Su", "Ma", "Ti", "Ke", "To", "Pe", "La"
],
dayOfWeek: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"]
},
gl: {
months: [
"Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec"
],
dayOfWeekShort: [
"Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab"
],
dayOfWeek: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"]
},
hr: {
months: [
"Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"
],
dayOfWeekShort: [
"Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
],
dayOfWeek: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
},
ko: {
months: [
"1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
],
dayOfWeekShort: [
"일", "월", "화", "수", "목", "금", "토"
],
dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
},
lt: {
months: [
"Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio"
],
dayOfWeekShort: [
"Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš"
],
dayOfWeek: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"]
},
lv: {
months: [
"Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"
],
dayOfWeekShort: [
"Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St"
],
dayOfWeek: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"]
},
mk: {
months: [
"јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"
],
dayOfWeekShort: [
"нед", "пон", "вто", "сре", "чет", "пет", "саб"
],
dayOfWeek: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"]
},
mn: {
months: [
"1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар"
],
dayOfWeekShort: [
"Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням"
],
dayOfWeek: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"]
},
'pt-BR': {
months: [
"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
],
dayOfWeekShort: [
"Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"
],
dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
},
sk: {
months: [
"Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"
],
dayOfWeekShort: [
"Ne", "Po", "Ut", "St", "Št", "Pi", "So"
],
dayOfWeek: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"]
},
sq: {
months: [
"Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"
],
dayOfWeekShort: [
"Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"
],
dayOfWeek: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"]
},
'sr-YU': {
months: [
"Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
],
dayOfWeekShort: [
"Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub"
],
dayOfWeek: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"]
},
sr: {
months: [
"јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар"
],
dayOfWeekShort: [
"нед", "пон", "уто", "сре", "чет", "пет", "суб"
],
dayOfWeek: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"]
},
sv: {
months: [
"Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
],
dayOfWeekShort: [
"Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
],
dayOfWeek: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"]
},
'zh-TW': {
months: [
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
],
dayOfWeekShort: [
"日", "一", "二", "三", "四", "五", "六"
],
dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
},
zh: {
months: [
"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
],
dayOfWeekShort: [
"日", "一", "二", "三", "四", "五", "六"
],
dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
},
he: {
months: [
'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'
],
dayOfWeekShort: [
'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת'
],
dayOfWeek: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
},
hy: {
months: [
"Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"
],
dayOfWeekShort: [
"Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ"
],
dayOfWeek: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"]
},
kg: {
months: [
'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'
],
dayOfWeekShort: [
"Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише"
],
dayOfWeek: [
"Жекшемб", "Дүйшөмб", "Шейшемб", "Шаршемб", "Бейшемби", "Жума", "Ишенб"
]
},
rm: {
months: [
"Schaner", "Favrer", "Mars", "Avrigl", "Matg", "Zercladur", "Fanadur", "Avust", "Settember", "October", "November", "December"
],
dayOfWeekShort: [
"Du", "Gli", "Ma", "Me", "Gie", "Ve", "So"
],
dayOfWeek: [
"Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda"
]
},
ka: {
months: [
'იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'
],
dayOfWeekShort: [
"კვ", "ორშ", "სამშ", "ოთხ", "ხუთ", "პარ", "შაბ"
],
dayOfWeek: ["კვირა", "ორშაბათი", "სამშაბათი", "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი"]
},
},
value: '',
rtl: false,
format:	'Y/m/d H:i',
formatTime:	'H:i',
formatDate:	'Y/m/d',
startDate:	false,
step: 60,
monthChangeSpinner: true,
closeOnDateSelect: false,
closeOnTimeSelect: true,
closeOnWithoutClick: true,
closeOnInputClick: true,
timepicker: true,
datepicker: true,
weeks: false,
defaultTime: false,
defaultDate: false,
minDate: false,
maxDate: false,
minTime: false,
maxTime: false,
disabledMinTime: false,
disabledMaxTime: false,
allowTimes: [],
opened: false,
initTime: true,
inline: false,
theme: '',
onSelectDate: function (){},
onSelectTime: function (){},
onChangeMonth: function (){},
onGetWeekOfYear: function (){},
onChangeYear: function (){},
onChangeDateTime: function (){},
onShow: function (){},
onClose: function (){},
onGenerate: function (){},
withoutCopyright: true,
inverseButton: false,
hours12: false,
next: 'xdsoft_next',
prev:'xdsoft_prev',
dayOfWeekStart: 0,
parentID: 'body',
timeHeightInTimePicker: 25,
timepickerScrollbar: true,
todayButton: true,
prevButton: true,
nextButton: true,
defaultSelect: true,
scrollMonth: true,
scrollTime: true,
scrollInput: true,
lazyInit: false,
mask: false,
validateOnBlur: true,
allowBlank: true,
yearStart: 1950,
yearEnd: 2050,
monthStart: 0,
monthEnd: 11,
style: '',
id: '',
fixed: false,
roundTime: 'round',
className: '',
weekends: [],
highlightedDates: [],
highlightedPeriods: [],
allowDates:[],
allowDateRe:null,
disabledDates:[],
disabledWeekDays: [],
yearOffset: 0,
beforeShowDay: null,
enterLikeTab: true,
showApplyButton: false
};
var dateHelper=null,
globalLocaleDefault='en',
globalLocale='en';
var dateFormatterOptionsDefault={
meridiem: ['AM', 'PM']
};
var initDateFormatter=function(){
var locale=default_options.i18n[globalLocale],
opts={
days: locale.dayOfWeek,
daysShort: locale.dayOfWeekShort,
months: locale.months,
monthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) }),
};
dateHelper=new DateFormatter({
dateSettings: $.extend({}, dateFormatterOptionsDefault, opts)
});
};
$.xdsoft_datetimepicker={
setLocale: function(locale){
var newLocale=default_options.i18n[locale]?locale:globalLocaleDefault;
if(globalLocale!=newLocale){
globalLocale=newLocale;
initDateFormatter();
}},
setDateFormatter: function(dateFormatter){
dateHelper=dateFormatter;
},
RFC_2822: 'D, d M Y H:i:s O',
ATOM: 'Y-m-d\TH:i:sP',
ISO_8601: 'Y-m-d\TH:i:sO',
RFC_822: 'D, d M y H:i:s O',
RFC_850: 'l, d-M-y H:i:s T',
RFC_1036: 'D, d M y H:i:s O',
RFC_1123: 'D, d M Y H:i:s O',
RSS: 'D, d M Y H:i:s O',
W3C: 'Y-m-d\TH:i:sP'
};
initDateFormatter();
if(!window.getComputedStyle){
window.getComputedStyle=function (el, pseudo){
this.el=el;
this.getPropertyValue=function (prop){
var re=/(\-([a-z]){1})/g;
if(prop==='float'){
prop='styleFloat';
}
if(re.test(prop)){
prop=prop.replace(re, function (a, b, c){
return c.toUpperCase();
});
}
return el.currentStyle[prop]||null;
};
return this;
};}
if(!Array.prototype.indexOf){
Array.prototype.indexOf=function (obj, start){
var i, j;
for (i=(start||0), j=this.length; i < j; i +=1){
if(this[i]===obj){ return i; }}
return -1;
};}
Date.prototype.countDaysInMonth=function (){
return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();
};
$.fn.xdsoftScroller=function (percent){
return this.each(function (){
var timeboxparent=$(this),
pointerEventToXY=function (e){
var out={x: 0, y: 0},
touch;
if(e.type==='touchstart'||e.type==='touchmove'||e.type==='touchend'||e.type==='touchcancel'){
touch=e.originalEvent.touches[0]||e.originalEvent.changedTouches[0];
out.x=touch.clientX;
out.y=touch.clientY;
}else if(e.type==='mousedown'||e.type==='mouseup'||e.type==='mousemove'||e.type==='mouseover'||e.type==='mouseout'||e.type==='mouseenter'||e.type==='mouseleave'){
out.x=e.clientX;
out.y=e.clientY;
}
return out;
},
timebox,
parentHeight,
height,
scrollbar,
scroller,
maximumOffset=100,
start=false,
startY=0,
startTop=0,
h1=0,
touchStart=false,
startTopScroll=0,
calcOffset=function (){};
if(percent==='hide'){
timeboxparent.find('.xdsoft_scrollbar').hide();
return;
}
if(!$(this).hasClass('xdsoft_scroller_box')){
timebox=timeboxparent.children().eq(0);
parentHeight=timeboxparent[0].clientHeight;
height=timebox[0].offsetHeight;
scrollbar=$('<div class="xdsoft_scrollbar"></div>');
scroller=$('<div class="xdsoft_scroller"></div>');
scrollbar.append(scroller);
timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
calcOffset=function calcOffset(event){
var offset=pointerEventToXY(event).y - startY + startTopScroll;
if(offset < 0){
offset=0;
}
if(offset + scroller[0].offsetHeight > h1){
offset=h1 - scroller[0].offsetHeight;
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset:0]);
};
scroller
.on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event){
if(!parentHeight){
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
}
startY=pointerEventToXY(event).y;
startTopScroll=parseInt(scroller.css('margin-top'), 10);
h1=scrollbar[0].offsetHeight;
if(event.type==='mousedown'||event.type==='touchstart'){
if(document){
$(document.body).addClass('xdsoft_noselect');
}
$([document.body, window]).on('touchend mouseup.xdsoft_scroller', function arguments_callee(){
$([document.body, window]).off('touchend mouseup.xdsoft_scroller', arguments_callee)
.off('mousemove.xdsoft_scroller', calcOffset)
.removeClass('xdsoft_noselect');
});
$(document.body).on('mousemove.xdsoft_scroller', calcOffset);
}else{
touchStart=true;
event.stopPropagation();
event.preventDefault();
}})
.on('touchmove', function (event){
if(touchStart){
event.preventDefault();
calcOffset(event);
}})
.on('touchend touchcancel', function (){
touchStart=false;
startTopScroll=0;
});
timeboxparent
.on('scroll_element.xdsoft_scroller', function (event, percentage){
if(!parentHeight){
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);
}
percentage=percentage > 1 ? 1:(percentage < 0||isNaN(percentage)) ? 0:percentage;
scroller.css('margin-top', maximumOffset * percentage);
setTimeout(function (){
timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));
}, 10);
})
.on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll){
var percent, sh;
parentHeight=timeboxparent[0].clientHeight;
height=timebox[0].offsetHeight;
percent=parentHeight / height;
sh=percent * scrollbar[0].offsetHeight;
if(percent > 1){
scroller.hide();
}else{
scroller.show();
scroller.css('height', parseInt(sh > 10 ? sh:10, 10));
maximumOffset=scrollbar[0].offsetHeight - scroller[0].offsetHeight;
if(noTriggerScroll!==true){
timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage||Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);
}}
});
timeboxparent.on('mousewheel', function (event){
var top=Math.abs(parseInt(timebox.css('marginTop'), 10));
top=top - (event.deltaY * 20);
if(top < 0){
top=0;
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);
event.stopPropagation();
return false;
});
timeboxparent.on('touchstart', function (event){
start=pointerEventToXY(event);
startTop=Math.abs(parseInt(timebox.css('marginTop'), 10));
});
timeboxparent.on('touchmove', function (event){
if(start){
event.preventDefault();
var coord=pointerEventToXY(event);
timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);
}});
timeboxparent.on('touchend touchcancel', function (){
start=false;
startTop=0;
});
}
timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
});
};
$.fn.xdsoft_datetimepicker=function (opt, opt2){
var result=this,
KEY0=48,
KEY9=57,
_KEY0=96,
_KEY9=105,
CTRLKEY=17,
DEL=46,
ENTER=13,
ESC=27,
BACKSPACE=8,
ARROWLEFT=37,
ARROWUP=38,
ARROWRIGHT=39,
ARROWDOWN=40,
TAB=9,
F5=116,
AKEY=65,
CKEY=67,
VKEY=86,
ZKEY=90,
YKEY=89,
ctrlDown=false,
options=($.isPlainObject(opt)||!opt) ? $.extend(true, {}, default_options, opt):$.extend(true, {}, default_options),
lazyInitTimer=0,
createDateTimePicker,
destroyDateTimePicker,
lazyInit=function (input){
input
.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback(){
if(input.is(':disabled')||input.data('xdsoft_datetimepicker')){
return;
}
clearTimeout(lazyInitTimer);
lazyInitTimer=setTimeout(function (){
if(!input.data('xdsoft_datetimepicker')){
createDateTimePicker(input);
}
input
.off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)
.trigger('open.xdsoft');
}, 100);
});
};
createDateTimePicker=function (input){
var datetimepicker=$('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'),
xdsoft_copyright=$('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
datepicker=$('<div class="xdsoft_datepicker active"></div>'),
month_picker=$('<div class="xdsoft_monthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
'<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
'<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
'<button type="button" class="xdsoft_next"></button></div>'),
calendar=$('<div class="xdsoft_calendar"></div>'),
timepicker=$('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
timeboxparent=timepicker.find('.xdsoft_time_box').eq(0),
timebox=$('<div class="xdsoft_time_variant"></div>'),
applyButton=$('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
monthselect=$('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
yearselect=$('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
triggerAfterOpen=false,
XDSoft_datetime,
xchangeTimer,
timerclick,
current_time_index,
setPos,
timer=0,
_xdsoft_datetime,
forEachAncestorOf,
throttle;
if(options.id){
datetimepicker.attr('id', options.id);
}
if(options.style){
datetimepicker.attr('style', options.style);
}
if(options.weeks){
datetimepicker.addClass('xdsoft_showweeks');
}
if(options.rtl){
datetimepicker.addClass('xdsoft_rtl');
}
datetimepicker.addClass('xdsoft_' + options.theme);
datetimepicker.addClass(options.className);
month_picker
.find('.xdsoft_month span')
.after(monthselect);
month_picker
.find('.xdsoft_year span')
.after(yearselect);
month_picker
.find('.xdsoft_month,.xdsoft_year')
.on('touchstart mousedown.xdsoft', function (event){
var select=$(this).find('.xdsoft_select').eq(0),
val=0,
top=0,
visible=select.is(':visible'),
items,
i;
month_picker
.find('.xdsoft_select')
.hide();
if(_xdsoft_datetime.currentTime){
val=_xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth':'getFullYear']();
}
select[visible ? 'hide':'show']();
for (items=select.find('div.xdsoft_option'), i=0; i < items.length; i +=1){
if(items.eq(i).data('value')===val){
break;
}else{
top +=items[0].offsetHeight;
}}
select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
event.stopPropagation();
return false;
});
month_picker
.find('.xdsoft_select')
.xdsoftScroller()
.on('touchstart mousedown.xdsoft', function (event){
event.stopPropagation();
event.preventDefault();
})
.on('touchstart mousedown.xdsoft', '.xdsoft_option', function (){
if(_xdsoft_datetime.currentTime===undefined||_xdsoft_datetime.currentTime===null){
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
}
var year=_xdsoft_datetime.currentTime.getFullYear();
if(_xdsoft_datetime&&_xdsoft_datetime.currentTime){
_xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth':'setFullYear']($(this).data('value'));
}
$(this).parent().parent().hide();
datetimepicker.trigger('xchange.xdsoft');
if(options.onChangeMonth&&$.isFunction(options.onChangeMonth)){
options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
if(year!==_xdsoft_datetime.currentTime.getFullYear()&&$.isFunction(options.onChangeYear)){
options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}});
datetimepicker.getValue=function (){
return _xdsoft_datetime.getCurrentTime();
};
datetimepicker.setOptions=function (_options){
var highlightedDates={};
options=$.extend(true, {}, options, _options);
if(_options.allowTimes&&$.isArray(_options.allowTimes)&&_options.allowTimes.length){
options.allowTimes=$.extend(true, [], _options.allowTimes);
}
if(_options.weekends&&$.isArray(_options.weekends)&&_options.weekends.length){
options.weekends=$.extend(true, [], _options.weekends);
}
if(_options.allowDates&&$.isArray(_options.allowDates)&&_options.allowDates.length){
options.allowDates=$.extend(true, [], _options.allowDates);
}
if(_options.allowDateRe&&Object.prototype.toString.call(_options.allowDateRe)==="[object String]"){
options.allowDateRe=new RegExp(_options.allowDateRe);
}
if(_options.highlightedDates&&$.isArray(_options.highlightedDates)&&_options.highlightedDates.length){
$.each(_options.highlightedDates, function (index, value){
var splitData=$.map(value.split(','), $.trim),
exDesc,
hDate=new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]),
keyDate=dateHelper.formatDate(hDate.date, options.formatDate);
if(highlightedDates[keyDate]!==undefined){
exDesc=highlightedDates[keyDate].desc;
if(exDesc&&exDesc.length&&hDate.desc&&hDate.desc.length){
highlightedDates[keyDate].desc=exDesc + "\n" + hDate.desc;
}}else{
highlightedDates[keyDate]=hDate;
}});
options.highlightedDates=$.extend(true, [], highlightedDates);
}
if(_options.highlightedPeriods&&$.isArray(_options.highlightedPeriods)&&_options.highlightedPeriods.length){
highlightedDates=$.extend(true, [], options.highlightedDates);
$.each(_options.highlightedPeriods, function (index, value){
var dateTest,
dateEnd,
desc,
hDate,
keyDate,
exDesc,
style;
if($.isArray(value)){
dateTest=value[0];
dateEnd=value[1];
desc=value[2];
style=value[3];
}else{
var splitData=$.map(value.split(','), $.trim);
dateTest=dateHelper.parseDate(splitData[0], options.formatDate);
dateEnd=dateHelper.parseDate(splitData[1], options.formatDate);
desc=splitData[2];
style=splitData[3];
}
while (dateTest <=dateEnd){
hDate=new HighlightedDate(dateTest, desc, style);
keyDate=dateHelper.formatDate(dateTest, options.formatDate);
dateTest.setDate(dateTest.getDate() + 1);
if(highlightedDates[keyDate]!==undefined){
exDesc=highlightedDates[keyDate].desc;
if(exDesc&&exDesc.length&&hDate.desc&&hDate.desc.length){
highlightedDates[keyDate].desc=exDesc + "\n" + hDate.desc;
}}else{
highlightedDates[keyDate]=hDate;
}}
});
options.highlightedDates=$.extend(true, [], highlightedDates);
}
if(_options.disabledDates&&$.isArray(_options.disabledDates)&&_options.disabledDates.length){
options.disabledDates=$.extend(true, [], _options.disabledDates);
}
if(_options.disabledWeekDays&&$.isArray(_options.disabledWeekDays)&&_options.disabledWeekDays.length){
options.disabledWeekDays=$.extend(true, [], _options.disabledWeekDays);
}
if((options.open||options.opened)&&(!options.inline)){
input.trigger('open.xdsoft');
}
if(options.inline){
triggerAfterOpen=true;
datetimepicker.addClass('xdsoft_inline');
input.after(datetimepicker).hide();
}
if(options.inverseButton){
options.next='xdsoft_prev';
options.prev='xdsoft_next';
}
if(options.datepicker){
datepicker.addClass('active');
}else{
datepicker.removeClass('active');
}
if(options.timepicker){
timepicker.addClass('active');
}else{
timepicker.removeClass('active');
}
if(options.value){
_xdsoft_datetime.setCurrentTime(options.value);
if(input&&input.val){
input.val(_xdsoft_datetime.str);
}}
if(isNaN(options.dayOfWeekStart)){
options.dayOfWeekStart=0;
}else{
options.dayOfWeekStart=parseInt(options.dayOfWeekStart, 10) % 7;
}
if(!options.timepickerScrollbar){
timeboxparent.xdsoftScroller('hide');
}
if(options.minDate&&/^[\+\-](.*)$/.test(options.minDate)){
options.minDate=dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);
}
if(options.maxDate&&/^[\+\-](.*)$/.test(options.maxDate)){
options.maxDate=dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);
}
applyButton.toggle(options.showApplyButton);
month_picker
.find('.xdsoft_today_button')
.css('visibility', !options.todayButton ? 'hidden':'visible');
month_picker
.find('.' + options.prev)
.css('visibility', !options.prevButton ? 'hidden':'visible');
month_picker
.find('.' + options.next)
.css('visibility', !options.nextButton ? 'hidden':'visible');
setMask(options);
if(options.validateOnBlur){
input
.off('blur.xdsoft')
.on('blur.xdsoft', function (){
if(options.allowBlank&&(!$.trim($(this).val()).length||(typeof options.mask=="string"&&$.trim($(this).val())===options.mask.replace(/[0-9]/g, '_')))){
$(this).val(null);
datetimepicker.data('xdsoft_datetime').empty();
}else{
var d=dateHelper.parseDate($(this).val(), options.format);
if(d){
$(this).val(dateHelper.formatDate(d, options.format));
}else{
var splittedHours=+([$(this).val()[0], $(this).val()[1]].join('')),
splittedMinutes=+([$(this).val()[2], $(this).val()[3]].join(''));
if(!options.datepicker&&options.timepicker&&splittedHours >=0&&splittedHours < 24&&splittedMinutes >=0&&splittedMinutes < 60){
$(this).val([splittedHours, splittedMinutes].map(function (item){
return item > 9 ? item:'0' + item;
}).join(':'));
}else{
$(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));
}}
datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
}
datetimepicker.trigger('changedatetime.xdsoft');
datetimepicker.trigger('close.xdsoft');
});
}
options.dayOfWeekStartPrev=(options.dayOfWeekStart===0) ? 6:options.dayOfWeekStart - 1;
datetimepicker
.trigger('xchange.xdsoft')
.trigger('afterOpen.xdsoft');
};
datetimepicker
.data('options', options)
.on('touchstart mousedown.xdsoft', function (event){
event.stopPropagation();
event.preventDefault();
yearselect.hide();
monthselect.hide();
return false;
});
timeboxparent.append(timebox);
timeboxparent.xdsoftScroller();
datetimepicker.on('afterOpen.xdsoft', function (){
timeboxparent.xdsoftScroller();
});
datetimepicker
.append(datepicker)
.append(timepicker);
if(options.withoutCopyright!==true){
datetimepicker
.append(xdsoft_copyright);
}
datepicker
.append(month_picker)
.append(calendar)
.append(applyButton);
$(options.parentID)
.append(datetimepicker);
XDSoft_datetime=function (){
var _this=this;
_this.now=function (norecursion){
var d=new Date(),
date,
time;
if(!norecursion&&options.defaultDate){
date=_this.strToDateTime(options.defaultDate);
d.setFullYear(date.getFullYear());
d.setMonth(date.getMonth());
d.setDate(date.getDate());
}
if(options.yearOffset){
d.setFullYear(d.getFullYear() + options.yearOffset);
}
if(!norecursion&&options.defaultTime){
time=_this.strtotime(options.defaultTime);
d.setHours(time.getHours());
d.setMinutes(time.getMinutes());
}
return d;
};
_this.isValidDate=function (d){
if(Object.prototype.toString.call(d)!=="[object Date]"){
return false;
}
return !isNaN(d.getTime());
};
_this.setCurrentTime=function (dTime, requireValidDate){
if(typeof dTime==='string'){
_this.currentTime=_this.strToDateTime(dTime);
}
else if(_this.isValidDate(dTime)){
_this.currentTime=dTime;
}
else if(!dTime&&!requireValidDate&&options.allowBlank){
_this.currentTime=null;
}else{
_this.currentTime=_this.now();
}
datetimepicker.trigger('xchange.xdsoft');
};
_this.empty=function (){
_this.currentTime=null;
};
_this.getCurrentTime=function (dTime){
return _this.currentTime;
};
_this.nextMonth=function (){
if(_this.currentTime===undefined||_this.currentTime===null){
_this.currentTime=_this.now();
}
var month=_this.currentTime.getMonth() + 1,
year;
if(month===12){
_this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
month=0;
}
year=_this.currentTime.getFullYear();
_this.currentTime.setDate(Math.min(new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
_this.currentTime.getDate()
)
);
_this.currentTime.setMonth(month);
if(options.onChangeMonth&&$.isFunction(options.onChangeMonth)){
options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
if(year!==_this.currentTime.getFullYear()&&$.isFunction(options.onChangeYear)){
options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
datetimepicker.trigger('xchange.xdsoft');
return month;
};
_this.prevMonth=function (){
if(_this.currentTime===undefined||_this.currentTime===null){
_this.currentTime=_this.now();
}
var month=_this.currentTime.getMonth() - 1;
if(month===-1){
_this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
month=11;
}
_this.currentTime.setDate(Math.min(new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
_this.currentTime.getDate()
)
);
_this.currentTime.setMonth(month);
if(options.onChangeMonth&&$.isFunction(options.onChangeMonth)){
options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
datetimepicker.trigger('xchange.xdsoft');
return month;
};
_this.getWeekOfYear=function (datetime){
if(options.onGetWeekOfYear&&$.isFunction(options.onGetWeekOfYear)){
var week=options.onGetWeekOfYear.call(datetimepicker, datetime);
if(typeof week!=='undefined'){
return week;
}}
var onejan=new Date(datetime.getFullYear(), 0, 1);
if(onejan.getDay()!=4)
onejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));
return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);
};
_this.strToDateTime=function (sDateTime){
var tmpDate=[], timeOffset, currentTime;
if(sDateTime&&sDateTime instanceof Date&&_this.isValidDate(sDateTime)){
return sDateTime;
}
tmpDate=/^(\+|\-)(.*)$/.exec(sDateTime);
if(tmpDate){
tmpDate[2]=dateHelper.parseDate(tmpDate[2], options.formatDate);
}
if(tmpDate&&tmpDate[2]){
timeOffset=tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
currentTime=new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);
}else{
currentTime=sDateTime ? dateHelper.parseDate(sDateTime, options.format):_this.now();
}
if(!_this.isValidDate(currentTime)){
currentTime=_this.now();
}
return currentTime;
};
_this.strToDate=function (sDate){
if(sDate&&sDate instanceof Date&&_this.isValidDate(sDate)){
return sDate;
}
var currentTime=sDate ? dateHelper.parseDate(sDate, options.formatDate):_this.now(true);
if(!_this.isValidDate(currentTime)){
currentTime=_this.now(true);
}
return currentTime;
};
_this.strtotime=function (sTime){
if(sTime&&sTime instanceof Date&&_this.isValidDate(sTime)){
return sTime;
}
var currentTime=sTime ? dateHelper.parseDate(sTime, options.formatTime):_this.now(true);
if(!_this.isValidDate(currentTime)){
currentTime=_this.now(true);
}
return currentTime;
};
_this.str=function (){
return dateHelper.formatDate(_this.currentTime, options.format);
};
_this.currentTime=this.now();
};
_xdsoft_datetime=new XDSoft_datetime();
applyButton.on('touchend click', function (e){
e.preventDefault();
datetimepicker.data('changed', true);
_xdsoft_datetime.setCurrentTime(getCurrentValue());
input.val(_xdsoft_datetime.str());
datetimepicker.trigger('close.xdsoft');
});
month_picker
.find('.xdsoft_today_button')
.on('touchend mousedown.xdsoft', function (){
datetimepicker.data('changed', true);
_xdsoft_datetime.setCurrentTime(0, true);
datetimepicker.trigger('afterOpen.xdsoft');
}).on('dblclick.xdsoft', function (){
var currentDate=_xdsoft_datetime.getCurrentTime(), minDate, maxDate;
currentDate=new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
minDate=_xdsoft_datetime.strToDate(options.minDate);
minDate=new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
if(currentDate < minDate){
return;
}
maxDate=_xdsoft_datetime.strToDate(options.maxDate);
maxDate=new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
if(currentDate > maxDate){
return;
}
input.val(_xdsoft_datetime.str());
input.trigger('change');
datetimepicker.trigger('close.xdsoft');
});
month_picker
.find('.xdsoft_prev,.xdsoft_next')
.on('touchend mousedown.xdsoft', function (){
var $this=$(this),
timer=0,
stop=false;
(function arguments_callee1(v){
if($this.hasClass(options.next)){
_xdsoft_datetime.nextMonth();
}else if($this.hasClass(options.prev)){
_xdsoft_datetime.prevMonth();
}
if(options.monthChangeSpinner){
if(!stop){
timer=setTimeout(arguments_callee1, v||100);
}}
}(500));
$([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee2(){
clearTimeout(timer);
stop=true;
$([document.body, window]).off('touchend mouseup.xdsoft', arguments_callee2);
});
});
timepicker
.find('.xdsoft_prev,.xdsoft_next')
.on('touchend mousedown.xdsoft', function (){
var $this=$(this),
timer=0,
stop=false,
period=110;
(function arguments_callee4(v){
var pheight=timeboxparent[0].clientHeight,
height=timebox[0].offsetHeight,
top=Math.abs(parseInt(timebox.css('marginTop'), 10));
if($this.hasClass(options.next)&&(height - pheight) - options.timeHeightInTimePicker >=top){
timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');
}else if($this.hasClass(options.prev)&&top - options.timeHeightInTimePicker >=0){
timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox[0].style.marginTop, 10) / (height - pheight))]);
period=(period > 10) ? 10:period - 10;
if(!stop){
timer=setTimeout(arguments_callee4, v||period);
}}(500));
$([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee5(){
clearTimeout(timer);
stop=true;
$([document.body, window])
.off('touchend mouseup.xdsoft', arguments_callee5);
});
});
xchangeTimer=0;
datetimepicker
.on('xchange.xdsoft', function (event){
clearTimeout(xchangeTimer);
xchangeTimer=setTimeout(function (){
if(_xdsoft_datetime.currentTime===undefined||_xdsoft_datetime.currentTime===null){
if(options.allowBlank)
return;
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
}
var table='',
start=new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),
i=0,
j,
today=_xdsoft_datetime.now(),
maxDate=false,
minDate=false,
hDate,
day,
d,
y,
m,
w,
classes=[],
customDateSettings,
newRow=true,
time='',
h='',
line_time,
description;
while (start.getDay()!==options.dayOfWeekStart){
start.setDate(start.getDate() - 1);
}
table +='<table><thead><tr>';
if(options.weeks){
table +='<th></th>';
}
for (j=0; j < 7; j +=1){
table +='<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';
}
table +='</tr></thead>';
table +='<tbody>';
if(options.maxDate!==false){
maxDate=_xdsoft_datetime.strToDate(options.maxDate);
maxDate=new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);
}
if(options.minDate!==false){
minDate=_xdsoft_datetime.strToDate(options.minDate);
minDate=new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
}
while (i < _xdsoft_datetime.currentTime.countDaysInMonth()||start.getDay()!==options.dayOfWeekStart||_xdsoft_datetime.currentTime.getMonth()===start.getMonth()){
classes=[];
i +=1;
day=start.getDay();
d=start.getDate();
y=start.getFullYear();
m=start.getMonth();
w=_xdsoft_datetime.getWeekOfYear(start);
description='';
classes.push('xdsoft_date');
if(options.beforeShowDay&&$.isFunction(options.beforeShowDay.call)){
customDateSettings=options.beforeShowDay.call(datetimepicker, start);
}else{
customDateSettings=null;
}
if(options.allowDateRe&&Object.prototype.toString.call(options.allowDateRe)==="[object RegExp]"){
if(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){
classes.push('xdsoft_disabled');
}}else if(options.allowDates&&options.allowDates.length>0){
if(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate))===-1){
classes.push('xdsoft_disabled');
}}else if((maxDate!==false&&start > maxDate)||(minDate!==false&&start < minDate)||(customDateSettings&&customDateSettings[0]===false)){
classes.push('xdsoft_disabled');
}else if(options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate))!==-1){
classes.push('xdsoft_disabled');
}else if(options.disabledWeekDays.indexOf(day)!==-1){
classes.push('xdsoft_disabled');
}else if(input.is('[readonly]')){
classes.push('xdsoft_disabled');
}
if(customDateSettings&&customDateSettings[1]!==""){
classes.push(customDateSettings[1]);
}
if(_xdsoft_datetime.currentTime.getMonth()!==m){
classes.push('xdsoft_other_month');
}
if((options.defaultSelect||datetimepicker.data('changed'))&&dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate)===dateHelper.formatDate(start, options.formatDate)){
classes.push('xdsoft_current');
}
if(dateHelper.formatDate(today, options.formatDate)===dateHelper.formatDate(start, options.formatDate)){
classes.push('xdsoft_today');
}
if(start.getDay()===0||start.getDay()===6||options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate))!==-1){
classes.push('xdsoft_weekend');
}
if(options.highlightedDates[dateHelper.formatDate(start, options.formatDate)]!==undefined){
hDate=options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];
classes.push(hDate.style===undefined ? 'xdsoft_highlighted_default':hDate.style);
description=hDate.desc===undefined ? '':hDate.desc;
}
if(options.beforeShowDay&&$.isFunction(options.beforeShowDay)){
classes.push(options.beforeShowDay(start));
}
if(newRow){
table +='<tr>';
newRow=false;
if(options.weeks){
table +='<th>' + w + '</th>';
}}
table +='<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '" title="' + description + '">' +
'<div>' + d + '</div>' +
'</td>';
if(start.getDay()===options.dayOfWeekStartPrev){
table +='</tr>';
newRow=true;
}
start.setDate(d + 1);
}
table +='</tbody></table>';
calendar.html(table);
month_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);
month_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());
time='';
h='';
m='';
line_time=function line_time(h, m){
var now=_xdsoft_datetime.now(), optionDateTime, current_time,
isALlowTimesInit=options.allowTimes&&$.isArray(options.allowTimes)&&options.allowTimes.length;
now.setHours(h);
h=parseInt(now.getHours(), 10);
now.setMinutes(m);
m=parseInt(now.getMinutes(), 10);
optionDateTime=new Date(_xdsoft_datetime.currentTime);
optionDateTime.setHours(h);
optionDateTime.setMinutes(m);
classes=[];
if((options.minDateTime!==false&&options.minDateTime > optionDateTime)||(options.maxTime!==false&&_xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime())||(options.minTime!==false&&_xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())){
classes.push('xdsoft_disabled');
}else if((options.minDateTime!==false&&options.minDateTime > optionDateTime)||((options.disabledMinTime!==false&&now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime())&&(options.disabledMaxTime!==false&&now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))){
classes.push('xdsoft_disabled');
}else if(input.is('[readonly]')){
classes.push('xdsoft_disabled');
}
current_time=new Date(_xdsoft_datetime.currentTime);
current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));
if(!isALlowTimesInit){
current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);
}
if((options.initTime||options.defaultSelect||datetimepicker.data('changed'))&&current_time.getHours()===parseInt(h, 10)&&((!isALlowTimesInit&&options.step > 59)||current_time.getMinutes()===parseInt(m, 10))){
if(options.defaultSelect||datetimepicker.data('changed')){
classes.push('xdsoft_current');
}else if(options.initTime){
classes.push('xdsoft_init_time');
}}
if(parseInt(today.getHours(), 10)===parseInt(h, 10)&&parseInt(today.getMinutes(), 10)===parseInt(m, 10)){
classes.push('xdsoft_today');
}
time +='<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + dateHelper.formatDate(now, options.formatTime) + '</div>';
};
if(!options.allowTimes||!$.isArray(options.allowTimes)||!options.allowTimes.length){
for (i=0, j=0; i < (options.hours12 ? 12:24); i +=1){
for (j=0; j < 60; j +=options.step){
h=(i < 10 ? '0':'') + i;
m=(j < 10 ? '0':'') + j;
line_time(h, m);
}}
}else{
for (i=0; i < options.allowTimes.length; i +=1){
h=_xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
m=_xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
line_time(h, m);
}}
timebox.html(time);
opt='';
i=0;
for (i=parseInt(options.yearStart, 10) + options.yearOffset; i <=parseInt(options.yearEnd, 10) + options.yearOffset; i +=1){
opt +='<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear()===i ? 'xdsoft_current':'') + '" data-value="' + i + '">' + i + '</div>';
}
yearselect.children().eq(0)
.html(opt);
for (i=parseInt(options.monthStart, 10), opt=''; i <=parseInt(options.monthEnd, 10); i +=1){
opt +='<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth()===i ? 'xdsoft_current':'') + '" data-value="' + i + '">' + options.i18n[globalLocale].months[i] + '</div>';
}
monthselect.children().eq(0).html(opt);
$(datetimepicker)
.trigger('generate.xdsoft');
}, 10);
event.stopPropagation();
})
.on('afterOpen.xdsoft', function (){
if(options.timepicker){
var classType, pheight, height, top;
if(timebox.find('.xdsoft_current').length){
classType='.xdsoft_current';
}else if(timebox.find('.xdsoft_init_time').length){
classType='.xdsoft_init_time';
}
if(classType){
pheight=timeboxparent[0].clientHeight;
height=timebox[0].offsetHeight;
top=timebox.find(classType).index() * options.timeHeightInTimePicker + 1;
if((height - pheight) < top){
top=height - pheight;
}
timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);
}else{
timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
}}
});
timerclick=0;
calendar
.on('touchend click.xdsoft', 'td', function (xdevent){
xdevent.stopPropagation();
timerclick +=1;
var $this=$(this),
currentTime=_xdsoft_datetime.currentTime;
if(currentTime===undefined||currentTime===null){
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
currentTime=_xdsoft_datetime.currentTime;
}
if($this.hasClass('xdsoft_disabled')){
return false;
}
currentTime.setDate(1);
currentTime.setFullYear($this.data('year'));
currentTime.setMonth($this.data('month'));
currentTime.setDate($this.data('date'));
datetimepicker.trigger('select.xdsoft', [currentTime]);
input.val(_xdsoft_datetime.str());
if(options.onSelectDate&&$.isFunction(options.onSelectDate)){
options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
}
datetimepicker.data('changed', true);
datetimepicker.trigger('xchange.xdsoft');
datetimepicker.trigger('changedatetime.xdsoft');
if((timerclick > 1||(options.closeOnDateSelect===true||(options.closeOnDateSelect===false&&!options.timepicker)))&&!options.inline){
datetimepicker.trigger('close.xdsoft');
}
setTimeout(function (){
timerclick=0;
}, 200);
});
timebox
.on('touchmove', 'div', function (){ currentlyScrollingTimeDiv=true; })
.on('touchend click.xdsoft', 'div', function (xdevent){
xdevent.stopPropagation();
if(currentlyScrollingTimeDiv){
currentlyScrollingTimeDiv=false;
return;
}
var $this=$(this),
currentTime=_xdsoft_datetime.currentTime;
if(currentTime===undefined||currentTime===null){
_xdsoft_datetime.currentTime=_xdsoft_datetime.now();
currentTime=_xdsoft_datetime.currentTime;
}
if($this.hasClass('xdsoft_disabled')){
return false;
}
currentTime.setHours($this.data('hour'));
currentTime.setMinutes($this.data('minute'));
datetimepicker.trigger('select.xdsoft', [currentTime]);
datetimepicker.data('input').val(_xdsoft_datetime.str());
if(options.onSelectTime&&$.isFunction(options.onSelectTime)){
options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
}
datetimepicker.data('changed', true);
datetimepicker.trigger('xchange.xdsoft');
datetimepicker.trigger('changedatetime.xdsoft');
if(options.inline!==true&&options.closeOnTimeSelect===true){
datetimepicker.trigger('close.xdsoft');
}});
datepicker
.on('mousewheel.xdsoft', function (event){
if(!options.scrollMonth){
return true;
}
if(event.deltaY < 0){
_xdsoft_datetime.nextMonth();
}else{
_xdsoft_datetime.prevMonth();
}
return false;
});
input
.on('mousewheel.xdsoft', function (event){
if(!options.scrollInput){
return true;
}
if(!options.datepicker&&options.timepicker){
current_time_index=timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index():0;
if(current_time_index + event.deltaY >=0&&current_time_index + event.deltaY < timebox.children().length){
current_time_index +=event.deltaY;
}
if(timebox.children().eq(current_time_index).length){
timebox.children().eq(current_time_index).trigger('mousedown');
}
return false;
}
if(options.datepicker&&!options.timepicker){
datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);
if(input.val){
input.val(_xdsoft_datetime.str());
}
datetimepicker.trigger('changedatetime.xdsoft');
return false;
}});
datetimepicker
.on('changedatetime.xdsoft', function (event){
if(options.onChangeDateTime&&$.isFunction(options.onChangeDateTime)){
var $input=datetimepicker.data('input');
options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);
delete options.value;
$input.trigger('change');
}})
.on('generate.xdsoft', function (){
if(options.onGenerate&&$.isFunction(options.onGenerate)){
options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
}
if(triggerAfterOpen){
datetimepicker.trigger('afterOpen.xdsoft');
triggerAfterOpen=false;
}})
.on('click.xdsoft', function (xdevent){
xdevent.stopPropagation();
});
current_time_index=0;
forEachAncestorOf=function (node, callback){
do {
node=node.parentNode;
if(callback(node)===false){
break;
}} while (node.nodeName!=='HTML');
};
setPos=function (){
var dateInputOffset,
dateInputElem,
verticalPosition,
left,
position,
datetimepickerElem,
dateInputHasFixedAncestor,
$dateInput,
windowWidth,
verticalAnchorEdge,
datetimepickerCss,
windowHeight,
windowScrollTop;
$dateInput=datetimepicker.data('input');
dateInputOffset=$dateInput.offset();
dateInputElem=$dateInput[0];
verticalAnchorEdge='top';
verticalPosition=(dateInputOffset.top + dateInputElem.offsetHeight) - 1;
left=dateInputOffset.left;
position="absolute";
windowWidth=$(window).width();
windowHeight=$(window).height();
windowScrollTop=$(window).scrollTop();
if((document.documentElement.clientWidth - dateInputOffset.left) < datepicker.parent().outerWidth(true)){
var diff=datepicker.parent().outerWidth(true) - dateInputElem.offsetWidth;
left=left - diff;
}
if($dateInput.parent().css('direction')==='rtl'){
left -=(datetimepicker.outerWidth() - $dateInput.outerWidth());
}
if(options.fixed){
verticalPosition -=windowScrollTop;
left -=$(window).scrollLeft();
position="fixed";
}else{
dateInputHasFixedAncestor=false;
forEachAncestorOf(dateInputElem, function (ancestorNode){
if(window.getComputedStyle(ancestorNode).getPropertyValue('position')==='fixed'){
dateInputHasFixedAncestor=true;
return false;
}});
if(dateInputHasFixedAncestor){
position='fixed';
if(verticalPosition + datetimepicker.outerHeight() > windowHeight + windowScrollTop){
verticalAnchorEdge='bottom';
verticalPosition=(windowHeight + windowScrollTop) - dateInputOffset.top;
}else{
verticalPosition -=windowScrollTop;
}}else{
if(verticalPosition + dateInputElem.offsetHeight > windowHeight + windowScrollTop){
verticalPosition=dateInputOffset.top - dateInputElem.offsetHeight + 1;
}}
if(verticalPosition < 0){
verticalPosition=0;
}
if(left + dateInputElem.offsetWidth > windowWidth){
left=windowWidth - dateInputElem.offsetWidth;
}}
datetimepickerElem=datetimepicker[0];
forEachAncestorOf(datetimepickerElem, function (ancestorNode){
var ancestorNodePosition;
ancestorNodePosition=window.getComputedStyle(ancestorNode).getPropertyValue('position');
if(ancestorNodePosition==='relative'&&windowWidth >=ancestorNode.offsetWidth){
left=left - ((windowWidth - ancestorNode.offsetWidth) / 2);
return false;
}});
datetimepickerCss={
position: position,
left: left,
top: '',
bottom: ''
};
datetimepickerCss[verticalAnchorEdge]=verticalPosition;
datetimepicker.css(datetimepickerCss);
};
datetimepicker
.on('open.xdsoft', function (event){
var onShow=true;
if(options.onShow&&$.isFunction(options.onShow)){
onShow=options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
}
if(onShow!==false){
datetimepicker.show();
setPos();
$(window)
.off('resize.xdsoft', setPos)
.on('resize.xdsoft', setPos);
if(options.closeOnWithoutClick){
$([document.body, window]).on('touchstart mousedown.xdsoft', function arguments_callee6(){
datetimepicker.trigger('close.xdsoft');
$([document.body, window]).off('touchstart mousedown.xdsoft', arguments_callee6);
});
}}
})
.on('close.xdsoft', function (event){
var onClose=true;
month_picker
.find('.xdsoft_month,.xdsoft_year')
.find('.xdsoft_select')
.hide();
if(options.onClose&&$.isFunction(options.onClose)){
onClose=options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
}
if(onClose!==false&&!options.opened&&!options.inline){
datetimepicker.hide();
}
event.stopPropagation();
})
.on('toggle.xdsoft', function (){
if(datetimepicker.is(':visible')){
datetimepicker.trigger('close.xdsoft');
}else{
datetimepicker.trigger('open.xdsoft');
}})
.data('input', input);
timer=0;
datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
datetimepicker.setOptions(options);
function getCurrentValue(){
var ct=false, time;
if(options.startDate){
ct=_xdsoft_datetime.strToDate(options.startDate);
}else{
ct=options.value||((input&&input.val&&input.val()) ? input.val():'');
if(ct){
ct=_xdsoft_datetime.strToDateTime(ct);
}else if(options.defaultDate){
ct=_xdsoft_datetime.strToDateTime(options.defaultDate);
if(options.defaultTime){
time=_xdsoft_datetime.strtotime(options.defaultTime);
ct.setHours(time.getHours());
ct.setMinutes(time.getMinutes());
}}
}
if(ct&&_xdsoft_datetime.isValidDate(ct)){
datetimepicker.data('changed', true);
}else{
ct='';
}
return ct||0;
}
function setMask(options){
var isValidValue=function (mask, value){
var reg=mask
.replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
.replace(/_/g, '{digit+}')
.replace(/([0-9]{1})/g, '{digit$1}')
.replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
.replace(/\{digit[\+]\}/g, '[0-9_]{1}');
return (new RegExp(reg)).test(value);
},
getCaretPos=function (input){
try {
if(document.selection&&document.selection.createRange){
var range=document.selection.createRange();
return range.getBookmark().charCodeAt(2) - 2;
}
if(input.setSelectionRange){
return input.selectionStart;
}} catch (e){
return 0;
}},
setCaretPos=function (node, pos){
node=(typeof node==="string"||node instanceof String) ? document.getElementById(node):node;
if(!node){
return false;
}
if(node.createTextRange){
var textRange=node.createTextRange();
textRange.collapse(true);
textRange.moveEnd('character', pos);
textRange.moveStart('character', pos);
textRange.select();
return true;
}
if(node.setSelectionRange){
node.setSelectionRange(pos, pos);
return true;
}
return false;
};
if(options.mask){
input.off('keydown.xdsoft');
}
if(options.mask===true){
if(typeof moment!='undefined'){
options.mask=options.format
.replace(/Y{4}/g, '9999')
.replace(/Y{2}/g, '99')
.replace(/M{2}/g, '19')
.replace(/D{2}/g, '39')
.replace(/H{2}/g, '29')
.replace(/m{2}/g, '59')
.replace(/s{2}/g, '59');
}else{
options.mask=options.format
.replace(/Y/g, '9999')
.replace(/F/g, '9999')
.replace(/m/g, '19')
.replace(/d/g, '39')
.replace(/H/g, '29')
.replace(/i/g, '59')
.replace(/s/g, '59');
}}
if($.type(options.mask)==='string'){
if(!isValidValue(options.mask, input.val())){
input.val(options.mask.replace(/[0-9]/g, '_'));
setCaretPos(input[0], 0);
}
input.on('keydown.xdsoft', function (event){
var val=this.value,
key=event.which,
pos,
digit;
if(((key >=KEY0&&key <=KEY9)||(key >=_KEY0&&key <=_KEY9))||(key===BACKSPACE||key===DEL)){
pos=getCaretPos(this);
digit=(key!==BACKSPACE&&key!==DEL) ? String.fromCharCode((_KEY0 <=key&&key <=_KEY9) ? key - KEY0:key):'_';
if((key===BACKSPACE||key===DEL)&&pos){
pos -=1;
digit='_';
}
while (/[^0-9_]/.test(options.mask.substr(pos, 1))&&pos < options.mask.length&&pos > 0){
pos +=(key===BACKSPACE||key===DEL) ? -1:1;
}
val=val.substr(0, pos) + digit + val.substr(pos + 1);
if($.trim(val)===''){
val=options.mask.replace(/[0-9]/g, '_');
}else{
if(pos===options.mask.length){
event.preventDefault();
return false;
}}
pos +=(key===BACKSPACE||key===DEL) ? 0:1;
while (/[^0-9_]/.test(options.mask.substr(pos, 1))&&pos < options.mask.length&&pos > 0){
pos +=(key===BACKSPACE||key===DEL) ? -1:1;
}
if(isValidValue(options.mask, val)){
this.value=val;
setCaretPos(this, pos);
}else if($.trim(val)===''){
this.value=options.mask.replace(/[0-9]/g, '_');
}else{
input.trigger('error_input.xdsoft');
}}else{
if(([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key)!==-1&&ctrlDown)||[ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key)!==-1){
return true;
}}
event.preventDefault();
return false;
});
}}
_xdsoft_datetime.setCurrentTime(getCurrentValue());
input
.data('xdsoft_datetimepicker', datetimepicker)
.on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function (){
if(input.is(':disabled')||(input.data('xdsoft_datetimepicker').is(':visible')&&options.closeOnInputClick)){
return;
}
clearTimeout(timer);
timer=setTimeout(function (){
if(input.is(':disabled')){
return;
}
triggerAfterOpen=true;
_xdsoft_datetime.setCurrentTime(getCurrentValue(), true);
if(options.mask){
setMask(options);
}
datetimepicker.trigger('open.xdsoft');
}, 100);
})
.on('keydown.xdsoft', function (event){
var elementSelector,
key=event.which;
if([ENTER].indexOf(key)!==-1&&options.enterLikeTab){
elementSelector=$("input:visible,textarea:visible,button:visible,a:visible");
datetimepicker.trigger('close.xdsoft');
elementSelector.eq(elementSelector.index(this) + 1).focus();
return false;
}
if([TAB].indexOf(key)!==-1){
datetimepicker.trigger('close.xdsoft');
return true;
}})
.on('blur.xdsoft', function (){
datetimepicker.trigger('close.xdsoft');
});
};
destroyDateTimePicker=function (input){
var datetimepicker=input.data('xdsoft_datetimepicker');
if(datetimepicker){
datetimepicker.data('xdsoft_datetime', null);
datetimepicker.remove();
input
.data('xdsoft_datetimepicker', null)
.off('.xdsoft');
$(window).off('resize.xdsoft');
$([window, document.body]).off('mousedown.xdsoft touchstart');
if(input.unmousewheel){
input.unmousewheel();
}}
};
$(document)
.off('keydown.xdsoftctrl keyup.xdsoftctrl')
.on('keydown.xdsoftctrl', function (e){
if(e.keyCode===CTRLKEY){
ctrlDown=true;
}})
.on('keyup.xdsoftctrl', function (e){
if(e.keyCode===CTRLKEY){
ctrlDown=false;
}});
this.each(function (){
var datetimepicker=$(this).data('xdsoft_datetimepicker'), $input;
if(datetimepicker){
if($.type(opt)==='string'){
switch (opt){
case 'show':
$(this).select().focus();
datetimepicker.trigger('open.xdsoft');
break;
case 'hide':
datetimepicker.trigger('close.xdsoft');
break;
case 'toggle':
datetimepicker.trigger('toggle.xdsoft');
break;
case 'destroy':
destroyDateTimePicker($(this));
break;
case 'reset':
this.value=this.defaultValue;
if(!this.value||!datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))){
datetimepicker.data('changed', false);
}
datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
break;
case 'validate':
$input=datetimepicker.data('input');
$input.trigger('blur.xdsoft');
break;
default:
if(datetimepicker[opt]&&$.isFunction(datetimepicker[opt])){
result=datetimepicker[opt](opt2);
}}
}else{
datetimepicker
.setOptions(opt);
}
return 0;
}
if($.type(opt)!=='string'){
if(!options.lazyInit||options.open||options.inline){
createDateTimePicker($(this));
}else{
lazyInit($(this));
}}
});
return result;
};
$.fn.xdsoft_datetimepicker.defaults=default_options;
function HighlightedDate(date, desc, style){
"use strict";
this.date=date;
this.desc=desc;
this.style=style;
}}));
(function (factory){
if(typeof define==='function'&&define.amd){
define(['jquery'], factory);
}else if(typeof exports==='object'){
module.exports=factory;
}else{
factory(jQuery);
}}(function ($){
var toFix=['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
toBind=('onwheel' in document||document.documentMode >=9) ?
['wheel']:['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
slice=Array.prototype.slice,
nullLowestDeltaTimeout, lowestDelta;
if($.event.fixHooks){
for(var i=toFix.length; i;){
$.event.fixHooks[ toFix[--i] ]=$.event.mouseHooks;
}}
var special=$.event.special.mousewheel={
version: '3.1.12',
setup: function(){
if(this.addEventListener){
for(var i=toBind.length; i;){
this.addEventListener(toBind[--i], handler, false);
}}else{
this.onmousewheel=handler;
}
$.data(this, 'mousewheel-line-height', special.getLineHeight(this));
$.data(this, 'mousewheel-page-height', special.getPageHeight(this));
},
teardown: function(){
if(this.removeEventListener){
for(var i=toBind.length; i;){
this.removeEventListener(toBind[--i], handler, false);
}}else{
this.onmousewheel=null;
}
$.removeData(this, 'mousewheel-line-height');
$.removeData(this, 'mousewheel-page-height');
},
getLineHeight: function(elem){
var $elem=$(elem),
$parent=$elem['offsetParent' in $.fn ? 'offsetParent':'parent']();
if(!$parent.length){
$parent=$('body');
}
return parseInt($parent.css('fontSize'), 10)||parseInt($elem.css('fontSize'), 10)||16;
},
getPageHeight: function(elem){
return $(elem).height();
},
settings: {
adjustOldDeltas: true,
normalizeOffset: true
}};
$.fn.extend({
mousewheel: function(fn){
return fn ? this.bind('mousewheel', fn):this.trigger('mousewheel');
},
unmousewheel: function(fn){
return this.unbind('mousewheel', fn);
}});
function handler(event){
var orgEvent=event||window.event,
args=slice.call(arguments, 1),
delta=0,
deltaX=0,
deltaY=0,
absDelta=0,
offsetX=0,
offsetY=0;
event=$.event.fix(orgEvent);
event.type='mousewheel';
if('detail'      in orgEvent){ deltaY=orgEvent.detail * -1;      }
if('wheelDelta'  in orgEvent){ deltaY=orgEvent.wheelDelta;       }
if('wheelDeltaY' in orgEvent){ deltaY=orgEvent.wheelDeltaY;      }
if('wheelDeltaX' in orgEvent){ deltaX=orgEvent.wheelDeltaX * -1; }
if('axis' in orgEvent&&orgEvent.axis===orgEvent.HORIZONTAL_AXIS){
deltaX=deltaY * -1;
deltaY=0;
}
delta=deltaY===0 ? deltaX:deltaY;
if('deltaY' in orgEvent){
deltaY=orgEvent.deltaY * -1;
delta=deltaY;
}
if('deltaX' in orgEvent){
deltaX=orgEvent.deltaX;
if(deltaY===0){ delta=deltaX * -1; }}
if(deltaY===0&&deltaX===0){ return; }
if(orgEvent.deltaMode===1){
var lineHeight=$.data(this, 'mousewheel-line-height');
delta  *=lineHeight;
deltaY *=lineHeight;
deltaX *=lineHeight;
}else if(orgEvent.deltaMode===2){
var pageHeight=$.data(this, 'mousewheel-page-height');
delta  *=pageHeight;
deltaY *=pageHeight;
deltaX *=pageHeight;
}
absDelta=Math.max(Math.abs(deltaY), Math.abs(deltaX));
if(!lowestDelta||absDelta < lowestDelta){
lowestDelta=absDelta;
if(shouldAdjustOldDeltas(orgEvent, absDelta)){
lowestDelta /=40;
}}
if(shouldAdjustOldDeltas(orgEvent, absDelta)){
delta  /=40;
deltaX /=40;
deltaY /=40;
}
delta=Math[ delta  >=1 ? 'floor':'ceil' ](delta  / lowestDelta);
deltaX=Math[ deltaX >=1 ? 'floor':'ceil' ](deltaX / lowestDelta);
deltaY=Math[ deltaY >=1 ? 'floor':'ceil' ](deltaY / lowestDelta);
if(special.settings.normalizeOffset&&this.getBoundingClientRect){
var boundingRect=this.getBoundingClientRect();
offsetX=event.clientX - boundingRect.left;
offsetY=event.clientY - boundingRect.top;
}
event.deltaX=deltaX;
event.deltaY=deltaY;
event.deltaFactor=lowestDelta;
event.offsetX=offsetX;
event.offsetY=offsetY;
event.deltaMode=0;
args.unshift(event, delta, deltaX, deltaY);
if(nullLowestDeltaTimeout){ clearTimeout(nullLowestDeltaTimeout); }
nullLowestDeltaTimeout=setTimeout(nullLowestDelta, 200);
return ($.event.dispatch||$.event.handle).apply(this, args);
}
function nullLowestDelta(){
lowestDelta=null;
}
function shouldAdjustOldDeltas(orgEvent, absDelta){
return special.settings.adjustOldDeltas&&orgEvent.type==='mousewheel'&&absDelta % 120===0;
}}));
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof exports?b(a,require("jquery")):b(a,a.jQuery||a.Zepto)}(this,function(a,b){"use strict";function c(a){if(w&&"none"===a.css("animation-name")&&"none"===a.css("-webkit-animation-name")&&"none"===a.css("-moz-animation-name")&&"none"===a.css("-o-animation-name")&&"none"===a.css("-ms-animation-name"))return 0;var b,c,d,e,f=a.css("animation-duration")||a.css("-webkit-animation-duration")||a.css("-moz-animation-duration")||a.css("-o-animation-duration")||a.css("-ms-animation-duration")||"0s",g=a.css("animation-delay")||a.css("-webkit-animation-delay")||a.css("-moz-animation-delay")||a.css("-o-animation-delay")||a.css("-ms-animation-delay")||"0s",h=a.css("animation-iteration-count")||a.css("-webkit-animation-iteration-count")||a.css("-moz-animation-iteration-count")||a.css("-o-animation-iteration-count")||a.css("-ms-animation-iteration-count")||"1";for(f=f.split(", "),g=g.split(", "),h=h.split(", "),e=0,c=f.length,b=Number.NEGATIVE_INFINITY;c>e;e++)d=parseFloat(f[e])*parseInt(h[e],10)+parseFloat(g[e]),d>b&&(b=d);return b}function d(){if(b(document.body).height()<=b(window).height())return 0;var a,c,d=document.createElement("div"),e=document.createElement("div");return d.style.visibility="hidden",d.style.width="100px",document.body.appendChild(d),a=d.offsetWidth,d.style.overflow="scroll",e.style.width="100%",d.appendChild(e),c=e.offsetWidth,d.parentNode.removeChild(d),a-c}function e(){if(!x){var a,c,e=b("html"),f=k("is-locked");e.hasClass(f)||(c=b(document.body),a=parseInt(c.css("padding-right"),10)+d(),c.css("padding-right",a+"px"),e.addClass(f))}}function f(){if(!x){var a,c,e=b("html"),f=k("is-locked");e.hasClass(f)&&(c=b(document.body),a=parseInt(c.css("padding-right"),10)-d(),c.css("padding-right",a+"px"),e.removeClass(f))}}function g(a,b,c,d){var e=k("is",b),f=[k("is",u.CLOSING),k("is",u.OPENING),k("is",u.CLOSED),k("is",u.OPENED)].join(" ");a.$bg.removeClass(f).addClass(e),a.$overlay.removeClass(f).addClass(e),a.$wrapper.removeClass(f).addClass(e),a.$modal.removeClass(f).addClass(e),a.state=b,!c&&a.$modal.trigger({type:b,reason:d},[{reason:d}])}function h(a,d,e){var f=0,g=function(a){a.target===this&&f++},h=function(a){a.target===this&&0===--f&&(b.each(["$bg","$overlay","$wrapper","$modal"],function(a,b){e[b].off(r+" "+s)}),d())};b.each(["$bg","$overlay","$wrapper","$modal"],function(a,b){e[b].on(r,g).on(s,h)}),a(),0===c(e.$bg)&&0===c(e.$overlay)&&0===c(e.$wrapper)&&0===c(e.$modal)&&(b.each(["$bg","$overlay","$wrapper","$modal"],function(a,b){e[b].off(r+" "+s)}),d())}function i(a){a.state!==u.CLOSED&&(b.each(["$bg","$overlay","$wrapper","$modal"],function(b,c){a[c].off(r+" "+s)}),a.$bg.removeClass(a.settings.modifier),a.$overlay.removeClass(a.settings.modifier).hide(),a.$wrapper.hide(),f(),g(a,u.CLOSED,!0))}function j(a){var b,c,d,e,f={};for(a=a.replace(/\s*:\s*/g,":").replace(/\s*,\s*/g,","),b=a.split(","),e=0,c=b.length;c>e;e++)b[e]=b[e].split(":"),d=b[e][1],("string"==typeof d||d instanceof String)&&(d="true"===d||("false"===d?!1:d)),("string"==typeof d||d instanceof String)&&(d=isNaN(d)?d:+d),f[b[e][0]]=d;return f}function k(){for(var a=q,b=0;b<arguments.length;++b)a+="-"+arguments[b];return a}function l(){var a,c,d=location.hash.replace("#","");if(d){try{c=b("[data-"+p+'-id="'+d+'"]')}catch(e){}c&&c.length&&(a=b[p].lookup[c.data(p)],a&&a.settings.hashTracking&&a.open())}else n&&n.state===u.OPENED&&n.settings.hashTracking&&n.close()}function m(a,c){var d=b(document.body),e=this;e.settings=b.extend({},t,c),e.index=b[p].lookup.push(e)-1,e.state=u.CLOSED,e.$overlay=b("."+k("overlay")),e.$overlay.length||(e.$overlay=b("<div>").addClass(k("overlay")+" "+k("is",u.CLOSED)).hide(),d.append(e.$overlay)),e.$bg=b("."+k("bg")).addClass(k("is",u.CLOSED)),e.$modal=a.addClass(q+" "+k("is-initialized")+" "+e.settings.modifier+" "+k("is",u.CLOSED)).attr("tabindex","-1"),e.$wrapper=b("<div>").addClass(k("wrapper")+" "+e.settings.modifier+" "+k("is",u.CLOSED)).hide().append(e.$modal),d.append(e.$wrapper),e.$wrapper.on("click."+q,"[data-"+p+'-action="close"]',function(a){a.preventDefault(),e.close()}),e.$wrapper.on("click."+q,"[data-"+p+'-action="cancel"]',function(a){a.preventDefault(),e.$modal.trigger(v.CANCELLATION),e.settings.closeOnCancel&&e.close(v.CANCELLATION)}),e.$wrapper.on("click."+q,"[data-"+p+'-action="confirm"]',function(a){a.preventDefault(),e.$modal.trigger(v.CONFIRMATION),e.settings.closeOnConfirm&&e.close(v.CONFIRMATION)}),e.$wrapper.on("click."+q,function(a){var c=b(a.target);c.hasClass(k("wrapper"))&&e.settings.closeOnOutsideClick&&e.close()})}var n,o,p="remodal",q=a.REMODAL_GLOBALS&&a.REMODAL_GLOBALS.NAMESPACE||p,r=b.map(["animationstart","webkitAnimationStart","MSAnimationStart","oAnimationStart"],function(a){return a+"."+q}).join(" "),s=b.map(["animationend","webkitAnimationEnd","MSAnimationEnd","oAnimationEnd"],function(a){return a+"."+q}).join(" "),t=b.extend({hashTracking:!0,closeOnConfirm:!0,closeOnCancel:!0,closeOnEscape:!0,closeOnOutsideClick:!0,modifier:""},a.REMODAL_GLOBALS&&a.REMODAL_GLOBALS.DEFAULTS),u={CLOSING:"closing",CLOSED:"closed",OPENING:"opening",OPENED:"opened"},v={CONFIRMATION:"confirmation",CANCELLATION:"cancellation"},w=function(){var a=document.createElement("div").style;return void 0!==a.animationName||void 0!==a.WebkitAnimationName||void 0!==a.MozAnimationName||void 0!==a.msAnimationName||void 0!==a.OAnimationName}(),x=/iPad|iPhone|iPod/.test(navigator.platform);m.prototype.open=function(){var a,c=this;c.state!==u.OPENING&&c.state!==u.CLOSING&&(a=c.$modal.attr("data-"+p+"-id"),a&&c.settings.hashTracking&&(o=b(window).scrollTop(),location.hash=a),n&&n!==c&&i(n),n=c,e(),c.$bg.addClass(c.settings.modifier),c.$overlay.addClass(c.settings.modifier).show(),c.$wrapper.show().scrollTop(0),c.$modal.focus(),h(function(){g(c,u.OPENING)},function(){g(c,u.OPENED)},c))},m.prototype.close=function(a){var c=this;c.state!==u.OPENING&&c.state!==u.CLOSING&&(c.settings.hashTracking&&c.$modal.attr("data-"+p+"-id")===location.hash.substr(1)&&(location.hash="",b(window).scrollTop(o)),h(function(){g(c,u.CLOSING,!1,a)},function(){c.$bg.removeClass(c.settings.modifier),c.$overlay.removeClass(c.settings.modifier).hide(),c.$wrapper.hide(),f(),g(c,u.CLOSED,!1,a)},c))},m.prototype.getState=function(){return this.state},m.prototype.destroy=function(){var a,c=b[p].lookup;i(this),this.$wrapper.remove(),delete c[this.index],a=b.grep(c,function(a){return!!a}).length,0===a&&(this.$overlay.remove(),this.$bg.removeClass(k("is",u.CLOSING)+" "+k("is",u.OPENING)+" "+k("is",u.CLOSED)+" "+k("is",u.OPENED)))},b[p]={lookup:[]},b.fn[p]=function(a){var c,d;return this.each(function(e,f){d=b(f),null==d.data(p)?(c=new m(d,a),d.data(p,c.index),c.settings.hashTracking&&d.attr("data-"+p+"-id")===location.hash.substr(1)&&c.open()):c=b[p].lookup[d.data(p)]}),c},b(document).ready(function(){b(document).on("click","[data-"+p+"-target]",function(a){a.preventDefault();var c=a.currentTarget,d=c.getAttribute("data-"+p+"-target"),e=b("[data-"+p+'-id="'+d+'"]');b[p].lookup[e.data(p)].open()}),b(document).find("."+q).each(function(a,c){var d=b(c),e=d.data(p+"-options");e?("string"==typeof e||e instanceof String)&&(e=j(e)):e={},d[p](e)}),b(document).on("keydown."+q,function(a){n&&n.settings.closeOnEscape&&n.state===u.OPENED&&27===a.keyCode&&n.close()}),b(window).on("hashchange."+q,l)})});
/* Tooltipster v3.3.0 */;(function(e,t,n){function s(t,n){this.bodyOverflowX;this.callbacks={hide:[],show:[]};this.checkInterval=null;this.Content;this.$el=e(t);this.$elProxy;this.elProxyPosition;this.enabled=true;this.options=e.extend({},i,n);this.mouseIsOverProxy=false;this.namespace="tooltipster-"+Math.round(Math.random()*1e5);this.Status="hidden";this.timerHide=null;this.timerShow=null;this.$tooltip;this.options.iconTheme=this.options.iconTheme.replace(".","");this.options.theme=this.options.theme.replace(".","");this._init()}function o(t,n){var r=true;e.each(t,function(e,i){if(typeof n[e]==="undefined"||t[e]!==n[e]){r=false;return false}});return r}function f(){return!a&&u}function l(){var e=n.body||n.documentElement,t=e.style,r="transition";if(typeof t[r]=="string"){return true}v=["Moz","Webkit","Khtml","O","ms"],r=r.charAt(0).toUpperCase()+r.substr(1);for(var i=0;i<v.length;i++){if(typeof t[v[i]+r]=="string"){return true}}return false}var r="tooltipster",i={animation:"fade",arrow:true,arrowColor:"",autoClose:true,content:null,contentAsHTML:false,contentCloning:true,debug:true,delay:200,minWidth:0,maxWidth:null,functionInit:function(e,t){},functionBefore:function(e,t){t()},functionReady:function(e,t){},functionAfter:function(e){},hideOnClick:false,icon:"(?)",iconCloning:true,iconDesktop:false,iconTouch:false,iconTheme:"tooltipster-icon",interactive:false,interactiveTolerance:350,multiple:false,offsetX:0,offsetY:0,onlyOne:false,position:"top",positionTracker:false,positionTrackerCallback:function(e){if(this.option("trigger")=="hover"&&this.option("autoClose")){this.hide()}},restoration:"current",speed:350,timer:0,theme:"tooltipster-default",touchDevices:true,trigger:"hover",updateAnimation:true};s.prototype={_init:function(){var t=this;if(n.querySelector){var r=null;if(t.$el.data("tooltipster-initialTitle")===undefined){r=t.$el.attr("title");if(r===undefined)r=null;t.$el.data("tooltipster-initialTitle",r)}if(t.options.content!==null){t._content_set(t.options.content)}else{t._content_set(r)}var i=t.options.functionInit.call(t.$el,t.$el,t.Content);if(typeof i!=="undefined")t._content_set(i);t.$el.removeAttr("title").addClass("tooltipstered");if(!u&&t.options.iconDesktop||u&&t.options.iconTouch){if(typeof t.options.icon==="string"){t.$elProxy=e('<span class="'+t.options.iconTheme+'"></span>');t.$elProxy.text(t.options.icon)}else{if(t.options.iconCloning)t.$elProxy=t.options.icon.clone(true);else t.$elProxy=t.options.icon}t.$elProxy.insertAfter(t.$el)}else{t.$elProxy=t.$el}if(t.options.trigger=="hover"){t.$elProxy.on("mouseenter."+t.namespace,function(){if(!f()||t.options.touchDevices){t.mouseIsOverProxy=true;t._show()}}).on("mouseleave."+t.namespace,function(){if(!f()||t.options.touchDevices){t.mouseIsOverProxy=false}});if(u&&t.options.touchDevices){t.$elProxy.on("touchstart."+t.namespace,function(){t._showNow()})}}else if(t.options.trigger=="click"){t.$elProxy.on("click."+t.namespace,function(){if(!f()||t.options.touchDevices){t._show()}})}}},_show:function(){var e=this;if(e.Status!="shown"&&e.Status!="appearing"){if(e.options.delay){e.timerShow=setTimeout(function(){if(e.options.trigger=="click"||e.options.trigger=="hover"&&e.mouseIsOverProxy){e._showNow()}},e.options.delay)}else e._showNow()}},_showNow:function(n){var r=this;r.options.functionBefore.call(r.$el,r.$el,function(){if(r.enabled&&r.Content!==null){if(n)r.callbacks.show.push(n);r.callbacks.hide=[];clearTimeout(r.timerShow);r.timerShow=null;clearTimeout(r.timerHide);r.timerHide=null;if(r.options.onlyOne){e(".tooltipstered").not(r.$el).each(function(t,n){var r=e(n),i=r.data("tooltipster-ns");e.each(i,function(e,t){var n=r.data(t),i=n.status(),s=n.option("autoClose");if(i!=="hidden"&&i!=="disappearing"&&s){n.hide()}})})}var i=function(){r.Status="shown";e.each(r.callbacks.show,function(e,t){t.call(r.$el)});r.callbacks.show=[]};if(r.Status!=="hidden"){var s=0;if(r.Status==="disappearing"){r.Status="appearing";if(l()){r.$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-"+r.options.animation+"-show");if(r.options.speed>0)r.$tooltip.delay(r.options.speed);r.$tooltip.queue(i)}else{r.$tooltip.stop().fadeIn(i)}}else if(r.Status==="shown"){i()}}else{r.Status="appearing";var s=r.options.speed;r.bodyOverflowX=e("body").css("overflow-x");e("body").css("overflow-x","hidden");var o="tooltipster-"+r.options.animation,a="-webkit-transition-duration: "+r.options.speed+"ms; -webkit-animation-duration: "+r.options.speed+"ms; -moz-transition-duration: "+r.options.speed+"ms; -moz-animation-duration: "+r.options.speed+"ms; -o-transition-duration: "+r.options.speed+"ms; -o-animation-duration: "+r.options.speed+"ms; -ms-transition-duration: "+r.options.speed+"ms; -ms-animation-duration: "+r.options.speed+"ms; transition-duration: "+r.options.speed+"ms; animation-duration: "+r.options.speed+"ms;",f=r.options.minWidth?"min-width:"+Math.round(r.options.minWidth)+"px;":"",c=r.options.maxWidth?"max-width:"+Math.round(r.options.maxWidth)+"px;":"",h=r.options.interactive?"pointer-events: auto;":"";r.$tooltip=e('<div class="tooltipster-base '+r.options.theme+'" style="'+f+" "+c+" "+h+" "+a+'"><div class="tooltipster-content"></div></div>');if(l())r.$tooltip.addClass(o);r._content_insert();r.$tooltip.appendTo("body");r.reposition();r.options.functionReady.call(r.$el,r.$el,r.$tooltip);if(l()){r.$tooltip.addClass(o+"-show");if(r.options.speed>0)r.$tooltip.delay(r.options.speed);r.$tooltip.queue(i)}else{r.$tooltip.css("display","none").fadeIn(r.options.speed,i)}r._interval_set();e(t).on("scroll."+r.namespace+" resize."+r.namespace,function(){r.reposition()});if(r.options.autoClose){e("body").off("."+r.namespace);if(r.options.trigger=="hover"){if(u){setTimeout(function(){e("body").on("touchstart."+r.namespace,function(){r.hide()})},0)}if(r.options.interactive){if(u){r.$tooltip.on("touchstart."+r.namespace,function(e){e.stopPropagation()})}var p=null;r.$elProxy.add(r.$tooltip).on("mouseleave."+r.namespace+"-autoClose",function(){clearTimeout(p);p=setTimeout(function(){r.hide()},r.options.interactiveTolerance)}).on("mouseenter."+r.namespace+"-autoClose",function(){clearTimeout(p)})}else{r.$elProxy.on("mouseleave."+r.namespace+"-autoClose",function(){r.hide()})}if(r.options.hideOnClick){r.$elProxy.on("click."+r.namespace+"-autoClose",function(){r.hide()})}}else if(r.options.trigger=="click"){setTimeout(function(){e("body").on("click."+r.namespace+" touchstart."+r.namespace,function(){r.hide()})},0);if(r.options.interactive){r.$tooltip.on("click."+r.namespace+" touchstart."+r.namespace,function(e){e.stopPropagation()})}}}}if(r.options.timer>0){r.timerHide=setTimeout(function(){r.timerHide=null;r.hide()},r.options.timer+s)}}})},_interval_set:function(){var t=this;t.checkInterval=setInterval(function(){if(e("body").find(t.$el).length===0||e("body").find(t.$elProxy).length===0||t.Status=="hidden"||e("body").find(t.$tooltip).length===0){if(t.Status=="shown"||t.Status=="appearing")t.hide();t._interval_cancel()}else{if(t.options.positionTracker){var n=t._repositionInfo(t.$elProxy),r=false;if(o(n.dimension,t.elProxyPosition.dimension)){if(t.$elProxy.css("position")==="fixed"){if(o(n.position,t.elProxyPosition.position))r=true}else{if(o(n.offset,t.elProxyPosition.offset))r=true}}if(!r){t.reposition();t.options.positionTrackerCallback.call(t,t.$el)}}}},200)},_interval_cancel:function(){clearInterval(this.checkInterval);this.checkInterval=null},_content_set:function(e){if(typeof e==="object"&&e!==null&&this.options.contentCloning){e=e.clone(true)}this.Content=e},_content_insert:function(){var e=this,t=this.$tooltip.find(".tooltipster-content");if(typeof e.Content==="string"&&!e.options.contentAsHTML){t.text(e.Content)}else{t.empty().append(e.Content)}},_update:function(e){var t=this;t._content_set(e);if(t.Content!==null){if(t.Status!=="hidden"){t._content_insert();t.reposition();if(t.options.updateAnimation){if(l()){t.$tooltip.css({width:"","-webkit-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms","-moz-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms","-o-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms","-ms-transition":"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms",transition:"all "+t.options.speed+"ms, width 0ms, height 0ms, left 0ms, top 0ms"}).addClass("tooltipster-content-changing");setTimeout(function(){if(t.Status!="hidden"){t.$tooltip.removeClass("tooltipster-content-changing");setTimeout(function(){if(t.Status!=="hidden"){t.$tooltip.css({"-webkit-transition":t.options.speed+"ms","-moz-transition":t.options.speed+"ms","-o-transition":t.options.speed+"ms","-ms-transition":t.options.speed+"ms",transition:t.options.speed+"ms"})}},t.options.speed)}},t.options.speed)}else{t.$tooltip.fadeTo(t.options.speed,.5,function(){if(t.Status!="hidden"){t.$tooltip.fadeTo(t.options.speed,1)}})}}}}else{t.hide()}},_repositionInfo:function(e){return{dimension:{height:e.outerHeight(false),width:e.outerWidth(false)},offset:e.offset(),position:{left:parseInt(e.css("left")),top:parseInt(e.css("top"))}}},hide:function(n){var r=this;if(n)r.callbacks.hide.push(n);r.callbacks.show=[];clearTimeout(r.timerShow);r.timerShow=null;clearTimeout(r.timerHide);r.timerHide=null;var i=function(){e.each(r.callbacks.hide,function(e,t){t.call(r.$el)});r.callbacks.hide=[]};if(r.Status=="shown"||r.Status=="appearing"){r.Status="disappearing";var s=function(){r.Status="hidden";if(typeof r.Content=="object"&&r.Content!==null){r.Content.detach()}r.$tooltip.remove();r.$tooltip=null;e(t).off("."+r.namespace);e("body").off("."+r.namespace).css("overflow-x",r.bodyOverflowX);e("body").off("."+r.namespace);r.$elProxy.off("."+r.namespace+"-autoClose");r.options.functionAfter.call(r.$el,r.$el);i()};if(l()){r.$tooltip.clearQueue().removeClass("tooltipster-"+r.options.animation+"-show").addClass("tooltipster-dying");if(r.options.speed>0)r.$tooltip.delay(r.options.speed);r.$tooltip.queue(s)}else{r.$tooltip.stop().fadeOut(r.options.speed,s)}}else if(r.Status=="hidden"){i()}return r},show:function(e){this._showNow(e);return this},update:function(e){return this.content(e)},content:function(e){if(typeof e==="undefined"){return this.Content}else{this._update(e);return this}},reposition:function(){var n=this;if(e("body").find(n.$tooltip).length!==0){n.$tooltip.css("width","");n.elProxyPosition=n._repositionInfo(n.$elProxy);var r=null,i=e(t).width(),s=n.elProxyPosition,o=n.$tooltip.outerWidth(false),u=n.$tooltip.innerWidth()+1,a=n.$tooltip.outerHeight(false);if(n.$elProxy.is("area")){var f=n.$elProxy.attr("shape"),l=n.$elProxy.parent().attr("name"),c=e('img[usemap="#'+l+'"]'),h=c.offset().left,p=c.offset().top,d=n.$elProxy.attr("coords")!==undefined?n.$elProxy.attr("coords").split(","):undefined;if(f=="circle"){var v=parseInt(d[0]),m=parseInt(d[1]),g=parseInt(d[2]);s.dimension.height=g*2;s.dimension.width=g*2;s.offset.top=p+m-g;s.offset.left=h+v-g}else if(f=="rect"){var v=parseInt(d[0]),m=parseInt(d[1]),y=parseInt(d[2]),b=parseInt(d[3]);s.dimension.height=b-m;s.dimension.width=y-v;s.offset.top=p+m;s.offset.left=h+v}else if(f=="poly"){var w=[],E=[],S=0,x=0,T=0,N=0,C="even";for(var k=0;k<d.length;k++){var L=parseInt(d[k]);if(C=="even"){if(L>T){T=L;if(k===0){S=T}}if(L<S){S=L}C="odd"}else{if(L>N){N=L;if(k==1){x=N}}if(L<x){x=L}C="even"}}s.dimension.height=N-x;s.dimension.width=T-S;s.offset.top=p+x;s.offset.left=h+S}else{s.dimension.height=c.outerHeight(false);s.dimension.width=c.outerWidth(false);s.offset.top=p;s.offset.left=h}}var A=0,O=0,M=0,_=parseInt(n.options.offsetY),D=parseInt(n.options.offsetX),P=n.options.position;function H(){var n=e(t).scrollLeft();if(A-n<0){r=A-n;A=n}if(A+o-n>i){r=A-(i+n-o);A=i+n-o}}function B(n,r){if(s.offset.top-e(t).scrollTop()-a-_-12<0&&r.indexOf("top")>-1){P=n}if(s.offset.top+s.dimension.height+a+12+_>e(t).scrollTop()+e(t).height()&&r.indexOf("bottom")>-1){P=n;M=s.offset.top-a-_-12}}if(P=="top"){var j=s.offset.left+o-(s.offset.left+s.dimension.width);A=s.offset.left+D-j/2;M=s.offset.top-a-_-12;H();B("bottom","top")}if(P=="top-left"){A=s.offset.left+D;M=s.offset.top-a-_-12;H();B("bottom-left","top-left")}if(P=="top-right"){A=s.offset.left+s.dimension.width+D-o;M=s.offset.top-a-_-12;H();B("bottom-right","top-right")}if(P=="bottom"){var j=s.offset.left+o-(s.offset.left+s.dimension.width);A=s.offset.left-j/2+D;M=s.offset.top+s.dimension.height+_+12;H();B("top","bottom")}if(P=="bottom-left"){A=s.offset.left+D;M=s.offset.top+s.dimension.height+_+12;H();B("top-left","bottom-left")}if(P=="bottom-right"){A=s.offset.left+s.dimension.width+D-o;M=s.offset.top+s.dimension.height+_+12;H();B("top-right","bottom-right")}if(P=="left"){A=s.offset.left-D-o-12;O=s.offset.left+D+s.dimension.width+12;var F=s.offset.top+a-(s.offset.top+s.dimension.height);M=s.offset.top-F/2-_;if(A<0&&O+o>i){var I=parseFloat(n.$tooltip.css("border-width"))*2,q=o+A-I;n.$tooltip.css("width",q+"px");a=n.$tooltip.outerHeight(false);A=s.offset.left-D-q-12-I;F=s.offset.top+a-(s.offset.top+s.dimension.height);M=s.offset.top-F/2-_}else if(A<0){A=s.offset.left+D+s.dimension.width+12;r="left"}}if(P=="right"){A=s.offset.left+D+s.dimension.width+12;O=s.offset.left-D-o-12;var F=s.offset.top+a-(s.offset.top+s.dimension.height);M=s.offset.top-F/2-_;if(A+o>i&&O<0){var I=parseFloat(n.$tooltip.css("border-width"))*2,q=i-A-I;n.$tooltip.css("width",q+"px");a=n.$tooltip.outerHeight(false);F=s.offset.top+a-(s.offset.top+s.dimension.height);M=s.offset.top-F/2-_}else if(A+o>i){A=s.offset.left-D-o-12;r="right"}}if(n.options.arrow){var R="tooltipster-arrow-"+P;if(n.options.arrowColor.length<1){var U=n.$tooltip.css("background-color")}else{var U=n.options.arrowColor}if(!r){r=""}else if(r=="left"){R="tooltipster-arrow-right";r=""}else if(r=="right"){R="tooltipster-arrow-left";r=""}else{r="left:"+Math.round(r)+"px;"}if(P=="top"||P=="top-left"||P=="top-right"){var z=parseFloat(n.$tooltip.css("border-bottom-width")),W=n.$tooltip.css("border-bottom-color")}else if(P=="bottom"||P=="bottom-left"||P=="bottom-right"){var z=parseFloat(n.$tooltip.css("border-top-width")),W=n.$tooltip.css("border-top-color")}else if(P=="left"){var z=parseFloat(n.$tooltip.css("border-right-width")),W=n.$tooltip.css("border-right-color")}else if(P=="right"){var z=parseFloat(n.$tooltip.css("border-left-width")),W=n.$tooltip.css("border-left-color")}else{var z=parseFloat(n.$tooltip.css("border-bottom-width")),W=n.$tooltip.css("border-bottom-color")}if(z>1){z++}var X="";if(z!==0){var V="",J="border-color: "+W+";";if(R.indexOf("bottom")!==-1){V="margin-top: -"+Math.round(z)+"px;"}else if(R.indexOf("top")!==-1){V="margin-bottom: -"+Math.round(z)+"px;"}else if(R.indexOf("left")!==-1){V="margin-right: -"+Math.round(z)+"px;"}else if(R.indexOf("right")!==-1){V="margin-left: -"+Math.round(z)+"px;"}X='<span class="tooltipster-arrow-border" style="'+V+" "+J+';"></span>'}n.$tooltip.find(".tooltipster-arrow").remove();var K='<div class="'+R+' tooltipster-arrow" style="'+r+'">'+X+'<span style="border-color:'+U+';"></span></div>';n.$tooltip.append(K)}n.$tooltip.css({top:Math.round(M)+"px",left:Math.round(A)+"px"})}return n},enable:function(){this.enabled=true;return this},disable:function(){this.hide();this.enabled=false;return this},destroy:function(){var t=this;t.hide();if(t.$el[0]!==t.$elProxy[0]){t.$elProxy.remove()}t.$el.removeData(t.namespace).off("."+t.namespace);var n=t.$el.data("tooltipster-ns");if(n.length===1){var r=null;if(t.options.restoration==="previous"){r=t.$el.data("tooltipster-initialTitle")}else if(t.options.restoration==="current"){r=typeof t.Content==="string"?t.Content:e("<div></div>").append(t.Content).html()}if(r){t.$el.attr("title",r)}t.$el.removeClass("tooltipstered").removeData("tooltipster-ns").removeData("tooltipster-initialTitle")}else{n=e.grep(n,function(e,n){return e!==t.namespace});t.$el.data("tooltipster-ns",n)}return t},elementIcon:function(){return this.$el[0]!==this.$elProxy[0]?this.$elProxy[0]:undefined},elementTooltip:function(){return this.$tooltip?this.$tooltip[0]:undefined},option:function(e,t){if(typeof t=="undefined")return this.options[e];else{this.options[e]=t;return this}},status:function(){return this.Status}};e.fn[r]=function(){var t=arguments;if(this.length===0){if(typeof t[0]==="string"){var n=true;switch(t[0]){case"setDefaults":e.extend(i,t[1]);break;default:n=false;break}if(n)return true;else return this}else{return this}}else{if(typeof t[0]==="string"){var r="#*$~&";this.each(function(){var n=e(this).data("tooltipster-ns"),i=n?e(this).data(n[0]):null;if(i){if(typeof i[t[0]]==="function"){var s=i[t[0]](t[1],t[2])}else{throw new Error('Unknown method .tooltipster("'+t[0]+'")')}if(s!==i){r=s;return false}}else{throw new Error("You called Tooltipster's \""+t[0]+'" method on an uninitialized element')}});return r!=="#*$~&"?r:this}else{var o=[],u=t[0]&&typeof t[0].multiple!=="undefined",a=u&&t[0].multiple||!u&&i.multiple,f=t[0]&&typeof t[0].debug!=="undefined",l=f&&t[0].debug||!f&&i.debug;this.each(function(){var n=false,r=e(this).data("tooltipster-ns"),i=null;if(!r){n=true}else if(a){n=true}else if(l){console.log('Tooltipster: one or more tooltips are already attached to this element: ignoring. Use the "multiple" option to attach more tooltips.')}if(n){i=new s(this,t[0]);if(!r)r=[];r.push(i.namespace);e(this).data("tooltipster-ns",r);e(this).data(i.namespace,i)}o.push(i)});if(a)return o;else return this}}};var u=!!("ontouchstart"in t);var a=false;e("body").one("mousemove",function(){a=true})})(jQuery,window,document);
!function(a){"use strict";"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){"use strict";function b(){var a=document.createElement("input");return a.setAttribute("type","range"),"text"!==a.type}function c(a,b){var c=Array.prototype.slice.call(arguments,2);return setTimeout(function(){return a.apply(null,c)},b)}function d(a,b){return b=b||100,function(){if(!a.debouncing){var c=Array.prototype.slice.apply(arguments);a.lastReturnVal=a.apply(window,c),a.debouncing=!0}return clearTimeout(a.debounceTimeout),a.debounceTimeout=setTimeout(function(){a.debouncing=!1},b),a.lastReturnVal}}function e(a){return a&&(0===a.offsetWidth||0===a.offsetHeight||a.open===!1)}function f(a){for(var b=[],c=a.parentNode;e(c);)b.push(c),c=c.parentNode;return b}function g(a,b){function c(a){"undefined"!=typeof a.open&&(a.open=!a.open)}var d=f(a),e=d.length,g=[],h=a[b];if(e){for(var i=0;i<e;i++)g[i]=d[i].style.cssText,d[i].style.setProperty?d[i].style.setProperty("display","block","important"):d[i].style.cssText+=";display: block !important",d[i].style.height="0",d[i].style.overflow="hidden",d[i].style.visibility="hidden",c(d[i]);h=a[b];for(var j=0;j<e;j++)d[j].style.cssText=g[j],c(d[j])}return h}function h(a,b){var c=parseFloat(a);return Number.isNaN(c)?b:c}function i(a){return a.charAt(0).toUpperCase()+a.substr(1)}function j(b,e){if(this.$window=a(window),this.$document=a(document),this.$element=a(b),this.options=a.extend({},n,e),this.polyfill=this.options.polyfill,this.orientation=this.$element[0].getAttribute("data-orientation")||this.options.orientation,this.onInit=this.options.onInit,this.onSlide=this.options.onSlide,this.onSlideEnd=this.options.onSlideEnd,this.DIMENSION=o.orientation[this.orientation].dimension,this.DIRECTION=o.orientation[this.orientation].direction,this.DIRECTION_STYLE=o.orientation[this.orientation].directionStyle,this.COORDINATE=o.orientation[this.orientation].coordinate,this.polyfill&&m)return!1;this.identifier="js-"+k+"-"+l++,this.startEvent=this.options.startEvent.join("."+this.identifier+" ")+"."+this.identifier,this.moveEvent=this.options.moveEvent.join("."+this.identifier+" ")+"."+this.identifier,this.endEvent=this.options.endEvent.join("."+this.identifier+" ")+"."+this.identifier,this.toFixed=(this.step+"").replace(".","").length-1,this.$fill=a('<div class="'+this.options.fillClass+'" />'),this.$handle=a('<div class="'+this.options.handleClass+'" />'),this.$range=a('<div class="'+this.options.rangeClass+" "+this.options[this.orientation+"Class"]+'" id="'+this.identifier+'" />').insertAfter(this.$element).prepend(this.$fill,this.$handle),this.$element.css({position:"absolute",width:"1px",height:"1px",overflow:"hidden",opacity:"0"}),this.handleDown=a.proxy(this.handleDown,this),this.handleMove=a.proxy(this.handleMove,this),this.handleEnd=a.proxy(this.handleEnd,this),this.init();var f=this;this.$window.on("resize."+this.identifier,d(function(){c(function(){f.update(!1,!1)},300)},20)),this.$document.on(this.startEvent,"#"+this.identifier+":not(."+this.options.disabledClass+")",this.handleDown),this.$element.on("change."+this.identifier,function(a,b){if(!b||b.origin!==f.identifier){var c=a.target.value,d=f.getPositionFromValue(c);f.setPosition(d)}})}Number.isNaN=Number.isNaN||function(a){return"number"==typeof a&&a!==a};var k="rangeslider",l=0,m=b(),n={polyfill:!0,orientation:"horizontal",rangeClass:"rangeslider",disabledClass:"rangeslider--disabled",activeClass:"rangeslider--active",horizontalClass:"rangeslider--horizontal",verticalClass:"rangeslider--vertical",fillClass:"rangeslider__fill",handleClass:"rangeslider__handle",startEvent:["mousedown","touchstart","pointerdown"],moveEvent:["mousemove","touchmove","pointermove"],endEvent:["mouseup","touchend","pointerup"]},o={orientation:{horizontal:{dimension:"width",direction:"left",directionStyle:"left",coordinate:"x"},vertical:{dimension:"height",direction:"top",directionStyle:"bottom",coordinate:"y"}}};return j.prototype.init=function(){this.update(!0,!1),this.onInit&&"function"==typeof this.onInit&&this.onInit()},j.prototype.update=function(a,b){a=a||!1,a&&(this.min=h(this.$element[0].getAttribute("min"),0),this.max=h(this.$element[0].getAttribute("max"),100),this.value=h(this.$element[0].value,Math.round(this.min+(this.max-this.min)/2)),this.step=h(this.$element[0].getAttribute("step"),1)),this.handleDimension=g(this.$handle[0],"offset"+i(this.DIMENSION)),this.rangeDimension=g(this.$range[0],"offset"+i(this.DIMENSION)),this.maxHandlePos=this.rangeDimension-this.handleDimension,this.grabPos=this.handleDimension/2,this.position=this.getPositionFromValue(this.value),this.$element[0].disabled?this.$range.addClass(this.options.disabledClass):this.$range.removeClass(this.options.disabledClass),this.setPosition(this.position,b)},j.prototype.handleDown=function(a){if(a.preventDefault(),this.$document.on(this.moveEvent,this.handleMove),this.$document.on(this.endEvent,this.handleEnd),this.$range.addClass(this.options.activeClass),!((" "+a.target.className+" ").replace(/[\n\t]/g," ").indexOf(this.options.handleClass)>-1)){var b=this.getRelativePosition(a),c=this.$range[0].getBoundingClientRect()[this.DIRECTION],d=this.getPositionFromNode(this.$handle[0])-c,e="vertical"===this.orientation?this.maxHandlePos-(b-this.grabPos):b-this.grabPos;this.setPosition(e),b>=d&&b<d+this.handleDimension&&(this.grabPos=b-d)}},j.prototype.handleMove=function(a){a.preventDefault();var b=this.getRelativePosition(a),c="vertical"===this.orientation?this.maxHandlePos-(b-this.grabPos):b-this.grabPos;this.setPosition(c)},j.prototype.handleEnd=function(a){a.preventDefault(),this.$document.off(this.moveEvent,this.handleMove),this.$document.off(this.endEvent,this.handleEnd),this.$range.removeClass(this.options.activeClass),this.$element.trigger("change",{origin:this.identifier}),this.onSlideEnd&&"function"==typeof this.onSlideEnd&&this.onSlideEnd(this.position,this.value)},j.prototype.cap=function(a,b,c){return a<b?b:a>c?c:a},j.prototype.setPosition=function(a,b){var c,d;void 0===b&&(b=!0),c=this.getValueFromPosition(this.cap(a,0,this.maxHandlePos)),d=this.getPositionFromValue(c),this.$fill[0].style[this.DIMENSION]=d+this.grabPos+"px",this.$handle[0].style[this.DIRECTION_STYLE]=d+"px",this.setValue(c),this.position=d,this.value=c,b&&this.onSlide&&"function"==typeof this.onSlide&&this.onSlide(d,c)},j.prototype.getPositionFromNode=function(a){for(var b=0;null!==a;)b+=a.offsetLeft,a=a.offsetParent;return b},j.prototype.getRelativePosition=function(a){var b=i(this.COORDINATE),c=this.$range[0].getBoundingClientRect()[this.DIRECTION],d=0;return"undefined"!=typeof a.originalEvent["client"+b]?d=a.originalEvent["client"+b]:a.originalEvent.touches&&a.originalEvent.touches[0]&&"undefined"!=typeof a.originalEvent.touches[0]["client"+b]?d=a.originalEvent.touches[0]["client"+b]:a.currentPoint&&"undefined"!=typeof a.currentPoint[this.COORDINATE]&&(d=a.currentPoint[this.COORDINATE]),d-c},j.prototype.getPositionFromValue=function(a){var b,c;return b=(a-this.min)/(this.max-this.min),c=Number.isNaN(b)?0:b*this.maxHandlePos},j.prototype.getValueFromPosition=function(a){var b,c;return b=a/(this.maxHandlePos||1),c=this.step*Math.round(b*(this.max-this.min)/this.step)+this.min,Number(c.toFixed(this.toFixed))},j.prototype.setValue=function(a){a===this.value&&""!==this.$element[0].value||this.$element.val(a).trigger("input",{origin:this.identifier})},j.prototype.destroy=function(){this.$document.off("."+this.identifier),this.$window.off("."+this.identifier),this.$element.off("."+this.identifier).removeAttr("style").removeData("plugin_"+k),this.$range&&this.$range.length&&this.$range[0].parentNode.removeChild(this.$range[0])},a.fn[k]=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),e=d.data("plugin_"+k);e||d.data("plugin_"+k,e=new j(this,b)),"string"==typeof b&&e[b].apply(e,c)})},"rangeslider.js is available in jQuery context e.g $(selector).rangeslider(options);"});
!function(){"use strict";function e(e){e.fn._fadeIn=e.fn.fadeIn;var t=e.noop||function(){},o=/MSIE/.test(navigator.userAgent),n=/MSIE 6.0/.test(navigator.userAgent)&&!/MSIE 8.0/.test(navigator.userAgent),i=(document.documentMode,"function"==typeof document.createElement("div").style.setExpression&&document.createElement("div").style.setExpression);e.blockUI=function(e){d(window,e)},e.unblockUI=function(e){a(window,e)},e.growlUI=function(t,o,n,i){var s=e('<div class="growlUI"></div>');t&&s.append("<h1>"+t+"</h1>"),o&&s.append("<h2>"+o+"</h2>"),n===undefined&&(n=3e3);var l=function(t){t=t||{},e.blockUI({message:s,fadeIn:"undefined"!=typeof t.fadeIn?t.fadeIn:700,fadeOut:"undefined"!=typeof t.fadeOut?t.fadeOut:1e3,timeout:"undefined"!=typeof t.timeout?t.timeout:n,centerY:!1,showOverlay:!1,onUnblock:i,css:e.blockUI.defaults.growlCSS})};l();s.css("opacity");s.on("mouseover",function(){l({fadeIn:0,timeout:3e4});var t=e(".blockMsg");t.stop(),t.fadeTo(300,1)}).on("mouseout",function(){e(".blockMsg").fadeOut(1e3)})},e.fn.block=function(t){if(this[0]===window)return e.blockUI(t),this;var o=e.extend({},e.blockUI.defaults,t||{});return this.each(function(){var t=e(this);o.ignoreIfBlocked&&t.data("blockUI.isBlocked")||t.unblock({fadeOut:0})}),this.each(function(){"static"==e.css(this,"position")&&(this.style.position="relative",e(this).data("blockUI.static",!0)),this.style.zoom=1,d(this,t)})},e.fn.unblock=function(t){return this[0]===window?(e.unblockUI(t),this):this.each(function(){a(this,t)})},e.blockUI.version=2.7,e.blockUI.defaults={message:"<h1>Please wait...</h1>",title:null,draggable:!0,theme:!1,css:{padding:0,margin:0,width:"30%",top:"40%",left:"35%",textAlign:"center",color:"#000",border:"3px solid #aaa",backgroundColor:"#fff",cursor:"wait"},themedCSS:{width:"30%",top:"40%",left:"35%"},overlayCSS:{backgroundColor:"#000",opacity:.6,cursor:"wait"},cursorReset:"default",growlCSS:{width:"350px",top:"10px",left:"",right:"10px",border:"none",padding:"5px",opacity:.6,cursor:"default",color:"#fff",backgroundColor:"#000","-webkit-border-radius":"10px","-moz-border-radius":"10px","border-radius":"10px"},iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:!1,baseZ:1e3,centerX:!0,centerY:!0,allowBodyStretch:!0,bindEvents:!0,constrainTabKey:!0,fadeIn:200,fadeOut:400,timeout:0,showOverlay:!0,focusInput:!0,focusableElements:":input:enabled:visible",onBlock:null,onUnblock:null,onOverlayClick:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",ignoreIfBlocked:!1};var s=null,l=[];function d(d,c){var u,b,h=d==window,k=c&&c.message!==undefined?c.message:undefined;if(!(c=e.extend({},e.blockUI.defaults,c||{})).ignoreIfBlocked||!e(d).data("blockUI.isBlocked")){if(c.overlayCSS=e.extend({},e.blockUI.defaults.overlayCSS,c.overlayCSS||{}),u=e.extend({},e.blockUI.defaults.css,c.css||{}),c.onOverlayClick&&(c.overlayCSS.cursor="pointer"),b=e.extend({},e.blockUI.defaults.themedCSS,c.themedCSS||{}),k=k===undefined?c.message:k,h&&s&&a(window,{fadeOut:0}),k&&"string"!=typeof k&&(k.parentNode||k.jquery)){var y=k.jquery?k[0]:k,m={};e(d).data("blockUI.history",m),m.el=y,m.parent=y.parentNode,m.display=y.style.display,m.position=y.style.position,m.parent&&m.parent.removeChild(y)}e(d).data("blockUI.onUnblock",c.onUnblock);var g,v,I,w,U=c.baseZ;g=o||c.forceIframe?e('<iframe class="blockUI" style="z-index:'+U+++';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+c.iframeSrc+'"></iframe>'):e('<div class="blockUI" style="display:none"></div>'),v=c.theme?e('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+U+++';display:none"></div>'):e('<div class="blockUI blockOverlay" style="z-index:'+U+++';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>'),c.theme&&h?(w='<div class="blockUI '+c.blockMsgClass+' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(U+10)+';display:none;position:fixed">',c.title&&(w+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(c.title||"&nbsp;")+"</div>"),w+='<div class="ui-widget-content ui-dialog-content"></div>',w+="</div>"):c.theme?(w='<div class="blockUI '+c.blockMsgClass+' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(U+10)+';display:none;position:absolute">',c.title&&(w+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(c.title||"&nbsp;")+"</div>"),w+='<div class="ui-widget-content ui-dialog-content"></div>',w+="</div>"):w=h?'<div class="blockUI '+c.blockMsgClass+' blockPage" style="z-index:'+(U+10)+';display:none;position:fixed"></div>':'<div class="blockUI '+c.blockMsgClass+' blockElement" style="z-index:'+(U+10)+';display:none;position:absolute"></div>',I=e(w),k&&(c.theme?(I.css(b),I.addClass("ui-widget-content")):I.css(u)),c.theme||v.css(c.overlayCSS),v.css("position",h?"fixed":"absolute"),(o||c.forceIframe)&&g.css("opacity",0);var x=[g,v,I],C=e(h?"body":d);e.each(x,function(){this.appendTo(C)}),c.theme&&c.draggable&&e.fn.draggable&&I.draggable({handle:".ui-dialog-titlebar",cancel:"li"});var S=i&&(!e.support.boxModel||e("object,embed",h?null:d).length>0);if(n||S){if(h&&c.allowBodyStretch&&e.support.boxModel&&e("html,body").css("height","100%"),(n||!e.support.boxModel)&&!h)var E=p(d,"borderTopWidth"),O=p(d,"borderLeftWidth"),T=E?"(0 - "+E+")":0,M=O?"(0 - "+O+")":0;e.each(x,function(e,t){var o=t[0].style;if(o.position="absolute",e<2)h?o.setExpression("height","Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:"+c.quirksmodeOffsetHack+') + "px"'):o.setExpression("height",'this.parentNode.offsetHeight + "px"'),h?o.setExpression("width",'jQuery.support.boxModel&&document.documentElement.clientWidth||document.body.clientWidth + "px"'):o.setExpression("width",'this.parentNode.offsetWidth + "px"'),M&&o.setExpression("left",M),T&&o.setExpression("top",T);else if(c.centerY)h&&o.setExpression("top",'(document.documentElement.clientHeight||document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah=document.documentElement.scrollTop ? document.documentElement.scrollTop:document.body.scrollTop) + "px"'),o.marginTop=0;else if(!c.centerY&&h){var n="((document.documentElement.scrollTop ? document.documentElement.scrollTop:document.body.scrollTop) + "+(c.css&&c.css.top?parseInt(c.css.top,10):0)+') + "px"';o.setExpression("top",n)}})}if(k&&(c.theme?I.find(".ui-widget-content").append(k):I.append(k),(k.jquery||k.nodeType)&&e(k).show()),(o||c.forceIframe)&&c.showOverlay&&g.show(),c.fadeIn){var B=c.onBlock?c.onBlock:t,j=c.showOverlay&&!k?B:t,H=k?B:t;c.showOverlay&&v._fadeIn(c.fadeIn,j),k&&I._fadeIn(c.fadeIn,H)}else c.showOverlay&&v.show(),k&&I.show(),c.onBlock&&c.onBlock.bind(I)();if(r(1,d,c),h?(s=I[0],l=e(c.focusableElements,s),c.focusInput&&setTimeout(f,20)):function(e,t,o){var n=e.parentNode,i=e.style,s=(n.offsetWidth-e.offsetWidth)/2-p(n,"borderLeftWidth"),l=(n.offsetHeight-e.offsetHeight)/2-p(n,"borderTopWidth");t&&(i.left=s>0?s+"px":"0");o&&(i.top=l>0?l+"px":"0")}(I[0],c.centerX,c.centerY),c.timeout){var z=setTimeout(function(){h?e.unblockUI(c):e(d).unblock(c)},c.timeout);e(d).data("blockUI.timeout",z)}}}function a(t,o){var n,i,d=t==window,a=e(t),u=a.data("blockUI.history"),f=a.data("blockUI.timeout");f&&(clearTimeout(f),a.removeData("blockUI.timeout")),o=e.extend({},e.blockUI.defaults,o||{}),r(0,t,o),null===o.onUnblock&&(o.onUnblock=a.data("blockUI.onUnblock"),a.removeData("blockUI.onUnblock")),i=d?e(document.body).children().filter(".blockUI").add("body > .blockUI"):a.find(">.blockUI"),o.cursorReset&&(i.length>1&&(i[1].style.cursor=o.cursorReset),i.length>2&&(i[2].style.cursor=o.cursorReset)),d&&(s=l=null),o.fadeOut?(n=i.length,i.stop().fadeOut(o.fadeOut,function(){0==--n&&c(i,u,o,t)})):c(i,u,o,t)}function c(t,o,n,i){var s=e(i);if(!s.data("blockUI.isBlocked")){t.each(function(e,t){this.parentNode&&this.parentNode.removeChild(this)}),o&&o.el&&(o.el.style.display=o.display,o.el.style.position=o.position,o.el.style.cursor="default",o.parent&&o.parent.appendChild(o.el),s.removeData("blockUI.history")),s.data("blockUI.static")&&s.css("position","static"),"function"==typeof n.onUnblock&&n.onUnblock(i,n);var l=e(document.body),d=l.width(),a=l[0].style.width;l.width(d-1).width(d),l[0].style.width=a}}function r(t,o,n){var i=o==window,l=e(o);if((t||(!i||s)&&(i||l.data("blockUI.isBlocked")))&&(l.data("blockUI.isBlocked",t),i&&n.bindEvents&&(!t||n.showOverlay))){var d="mousedown mouseup keydown keypress keyup touchstart touchend touchmove";t?e(document).on(d,n,u):e(document).off(d,u)}}function u(t){if("keydown"===t.type&&t.keyCode&&9==t.keyCode&&s&&t.data.constrainTabKey){var o=l,n=!t.shiftKey&&t.target===o[o.length-1],i=t.shiftKey&&t.target===o[0];if(n||i)return setTimeout(function(){f(i)},10),!1}var d=t.data,a=e(t.target);return a.hasClass("blockOverlay")&&d.onOverlayClick&&d.onOverlayClick(t),a.parents("div."+d.blockMsgClass).length>0||0===a.parents().children().filter("div.blockUI").length}function f(e){if(l){var t=l[!0===e?l.length-1:0];t&&t.trigger("focus")}}function p(t,o){return parseInt(e.css(t,o),10)||0}}"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],e):e(jQuery)}();
jQuery(function(t){if("undefined"==typeof wc_add_to_cart_params)return!1;var a=function(){this.requests=[],this.addRequest=this.addRequest.bind(this),this.run=this.run.bind(this),this.$liveRegion=this.createLiveRegion(),t(document.body).on("click",".add_to_cart_button:not(.wc-interactive)",{addToCartHandler:this},this.onAddToCart).on("keydown",".add_to_cart_button:not(.wc-interactive)",{addToCartHandler:this},t=>{" "===t.key&&(t.preventDefault(),t.target.click())}).on("click",".remove_from_cart_button",{addToCartHandler:this},this.onRemoveFromCart).on("keydown",".remove_from_cart_button",this.onKeydownRemoveFromCart).on("added_to_cart",{addToCartHandler:this},this.onAddedToCart).on("removed_from_cart",{addToCartHandler:this},this.onRemovedFromCart).on("ajax_request_not_sent.adding_to_cart",this.updateButton)};a.prototype.addRequest=function(t){this.requests.push(t),1===this.requests.length&&this.run()},a.prototype.run=function(){var a=this,e=a.requests[0].complete;a.requests[0].complete=function(){"function"==typeof e&&e(),a.requests.shift(),a.requests.length>0&&a.run()},t.ajax(this.requests[0])},a.prototype.onAddToCart=function(a){var e=t(this);if(e.is(".ajax_add_to_cart")){if(!e.attr("data-product_id"))return!0;if(a.data.addToCartHandler.$liveRegion.text("").removeAttr("aria-relevant"),a.preventDefault(),e.removeClass("added"),e.addClass("loading"),!1===t(document.body).triggerHandler("should_send_ajax_request.adding_to_cart",[e]))return t(document.body).trigger("ajax_request_not_sent.adding_to_cart",[!1,!1,e]),!0;var r={};t.each(e.data(),function(t,a){r[t]=a}),t.each(e[0].dataset,function(t,a){r[t]=a}),t(document.body).trigger("adding_to_cart",[e,r]),a.data.addToCartHandler.addRequest({type:"POST",url:wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%","add_to_cart"),data:r,success:function(a){a&&(a.error&&a.product_url?window.location=a.product_url:"yes"!==wc_add_to_cart_params.cart_redirect_after_add?t(document.body).trigger("added_to_cart",[a.fragments,a.cart_hash,e]):window.location=wc_add_to_cart_params.cart_url)},dataType:"json"})}},a.prototype.onRemoveFromCart=function(a){var e=t(this),r=e.closest(".woocommerce-mini-cart-item");a.data.addToCartHandler.$liveRegion.text("").removeAttr("aria-relevant"),a.preventDefault(),r.block({message:null,overlayCSS:{opacity:.6}}),a.data.addToCartHandler.addRequest({type:"POST",url:wc_add_to_cart_params.wc_ajax_url.toString().replace("%%endpoint%%","remove_from_cart"),data:{cart_item_key:e.data("cart_item_key")},success:function(a){a&&a.fragments?t(document.body).trigger("removed_from_cart",[a.fragments,a.cart_hash,e]):window.location=e.attr("href")},error:function(){window.location=e.attr("href")},dataType:"json"})},a.prototype.onKeydownRemoveFromCart=function(a){" "===a.key&&(a.preventDefault(),t(this).trigger("click"))},a.prototype.updateButton=function(a,e,r,o){if(o=void 0!==o&&o){if(o.removeClass("loading"),e&&o.addClass("added"),e&&!wc_add_to_cart_params.is_cart&&0===o.parent().find(".added_to_cart").length){var d=document.createElement("a");d.href=wc_add_to_cart_params.cart_url,d.className="added_to_cart wc-forward",d.title=wc_add_to_cart_params.i18n_view_cart,d.textContent=wc_add_to_cart_params.i18n_view_cart,o.after(d)}t(document.body).trigger("wc_cart_button_updated",[o])}},a.prototype.updateFragments=function(a,e){e&&(t.each(e,function(a){t(a).addClass("updating").fadeTo("400","0.6").block({message:null,overlayCSS:{opacity:.6}})}),t.each(e,function(a,e){t(a).replaceWith(e),t(a).stop(!0).css("opacity","1").unblock()}),t(document.body).trigger("wc_fragments_loaded"))},a.prototype.alertCartUpdated=function(t,a,e,r){if(r=void 0!==r&&r){var o=r.data("success_message");if(!o)return;t.data.addToCartHandler.$liveRegion.delay(1e3).text(o).attr("aria-relevant","all")}},a.prototype.createLiveRegion=function(){var a=t(".widget_shopping_cart_live_region");return a.length?a:t('<div class="widget_shopping_cart_live_region screen-reader-text" role="status"></div>').appendTo("body")},a.prototype.onAddedToCart=function(t,a,e,r){t.data.addToCartHandler.updateButton(t,a,e,r),t.data.addToCartHandler.updateFragments(t,a),t.data.addToCartHandler.alertCartUpdated(t,a,e,r)},a.prototype.onRemovedFromCart=function(t,a,e,r){t.data.addToCartHandler.updateFragments(t,a),t.data.addToCartHandler.alertCartUpdated(t,a,e,r)},new a});
!function(o){var t={url:!1,callback:!1,target:!1,duration:120,on:"mouseover",touch:!0,onZoomIn:!1,onZoomOut:!1,magnify:1};o.zoom=function(t,e,n,i){var u,a,c,r,l,m,f,s=o(t),h=s.css("position"),d=o(e);return t.style.position=/(absolute|fixed)/.test(h)?h:"relative",t.style.overflow="hidden",n.style.width=n.style.height="",o(n).addClass("zoomImg").css({position:"absolute",top:0,left:0,opacity:0,width:n.width*i,height:n.height*i,border:"none",maxWidth:"none",maxHeight:"none"}).appendTo(t),{init:function(){a=s.outerWidth(),u=s.outerHeight(),e===t?(r=a,c=u):(r=d.outerWidth(),c=d.outerHeight()),l=(n.width-a)/r,m=(n.height-u)/c,f=d.offset()},move:function(o){var t=o.pageX-f.left,e=o.pageY-f.top;e=Math.max(Math.min(e,c),0),t=Math.max(Math.min(t,r),0),n.style.left=t*-l+"px",n.style.top=e*-m+"px"}}},o.fn.zoom=function(e){return this.each(function(){var n=o.extend({},t,e||{}),i=n.target&&o(n.target)[0]||this,u=this,a=o(u),c=document.createElement("img"),r=o(c),l="mousemove.zoom",m=!1,f=!1;if(!n.url){var s=u.querySelector("img");if(s&&(n.url=s.getAttribute("data-src")||s.currentSrc||s.src,n.alt=s.getAttribute("data-alt")||s.alt),!n.url)return}a.one("zoom.destroy",function(o,t){a.off(".zoom"),i.style.position=o,i.style.overflow=t,c.onload=null,r.remove()}.bind(this,i.style.position,i.style.overflow)),c.onload=function(){var t=o.zoom(i,u,c,n.magnify);function e(e){t.init(),t.move(e),r.stop().fadeTo(o.support.opacity?n.duration:0,1,"function"==typeof n.onZoomIn&&n.onZoomIn.call(c))}function s(){r.stop().fadeTo(n.duration,0,"function"==typeof n.onZoomOut&&n.onZoomOut.call(c))}"grab"===n.on?a.on("mousedown.zoom",function(n){1===n.which&&(o(document).one("mouseup.zoom",function(){s(),o(document).off(l,t.move)}),e(n),o(document).on(l,t.move),n.preventDefault())}):"click"===n.on?a.on("click.zoom",function(n){return m?void 0:(m=!0,e(n),o(document).on(l,t.move),o(document).one("click.zoom",function(){s(),m=!1,o(document).off(l,t.move)}),!1)}):"toggle"===n.on?a.on("click.zoom",function(o){m?s():e(o),m=!m}):"mouseover"===n.on&&(t.init(),a.on("mouseenter.zoom",e).on("mouseleave.zoom",s).on(l,t.move)),n.touch&&a.on("touchstart.zoom",function(o){o.preventDefault(),f?(f=!1,s()):(f=!0,e(o.originalEvent.touches[0]||o.originalEvent.changedTouches[0]))}).on("touchmove.zoom",function(o){o.preventDefault(),t.move(o.originalEvent.touches[0]||o.originalEvent.changedTouches[0])}).on("touchend.zoom",function(o){o.preventDefault(),f&&(f=!1,s())}),"function"==typeof n.callback&&n.callback.call(c)},c.setAttribute("role","presentation"),c.alt=n.alt||"",c.src=n.url})},o.fn.zoom.defaults=t}(window.jQuery);
!function(e){var t=!0,a={swing:"cubic-bezier(.02, .01, .47, 1)",linear:"linear",easeInQuad:"cubic-bezier(0.11, 0, 0.5, 0)",easeOutQuad:"cubic-bezier(0.5, 1, 0.89, 1)",easeInOutQuad:"cubic-bezier(0.45, 0, 0.55, 1)",easeInCubic:"cubic-bezier(0.32, 0, 0.67, 0)",easeOutCubic:"cubic-bezier(0.33, 1, 0.68, 1)",easeInOutCubic:"cubic-bezier(0.65, 0, 0.35, 1)",easeInQuart:"cubic-bezier(0.5, 0, 0.75, 0)",easeOutQuart:"cubic-bezier(0.25, 1, 0.5, 1)",easeInOutQuart:"cubic-bezier(0.76, 0, 0.24, 1)",easeInQuint:"cubic-bezier(0.64, 0, 0.78, 0)",easeOutQuint:"cubic-bezier(0.22, 1, 0.36, 1)",easeInOutQuint:"cubic-bezier(0.83, 0, 0.17, 1)",easeInSine:"cubic-bezier(0.12, 0, 0.39, 0)",easeOutSine:"cubic-bezier(0.61, 1, 0.88, 1)",easeInOutSine:"cubic-bezier(0.37, 0, 0.63, 1)",easeInExpo:"cubic-bezier(0.7, 0, 0.84, 0)",easeOutExpo:"cubic-bezier(0.16, 1, 0.3, 1)",easeInOutExpo:"cubic-bezier(0.87, 0, 0.13, 1)",easeInCirc:"cubic-bezier(0.55, 0, 1, 0.45)",easeOutCirc:"cubic-bezier(0, 0.55, 0.45, 1)",easeInOutCirc:"cubic-bezier(0.85, 0, 0.15, 1)",easeInBack:"cubic-bezier(0.36, 0, 0.66, -0.56)",easeOutBack:"cubic-bezier(0.34, 1.56, 0.64, 1)",easeInOutBack:"cubic-bezier(0.68, -0.6, 0.32, 1.6)"};a.jswing=a.swing,e.flexslider=function(i,n){var s=e(i);"undefined"==typeof n.rtl&&"rtl"==e("html").attr("dir")&&(n.rtl=!0),s.vars=e.extend({},e.flexslider.defaults,n);var r,o=s.vars.namespace,l=("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)&&s.vars.touch,c="click touchend keyup flexslider-click",u="",d=a[s.vars.easing]||"ease",v="vertical"===s.vars.direction,p=s.vars.reverse,m=s.vars.itemWidth>0,f="fade"===s.vars.animation,h=""!==s.vars.asNavFor,g={};e.data(i,"flexslider",s),g={init:function(){s.animating=!1,s.currentSlide=parseInt(s.vars.startAt?s.vars.startAt:0,10),isNaN(s.currentSlide)&&(s.currentSlide=0),s.animatingTo=s.currentSlide,s.atEnd=0===s.currentSlide||s.currentSlide===s.last,s.containerSelector=s.vars.selector.substr(0,s.vars.selector.search(" ")),s.slides=e(s.vars.selector,s),s.container=e(s.containerSelector,s),s.count=s.slides.length,s.syncExists=e(s.vars.sync).length>0,"slide"===s.vars.animation&&(s.vars.animation="swing"),s.prop=v?"top":s.vars.rtl?"marginRight":"marginLeft",s.args={},s.manualPause=!1,s.stopped=!1,s.started=!1,s.startTimeout=null,s.transforms=s.transitions=!s.vars.video&&!f&&s.vars.useCSS,s.transforms&&(s.prop="transform"),s.isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,s.ensureAnimationEnd="",""!==s.vars.controlsContainer&&(s.controlsContainer=e(s.vars.controlsContainer).length>0&&e(s.vars.controlsContainer)),""!==s.vars.manualControls&&(s.manualControls=e(s.vars.manualControls).length>0&&e(s.vars.manualControls)),""!==s.vars.customDirectionNav&&(s.customDirectionNav=2===e(s.vars.customDirectionNav).length&&e(s.vars.customDirectionNav)),s.vars.randomize&&(s.slides.sort(function(){return Math.round(Math.random())-.5}),s.container.empty().append(s.slides)),s.doMath(),s.setup("init"),s.vars.controlNav&&g.controlNav.setup(),s.vars.directionNav&&g.directionNav.setup(),s.vars.keyboard&&(1===e(s.containerSelector).length||s.vars.multipleKeyboard)&&e(document).on("keyup",function(e){var t=e.keyCode;if(!s.animating&&(39===t||37===t)){var a=s.vars.rtl?37===t?s.getTarget("next"):39===t&&s.getTarget("prev"):39===t?s.getTarget("next"):37===t&&s.getTarget("prev");s.flexAnimate(a,s.vars.pauseOnAction)}}),s.vars.mousewheel&&s.on("mousewheel",function(e,t,a,i){e.preventDefault();var n=t<0?s.getTarget("next"):s.getTarget("prev");s.flexAnimate(n,s.vars.pauseOnAction)}),s.vars.pausePlay&&g.pausePlay.setup(),s.vars.slideshow&&s.vars.pauseInvisible&&g.pauseInvisible(),s.vars.slideshow&&(s.vars.pauseOnHover&&s.on("mouseenter",function(){s.manualPlay||s.manualPause||s.pause()}).on("mouseleave",function(){s.manualPause||s.manualPlay||s.stopped||s.play()}),s.vars.pauseInvisible&&"visible"!==document.visibilityState||(s.vars.initDelay>0?s.startTimeout=setTimeout(s.play,s.vars.initDelay):s.play())),h&&g.asNav.setup(),l&&s.vars.touch&&g.touch(),(!f||f&&s.vars.smoothHeight)&&e(window).on("resize orientationchange focus",g.resize),s.find("img").attr("draggable","false"),setTimeout(function(){s.vars.start(s)},200)},asNav:{setup:function(){s.asNav=!0,s.animatingTo=Math.floor(s.currentSlide/s.move),s.currentItem=s.currentSlide,s.slides.removeClass(o+"active-slide").eq(s.currentItem).addClass(o+"active-slide"),s.slides.on(c,function(t){t.preventDefault();var a=e(this),i=a.index();(s.vars.rtl?-1*(a.offset().right-e(s).scrollLeft()):a.offset().left-e(s).scrollLeft())<=0&&a.hasClass(o+"active-slide")?s.flexAnimate(s.getTarget("prev"),!0):e(s.vars.asNavFor).data("flexslider").animating||a.hasClass(o+"active-slide")||(s.direction=s.currentItem<i?"next":"prev",s.flexAnimate(i,s.vars.pauseOnAction,!1,!0,!0))})}},controlNav:{setup:function(){s.manualControls?g.controlNav.setupManual():g.controlNav.setupPaging()},setupPaging:function(){var t,a,i="thumbnails"===s.vars.controlNav?"control-thumbs":"control-paging",n=1;if(s.controlNavScaffold=e('<ol class="'+o+"control-nav "+o+i+'"></ol>'),s.pagingCount>1)for(var r=0;r<s.pagingCount;r++){if(a=s.slides.eq(r),undefined===a.attr("data-thumb-alt")&&a.attr("data-thumb-alt",""),t=e("<a></a>").attr("href","#").text(n),"thumbnails"===s.vars.controlNav&&(t=e("<img/>",{onload:"this.width=this.naturalWidth; this.height=this.naturalHeight",src:a.attr("data-thumb"),srcset:a.attr("data-thumb-srcset"),sizes:a.attr("data-thumb-sizes"),alt:a.attr("alt")})),""!==a.attr("data-thumb-alt")&&t.attr("alt",a.attr("data-thumb-alt")),"thumbnails"===s.vars.controlNav&&!0===s.vars.thumbCaptions){var l=a.attr("data-thumbcaption");if(""!==l&&undefined!==l){var d=e("<span></span>").addClass(o+"caption").text(l);t.append(d)}}var v=e("<li>");t.appendTo(v),v.append("</li>"),s.controlNavScaffold.append(v),n++}s.controlsContainer?e(s.controlsContainer).append(s.controlNavScaffold):s.append(s.controlNavScaffold),g.controlNav.set(),g.controlNav.active(),s.controlNavScaffold.on(c,"a, img",function(t){if(t.preventDefault(),""===u||u===t.type||"flexslider-click"===t.type){var a=e(this),i=s.controlNav.index(a);a.hasClass(o+"active")||(s.direction=i>s.currentSlide?"next":"prev",s.flexAnimate(i,s.vars.pauseOnAction))}""===u&&"flexslider-click"!==t.type&&(u=t.type),g.setToClearWatchedEvent()})},setupManual:function(){s.controlNav=s.manualControls,g.controlNav.active(),s.controlNav.on(c,function(t){if(t.preventDefault(),""===u||u===t.type||"flexslider-click"===t.type){var a=e(this),i=s.controlNav.index(a);a.hasClass(o+"active")||(i>s.currentSlide?s.direction="next":s.direction="prev",s.flexAnimate(i,s.vars.pauseOnAction))}""===u&&"flexslider-click"!==t.type&&(u=t.type),g.setToClearWatchedEvent()})},set:function(){var t="thumbnails"===s.vars.controlNav?"img":"a";s.controlNav=e("."+o+"control-nav li "+t,s.controlsContainer?s.controlsContainer:s)},active:function(){s.controlNav.removeClass(o+"active").eq(s.animatingTo).addClass(o+"active")},update:function(t,a){s.pagingCount>1&&"add"===t?s.controlNavScaffold.append(e('<li><a href="#">'+s.count+"</a></li>")):1===s.pagingCount?s.controlNavScaffold.find("li").remove():s.controlNav.eq(a).closest("li").remove(),g.controlNav.set(),s.pagingCount>1&&s.pagingCount!==s.controlNav.length?s.update(a,t):g.controlNav.active()}},directionNav:{setup:function(){var t=e('<ul class="'+o+'direction-nav"><li class="'+o+'nav-prev"><a class="'+o+'prev" href="#">'+s.vars.prevText+'</a></li><li class="'+o+'nav-next"><a class="'+o+'next" href="#">'+s.vars.nextText+"</a></li></ul>");s.customDirectionNav?s.directionNav=s.customDirectionNav:s.controlsContainer?(e(s.controlsContainer).append(t),s.directionNav=e("."+o+"direction-nav li a",s.controlsContainer)):(s.append(t),s.directionNav=e("."+o+"direction-nav li a",s)),g.directionNav.update(),s.directionNav.on(c,function(t){var a;t.preventDefault(),""!==u&&u!==t.type&&"flexslider-click"!==t.type||(a=e(this).hasClass(o+"next")?s.getTarget("next"):s.getTarget("prev"),s.flexAnimate(a,s.vars.pauseOnAction)),""===u&&"flexslider-click"!==t.type&&(u=t.type),g.setToClearWatchedEvent()})},update:function(){var e=o+"disabled";1===s.pagingCount?s.directionNav.addClass(e).attr("tabindex","-1"):s.vars.animationLoop?s.directionNav.removeClass(e).prop("tabindex","-1"):0===s.animatingTo?s.directionNav.removeClass(e).filter("."+o+"prev").addClass(e).attr("tabindex","-1"):s.animatingTo===s.last?s.directionNav.removeClass(e).filter("."+o+"next").addClass(e).attr("tabindex","-1"):s.directionNav.removeClass(e).prop("tabindex","-1")}},pausePlay:{setup:function(){var t=e('<div class="'+o+'pauseplay"><a href="#"></a></div>');s.controlsContainer?(s.controlsContainer.append(t),s.pausePlay=e("."+o+"pauseplay a",s.controlsContainer)):(s.append(t),s.pausePlay=e("."+o+"pauseplay a",s)),g.pausePlay.update(s.vars.slideshow?o+"pause":o+"play"),s.pausePlay.on(c,function(t){t.preventDefault(),""!==u&&u!==t.type&&"flexslider-click"!==t.type||(e(this).hasClass(o+"pause")?(s.manualPause=!0,s.manualPlay=!1,s.pause()):(s.manualPause=!1,s.manualPlay=!0,s.play())),""===u&&"flexslider-click"!==t.type&&(u=t.type),g.setToClearWatchedEvent()})},update:function(e){"play"===e?s.pausePlay.removeClass(o+"pause").addClass(o+"play").html(s.vars.playText):s.pausePlay.removeClass(o+"play").addClass(o+"pause").html(s.vars.pauseText)}},touch:function(){var e,t,a,n,r,o,l,c,u,d=!1,h=0,g=0;l=function(r){s.animating?r.preventDefault():1===r.touches.length&&(s.pause(),n=v?s.h:s.w,o=Number(new Date),h=r.touches[0].pageX,g=r.touches[0].pageY,a=m&&p&&s.animatingTo===s.last?0:m&&p?s.limit-(s.itemW+s.vars.itemMargin)*s.move*s.animatingTo:m&&s.currentSlide===s.last?s.limit:m?(s.itemW+s.vars.itemMargin)*s.move*s.currentSlide:p?(s.last-s.currentSlide+s.cloneOffset)*n:(s.currentSlide+s.cloneOffset)*n,e=v?g:h,t=v?h:g,i.addEventListener("touchmove",c,!1),i.addEventListener("touchend",u,!1))},c=function(i){h=i.touches[0].pageX,g=i.touches[0].pageY,r=v?e-g:(s.vars.rtl?-1:1)*(e-h);(!(d=v?Math.abs(r)<Math.abs(h-t):Math.abs(r)<Math.abs(g-t))||Number(new Date)-o>500)&&(i.preventDefault(),f||(s.vars.animationLoop||(r/=0===s.currentSlide&&r<0||s.currentSlide===s.last&&r>0?Math.abs(r)/n+2:1),s.setProps(a+r,"setTouch")))},u=function(l){if(i.removeEventListener("touchmove",c,!1),s.animatingTo===s.currentSlide&&!d&&null!==r){var v=p?-r:r,m=v>0?s.getTarget("next"):s.getTarget("prev");s.canAdvance(m)&&(Number(new Date)-o<550&&Math.abs(v)>50||Math.abs(v)>n/2)?s.flexAnimate(m,s.vars.pauseOnAction):f||s.flexAnimate(s.currentSlide,s.vars.pauseOnAction,!0)}i.removeEventListener("touchend",u,!1),e=null,t=null,r=null,a=null},i.addEventListener("touchstart",l,!1)},resize:function(){!s.animating&&s.is(":visible")&&(m||s.doMath(),f?g.smoothHeight():m?(s.slides.width(s.computedW),s.update(s.pagingCount),s.setProps()):v?(s.viewport.height(s.h),s.setProps(s.h,"setTotal")):(s.setProps(s.computedW,"setTotal"),s.newSlides.width(s.computedW),s.vars.smoothHeight&&g.smoothHeight()))},smoothHeight:function(e){v&&!f||(f?s:s.viewport).css({height:s.slides.eq(s.animatingTo).innerHeight(),transition:e?"height "+e+"ms":"none"})},sync:function(t){var a=e(s.vars.sync).data("flexslider"),i=s.animatingTo;switch(t){case"animate":a.flexAnimate(i,s.vars.pauseOnAction,!1,!0);break;case"play":a.playing||a.asNav||a.play();break;case"pause":a.pause()}},uniqueID:function(t){return t.filter("[id]").add(t.find("[id]")).each(function(){var t=e(this);t.attr("id",t.attr("id")+"_clone")}),t},pauseInvisible:function(){document.addEventListener("visibilitychange",function(){"hidden"===document.visibilityState?s.startTimeout?clearTimeout(s.startTimeout):s.pause():s.started?s.play():s.vars.initDelay>0?setTimeout(s.play,s.vars.initDelay):s.play()})},setToClearWatchedEvent:function(){clearTimeout(r),r=setTimeout(function(){u=""},3e3)}},s.flexAnimate=function(t,a,i,n,r){if(s.vars.animationLoop||t===s.currentSlide||(s.direction=t>s.currentSlide?"next":"prev"),h&&1===s.pagingCount&&(s.direction=s.currentItem<t?"next":"prev"),!s.animating&&(s.canAdvance(t,r)||i)&&s.is(":visible")){if(h&&n){var c=e(s.vars.asNavFor).data("flexslider");if(s.atEnd=0===t||t===s.count-1,c.flexAnimate(t,!0,!1,!0,r),s.direction=s.currentItem<t?"next":"prev",c.direction=s.direction,Math.ceil((t+1)/s.visible)-1===s.currentSlide||0===t)return s.currentItem=t,s.slides.removeClass(o+"active-slide").eq(t).addClass(o+"active-slide"),!1;s.currentItem=t,s.slides.removeClass(o+"active-slide").eq(t).addClass(o+"active-slide"),t=Math.floor(t/s.visible)}if(s.animating=!0,s.animatingTo=t,a&&s.pause(),s.vars.before(s),s.syncExists&&!r&&g.sync("animate"),s.vars.controlNav&&g.controlNav.active(),m||s.slides.removeClass(o+"active-slide").eq(t).addClass(o+"active-slide"),s.atEnd=0===t||t===s.last,s.vars.directionNav&&g.directionNav.update(),t===s.last&&(s.vars.end(s),s.vars.animationLoop||s.pause()),f)l||(s.slides.eq(s.currentSlide).off("transitionend"),s.slides.eq(t).off("transitionend").on("transitionend",s.wrapup)),s.slides.eq(s.currentSlide).css({opacity:0,zIndex:1}),s.slides.eq(t).css({opacity:1,zIndex:2}),l&&s.wrapup(y);else{var u,d,b,y=v?s.slides.filter(":first").height():s.computedW;m?(u=s.vars.itemMargin,d=(b=(s.itemW+u)*s.move*s.animatingTo)>s.limit&&1!==s.visible?s.limit:b):d=0===s.currentSlide&&t===s.count-1&&s.vars.animationLoop&&"next"!==s.direction?p?(s.count+s.cloneOffset)*y:0:s.currentSlide===s.last&&0===t&&s.vars.animationLoop&&"prev"!==s.direction?p?0:(s.count+1)*y:p?(s.count-1-t+s.cloneOffset)*y:(t+s.cloneOffset)*y,s.setProps(d,"",s.vars.animationSpeed),s.vars.animationLoop&&s.atEnd||(s.animating=!1,s.currentSlide=s.animatingTo),s.container.off("transitionend"),s.container.on("transitionend",function(){clearTimeout(s.ensureAnimationEnd),s.wrapup(y)}),clearTimeout(s.ensureAnimationEnd),s.ensureAnimationEnd=setTimeout(function(){s.wrapup(y)},s.vars.animationSpeed+100)}s.vars.smoothHeight&&g.smoothHeight(s.vars.animationSpeed)}},s.wrapup=function(e){f||m||(0===s.currentSlide&&s.animatingTo===s.last&&s.vars.animationLoop?s.setProps(e,"jumpEnd"):s.currentSlide===s.last&&0===s.animatingTo&&s.vars.animationLoop&&s.setProps(e,"jumpStart")),s.animating=!1,s.currentSlide=s.animatingTo,s.vars.after(s)},s.animateSlides=function(){!s.animating&&t&&s.flexAnimate(s.getTarget("next"))},s.pause=function(){clearInterval(s.animatedSlides),s.animatedSlides=null,s.playing=!1,s.vars.pausePlay&&g.pausePlay.update("play"),s.syncExists&&g.sync("pause")},s.play=function(){s.playing&&clearInterval(s.animatedSlides),s.animatedSlides=s.animatedSlides||setInterval(s.animateSlides,s.vars.slideshowSpeed),s.started=s.playing=!0,s.vars.pausePlay&&g.pausePlay.update("pause"),s.syncExists&&g.sync("play")},s.stop=function(){s.pause(),s.stopped=!0},s.canAdvance=function(e,t){var a=h?s.pagingCount-1:s.last;return!!t||(!(!h||s.currentItem!==s.count-1||0!==e||"prev"!==s.direction)||(!h||0!==s.currentItem||e!==s.pagingCount-1||"next"===s.direction)&&(!(e===s.currentSlide&&!h)&&(!!s.vars.animationLoop||(!s.atEnd||0!==s.currentSlide||e!==a||"next"===s.direction)&&(!s.atEnd||s.currentSlide!==a||0!==e||"next"!==s.direction))))},s.getTarget=function(e){return s.direction=e,"next"===e?s.currentSlide===s.last?0:s.currentSlide+1:0===s.currentSlide?s.last:s.currentSlide-1},s.setProps=function(e,t,a){var i,n=(i=e||(s.itemW+s.vars.itemMargin)*s.move*s.animatingTo,function(){if(m)return"setTouch"===t?e:p&&s.animatingTo===s.last?0:p?s.limit-(s.itemW+s.vars.itemMargin)*s.move*s.animatingTo:s.animatingTo===s.last?s.limit:i;switch(t){case"setTotal":return p?(s.count-1-s.currentSlide+s.cloneOffset)*e:(s.currentSlide+s.cloneOffset)*e;case"setTouch":return e;case"jumpEnd":return p?e:s.count*e;case"jumpStart":return p?s.count*e:e;default:return e}}()*(s.vars.rtl?1:-1)+"px");a=a!==undefined?a/1e3+"s":"0s",s.container.css("transition-duration",a),s.transforms?n=v?"translate3d(0,"+n+",0)":"translate3d("+parseInt(n)+"px,0,0)":s.container.css("transition-timing-function",d),s.args[s.prop]=n,s.container.css(s.args)},s.setup=function(t){var a,i;f?(s.vars.rtl?s.slides.css({width:"100%",float:"right",marginLeft:"-100%",position:"relative"}):s.slides.css({width:"100%",float:"left",marginRight:"-100%",position:"relative"}),"init"===t&&(l?s.slides.css({opacity:0,display:"block",transition:"opacity "+s.vars.animationSpeed/1e3+"s ease",zIndex:1}).eq(s.currentSlide).css({opacity:1,zIndex:2}):(0==s.vars.fadeFirstSlide?(s.slides.css({opacity:0,display:"block",zIndex:1}).eq(s.currentSlide).css({opacity:1,zIndex:2}),s.slides.outerWidth()):(s.slides.css({opacity:0,display:"block",zIndex:1}).outerWidth(),s.slides.eq(s.currentSlide).css({opacity:1,zIndex:2})),s.slides.css({transition:"opacity "+s.vars.animationSpeed/1e3+"s "+d}))),s.vars.smoothHeight&&g.smoothHeight()):("init"===t&&(s.viewport=e('<div class="'+o+'viewport"></div>').css({overflow:"hidden",position:"relative"}).appendTo(s).append(s.container),s.cloneCount=0,s.cloneOffset=0,p&&(i=e.makeArray(s.slides).reverse(),s.slides=e(i),s.container.empty().append(s.slides))),s.vars.animationLoop&&!m&&(s.cloneCount=2,s.cloneOffset=1,"init"!==t&&s.container.find(".clone").remove(),s.container.append(g.uniqueID(s.slides.first().clone().addClass("clone")).attr("aria-hidden","true")).prepend(g.uniqueID(s.slides.last().clone().addClass("clone")).attr("aria-hidden","true"))),s.newSlides=e(s.vars.selector,s),a=p?s.count-1-s.currentSlide+s.cloneOffset:s.currentSlide+s.cloneOffset,v&&!m?(s.container.height(200*(s.count+s.cloneCount)+"%").css("position","absolute").width("100%"),setTimeout(function(){s.newSlides.css({display:"block"}),s.doMath(),s.viewport.height(s.h),s.setProps(a*s.h,"init")},"init"===t?100:0)):(s.container.width(200*(s.count+s.cloneCount)+"%"),s.setProps(a*s.computedW,"init"),setTimeout(function(){s.doMath(),s.vars.rtl?s.newSlides.css({width:s.computedW,marginRight:s.computedM,float:"right",display:"block"}):s.newSlides.css({width:s.computedW,marginRight:s.computedM,float:"left",display:"block"}),s.vars.smoothHeight&&g.smoothHeight()},"init"===t?100:0)));m||s.slides.removeClass(o+"active-slide").eq(s.currentSlide).addClass(o+"active-slide"),s.vars.init(s)},s.doMath=function(){var e=s.slides.first(),t=s.vars.itemMargin,a=s.vars.minItems,i=s.vars.maxItems;s.w=s.viewport===undefined?s.width():s.viewport.width(),s.isFirefox&&(s.w=s.width()),s.h=e.height(),s.boxPadding=e.outerWidth()-e.width(),m?(s.itemT=s.vars.itemWidth+t,s.itemM=t,s.minW=a?a*s.itemT:s.w,s.maxW=i?i*s.itemT-t:s.w,s.itemW=s.minW>s.w?(s.w-t*(a-1))/a:s.maxW<s.w?(s.w-t*(i-1))/i:s.vars.itemWidth>s.w?s.w:s.vars.itemWidth,s.visible=Math.floor(s.w/s.itemW),s.move=s.vars.move>0&&s.vars.move<s.visible?s.vars.move:s.visible,s.pagingCount=Math.ceil((s.count-s.visible)/s.move+1),s.last=s.pagingCount-1,s.limit=1===s.pagingCount?0:s.vars.itemWidth>s.w?s.itemW*(s.count-1)+t*(s.count-1):(s.itemW+t)*s.count-s.w-t):(s.itemW=s.w,s.itemM=t,s.pagingCount=s.count,s.last=s.count-1),s.computedW=s.itemW-s.boxPadding,s.computedM=s.itemM},s.update=function(e,t){s.doMath(),m||(e<s.currentSlide?s.currentSlide+=1:e<=s.currentSlide&&0!==e&&(s.currentSlide-=1),s.animatingTo=s.currentSlide),s.vars.controlNav&&!s.manualControls&&("add"===t&&!m||s.pagingCount>s.controlNav.length?g.controlNav.update("add"):("remove"===t&&!m||s.pagingCount<s.controlNav.length)&&(m&&s.currentSlide>s.last&&(s.currentSlide-=1,s.animatingTo-=1),g.controlNav.update("remove",s.last))),s.vars.directionNav&&g.directionNav.update()},s.addSlide=function(t,a){var i=e(t);s.count+=1,s.last=s.count-1,v&&p?a!==undefined?s.slides.eq(s.count-a).after(i):s.container.prepend(i):a!==undefined?s.slides.eq(a).before(i):s.container.append(i),s.update(a,"add"),s.slides=e(s.vars.selector+":not(.clone)",s),s.setup(),s.vars.added(s)},s.removeSlide=function(t){var a=isNaN(t)?s.slides.index(e(t)):t;s.count-=1,s.last=s.count-1,isNaN(t)?e(t,s.slides).remove():v&&p?s.slides.eq(s.last).remove():s.slides.eq(t).remove(),s.doMath(),s.update(a,"remove"),s.slides=e(s.vars.selector+":not(.clone)",s),s.setup(),s.vars.removed(s)},g.init()},e(window).on("blur",function(e){t=!1}).on("focus",function(e){t=!0}),e.flexslider.defaults={namespace:"flex-",selector:".slides > li",animation:"fade",easing:"swing",direction:"horizontal",reverse:!1,animationLoop:!0,smoothHeight:!1,startAt:0,slideshow:!0,slideshowSpeed:7e3,animationSpeed:600,initDelay:0,randomize:!1,fadeFirstSlide:!0,thumbCaptions:!1,pauseOnAction:!0,pauseOnHover:!1,pauseInvisible:!0,useCSS:!0,touch:!0,video:!1,controlNav:!0,directionNav:!0,prevText:"Previous",nextText:"Next",keyboard:!0,multipleKeyboard:!1,mousewheel:!1,pausePlay:!1,pauseText:"Pause",playText:"Play",controlsContainer:"",manualControls:"",customDirectionNav:"",sync:"",asNavFor:"",itemWidth:0,itemMargin:0,minItems:1,maxItems:0,move:0,allowOneSlide:!0,isFirefox:!1,start:function(){},before:function(){},after:function(){},end:function(){},added:function(){},removed:function(){},init:function(){},rtl:!1},e.fn.flexslider=function(t){if(t===undefined&&(t={}),"object"==typeof t)return this.each(function(){var a=e(this),i=t.selector?t.selector:".slides > li",n=a.find(i);if(1===n.length&&!1===t.allowOneSlide||0===n.length){n.length&&n[0].animate([{opacity:0},{opacity:1}],400),t.start&&t.start(a)}else a.data("flexslider")===undefined&&new e.flexslider(this,t)});var a=e(this).data("flexslider");switch(t){case"play":a.play();break;case"pause":a.pause();break;case"stop":a.stop();break;case"next":a.flexAnimate(a.getTarget("next"),!0);break;case"prev":case"previous":a.flexAnimate(a.getTarget("prev"),!0);break;default:"number"==typeof t&&a.flexAnimate(t,!0)}}}(jQuery);
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.PhotoSwipe=t()}(this,function(){"use strict";return function(e,t,n,i){var o={features:null,bind:function(e,t,n,i){var o=(i?"remove":"add")+"EventListener";t=t.split(" ");for(var a=0;a<t.length;a++)t[a]&&e[o](t[a],n,!1)},isArray:function(e){return e instanceof Array},createEl:function(e,t){var n=document.createElement(t||"div");return e&&(n.className=e),n},getScrollY:function(){var e=window.pageYOffset;return e!==undefined?e:document.documentElement.scrollTop},unbind:function(e,t,n){o.bind(e,t,n,!0)},removeClass:function(e,t){var n=new RegExp("(\\s|^)"+t+"(\\s|$)");e.className=e.className.replace(n," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")},addClass:function(e,t){o.hasClass(e,t)||(e.className+=(e.className?" ":"")+t)},hasClass:function(e,t){return e.className&&new RegExp("(^|\\s)"+t+"(\\s|$)").test(e.className)},getChildByClass:function(e,t){for(var n=e.firstChild;n;){if(o.hasClass(n,t))return n;n=n.nextSibling}},arraySearch:function(e,t,n){for(var i=e.length;i--;)if(e[i][n]===t)return i;return-1},extend:function(e,t,n){for(var i in t)if(t.hasOwnProperty(i)){if(n&&e.hasOwnProperty(i))continue;e[i]=t[i]}},easing:{sine:{out:function(e){return Math.sin(e*(Math.PI/2))},inOut:function(e){return-(Math.cos(Math.PI*e)-1)/2}},cubic:{out:function(e){return--e*e*e+1}}},detectFeatures:function(){if(o.features)return o.features;var e=o.createEl().style,t="",n={};if(n.oldIE=document.all&&!document.addEventListener,n.touch="ontouchstart"in window,window.requestAnimationFrame&&(n.raf=window.requestAnimationFrame,n.caf=window.cancelAnimationFrame),n.pointerEvent=!!window.PointerEvent||navigator.msPointerEnabled,!n.pointerEvent){var i=navigator.userAgent;if(/iP(hone|od)/.test(navigator.platform)){var a=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);a&&a.length>0&&(a=parseInt(a[1],10))>=1&&a<8&&(n.isOldIOSPhone=!0)}var r=i.match(/Android\s([0-9\.]*)/),l=r?r[1]:0;(l=parseFloat(l))>=1&&(l<4.4&&(n.isOldAndroid=!0),n.androidVersion=l),n.isMobileOpera=/opera mini|opera mobi/i.test(i)}for(var s,u,c=["transform","perspective","animationName"],d=["","webkit","Moz","ms","O"],m=0;m<4;m++){t=d[m];for(var p=0;p<3;p++)s=c[p],u=t+(t?s.charAt(0).toUpperCase()+s.slice(1):s),!n[s]&&u in e&&(n[s]=u);t&&!n.raf&&(t=t.toLowerCase(),n.raf=window[t+"RequestAnimationFrame"],n.raf&&(n.caf=window[t+"CancelAnimationFrame"]||window[t+"CancelRequestAnimationFrame"]))}if(!n.raf){var f=0;n.raf=function(e){var t=(new Date).getTime(),n=Math.max(0,16-(t-f)),i=window.setTimeout(function(){e(t+n)},n);return f=t+n,i},n.caf=function(e){clearTimeout(e)}}return n.svg=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,o.features=n,n}};o.detectFeatures(),o.features.oldIE&&(o.bind=function(e,t,n,i){t=t.split(" ");for(var o,a=(i?"detach":"attach")+"Event",r=function(){n.handleEvent.call(n)},l=0;l<t.length;l++)if(o=t[l])if("object"==typeof n&&n.handleEvent){if(i){if(!n["oldIE"+o])return!1}else n["oldIE"+o]=r;e[a]("on"+o,n["oldIE"+o])}else e[a]("on"+o,n)});var a=this,r={allowPanToNext:!0,spacing:.12,bgOpacity:1,mouseUsed:!1,loop:!0,pinchToClose:!0,closeOnScroll:!0,closeOnVerticalDrag:!0,verticalDragRange:.75,hideAnimationDuration:333,showAnimationDuration:333,showHideOpacity:!1,focus:!0,escKey:!0,arrowKeys:!0,mainScrollEndFriction:.35,panEndFriction:.35,isClickableElement:function(e){return"A"===e.tagName},getDoubleTapZoom:function(e,t){return e?1:t.initialZoomLevel<.7?1:1.33},maxSpreadZoom:1.33,modal:!0,scaleMode:"fit"};o.extend(r,i);var l,s,u,c,d,m,p,f,h,y,x,v,g,w,b,I,C,D,T,M,S,A,E,O,k,R,P,Z,F,L,z,_,N,U,H,Y,W,B,G,X,V,K,q,$,j,J,Q,ee,te,ne,ie,oe,ae,re,le,se,ue={x:0,y:0},ce={x:0,y:0},de={x:0,y:0},me={},pe=0,fe={},he={x:0,y:0},ye=0,xe=!0,ve=[],ge={},we=!1,be=function(e,t){o.extend(a,t.publicMethods),ve.push(e)},Ie=function(e){var t=Ht();return e>t-1?e-t:e<0?t+e:e},Ce={},De=function(e,t){return Ce[e]||(Ce[e]=[]),Ce[e].push(t)},Te=function(e){var t=Ce[e];if(t){var n=Array.prototype.slice.call(arguments);n.shift();for(var i=0;i<t.length;i++)t[i].apply(a,n)}},Me=function(){return(new Date).getTime()},Se=function(e){re=e,a.bg.style.opacity=e*r.bgOpacity},Ae=function(e,t,n,i,o){(!we||o&&o!==a.currItem)&&(i/=o?o.fitRatio:a.currItem.fitRatio),e[A]=v+t+"px, "+n+"px"+g+" scale("+i+")"},Ee=function(e){te&&(e&&(y>a.currItem.fitRatio?we||($t(a.currItem,!1,!0),we=!0):we&&($t(a.currItem),we=!1)),Ae(te,de.x,de.y,y))},Oe=function(e){e.container&&Ae(e.container.style,e.initialPosition.x,e.initialPosition.y,e.initialZoomLevel,e)},ke=function(e,t){t[A]=v+e+"px, 0px"+g},Re=function(e,t){if(!r.loop&&t){var n=c+(he.x*pe-e)/he.x,i=Math.round(e-ct.x);(n<0&&i>0||n>=Ht()-1&&i<0)&&(e=ct.x+i*r.mainScrollEndFriction)}ct.x=e,ke(e,d)},Pe=function(e,t){var n=dt[e]-fe[e];return ce[e]+ue[e]+n-n*(t/x)},Ze=function(e,t){e.x=t.x,e.y=t.y,t.id&&(e.id=t.id)},Fe=function(e){e.x=Math.round(e.x),e.y=Math.round(e.y)},Le=null,ze=function(){Le&&(o.unbind(document,"mousemove",ze),o.addClass(e,"pswp--has_mouse"),r.mouseUsed=!0,Te("mouseUsed")),Le=setTimeout(function(){Le=null},100)},_e=function(e,t){var n=Xt(a.currItem,me,e);return t&&(ee=n),n},Ne=function(e){return e||(e=a.currItem),e.initialZoomLevel},Ue=function(e){return e||(e=a.currItem),e.w>0?r.maxSpreadZoom:1},He=function(e,t,n,i){return i===a.currItem.initialZoomLevel?(n[e]=a.currItem.initialPosition[e],!0):(n[e]=Pe(e,i),n[e]>t.min[e]?(n[e]=t.min[e],!0):n[e]<t.max[e]&&(n[e]=t.max[e],!0))},Ye=function(e){var t="";r.escKey&&27===e.keyCode?t="close":r.arrowKeys&&(37===e.keyCode?t="prev":39===e.keyCode&&(t="next")),t&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||(e.preventDefault?e.preventDefault():e.returnValue=!1,a[t]()))},We=function(e){e&&(K||V||ne||W)&&(e.preventDefault(),e.stopPropagation())},Be=function(){a.setScrollOffset(0,o.getScrollY())},Ge={},Xe=0,Ve=function(e){Ge[e]&&(Ge[e].raf&&R(Ge[e].raf),Xe--,delete Ge[e])},Ke=function(e){Ge[e]&&Ve(e),Ge[e]||(Xe++,Ge[e]={})},qe=function(){for(var e in Ge)Ge.hasOwnProperty(e)&&Ve(e)},$e=function(e,t,n,i,o,a,r){var l,s=Me();Ke(e);var u=function(){if(Ge[e]){if((l=Me()-s)>=i)return Ve(e),a(n),void(r&&r());a((n-t)*o(l/i)+t),Ge[e].raf=k(u)}};u()},je={shout:Te,listen:De,viewportSize:me,options:r,isMainScrollAnimating:function(){return ne},getZoomLevel:function(){return y},getCurrentIndex:function(){return c},isDragging:function(){return G},isZooming:function(){return J},setScrollOffset:function(e,t){fe.x=e,L=fe.y=t,Te("updateScrollOffset",fe)},applyZoomPan:function(e,t,n,i){de.x=t,de.y=n,y=e,Ee(i)},init:function(){if(!l&&!s){var n;a.framework=o,a.template=e,a.bg=o.getChildByClass(e,"pswp__bg"),P=e.className,l=!0,z=o.detectFeatures(),k=z.raf,R=z.caf,A=z.transform,F=z.oldIE,a.scrollWrap=o.getChildByClass(e,"pswp__scroll-wrap"),a.container=o.getChildByClass(a.scrollWrap,"pswp__container"),d=a.container.style,a.itemHolders=I=[{el:a.container.children[0],wrap:0,index:-1},{el:a.container.children[1],wrap:0,index:-1},{el:a.container.children[2],wrap:0,index:-1}],I[0].el.style.display=I[2].el.style.display="none",function(){if(A){var t=z.perspective&&!O;return v="translate"+(t?"3d(":"("),void(g=z.perspective?", 0px)":")")}A="left",o.addClass(e,"pswp--ie"),ke=function(e,t){t.left=e+"px"},Oe=function(e){var t=e.fitRatio>1?1:e.fitRatio,n=e.container.style,i=t*e.w,o=t*e.h;n.width=i+"px",n.height=o+"px",n.left=e.initialPosition.x+"px",n.top=e.initialPosition.y+"px"},Ee=function(){if(te){var e=te,t=a.currItem,n=t.fitRatio>1?1:t.fitRatio,i=n*t.w,o=n*t.h;e.width=i+"px",e.height=o+"px",e.left=de.x+"px",e.top=de.y+"px"}}}(),h={resize:a.updateSize,orientationchange:function(){clearTimeout(_),_=setTimeout(function(){me.x!==a.scrollWrap.clientWidth&&a.updateSize()},500)},scroll:Be,keydown:Ye,click:We};var i=z.isOldIOSPhone||z.isOldAndroid||z.isMobileOpera;for(z.animationName&&z.transform&&!i||(r.showAnimationDuration=r.hideAnimationDuration=0),n=0;n<ve.length;n++)a["init"+ve[n]]();t&&(a.ui=new t(a,o)).init(),Te("firstUpdate"),c=c||r.index||0,(isNaN(c)||c<0||c>=Ht())&&(c=0),a.currItem=Ut(c),(z.isOldIOSPhone||z.isOldAndroid)&&(xe=!1),e.setAttribute("aria-hidden","false"),r.modal&&(xe?e.style.position="fixed":(e.style.position="absolute",e.style.top=o.getScrollY()+"px")),L===undefined&&(Te("initialLayout"),L=Z=o.getScrollY());var u="pswp--open ";for(r.mainClass&&(u+=r.mainClass+" "),r.showHideOpacity&&(u+="pswp--animate_opacity "),u+=O?"pswp--touch":"pswp--notouch",u+=z.animationName?" pswp--css_animation":"",u+=z.svg?" pswp--svg":"",o.addClass(e,u),a.updateSize(),m=-1,ye=null,n=0;n<3;n++)ke((n+m)*he.x,I[n].el.style);F||o.bind(a.scrollWrap,f,a),De("initialZoomInEnd",function(){a.setContent(I[0],c-1),a.setContent(I[2],c+1),I[0].el.style.display=I[2].el.style.display="block",r.focus&&e.focus(),o.bind(document,"keydown",a),z.transform&&o.bind(a.scrollWrap,"click",a),r.mouseUsed||o.bind(document,"mousemove",ze),o.bind(window,"resize scroll orientationchange",a),Te("bindEvents")}),a.setContent(I[1],c),a.updateCurrItem(),Te("afterInit"),xe||(w=setInterval(function(){Xe||G||J||y!==a.currItem.initialZoomLevel||a.updateSize()},1e3)),o.addClass(e,"pswp--visible")}},close:function(){l&&(l=!1,s=!0,Te("close"),o.unbind(window,"resize scroll orientationchange",a),o.unbind(window,"scroll",h.scroll),o.unbind(document,"keydown",a),o.unbind(document,"mousemove",ze),z.transform&&o.unbind(a.scrollWrap,"click",a),G&&o.unbind(window,p,a),clearTimeout(_),Te("unbindEvents"),Yt(a.currItem,null,!0,a.destroy))},destroy:function(){Te("destroy"),Lt&&clearTimeout(Lt),e.setAttribute("aria-hidden","true"),e.className=P,w&&clearInterval(w),o.unbind(a.scrollWrap,f,a),o.unbind(window,"scroll",a),ft(),qe(),Ce=null},panTo:function(e,t,n){n||(e>ee.min.x?e=ee.min.x:e<ee.max.x&&(e=ee.max.x),t>ee.min.y?t=ee.min.y:t<ee.max.y&&(t=ee.max.y)),de.x=e,de.y=t,Ee()},handleEvent:function(e){e=e||window.event,h[e.type]&&h[e.type](e)},goTo:function(e){var t=(e=Ie(e))-c;ye=t,c=e,a.currItem=Ut(c),pe-=t,Re(he.x*pe),qe(),ne=!1,a.updateCurrItem()},next:function(){a.goTo(c+1)},prev:function(){a.goTo(c-1)},updateCurrZoomItem:function(e){if(e&&Te("beforeChange",0),I[1].el.children.length){var t=I[1].el.children[0];te=o.hasClass(t,"pswp__zoom-wrap")?t.style:null}else te=null;ee=a.currItem.bounds,x=y=a.currItem.initialZoomLevel,de.x=ee.center.x,de.y=ee.center.y,e&&Te("afterChange")},invalidateCurrItems:function(){b=!0;for(var e=0;e<3;e++)I[e].item&&(I[e].item.needsUpdate=!0)},updateCurrItem:function(e){if(0!==ye){var t,n=Math.abs(ye);if(!(e&&n<2)){a.currItem=Ut(c),we=!1,Te("beforeChange",ye),n>=3&&(m+=ye+(ye>0?-3:3),n=3);for(var i=0;i<n;i++)ye>0?(t=I.shift(),I[2]=t,ke((++m+2)*he.x,t.el.style),a.setContent(t,c-n+i+1+1)):(t=I.pop(),I.unshift(t),ke(--m*he.x,t.el.style),a.setContent(t,c+n-i-1-1));if(te&&1===Math.abs(ye)){var o=Ut(C);o.initialZoomLevel!==y&&(Xt(o,me),$t(o),Oe(o))}ye=0,a.updateCurrZoomItem(),C=c,Te("afterChange")}}},updateSize:function(t){if(!xe&&r.modal){var n=o.getScrollY();if(L!==n&&(e.style.top=n+"px",L=n),!t&&ge.x===window.innerWidth&&ge.y===window.innerHeight)return;ge.x=window.innerWidth,ge.y=window.innerHeight,e.style.height=ge.y+"px"}if(me.x=a.scrollWrap.clientWidth,me.y=a.scrollWrap.clientHeight,Be(),he.x=me.x+Math.round(me.x*r.spacing),he.y=me.y,Re(he.x*pe),Te("beforeResize"),m!==undefined){for(var i,l,s,u=0;u<3;u++)i=I[u],ke((u+m)*he.x,i.el.style),s=c+u-1,r.loop&&Ht()>2&&(s=Ie(s)),(l=Ut(s))&&(b||l.needsUpdate||!l.bounds)?(a.cleanSlide(l),a.setContent(i,s),1===u&&(a.currItem=l,a.updateCurrZoomItem(!0)),l.needsUpdate=!1):-1===i.index&&s>=0&&a.setContent(i,s),l&&l.container&&(Xt(l,me),$t(l),Oe(l));b=!1}x=y=a.currItem.initialZoomLevel,(ee=a.currItem.bounds)&&(de.x=ee.center.x,de.y=ee.center.y,Ee(!0)),Te("resize")},zoomTo:function(e,t,n,i,a){t&&(x=y,dt.x=Math.abs(t.x)-de.x,dt.y=Math.abs(t.y)-de.y,Ze(ce,de));var r=_e(e,!1),l={};He("x",r,l,e),He("y",r,l,e);var s=y,u=de.x,c=de.y;Fe(l);var d=function(t){1===t?(y=e,de.x=l.x,de.y=l.y):(y=(e-s)*t+s,de.x=(l.x-u)*t+u,de.y=(l.y-c)*t+c),a&&a(t),Ee(1===t)};n?$e("customZoomTo",0,1,n,i||o.easing.sine.inOut,d):d(1)}},Je={},Qe={},et={},tt={},nt={},it=[],ot={},at=[],rt={},lt=0,st={x:0,y:0},ut=0,ct={x:0,y:0},dt={x:0,y:0},mt={x:0,y:0},pt=function(e,t){return rt.x=Math.abs(e.x-t.x),rt.y=Math.abs(e.y-t.y),Math.sqrt(rt.x*rt.x+rt.y*rt.y)},ft=function(){q&&(R(q),q=null)},ht=function(){G&&(q=k(ht),Et())},yt=function(e,t){return!(!e||e===document)&&!(e.getAttribute("class")&&e.getAttribute("class").indexOf("pswp__scroll-wrap")>-1)&&(t(e)?e:yt(e.parentNode,t))},xt={},vt=function(e,t){return xt.prevent=!yt(e.target,r.isClickableElement),Te("preventDragEvent",e,t,xt),xt.prevent},gt=function(e,t){return t.x=e.pageX,t.y=e.pageY,t.id=e.identifier,t},wt=function(e,t,n){n.x=.5*(e.x+t.x),n.y=.5*(e.y+t.y)},bt=function(){var e=de.y-a.currItem.initialPosition.y;return 1-Math.abs(e/(me.y/2))},It={},Ct={},Dt=[],Tt=function(e){for(;Dt.length>0;)Dt.pop();return E?(se=0,it.forEach(function(e){0===se?Dt[0]=e:1===se&&(Dt[1]=e),se++})):e.type.indexOf("touch")>-1?e.touches&&e.touches.length>0&&(Dt[0]=gt(e.touches[0],It),e.touches.length>1&&(Dt[1]=gt(e.touches[1],Ct))):(It.x=e.pageX,It.y=e.pageY,It.id="",Dt[0]=It),Dt},Mt=function(e,t){var n,i,o,l,s=de[e]+t[e],u=t[e]>0,c=ct.x+t.x,d=ct.x-ot.x;if(n=s>ee.min[e]||s<ee.max[e]?r.panEndFriction:1,s=de[e]+t[e]*n,(r.allowPanToNext||y===a.currItem.initialZoomLevel)&&(te?"h"!==ie||"x"!==e||V||(u?(s>ee.min[e]&&(n=r.panEndFriction,ee.min[e],i=ee.min[e]-ce[e]),(i<=0||d<0)&&Ht()>1?(l=c,d<0&&c>ot.x&&(l=ot.x)):ee.min.x!==ee.max.x&&(o=s)):(s<ee.max[e]&&(n=r.panEndFriction,ee.max[e],i=ce[e]-ee.max[e]),(i<=0||d>0)&&Ht()>1?(l=c,d>0&&c<ot.x&&(l=ot.x)):ee.min.x!==ee.max.x&&(o=s))):l=c,"x"===e))return l!==undefined&&(Re(l,!0),$=l!==ot.x),ee.min.x!==ee.max.x&&(o!==undefined?de.x=o:$||(de.x+=t.x*n)),l!==undefined;ne||$||y>a.currItem.fitRatio&&(de[e]+=t[e]*n)},St=function(e){if(!("mousedown"===e.type&&e.button>0))if(Nt)e.preventDefault();else if(!B||"mousedown"!==e.type){if(vt(e,!0)&&e.preventDefault(),Te("pointerDown"),E){var t=o.arraySearch(it,e.pointerId,"id");t<0&&(t=it.length),it[t]={x:e.pageX,y:e.pageY,id:e.pointerId}}var n=Tt(e),i=n.length;j=null,qe(),G&&1!==i||(G=oe=!0,o.bind(window,p,a),Y=le=ae=W=$=K=X=V=!1,ie=null,Te("firstTouchStart",n),Ze(ce,de),ue.x=ue.y=0,Ze(tt,n[0]),Ze(nt,tt),ot.x=he.x*pe,at=[{x:tt.x,y:tt.y}],U=N=Me(),_e(y,!0),ft(),ht()),!J&&i>1&&!ne&&!$&&(x=y,V=!1,J=X=!0,ue.y=ue.x=0,Ze(ce,de),Ze(Je,n[0]),Ze(Qe,n[1]),wt(Je,Qe,mt),dt.x=Math.abs(mt.x)-de.x,dt.y=Math.abs(mt.y)-de.y,Q=pt(Je,Qe))}},At=function(e){if(e.preventDefault(),E){var t=o.arraySearch(it,e.pointerId,"id");if(t>-1){var n=it[t];n.x=e.pageX,n.y=e.pageY}}if(G){var i=Tt(e);if(ie||K||J)j=i;else if(ct.x!==he.x*pe)ie="h";else{var a=Math.abs(i[0].x-tt.x)-Math.abs(i[0].y-tt.y);Math.abs(a)>=10&&(ie=a>0?"h":"v",j=i)}}},Et=function(){if(j){var e=j.length;if(0!==e)if(Ze(Je,j[0]),et.x=Je.x-tt.x,et.y=Je.y-tt.y,J&&e>1){if(tt.x=Je.x,tt.y=Je.y,!et.x&&!et.y&&function(e,t){return e.x===t.x&&e.y===t.y}(j[1],Qe))return;Ze(Qe,j[1]),V||(V=!0,Te("zoomGestureStarted"));var t=pt(Je,Qe),n=Zt(t);n>a.currItem.initialZoomLevel+a.currItem.initialZoomLevel/15&&(le=!0);var i=1,o=Ne(),l=Ue();if(n<o)if(r.pinchToClose&&!le&&x<=a.currItem.initialZoomLevel){var s=1-(o-n)/(o/1.2);Se(s),Te("onPinchClose",s),ae=!0}else(i=(o-n)/o)>1&&(i=1),n=o-i*(o/3);else n>l&&((i=(n-l)/(6*o))>1&&(i=1),n=l+i*o);i<0&&(i=0),wt(Je,Qe,st),ue.x+=st.x-mt.x,ue.y+=st.y-mt.y,Ze(mt,st),de.x=Pe("x",n),de.y=Pe("y",n),Y=n>y,y=n,Ee()}else{if(!ie)return;if(oe&&(oe=!1,Math.abs(et.x)>=10&&(et.x-=j[0].x-nt.x),Math.abs(et.y)>=10&&(et.y-=j[0].y-nt.y)),tt.x=Je.x,tt.y=Je.y,0===et.x&&0===et.y)return;if("v"===ie&&r.closeOnVerticalDrag&&"fit"===r.scaleMode&&y===a.currItem.initialZoomLevel){ue.y+=et.y,de.y+=et.y;var u=bt();return W=!0,Te("onVerticalDrag",u),Se(u),void Ee()}!function(e,t,n){if(e-U>50){var i=at.length>2?at.shift():{};i.x=t,i.y=n,at.push(i),U=e}}(Me(),Je.x,Je.y),K=!0,ee=a.currItem.bounds,Mt("x",et)||(Mt("y",et),Fe(de),Ee())}}},Ot=function(e){if(z.isOldAndroid){if(B&&"mouseup"===e.type)return;e.type.indexOf("touch")>-1&&(clearTimeout(B),B=setTimeout(function(){B=0},600))}var t;if(Te("pointerUp"),vt(e,!1)&&e.preventDefault(),E){var n=o.arraySearch(it,e.pointerId,"id");n>-1&&(t=it.splice(n,1)[0],navigator.msPointerEnabled?(t.type={4:"mouse",2:"touch",3:"pen"}[e.pointerType],t.type||(t.type=e.pointerType||"mouse")):t.type=e.pointerType||"mouse")}var i,l=Tt(e),s=l.length;if("mouseup"===e.type&&(s=0),2===s)return j=null,!0;1===s&&Ze(nt,l[0]),0!==s||ie||ne||(t||("mouseup"===e.type?t={x:e.pageX,y:e.pageY,type:"mouse"}:e.changedTouches&&e.changedTouches[0]&&(t={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY,type:"touch"})),Te("touchRelease",e,t));var u=-1;if(0===s&&(G=!1,o.unbind(window,p,a),ft(),J?u=0:-1!==ut&&(u=Me()-ut)),ut=1===s?Me():-1,i=-1!==u&&u<150?"zoom":"swipe",J&&s<2&&(J=!1,1===s&&(i="zoomPointerUp"),Te("zoomGestureEnded")),j=null,K||V||ne||W)if(qe(),H||(H=kt()),H.calculateSwipeSpeed("x"),W)if(bt()<r.verticalDragRange)a.close();else{var c=de.y,d=re;$e("verticalDrag",0,1,300,o.easing.cubic.out,function(e){de.y=(a.currItem.initialPosition.y-c)*e+c,Se((1-d)*e+d),Ee()}),Te("onVerticalDrag",1)}else{if(($||ne)&&0===s){if(Pt(i,H))return;i="zoomPointerUp"}ne||("swipe"===i?!$&&y>a.currItem.fitRatio&&Rt(H):Ft())}},kt=function(){var e,t,n={lastFlickOffset:{},lastFlickDist:{},lastFlickSpeed:{},slowDownRatio:{},slowDownRatioReverse:{},speedDecelerationRatio:{},speedDecelerationRatioAbs:{},distanceOffset:{},backAnimDestination:{},backAnimStarted:{},calculateSwipeSpeed:function(i){at.length>1?(e=Me()-U+50,t=at[at.length-2][i]):(e=Me()-N,t=nt[i]),n.lastFlickOffset[i]=tt[i]-t,n.lastFlickDist[i]=Math.abs(n.lastFlickOffset[i]),n.lastFlickDist[i]>20?n.lastFlickSpeed[i]=n.lastFlickOffset[i]/e:n.lastFlickSpeed[i]=0,Math.abs(n.lastFlickSpeed[i])<.1&&(n.lastFlickSpeed[i]=0),n.slowDownRatio[i]=.95,n.slowDownRatioReverse[i]=1-n.slowDownRatio[i],n.speedDecelerationRatio[i]=1},calculateOverBoundsAnimOffset:function(e,t){n.backAnimStarted[e]||(de[e]>ee.min[e]?n.backAnimDestination[e]=ee.min[e]:de[e]<ee.max[e]&&(n.backAnimDestination[e]=ee.max[e]),n.backAnimDestination[e]!==undefined&&(n.slowDownRatio[e]=.7,n.slowDownRatioReverse[e]=1-n.slowDownRatio[e],n.speedDecelerationRatioAbs[e]<.05&&(n.lastFlickSpeed[e]=0,n.backAnimStarted[e]=!0,$e("bounceZoomPan"+e,de[e],n.backAnimDestination[e],t||300,o.easing.sine.out,function(t){de[e]=t,Ee()}))))},calculateAnimOffset:function(e){n.backAnimStarted[e]||(n.speedDecelerationRatio[e]=n.speedDecelerationRatio[e]*(n.slowDownRatio[e]+n.slowDownRatioReverse[e]-n.slowDownRatioReverse[e]*n.timeDiff/10),n.speedDecelerationRatioAbs[e]=Math.abs(n.lastFlickSpeed[e]*n.speedDecelerationRatio[e]),n.distanceOffset[e]=n.lastFlickSpeed[e]*n.speedDecelerationRatio[e]*n.timeDiff,de[e]+=n.distanceOffset[e])},panAnimLoop:function(){if(Ge.zoomPan&&(Ge.zoomPan.raf=k(n.panAnimLoop),n.now=Me(),n.timeDiff=n.now-n.lastNow,n.lastNow=n.now,n.calculateAnimOffset("x"),n.calculateAnimOffset("y"),Ee(),n.calculateOverBoundsAnimOffset("x"),n.calculateOverBoundsAnimOffset("y"),n.speedDecelerationRatioAbs.x<.05&&n.speedDecelerationRatioAbs.y<.05))return de.x=Math.round(de.x),de.y=Math.round(de.y),Ee(),void Ve("zoomPan")}};return n},Rt=function(e){if(e.calculateSwipeSpeed("y"),ee=a.currItem.bounds,e.backAnimDestination={},e.backAnimStarted={},Math.abs(e.lastFlickSpeed.x)<=.05&&Math.abs(e.lastFlickSpeed.y)<=.05)return e.speedDecelerationRatioAbs.x=e.speedDecelerationRatioAbs.y=0,e.calculateOverBoundsAnimOffset("x"),e.calculateOverBoundsAnimOffset("y"),!0;Ke("zoomPan"),e.lastNow=Me(),e.panAnimLoop()},Pt=function(e,t){var n,i,l;if(ne||(lt=c),"swipe"===e){var s=tt.x-nt.x,u=t.lastFlickDist.x<10;s>30&&(u||t.lastFlickOffset.x>20)?i=-1:s<-30&&(u||t.lastFlickOffset.x<-20)&&(i=1)}i&&((c+=i)<0?(c=r.loop?Ht()-1:0,l=!0):c>=Ht()&&(c=r.loop?0:Ht()-1,l=!0),l&&!r.loop||(ye+=i,pe-=i,n=!0));var d,m=he.x*pe,p=Math.abs(m-ct.x);return n||m>ct.x==t.lastFlickSpeed.x>0?(d=Math.abs(t.lastFlickSpeed.x)>0?p/Math.abs(t.lastFlickSpeed.x):333,d=Math.min(d,400),d=Math.max(d,250)):d=333,lt===c&&(n=!1),ne=!0,Te("mainScrollAnimStart"),$e("mainScroll",ct.x,m,d,o.easing.cubic.out,Re,function(){qe(),ne=!1,lt=-1,(n||lt!==c)&&a.updateCurrItem(),Te("mainScrollAnimComplete")}),n&&a.updateCurrItem(!0),n},Zt=function(e){return 1/Q*e*x},Ft=function(){var e=y,t=Ne(),n=Ue();y<t?e=t:y>n&&(e=n);var i,r=re;return ae&&!Y&&!le&&y<t?(a.close(),!0):(ae&&(i=function(e){Se((1-r)*e+r)}),a.zoomTo(e,0,200,o.easing.cubic.out,i),!0)};be("Gestures",{publicMethods:{initGestures:function(){var e=function(e,t,n,i,o){D=e+t,T=e+n,M=e+i,S=o?e+o:""};(E=z.pointerEvent)&&z.touch&&(z.touch=!1),E?navigator.msPointerEnabled?e("MSPointer","Down","Move","Up","Cancel"):e("pointer","down","move","up","cancel"):z.touch?(e("touch","start","move","end","cancel"),O=!0):e("mouse","down","move","up"),p=T+" "+M+" "+S,f=D,E&&!O&&(O=navigator.maxTouchPoints>1||navigator.msMaxTouchPoints>1),a.likelyTouchDevice=O,h[D]=St,h[T]=At,h[M]=Ot,S&&(h[S]=h[M]),z.touch&&(f+=" mousedown",p+=" mousemove mouseup",h.mousedown=h[D],h.mousemove=h[T],h.mouseup=h[M]),O||(r.allowPanToNext=!1)}}});var Lt,zt,_t,Nt,Ut,Ht,Yt=function(t,n,i,l){var s;Lt&&clearTimeout(Lt),Nt=!0,_t=!0,t.initialLayout?(s=t.initialLayout,t.initialLayout=null):s=r.getThumbBoundsFn&&r.getThumbBoundsFn(c);var d,m,p=i?r.hideAnimationDuration:r.showAnimationDuration,f=function(){Ve("initialZoom"),i?(a.template.removeAttribute("style"),a.bg.removeAttribute("style")):(Se(1),n&&(n.style.display="block"),o.addClass(e,"pswp--animated-in"),Te("initialZoom"+(i?"OutEnd":"InEnd"))),l&&l(),Nt=!1};if(!p||!s||s.x===undefined)return Te("initialZoom"+(i?"Out":"In")),y=t.initialZoomLevel,Ze(de,t.initialPosition),Ee(),e.style.opacity=i?0:1,Se(1),void(p?setTimeout(function(){f()},p):f());d=u,m=!a.currItem.src||a.currItem.loadError||r.showHideOpacity,t.miniImg&&(t.miniImg.style.webkitBackfaceVisibility="hidden"),i||(y=s.w/t.w,de.x=s.x,de.y=s.y-Z,a[m?"template":"bg"].style.opacity=.001,Ee()),Ke("initialZoom"),i&&!d&&o.removeClass(e,"pswp--animated-in"),m&&(i?o[(d?"remove":"add")+"Class"](e,"pswp--animate_opacity"):setTimeout(function(){o.addClass(e,"pswp--animate_opacity")},30)),Lt=setTimeout(function(){if(Te("initialZoom"+(i?"Out":"In")),i){var n=s.w/t.w,a={x:de.x,y:de.y},r=y,l=re,u=function(t){1===t?(y=n,de.x=s.x,de.y=s.y-L):(y=(n-r)*t+r,de.x=(s.x-a.x)*t+a.x,de.y=(s.y-L-a.y)*t+a.y),Ee(),m?e.style.opacity=1-t:Se(l-t*l)};d?$e("initialZoom",0,1,p,o.easing.cubic.out,u,f):(u(1),Lt=setTimeout(f,p+20))}else y=t.initialZoomLevel,Ze(de,t.initialPosition),Ee(),Se(1),m?e.style.opacity=1:Se(1),Lt=setTimeout(f,p+20)},i?25:90)},Wt={},Bt=[],Gt={index:0,errorMsg:'<div class="pswp__error-msg"><a href="%url%" target="_blank">The image</a> could not be loaded.</div>',forceProgressiveLoading:!1,preload:[1,1],getNumItemsFn:function(){return zt.length}},Xt=function(e,t,n){if(e.src&&!e.loadError){var i=!n;if(i&&(e.vGap||(e.vGap={top:0,bottom:0}),Te("parseVerticalMargin",e)),Wt.x=t.x,Wt.y=t.y-e.vGap.top-e.vGap.bottom,i){var o=Wt.x/e.w,a=Wt.y/e.h;e.fitRatio=o<a?o:a;var l=r.scaleMode;"orig"===l?n=1:"fit"===l&&(n=e.fitRatio),n>1&&(n=1),e.initialZoomLevel=n,e.bounds||(e.bounds={center:{x:0,y:0},max:{x:0,y:0},min:{x:0,y:0}})}if(!n)return;return function(e,t,n){var i=e.bounds;i.center.x=Math.round((Wt.x-t)/2),i.center.y=Math.round((Wt.y-n)/2)+e.vGap.top,i.max.x=t>Wt.x?Math.round(Wt.x-t):i.center.x,i.max.y=n>Wt.y?Math.round(Wt.y-n)+e.vGap.top:i.center.y,i.min.x=t>Wt.x?0:i.center.x,i.min.y=n>Wt.y?e.vGap.top:i.center.y}(e,e.w*n,e.h*n),i&&n===e.initialZoomLevel&&(e.initialPosition=e.bounds.center),e.bounds}return e.w=e.h=0,e.initialZoomLevel=e.fitRatio=1,e.bounds={center:{x:0,y:0},max:{x:0,y:0},min:{x:0,y:0}},e.initialPosition=e.bounds.center,e.bounds},Vt=function(e,t,n,i,o,r){t.loadError||i&&(t.imageAppended=!0,$t(t,i,t===a.currItem&&we),n.appendChild(i),r&&setTimeout(function(){t&&t.loaded&&t.placeholder&&(t.placeholder.style.display="none",t.placeholder=null)},500))},Kt=function(e){e.loading=!0,e.loaded=!1;var t=e.img=o.createEl("pswp__img","img"),n=function(){e.loading=!1,e.loaded=!0,e.loadComplete?e.loadComplete(e):e.img=null,t.onload=t.onerror=null,t=null};return t.onload=n,t.onerror=function(){e.loadError=!0,n()},t.src=e.src,t.alt=e.alt||"",t},qt=function(e,t){if(e.src&&e.loadError&&e.container)return t&&(e.container.innerHTML=""),e.container.innerHTML=r.errorMsg.replace("%url%",e.src),!0},$t=function(e,t,n){if(e.src){t||(t=e.container.lastChild);var i=n?e.w:Math.round(e.w*e.fitRatio),o=n?e.h:Math.round(e.h*e.fitRatio);e.placeholder&&!e.loaded&&(e.placeholder.style.width=i+"px",e.placeholder.style.height=o+"px"),t.style.width=i+"px",t.style.height=o+"px"}},jt=function(){if(Bt.length){for(var e,t=0;t<Bt.length;t++)(e=Bt[t]).holder.index===e.index&&Vt(e.index,e.item,e.baseDiv,e.img,0,e.clearPlaceholder);Bt=[]}};be("Controller",{publicMethods:{lazyLoadItem:function(e){e=Ie(e);var t=Ut(e);t&&(!t.loaded&&!t.loading||b)&&(Te("gettingData",e,t),t.src&&Kt(t))},initController:function(){o.extend(r,Gt,!0),a.items=zt=n,Ut=a.getItemAt,Ht=r.getNumItemsFn,r.loop,Ht()<3&&(r.loop=!1),De("beforeChange",function(e){var t,n=r.preload,i=null===e||e>=0,o=Math.min(n[0],Ht()),l=Math.min(n[1],Ht());for(t=1;t<=(i?l:o);t++)a.lazyLoadItem(c+t);for(t=1;t<=(i?o:l);t++)a.lazyLoadItem(c-t)}),De("initialLayout",function(){a.currItem.initialLayout=r.getThumbBoundsFn&&r.getThumbBoundsFn(c)}),De("mainScrollAnimComplete",jt),De("initialZoomInEnd",jt),De("destroy",function(){for(var e,t=0;t<zt.length;t++)(e=zt[t]).container&&(e.container=null),e.placeholder&&(e.placeholder=null),e.img&&(e.img=null),e.preloader&&(e.preloader=null),e.loadError&&(e.loaded=e.loadError=!1);Bt=null})},getItemAt:function(e){return e>=0&&zt[e]!==undefined&&zt[e]},allowProgressiveImg:function(){return r.forceProgressiveLoading||!O||r.mouseUsed||screen.width>1200},setContent:function(e,t){r.loop&&(t=Ie(t));var n=a.getItemAt(e.index);n&&(n.container=null);var i,s=a.getItemAt(t);if(s){Te("gettingData",t,s),e.index=t,e.item=s;var u=s.container=o.createEl("pswp__zoom-wrap");if(!s.src&&s.html&&(s.html.tagName?u.appendChild(s.html):u.innerHTML=s.html),qt(s),Xt(s,me),!s.src||s.loadError||s.loaded)s.src&&!s.loadError&&((i=o.createEl("pswp__img","img")).style.opacity=1,i.src=s.src,$t(s,i),Vt(0,s,u,i));else{if(s.loadComplete=function(n){if(l){if(e&&e.index===t){if(qt(n,!0))return n.loadComplete=n.img=null,Xt(n,me),Oe(n),void(e.index===c&&a.updateCurrZoomItem());n.imageAppended?!Nt&&n.placeholder&&(n.placeholder.style.display="none",n.placeholder=null):z.transform&&(ne||Nt)?Bt.push({item:n,baseDiv:u,img:n.img,index:t,holder:e,clearPlaceholder:!0}):Vt(0,n,u,n.img,0,!0)}n.loadComplete=null,n.img=null,Te("imageLoadComplete",t,n)}},o.features.transform){var d="pswp__img pswp__img--placeholder";d+=s.msrc?"":" pswp__img--placeholder--blank";var m=o.createEl(d,s.msrc?"img":"");s.msrc&&(m.src=s.msrc),$t(s,m),u.appendChild(m),s.placeholder=m}s.loading||Kt(s),a.allowProgressiveImg()&&(!_t&&z.transform?Bt.push({item:s,baseDiv:u,img:s.img,index:t,holder:e}):Vt(0,s,u,s.img,0,!0))}_t||t!==c?Oe(s):(te=u.style,Yt(s,i||s.img)),e.el.innerHTML="",e.el.appendChild(u)}else e.el.innerHTML=""},cleanSlide:function(e){e.img&&(e.img.onload=e.img.onerror=null),e.loaded=e.loading=e.img=e.imageAppended=!1}}});var Jt,Qt,en={},tn=function(e,t,n){var i=document.createEvent("CustomEvent"),o={origEvent:e,target:e.target,releasePoint:t,pointerType:n||"touch"};i.initCustomEvent("pswpTap",!0,!0,o),e.target.dispatchEvent(i)};be("Tap",{publicMethods:{initTap:function(){De("firstTouchStart",a.onTapStart),De("touchRelease",a.onTapRelease),De("destroy",function(){en={},Jt=null})},onTapStart:function(e){e.length>1&&(clearTimeout(Jt),Jt=null)},onTapRelease:function(e,t){var n,i;if(t&&!K&&!X&&!Xe&&a.container.contains(e.target)){var r=t;if(Jt&&(clearTimeout(Jt),Jt=null,n=r,i=en,Math.abs(n.x-i.x)<25&&Math.abs(n.y-i.y)<25))return void Te("doubleTap",r);if("mouse"===t.type)return void tn(e,t,"mouse");if("BUTTON"===e.target.tagName.toUpperCase()||o.hasClass(e.target,"pswp__single-tap"))return void tn(e,t);Ze(en,r),Jt=setTimeout(function(){tn(e,t),Jt=null},300)}}}}),be("DesktopZoom",{publicMethods:{initDesktopZoom:function(){F||(O?De("mouseUsed",function(){a.setupDesktopZoom()}):a.setupDesktopZoom(!0))},setupDesktopZoom:function(t){Qt={};var n="wheel mousewheel DOMMouseScroll";De("bindEvents",function(){o.bind(e,n,a.handleMouseWheel)}),De("unbindEvents",function(){Qt&&o.unbind(e,n,a.handleMouseWheel)}),a.mouseZoomedIn=!1;var i,r=function(){a.mouseZoomedIn&&(o.removeClass(e,"pswp--zoomed-in"),a.mouseZoomedIn=!1),y<1?o.addClass(e,"pswp--zoom-allowed"):o.removeClass(e,"pswp--zoom-allowed"),l()},l=function(){i&&(o.removeClass(e,"pswp--dragging"),i=!1)};De("resize",r),De("afterChange",r),De("pointerDown",function(){a.mouseZoomedIn&&(i=!0,o.addClass(e,"pswp--dragging"))}),De("pointerUp",l),t||r()},handleMouseWheel:function(e){if(y<=a.currItem.fitRatio)return r.modal&&(!r.closeOnScroll||Xe||G?e.preventDefault():A&&Math.abs(e.deltaY)>2&&(u=!0,a.close())),!0;if(e.stopPropagation(),Qt.x=0,"deltaX"in e)1===e.deltaMode?(Qt.x=18*e.deltaX,Qt.y=18*e.deltaY):(Qt.x=e.deltaX,Qt.y=e.deltaY);else if("wheelDelta"in e)e.wheelDeltaX&&(Qt.x=-.16*e.wheelDeltaX),e.wheelDeltaY?Qt.y=-.16*e.wheelDeltaY:Qt.y=-.16*e.wheelDelta;else{if(!("detail"in e))return;Qt.y=e.detail}_e(y,!0);var t=de.x-Qt.x,n=de.y-Qt.y;(r.modal||t<=ee.min.x&&t>=ee.max.x&&n<=ee.min.y&&n>=ee.max.y)&&e.preventDefault(),a.panTo(t,n)},toggleDesktopZoom:function(t){t=t||{x:me.x/2+fe.x,y:me.y/2+fe.y};var n=r.getDoubleTapZoom(!0,a.currItem),i=y===n;a.mouseZoomedIn=!i,a.zoomTo(i?a.currItem.initialZoomLevel:n,t,333),o[(i?"remove":"add")+"Class"](e,"pswp--zoomed-in")}}});var nn,on,an,rn,ln,sn,un,cn,dn,mn,pn,fn,hn={history:!0,galleryUID:1},yn=function(){return pn.hash.substring(1)},xn=function(){nn&&clearTimeout(nn),an&&clearTimeout(an)},vn=function(){var e=yn(),t={};if(e.length<5)return t;var n,i=e.split("&");for(n=0;n<i.length;n++)if(i[n]){var o=i[n].split("=");o.length<2||(t[o[0]]=o[1])}if(r.galleryPIDs){var a=t.pid;for(t.pid=0,n=0;n<zt.length;n++)if(zt[n].pid===a){t.pid=n;break}}else t.pid=parseInt(t.pid,10)-1;return t.pid<0&&(t.pid=0),t},gn=function(){if(an&&clearTimeout(an),Xe||G)an=setTimeout(gn,500);else{rn?clearTimeout(on):rn=!0;var e=c+1,t=Ut(c);t.hasOwnProperty("pid")&&(e=t.pid);var n=un+"&gid="+r.galleryUID+"&pid="+e;cn||-1===pn.hash.indexOf(n)&&(mn=!0);var i=pn.href.split("#")[0]+"#"+n;fn?"#"+n!==window.location.hash&&history[cn?"replaceState":"pushState"]("",document.title,i):cn?pn.replace(i):pn.hash=n,cn=!0,on=setTimeout(function(){rn=!1},60)}};be("History",{publicMethods:{initHistory:function(){if(o.extend(r,hn,!0),r.history){pn=window.location,mn=!1,dn=!1,cn=!1,un=yn(),fn="pushState"in history,un.indexOf("gid=")>-1&&(un=(un=un.split("&gid=")[0]).split("?gid=")[0]),De("afterChange",a.updateURL),De("unbindEvents",function(){o.unbind(window,"hashchange",a.onHashChange)});var e=function(){sn=!0,dn||(mn?history.back():un?pn.hash=un:fn?history.pushState("",document.title,pn.pathname+pn.search):pn.hash=""),xn()};De("unbindEvents",function(){u&&e()}),De("destroy",function(){sn||e()}),De("firstUpdate",function(){c=vn().pid});var t=un.indexOf("pid=");t>-1&&"&"===(un=un.substring(0,t)).slice(-1)&&(un=un.slice(0,-1)),setTimeout(function(){l&&o.bind(window,"hashchange",a.onHashChange)},40)}},onHashChange:function(){if(yn()===un)return dn=!0,void a.close();rn||(ln=!0,a.goTo(vn().pid),ln=!1)},updateURL:function(){xn(),ln||(cn?nn=setTimeout(gn,800):gn())}}}),o.extend(a,je)}});
!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.PhotoSwipeUI_Default=t()}(this,function(){"use strict";return function(e,t){var n,o,l,r,i,s,a,u,c,p,d,m,f,h,w,g,v,b,_=this,C=!1,T=!0,I=!0,E={barsSize:{top:44,bottom:"auto"},closeElClasses:["item","caption","zoom-wrap","ui","top-bar"],timeToIdle:4e3,timeToIdleOutside:1e3,loadingIndicatorDelay:1e3,addCaptionHTMLFn:function(e,t){return e.title?(t.children[0].innerHTML=e.title,!0):(t.children[0].innerHTML="",!1)},closeEl:!0,captionEl:!0,fullscreenEl:!0,zoomEl:!0,shareEl:!0,counterEl:!0,arrowEl:!0,preloaderEl:!0,tapToClose:!1,tapToToggleControls:!0,clickToCloseNonZoomable:!0,shareButtons:[{id:"facebook",label:"Share on Facebook",url:"https://www.facebook.com/sharer/sharer.php?u={{url}}"},{id:"twitter",label:"Tweet",url:"https://twitter.com/intent/tweet?text={{text}}&url={{url}}"},{id:"pinterest",label:"Pin it",url:"http://www.pinterest.com/pin/create/button/?url={{url}}&media={{image_url}}&description={{text}}"},{id:"download",label:"Download image",url:"{{raw_image_url}}",download:!0}],getImageURLForShare:function(){return e.currItem.src||""},getPageURLForShare:function(){return window.location.href},getTextForShare:function(){return e.currItem.title||""},indexIndicatorSep:" / ",fitControlsWidth:1200},F=function(e){if(g)return!0;e=e||window.event,w.timeToIdle&&w.mouseUsed&&!c&&z();for(var n,o,l=(e.target||e.srcElement).getAttribute("class")||"",r=0;r<P.length;r++)(n=P[r]).onTap&&l.indexOf("pswp__"+n.name)>-1&&(n.onTap(),o=!0);if(o){e.stopPropagation&&e.stopPropagation(),g=!0;var i=t.features.isOldAndroid?600:30;setTimeout(function(){g=!1},i)}},x=function(e,n,o){t[(o?"add":"remove")+"Class"](e,"pswp__"+n)},S=function(){var e=1===w.getNumItemsFn();e!==h&&(x(o,"ui--one-slide",e),h=e)},k=function(){x(a,"share-modal--hidden",I)},K=function(){return(I=!I)?(t.removeClass(a,"pswp__share-modal--fade-in"),setTimeout(function(){I&&k()},300)):(k(),setTimeout(function(){I||t.addClass(a,"pswp__share-modal--fade-in")},30)),I||O(),!1},L=function(t){var n=(t=t||window.event).target||t.srcElement;return e.shout("shareLinkClick",t,n),!(!n.href||!n.hasAttribute("download")&&(window.open(n.href,"pswp_share","scrollbars=yes,resizable=yes,toolbar=no,location=yes,width=550,height=420,top=100,left="+(window.screen?Math.round(screen.width/2-275):100)),I||K(),1))},O=function(){for(var e,t,n,o,l="",r=0;r<w.shareButtons.length;r++)e=w.shareButtons[r],t=w.getImageURLForShare(e),n=w.getPageURLForShare(e),o=w.getTextForShare(e),l+='<a href="'+e.url.replace("{{url}}",encodeURIComponent(n)).replace("{{image_url}}",encodeURIComponent(t)).replace("{{raw_image_url}}",t).replace("{{text}}",encodeURIComponent(o))+'" target="_blank" class="pswp__share--'+e.id+'"'+(e.download?"download":"")+">"+e.label+"</a>",w.parseShareButtonOut&&(l=w.parseShareButtonOut(e,l));a.children[0].innerHTML=l,a.children[0].onclick=L},R=function(e){for(var n=0;n<w.closeElClasses.length;n++)if(t.hasClass(e,"pswp__"+w.closeElClasses[n]))return!0},y=0,z=function(){clearTimeout(b),y=0,c&&_.setIdle(!1)},M=function(e){var t=(e=e||window.event).relatedTarget||e.toElement;t&&"HTML"!==t.nodeName||(clearTimeout(b),b=setTimeout(function(){_.setIdle(!0)},w.timeToIdleOutside))},D=function(e){m!==e&&(x(d,"preloader--active",!e),m=e)},A=function(n){var i=n.vGap;if(!e.likelyTouchDevice||w.mouseUsed||screen.width>w.fitControlsWidth){var s=w.barsSize;if(w.captionEl&&"auto"===s.bottom)if(r||((r=t.createEl("pswp__caption pswp__caption--fake")).appendChild(t.createEl("pswp__caption__center")),o.insertBefore(r,l),t.addClass(o,"pswp__ui--fit")),w.addCaptionHTMLFn(n,r,!0)){var a=r.clientHeight;i.bottom=parseInt(a,10)||44}else i.bottom=s.top;else i.bottom="auto"===s.bottom?0:s.bottom;i.top=s.top}else i.top=i.bottom=0},P=[{name:"caption",option:"captionEl",onInit:function(e){l=e}},{name:"share-modal",option:"shareEl",onInit:function(e){a=e},onTap:function(){K()}},{name:"button--share",option:"shareEl",onInit:function(e){s=e},onTap:function(){K()}},{name:"button--zoom",option:"zoomEl",onTap:e.toggleDesktopZoom},{name:"counter",option:"counterEl",onInit:function(e){i=e}},{name:"button--close",option:"closeEl",onTap:e.close},{name:"button--arrow--left",option:"arrowEl",onTap:e.prev},{name:"button--arrow--right",option:"arrowEl",onTap:e.next},{name:"button--fs",option:"fullscreenEl",onTap:function(){n.isFullscreen()?n.exit():n.enter()}},{name:"preloader",option:"preloaderEl",onInit:function(e){d=e}}];_.init=function(){var i;t.extend(e.options,E,!0),w=e.options,o=t.getChildByClass(e.scrollWrap,"pswp__ui"),(p=e.listen)("onVerticalDrag",function(e){T&&e<.95?_.hideControls():!T&&e>=.95&&_.showControls()}),p("onPinchClose",function(e){T&&e<.9?(_.hideControls(),i=!0):i&&!T&&e>.9&&_.showControls()}),p("zoomGestureEnded",function(){(i=!1)&&!T&&_.showControls()}),p("beforeChange",_.update),p("doubleTap",function(t){var n=e.currItem.initialZoomLevel;e.getZoomLevel()!==n?e.zoomTo(n,t,333):e.zoomTo(w.getDoubleTapZoom(!1,e.currItem),t,333)}),p("preventDragEvent",function(e,t,n){var o=e.target||e.srcElement;o&&o.getAttribute("class")&&e.type.indexOf("mouse")>-1&&(o.getAttribute("class").indexOf("__caption")>0||/(SMALL|STRONG|EM)/i.test(o.tagName))&&(n.prevent=!1)}),p("bindEvents",function(){t.bind(o,"pswpTap click",F),t.bind(e.scrollWrap,"pswpTap",_.onGlobalTap),e.likelyTouchDevice||t.bind(e.scrollWrap,"mouseover",_.onMouseOver)}),p("unbindEvents",function(){I||K(),v&&clearInterval(v),t.unbind(document,"mouseout",M),t.unbind(document,"mousemove",z),t.unbind(o,"pswpTap click",F),t.unbind(e.scrollWrap,"pswpTap",_.onGlobalTap),t.unbind(e.scrollWrap,"mouseover",_.onMouseOver),n&&(t.unbind(document,n.eventK,_.updateFullscreen),n.isFullscreen()&&(w.hideAnimationDuration=0,n.exit()),n=null)}),p("destroy",function(){w.captionEl&&(r&&o.removeChild(r),t.removeClass(l,"pswp__caption--empty")),a&&(a.children[0].onclick=null),t.removeClass(o,"pswp__ui--over-close"),t.addClass(o,"pswp__ui--hidden"),_.setIdle(!1)}),w.showAnimationDuration||t.removeClass(o,"pswp__ui--hidden"),p("initialZoomIn",function(){w.showAnimationDuration&&t.removeClass(o,"pswp__ui--hidden")}),p("initialZoomOut",function(){t.addClass(o,"pswp__ui--hidden")}),p("parseVerticalMargin",A),function(){var e,n,l,r=function(o){if(o)for(var r=o.length,i=0;i<r;i++){e=o[i],n=e.className;for(var s=0;s<P.length;s++)l=P[s],n.indexOf("pswp__"+l.name)>-1&&(w[l.option]?(t.removeClass(e,"pswp__element--disabled"),l.onInit&&l.onInit(e)):t.addClass(e,"pswp__element--disabled"))}};r(o.children);var i=t.getChildByClass(o,"pswp__top-bar");i&&r(i.children)}(),w.shareEl&&s&&a&&(I=!0),S(),w.timeToIdle&&p("mouseUsed",function(){t.bind(document,"mousemove",z),t.bind(document,"mouseout",M),v=setInterval(function(){2==++y&&_.setIdle(!0)},w.timeToIdle/2)}),w.fullscreenEl&&!t.features.isOldAndroid&&(n||(n=_.getFullscreenAPI()),n?(t.bind(document,n.eventK,_.updateFullscreen),_.updateFullscreen(),t.addClass(e.template,"pswp--supports-fs")):t.removeClass(e.template,"pswp--supports-fs")),w.preloaderEl&&(D(!0),p("beforeChange",function(){clearTimeout(f),f=setTimeout(function(){e.currItem&&e.currItem.loading?(!e.allowProgressiveImg()||e.currItem.img&&!e.currItem.img.naturalWidth)&&D(!1):D(!0)},w.loadingIndicatorDelay)}),p("imageLoadComplete",function(t,n){e.currItem===n&&D(!0)}))},_.setIdle=function(e){c=e,x(o,"ui--idle",e)},_.update=function(){T&&e.currItem?(_.updateIndexIndicator(),w.captionEl&&(w.addCaptionHTMLFn(e.currItem,l),x(l,"caption--empty",!e.currItem.title)),C=!0):C=!1,I||K(),S()},_.updateFullscreen=function(o){o&&setTimeout(function(){e.setScrollOffset(0,t.getScrollY())},50),t[(n.isFullscreen()?"add":"remove")+"Class"](e.template,"pswp--fs")},_.updateIndexIndicator=function(){w.counterEl&&(i.innerHTML=e.getCurrentIndex()+1+w.indexIndicatorSep+w.getNumItemsFn())},_.onGlobalTap=function(n){var o=(n=n||window.event).target||n.srcElement;if(!g)if(n.detail&&"mouse"===n.detail.pointerType){if(R(o))return void e.close();t.hasClass(o,"pswp__img")&&(1===e.getZoomLevel()&&e.getZoomLevel()<=e.currItem.fitRatio?w.clickToCloseNonZoomable&&e.close():e.toggleDesktopZoom(n.detail.releasePoint))}else if(w.tapToToggleControls&&(T?_.hideControls():_.showControls()),w.tapToClose&&(t.hasClass(o,"pswp__img")||R(o)))return void e.close()},_.onMouseOver=function(e){var t=(e=e||window.event).target||e.srcElement;x(o,"ui--over-close",R(t))},_.hideControls=function(){t.addClass(o,"pswp__ui--hidden"),T=!1},_.showControls=function(){T=!0,C||_.update(),t.removeClass(o,"pswp__ui--hidden")},_.supportsFullscreen=function(){var e=document;return!!(e.exitFullscreen||e.mozCancelFullScreen||e.webkitExitFullscreen||e.msExitFullscreen)},_.getFullscreenAPI=function(){var t,n=document.documentElement,o="fullscreenchange";return n.requestFullscreen?t={enterK:"requestFullscreen",exitK:"exitFullscreen",elementK:"fullscreenElement",eventK:o}:n.mozRequestFullScreen?t={enterK:"mozRequestFullScreen",exitK:"mozCancelFullScreen",elementK:"mozFullScreenElement",eventK:"moz"+o}:n.webkitRequestFullscreen?t={enterK:"webkitRequestFullscreen",exitK:"webkitExitFullscreen",elementK:"webkitFullscreenElement",eventK:"webkit"+o}:n.msRequestFullscreen&&(t={enterK:"msRequestFullscreen",exitK:"msExitFullscreen",elementK:"msFullscreenElement",eventK:"MSFullscreenChange"}),t&&(t.enter=function(){if(u=w.closeOnScroll,w.closeOnScroll=!1,"webkitRequestFullscreen"!==this.enterK)return e.template[this.enterK]();e.template[this.enterK](Element.ALLOW_KEYBOARD_INPUT)},t.exit=function(){return w.closeOnScroll=u,document[this.exitK]()},t.isFullscreen=function(){return document[this.elementK]}),t}}});
jQuery(function(t){if("undefined"==typeof wc_single_product_params)return!1;t("body").on("init",".wc-tabs-wrapper, .woocommerce-tabs",function(){t(this).find(".wc-tab, .woocommerce-tabs .panel:not(.panel .panel)").hide();var e=window.location.hash,i=window.location.href,o=t(this).find(".wc-tabs, ul.tabs").first();e.toLowerCase().indexOf("comment-")>=0||"#reviews"===e||"#tab-reviews"===e?o.find("li.reviews_tab a").trigger("click"):i.indexOf("comment-page-")>0||i.indexOf("cpage=")>0?o.find("li.reviews_tab a").trigger("click"):"#tab-additional_information"===e?o.find("li.additional_information_tab a").trigger("click"):o.find("li:first a").trigger("click")}).on("click",".wc-tabs li a, ul.tabs li a",function(e){e.preventDefault();var i=t(this),o=i.closest(".wc-tabs-wrapper, .woocommerce-tabs"),a=o.find(".wc-tabs, ul.tabs");a.find("li").removeClass("active"),a.find('a[role="tab"]').attr("aria-selected","false").attr("tabindex","-1"),o.find(".wc-tab, .panel:not(.panel .panel)").hide(),i.closest("li").addClass("active"),i.attr("aria-selected","true").attr("tabindex","0"),o.find("#"+i.attr("href").split("#")[1]).show()}).on("keydown",".wc-tabs li a, ul.tabs li a",function(e){var i="rtl"===document.documentElement.dir,o=e.key,a=i?"ArrowLeft":"ArrowRight",r=i?"ArrowRight":"ArrowLeft",n="ArrowDown",s="ArrowUp",l="Home",c="End";if([a,r,n,s,c,l].includes(o)){var d=t(this),p=d.closest(".wc-tabs-wrapper, .woocommerce-tabs").find(".wc-tabs, ul.tabs").find('a[role="tab"]'),h=p.length-1,g=p.index(d),u=o===r||o===s?g-1:g+1,m="horizontal";if(p.length>=2){var _=p[0].getBoundingClientRect(),f=p[1].getBoundingClientRect();m=Math.abs(f.top-_.top)>Math.abs(f.left-_.left)?"vertical":"horizontal"}("vertical"!==m||o!==r&&o!==a)&&("horizontal"!==m||o!==s&&o!==n)&&(e.preventDefault(),o===r&&0===g&&"horizontal"===m||o===s&&0===g&&"vertical"===m||o===c?u=h:(a===o&&g===h&&"horizontal"===m||n===o&&g===h&&"vertical"===m||o===l)&&(u=0),p.eq(u).focus())}}).on("click","a.woocommerce-review-link",function(){return t(".reviews_tab a").trigger("click"),!0}).on("init","#rating",function(){t(this).hide().before('<p class="stars">\t\t\t\t\t\t<span role="group" aria-labelledby="comment-form-rating-label">\t\t\t\t\t\t\t<a role="radio" tabindex="0" aria-checked="false" class="star-1" href="#">'+wc_single_product_params.i18n_rating_options[0]+'</a>\t\t\t\t\t\t\t<a role="radio" tabindex="-1" aria-checked="false" class="star-2" href="#">'+wc_single_product_params.i18n_rating_options[1]+'</a>\t\t\t\t\t\t\t<a role="radio" tabindex="-1" aria-checked="false" class="star-3" href="#">'+wc_single_product_params.i18n_rating_options[2]+'</a>\t\t\t\t\t\t\t<a role="radio" tabindex="-1" aria-checked="false" class="star-4" href="#">'+wc_single_product_params.i18n_rating_options[3]+'</a>\t\t\t\t\t\t\t<a role="radio" tabindex="-1" aria-checked="false" class="star-5" href="#">'+wc_single_product_params.i18n_rating_options[4]+"</a>\t\t\t\t\t\t</span>\t\t\t\t\t</p>")}).on("click","#respond p.stars a",function(){var e=t(this),i=e.closest("p.stars").find("a").index(e)+1,o=t(this).closest("#respond").find("#rating"),a=t(this).closest(".stars");return o.val(i),e.siblings("a").removeClass("active").attr("aria-checked","false").attr("tabindex","-1"),e.addClass("active").attr("aria-checked","true").attr("tabindex","0"),a.addClass("selected"),!1}).on("click","#respond #submit",function(){var e=t(this).closest("#respond").find("#rating"),i=e.val();if(e.length>0&&!i&&"yes"===wc_single_product_params.review_rating_required)return window.alert(wc_single_product_params.i18n_required_rating_text),!1}).on("keyup",".wc-tabs li a, ul.tabs li a, #respond p.stars a",function(e){var i=e.key,o=["ArrowRight","ArrowDown"];o.concat(["ArrowLeft","ArrowUp"]).includes(i)&&(e.preventDefault(),e.stopPropagation(),o.includes(i)?t(this).next().focus().click():t(this).prev().focus().click())}),t(".wc-tabs-wrapper, .woocommerce-tabs, #rating").trigger("init");var e=function(e,i){this.$target=e,this.$images=t(".woocommerce-product-gallery__image",e),0!==this.$images.length?(e.data("product_gallery",this),this.flexslider_enabled="function"==typeof t.fn.flexslider&&wc_single_product_params.flexslider_enabled,this.zoom_enabled="function"==typeof t.fn.zoom&&wc_single_product_params.zoom_enabled,this.photoswipe_enabled="undefined"!=typeof PhotoSwipe&&wc_single_product_params.photoswipe_enabled,i&&(this.flexslider_enabled=!1!==i.flexslider_enabled&&this.flexslider_enabled,this.zoom_enabled=!1!==i.zoom_enabled&&this.zoom_enabled,this.photoswipe_enabled=!1!==i.photoswipe_enabled&&this.photoswipe_enabled),1===this.$images.length&&(this.flexslider_enabled=!1),this.initFlexslider=this.initFlexslider.bind(this),this.initZoom=this.initZoom.bind(this),this.initZoomForTarget=this.initZoomForTarget.bind(this),this.initPhotoswipe=this.initPhotoswipe.bind(this),this.onResetSlidePosition=this.onResetSlidePosition.bind(this),this.getGalleryItems=this.getGalleryItems.bind(this),this.openPhotoswipe=this.openPhotoswipe.bind(this),this.trapFocusPhotoswipe=this.trapFocusPhotoswipe.bind(this),this.handlePswpTrapFocus=this.handlePswpTrapFocus.bind(this),this.flexslider_enabled?(this.initFlexslider(i.flexslider),e.on("woocommerce_gallery_reset_slide_position",this.onResetSlidePosition)):this.$target.css("opacity",1),this.zoom_enabled&&(this.initZoom(),e.on("woocommerce_gallery_init_zoom",this.initZoom)),this.photoswipe_enabled&&this.initPhotoswipe()):this.$target.css("opacity",1)};e.prototype.initFlexslider=function(e){var i=this.$target,o=this,a=t.extend({selector:".woocommerce-product-gallery__wrapper > .woocommerce-product-gallery__image",start:function(){i.css("opacity",1)},after:function(t){o.initZoomForTarget(o.$images.eq(t.currentSlide))}},e);i.flexslider(a),t(".woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image:eq(0) .wp-post-image").one("load",function(){var e=t(this);e&&setTimeout(function(){var t=e.closest(".woocommerce-product-gallery__image").height(),i=e.closest(".flex-viewport");t&&i&&i.height(t)},100)}).each(function(){this.complete&&t(this).trigger("load")})},e.prototype.initZoom=function(){"complete"===document.readyState?this.initZoomForTarget(this.$images.first()):t(window).on("load",()=>{this.initZoomForTarget(this.$images.first())})},e.prototype.initZoomForTarget=function(e){if(!this.zoom_enabled)return!1;var i=this.$target.width(),o=!1;if(t(e).each(function(e,a){if(t(a).find("img").data("large_image_width")>i)return o=!0,!1}),o){var a=t.extend({touch:!1,callback:function(){var t=this;setTimeout(function(){t.removeAttribute("role"),t.setAttribute("alt",""),t.setAttribute("aria-hidden","true")},100)}},wc_single_product_params.zoom_options);"ontouchstart"in document.documentElement&&(a.on="click"),e.trigger("zoom.destroy"),e.zoom(a),setTimeout(function(){e.find(":hover").length&&e.trigger("mouseover")},100)}},e.prototype.initPhotoswipe=function(){this.zoom_enabled&&this.$images.length>0?(this.$target.prepend('<a href="#" role="button" class="woocommerce-product-gallery__trigger" aria-haspopup="dialog" aria-controls="photoswipe-fullscreen-dialog" aria-label="'+wc_single_product_params.i18n_product_gallery_trigger_text+'"><span aria-hidden="true">🔍</span></a>'),this.$target.on("click",".woocommerce-product-gallery__trigger",this.openPhotoswipe),this.$target.on("keydown",".woocommerce-product-gallery__trigger",t=>{" "===t.key&&this.openPhotoswipe(t)}),this.$target.on("click",".woocommerce-product-gallery__image a",function(t){t.preventDefault()}),this.flexslider_enabled||this.$target.on("click",".woocommerce-product-gallery__image a",this.openPhotoswipe)):this.$target.on("click",".woocommerce-product-gallery__image a",this.openPhotoswipe)},e.prototype.onResetSlidePosition=function(){this.$target.flexslider(0)},e.prototype.getGalleryItems=function(){var e=this.$images,i=[];return e.length>0&&e.each(function(e,o){var a=t(o).find("img");if(a.length){var r=a.attr("data-large_image"),n=a.attr("data-large_image_width"),s=a.attr("data-large_image_height"),l={alt:a.attr("alt"),src:r,w:n,h:s,title:a.attr("data-caption")?a.attr("data-caption"):a.attr("title")};i.push(l)}}),i},e.prototype.openPhotoswipe=function(e){e.preventDefault();var i,o=t(".pswp")[0],a=this.getGalleryItems(),r=t(e.target),n=e.currentTarget,s=this;i=0<r.closest(".woocommerce-product-gallery__trigger").length?this.$target.find(".flex-active-slide"):r.closest(".woocommerce-product-gallery__image");var l=t.extend({index:t(i).index(),addCaptionHTMLFn:function(t,e){return t.title?(e.children[0].textContent=t.title,!0):(e.children[0].textContent="",!1)},timeToIdle:0},wc_single_product_params.photoswipe_options),c=new PhotoSwipe(o,PhotoSwipeUI_Default,a,l);c.listen("afterInit",function(){s.trapFocusPhotoswipe(!0)}),c.listen("close",function(){s.trapFocusPhotoswipe(!1),n.focus()}),c.init()},e.prototype.trapFocusPhotoswipe=function(t){var e=document.querySelector(".pswp");e&&(t?e.addEventListener("keydown",this.handlePswpTrapFocus):e.removeEventListener("keydown",this.handlePswpTrapFocus))},e.prototype.handlePswpTrapFocus=function(t){var e=t.currentTarget.querySelectorAll("button:not([disabled])"),i=Array.from(e).filter(function(t){return"none"!==t.style.display&&"none"!==window.getComputedStyle(t).display});if(!(1>=i.length)){var o=i[0],a=i[i.length-1];"Tab"===t.key&&(t.shiftKey?document.activeElement===o&&(t.preventDefault(),a.focus()):document.activeElement===a&&(t.preventDefault(),o.focus()))}},t.fn.wc_product_gallery=function(t){return new e(this,t||wc_single_product_params),this},t(".woocommerce-product-gallery").each(function(){t(this).trigger("wc-product-gallery-before-init",[this,wc_single_product_params]),t(this).wc_product_gallery(wc_single_product_params),t(this).trigger("wc-product-gallery-after-init",[this,wc_single_product_params])})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}return function t(n,o){function r(t,r,i){if("undefined"!=typeof document){"number"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var c="";for(var u in i)i[u]&&(c+="; "+u,!0!==i[u]&&(c+="="+i[u].split(";")[0]));return document.cookie=t+"="+n.write(r,t)+c}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],o={},r=0;r<t.length;r++){var i=t[r].split("="),c=i.slice(1).join("=");try{var u=decodeURIComponent(i[0]);if(o[u]=n.read(c,u),e===u)break}catch(f){}}return e?o[e]:o}},remove:function(t,n){r(t,"",e({},n,{expires:-1}))},withAttributes:function(n){return t(this.converter,e({},this.attributes,n))},withConverter:function(n){return t(e({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(n)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})});
function on_keydown_remove_from_cart(e){" "===e.key&&(e.preventDefault(),e.currentTarget.click())}function focus_populate_live_region(){var e=["woocommerce-message","woocommerce-error","wc-block-components-notice-banner"].map(function(e){return"."+e+'[role="alert"]'}).join(", "),o=document.querySelectorAll(e);if(0!==o.length){var t=o[0];t.setAttribute("tabindex","-1");var n=setTimeout(function(){t.focus(),clearTimeout(n)},500)}}function refresh_sorted_by_live_region(){var e=document.querySelector(".woocommerce-result-count");if(e){var o=e.innerHTML;e.setAttribute("aria-hidden","true");var t=setTimeout(function(){e.setAttribute("aria-hidden","false"),e.innerHTML="",e.innerHTML=o,clearTimeout(t)},2e3)}}function on_document_ready(){focus_populate_live_region(),refresh_sorted_by_live_region()}jQuery(function(e){e(".woocommerce-ordering").on("change","select.orderby",function(){e(this).closest("form").trigger("submit")}),e("input.qty:not(.product-quantity input.qty)").each(function(){var o=parseFloat(e(this).attr("min"));o>=0&&parseFloat(e(this).val())<o&&e(this).val(o)});var o="store_notice"+(e(".woocommerce-store-notice").data("noticeId")||"");if("hidden"===Cookies.get(o))e(".woocommerce-store-notice").hide();else{function t(o){["Enter"," "].includes(o.key)&&(o.preventDefault(),e(".woocommerce-store-notice__dismiss-link").click())}e(".woocommerce-store-notice").show(),e(".woocommerce-store-notice__dismiss-link").on("click",function n(r){Cookies.set(o,"hidden",{path:"/"}),e(".woocommerce-store-notice").hide(),r.preventDefault(),e(".woocommerce-store-notice__dismiss-link").off("click",n).off("keydown",t)}).on("keydown",t)}e(".woocommerce-input-wrapper span.description").length&&e(document.body).on("click",function(){e(".woocommerce-input-wrapper span.description:visible").prop("aria-hidden",!0).slideUp(250)}),e(".woocommerce-input-wrapper").on("click",function(e){e.stopPropagation()}),e(".woocommerce-input-wrapper :input").on("keydown",function(o){var t=e(this).parent().find("span.description");if(27===o.which&&t.length&&t.is(":visible"))return t.prop("aria-hidden",!0).slideUp(250),o.preventDefault(),!1}).on("click focus",function(){var o=e(this).parent(),t=o.find("span.description");o.addClass("currentTarget"),e(".woocommerce-input-wrapper:not(.currentTarget) span.description:visible").prop("aria-hidden",!0).slideUp(250),t.length&&t.is(":hidden")&&t.prop("aria-hidden",!1).slideDown(250),o.removeClass("currentTarget")}),e.scroll_to_notices=function(o){o.length&&e("html, body").animate({scrollTop:o.offset().top-100},1e3)},e('.woocommerce form .woocommerce-Input[type="password"]').wrap('<span class="password-input"></span>'),e(".woocommerce form input").filter(":password").parent("span").addClass("password-input"),e(".password-input").each(function(){const o=e(this).find("input").attr("id");e(this).append('<button type="button" class="show-password-input" aria-label="'+woocommerce_params.i18n_password_show+'" aria-describedBy="'+o+'"></button>')}),e(".show-password-input").on("click",function(o){o.preventDefault(),e(this).hasClass("display-password")?(e(this).removeClass("display-password"),e(this).attr("aria-label",woocommerce_params.i18n_password_show)):(e(this).addClass("display-password"),e(this).attr("aria-label",woocommerce_params.i18n_password_hide)),e(this).hasClass("display-password")?e(this).siblings(['input[type="password"]']).prop("type","text"):e(this).siblings('input[type="text"]').prop("type","password"),e(this).siblings("input").focus()}),e("a.coming-soon-footer-banner-dismiss").on("click",function(o){var t=e(o.target);e.ajax({type:"post",url:t.data("rest-url"),data:{woocommerce_meta:{coming_soon_banner_dismissed:"yes"}},beforeSend:function(e){e.setRequestHeader("X-WP-Nonce",t.data("rest-nonce"))},complete:function(){e("#coming-soon-footer-banner").hide()}})}),"undefined"==typeof wc_add_to_cart_params&&e(document.body).on("keydown",".remove_from_cart_button",on_keydown_remove_from_cart),e(document.body).on("item_removed_from_classic_cart updated_wc_div",focus_populate_live_region)}),document.addEventListener("DOMContentLoaded",on_document_ready);
jQuery(document).ready(function($){
function showMore(){
var rows=$(".taxopress-table-row");
rows.each(function (index, row){
if(index >=6){
$(row).show();
}});
$(".taxopress-see-more-link").hide();
$(".taxopress-close-table-link").show();
}
function closeTable(){
var rows=$(".taxopress-table-row");
rows.each(function (index, row){
if(index >=6){
$(row).hide();
}});
$(".taxopress-close-table-link").hide();
$(".taxopress-see-more-link").show();
}
$(document).on('click', '.taxopress-see-more-link', function (e){
e.preventDefault();
showMore();
});
$(document).on('click', '.taxopress-close-table-link', function (e){
e.preventDefault();
closeTable();
});
});